达梦数据库的参数分为三种类型,不同类型的参数,其修改方式和生效机制不同:
| 参数类型 | TYPE值 | 修改方式 | 生效时机 | 影响范围 | 典型参数 |
|---|---|---|---|---|---|
| 动态(系统级) | SYS |
在线修改 | 立即生效 | 所有会话 | MEMORY_TARGET |
| 动态(会话级) | SESSION |
在线修改 | 立即生效<br />(仅影响新会话) | 当前会话及新会话 | HAGR_HASH_SIZE |
| 静态 | IN FILE |
修改配置文件 | 重启后生效 | 全局 | COMPATIBLE_MODE |
| 手动 | READ ONLY |
只能手动编辑文件 | 重启后生效 | 全局 | PAGE_SIZE(初始化时设定) |
补充说明:
-- 方法1:使用V$PARAMETER视图(兼容Oracle)
SELECT NAME, TYPE, VALUE, SYS_VALUE, FILE_VALUE
FROM V$PARAMETER
WHERE NAME = 'BUFFER';
-- 方法2:使用V$DM_INI视图(达梦原生)
SELECT PARA_NAME, PARA_TYPE, PARA_VALUE
FROM V$DM_INI
WHERE PARA_NAME = 'BUFFER';
查询结果中的 TYPE 或 PARA_TYPE 字段会显示参数类型:
| TYPE值 | 含义 | 说明 |
|---|---|---|
SYS |
动态系统级 | 修改立即生效,影响所有会话 |
SESSION |
动态会话级 | 修改立即生效,仅影响新会话 |
IN FILE |
静态 | 修改后需要重启 |
READ ONLY |
手动/只读 | 运行时不可修改 |
这是最常用、最标准的修改方式,语法与Oracle类似但略有差异:
ALTER SYSTEM SET '<参数名>' = <值> [DEFERRED] [MEMORY|BOTH|SPFILE];
参数说明:
MEMORY:只修改内存中的值,重启后失效SPFILE:只修改dm.ini文件中的值,需要重启生效BOTH:同时修改内存和配置文件(推荐,永久生效)DEFERRED:延迟生效(仅对部分参数有效)使用示例:
-- 动态参数:同时修改内存和配置文件,立即永久生效
ALTER SYSTEM SET 'UNDO_RETENTION' = 90 BOTH;
-- 静态参数:只修改配置文件,需要重启
ALTER SYSTEM SET 'COMPATIBLE_MODE' = 2 SPFILE;
-- 只修改内存(临时生效,用于测试)
ALTER SYSTEM SET 'BUFFER' = 8000 MEMORY;
达梦提供了多个系统过程用于参数修改:
SP_SET_PARA_VALUE(scope int, paraname varchar(256), value bigint);
scope = 1:修改内存+配置文件(仅限动态参数),立即永久生效scope = 2:只修改配置文件(动态和静态都可以),静态参数需重启-- 修改动态参数(立即永久生效)
SP_SET_PARA_VALUE(1, 'UNDO_RETENTION', 90);
-- 修改静态参数(只改文件,需重启)
SP_SET_PARA_VALUE(2, 'COMPATIBLE_MODE', 2);
SP_SET_PARA_STRING_VALUE(scope int, paraname varchar(8187), value varchar(8187));
-- 修改字符串类型的参数
SP_SET_PARA_STRING_VALUE(2, 'INSTANCE_NAME', 'DMSERVER01');
SP_SET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187), value double);
-- 只影响当前会话
SF_SET_SESSION_PARA_VALUE('HAGR_HASH_SIZE', 2000000);
适用于所有参数类型,但必须重启数据库才能生效。
文件位置:
$DM_HOME/data/<数据库名>/dm.ini
# 例如:/dm8/data/DAMENG/dm.ini
修改步骤:
cp dm.ini dm.ini.bak# 查看当前参数值
cat dm.ini | grep -i "BUFFER"
# 修改参数
vi dm.ini
# 将 BUFFER = 8000 改为 BUFFER = 10000
# 重启数据库
DmServiceDMSERVER restart
达梦提供的Console图形化工具也可以修改dm.ini参数,修改后需要重启实例生效。
-- 查看特定参数
SHOW PARAMETER 'BUFFER';
-- 查看包含某关键词的所有参数
SHOW PARAMETER LIKE '%MEMORY%';
-- 查看所有参数
SELECT * FROM V$PARAMETER;
-- 查看特定类型参数
SELECT NAME, TYPE, VALUE FROM V$PARAMETER WHERE TYPE = 'SYS';
-- 查看内存中的当前值 vs 文件中的值
SELECT NAME, VALUE AS MEMORY_VALUE, FILE_VALUE, TYPE
FROM V$PARAMETER
WHERE NAME = 'BUFFER';
达梦主备集群中,备库可以通过参数 INI_SYNC 控制是否从主库同步INI参数:
-- 查看INI_SYNC参数
SELECT * FROM V$DM_INI WHERE PARA_NAME = 'INI_SYNC';
INI_SYNC参数说明:
0:不开启自动同步1(默认):备库定期从主库同步INI参数集群参数修改注意事项:
INI_SYNC=1,动态参数的配置文件值会自动同步,但内存值仍需备库单独设置对于集群环境,建议:
备份dm.ini文件:任何修改前务必备份原文件
cp dm.ini dm.ini.bak_$(date +%Y%m%d)
确认参数类型:通过视图确认是动态还是静态参数
评估影响范围:特别是修改SYS级参数会影响所有会话
ALTER SYSTEM SET 而非直接编辑文件,特别是对于动态参数,可以避免重启-- 验证参数是否生效
SELECT PARA_NAME, PARA_VALUE, PARA_TYPE
FROM V$DM_INI
WHERE PARA_NAME = '<参数名>';
-- 对于动态参数,确认内存值和文件值一致
SELECT NAME, VALUE, FILE_VALUE
FROM V$PARAMETER
WHERE NAME = '<参数名>';
| 使用场景 | 推荐方式 | 是否需重启 | 风险等级 |
|---|---|---|---|
| 动态参数(生产环境) | ALTER SYSTEM SET ... BOTH |
否 | 低 |
| 动态参数(临时测试) | ALTER SYSTEM SET ... MEMORY |
否 | 低 |
| 静态参数(需重启) | ALTER SYSTEM SET ... SPFILE + 重启 |
是 | 中 |
| 批量修改多个参数 | 编辑dm.ini + 重启 | 是 | 中 |
| 集群环境(主备) | 各节点分别执行 | 视参数类型而定 | 中 |
| 初始化时不可变参数 | 使用dminit设置 | N/A | 高 |
达梦社区技术 https://eco.dameng.com
文章
阅读量
获赞
