前言
达梦数据库的初始化参数根据修改方式和生效范围,分为手动、静态和动态三种类型,对应于 V$PARAMETER
视图中 TYPE
列的 READ ONLY
、IN FILE
和 SYS/SESSION
。在服务器运行过程中:
达梦中可以调整的参数属性分为三种:手动、静态、动态参数
● 手动:不能被动态修改,必须手动修改参数文件,重启生效
● 静态:可被动态修改,重启生效
● 动态:可被动态修改,立即生效
○ 会话级:只影响当前会话
○ 系统级:影响所有会话
第一种方法:使用 ALTER SYSTEM/SESSION SET方式修改
这种方法操作简便,适用于快速调整参数值。具体语法格式如下:
1. 修改系统参数
修改系统级参数时,而是直接通过 MEMORY
、BOTH
或 SPFILE
来指定修改范围。语法格式如下,请注意在达梦中无需指定 SCOPE=
:
ALTER SYSTEM SET '<参数名称>' =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
示例:将静态参数 MAX_SESSIONS
的值设置为 1000
。
14:01:23 SYSDBA@DEM:5236 SQL> select * from v$dm_ini where para_name ='MAX_SESSIONS';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
------------ ---------- --------- --------- ------------- ------- ---------- ---------- ------------------------------------- --------- --------- ----------
MAX_SESSIONS 10000 1 150000 10000 N 10000 10000 Maximum number of concurrent sessions IN FILE ALL_SYNC CAN_SYNC
已用时间: 7.224(毫秒). 执行号:285607.
14:01:44 SYSDBA@DEM:5236 SQL>
执行一下 SQL 调整
ALTER SYSTEM SET 'MAX_SESSIONS' = 1000 SPFILE;
FILE_VALUE
值已改为1000
,结果如下:
14:03:13 SYSDBA@DEM:5236 SQL> select * from v$dm_ini where para_name ='MAX_SESSIONS';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
------------ ---------- --------- --------- ------------- ------- ---------- ---------- ------------------------------------- --------- --------- ----------
MAX_SESSIONS 10000 1 150000 10000 N 10000 1000 Maximum number of concurrent sessions IN FILE ALL_SYNC CAN_SYNC
已用时间: 6.540(毫秒). 执行号:285609.
14:03:17 SYSDBA@DEM:5236 SQL>
2. 修改会话参数
修改会话级参数时,可以使用 PURGE
关键字来决定是否清理执行计划。语法格式如下:
ALTER SESSION SET '<参数名称>' = <参数值> [PURGE];
示例:调整排序机制 SORT_BUF_SIZE
参数值设置为 1
。
15:08:07 SYSDBA@DEM:5236SQL>select * from v$dm_ini where para_name ='SORT_BUF_SIZE';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
------------- ---------- --------- --------- ------------- ------- ---------- ---------- ------------------------------------- --------- --------- ----------
SORT_BUF_SIZE 20 1 2048 20 N 20 20 maximum sort buffer size in Megabytes SESSION ALL_SYNC CAN_SYNC
已用时间: 6.973(毫秒). 执行号:285610.
--调整参数
15:08:17 SYSDBA@DEM:5236SQL>ALTER SESSION SET'SORT_BUF_SIZE'=100;
15:11:30 SYSDBA@DEM:5236SQL>select * from v$dm_ini where para_name ='SORT_BUF_SIZE';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
------------- ---------- --------- --------- ------------- ------- ---------- ---------- ------------------------------------- --------- --------- ----------
SORT_BUF_SIZE 20 1 2048 20 N 100 20 maximum sort buffer size in Megabytes SESSION ALL_SYNC CAN_SYNC
已用时间: 7.244(毫秒). 执行号:285612.
15:11:33 SYSDBA@DEM:5236SQL>
第二种方法:使用达梦数据库过程函数进行修改
达梦数据库提供了丰富的函数和过程,用于获取和修改系统配置参数。这些方法适用于需要编程化管理和批量调整参数的场景。
1. 获取参数值的函数
• 数值类型参数:
SF_GET_PARA_VALUE(scope INT, ini_param_name VARCHAR(256))
• SCOPE=1
:获取 INI
文件中的参数值。
• SCOPE=2
:获取内存中的参数值。
示例:
15:15:19 SYSDBA@DEM:5236 SQL> select SF_GET_PARA_VALUE(1, 'SORT_BUF_SIZE');
SF_GET_PARA_VALUE(1,'SORT_BUF_SIZE')
------------------------------------
20
已用时间: 5.328(毫秒). 执行号:285617.
15:15:26 SYSDBA@DEM:5236 SQL>
• 浮点类型参数:
SF_GET_PARA_DOUBLE_VALUE(scope INT, ini_param_name VARCHAR(8187))
示例:
15:16:57 SYSDBA@DEM:5236 SQL> SELECT SF_GET_PARA_DOUBLE_VALUE (1, 'CKPT_FLUSH_RATE');
SF_GET_PARA_DOUBLE_VALUE(1,'CKPT_FLUSH_RATE')
---------------------------------------------
5.000000000000000E+00
已用时间: 5.471(毫秒). 执行号:285619.
15:18:29 SYSDBA@DEM:5236 SQL>
• 字符串类型参数:
SF_GET_PARA_STRING_VALUE(scope INT, ini_param_name VARCHAR(8187))
示例:
15:19:58 SYSDBA@DEM:5236 SQL> SELECT SF_GET_PARA_STRING_VALUE (1, 'TEMP_PATH');
SF_GET_PARA_STRING_VALUE(1,'TEMP_PATH')
---------------------------------------
/dmdata/DEM
已用时间: 5.482(毫秒). 执行号:285621.
15:20:04 SYSDBA@DEM:5236 SQL>
2. 修改参数值的过程
• 整型和动态配置参数:
SP_SET_PARA_VALUE(scope INT, ini_param_name VARCHAR(256), value INT64)
• SCOPE=1
:在内存和 INI
文件中都修改参数值,但只能用于动态配置参数。
• SCOPE=2
:只在 INI
文件中修改,可用于静态和动态配置参数。
• 权限要求:仅具有 DBA
角色的用户可调用。
示例:
SP_SET_PARA_VALUE (1,'MAX_BUFFER',2000);
15:30:01 SYSDBA@DEM:5236SQL>select * from v$dm_ini where para_name ='MAX_BUFFER';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
---------- ---------- --------- --------- ------------- ------- ---------- ---------- --------------------------------------- --------- --------- ----------
MAX_BUFFER 1000 8 1048576 1000 N 1000 1000 maximum system buffer size in Megabytes IN FILE ALL_SYNC CAN_SYNC
已用时间: 7.147(毫秒). 执行号:285623.
15:30:34 SYSDBA@DEM:5236SQL>
15:30:41 SYSDBA@DEM:5236SQL> SP_SET_PARA_VALUE (2,'MAX_BUFFER',2000);
DMSQL 过程已成功完成
已用时间: 5.973(毫秒). 执行号:285625.
15:30:54 SYSDBA@DEM:5236SQL>select * from v$dm_ini where para_name ='MAX_BUFFER';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
---------- ---------- --------- --------- ------------- ------- ---------- ---------- --------------------------------------- --------- --------- ----------
MAX_BUFFER 1000 8 1048576 1000 N 1000 1000 maximum system buffer size in Megabytes IN FILE ALL_SYNC CAN_SYNC
已用时间: 6.484(毫秒). 执行号:285626.
15:30:57 SYSDBA@DEM:5236SQL>
• 浮点型静态和动态配置参数:
SP_SET_PARA_DOUBLE_VALUE(scope INT, ini_param_name VARCHAR(8187), value DOUBLE)
• 权限要求:仅具有 DBA
角色的用户可调用。
SP_SET_PARA_DOUBLE_VALUE(1,'INDEX_SKIP_SCAN_RATE',0.2);
15:33:48 SYSDBA@DEM:5236SQL>select * from v$dm_ini where para_name ='INDEX_SKIP_SCAN_RATE';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
-------------------- ---------- --------- --------- ------------- ------- ---------- ---------- ----------------------- --------- --------- ----------
INDEX_SKIP_SCAN_RATE 0.002500 0 1 0.002500 N 0.002500 0.002500 Rate in index skip scan SESSION ALL_SYNC CAN_SYNC
已用时间: 7.603(毫秒). 执行号:285634.
15:34:14 SYSDBA@DEM:5236SQL> SP_SET_PARA_DOUBLE_VALUE(1,'INDEX_SKIP_SCAN_RATE',0.2);
DMSQL 过程已成功完成
已用时间: 6.280(毫秒). 执行号:285635.
15:34:22 SYSDBA@DEM:5236SQL>select * from v$dm_ini where para_name ='INDEX_SKIP_SCAN_RATE';
PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE SYNC_FLAG SYNC_LEVEL
-------------------- ---------- --------- --------- ------------- ------- ---------- ---------- ----------------------- --------- --------- ----------
INDEX_SKIP_SCAN_RATE 0.200000 0 1 0.002500 N 0.200000 0.200000 Rate in index skip scan SESSION ALL_SYNC CAN_SYNC
已用时间: 7.211(毫秒). 执行号:285636.
15:34:26 SYSDBA@DEM:5236SQL>
操作验证流程图

更多的方法建议查阅手册
第三种方法:直接编辑可编辑参数文件并重启生效
对于某些可编辑的静态参数,可以直接编辑 dm.ini
配置文件,然后重启数据库服务器使更改生效。这种方法适用于需要永久性修改且不频繁调整的参数。
步骤如下:
1. 定位 dm.ini
文件:找到数据库的配置文件dm.ini
,通常位于数据库安装目录或配置目录下。2. 编辑参数:使用文本编辑器打开 dm.ini
文件,找到需要修改的参数行,调整其值。3. 保存文件:保存对 dm.ini
文件的修改。4. 重启数据库服务器:重启数据库服务以使参数更改生效。
注意:直接编辑配置文件需要谨慎操作,建议在进行修改前备份原始文件,以防止配置错误导致数据库无法启动。
总结
达梦数据库提供了灵活多样的初始化参数修改方法,满足不同场景下的需求:
• 快速调整:使用 ALTER SYSTEM/SESSION SET
语句,适合即时修改和测试。
• 编程化管理:通过调用数据库提供的过程函数,适合自动化脚本和批量操作。
• 永久性修改:直接编辑 dm.ini
配置文件并重启服务器,适合需要持久化且不频繁调整的参数。
在实际操作中,应根据具体需求和参数类型选择合适的修改方式,并确保在进行重要修改前做好备份和测试,以保障数据库的稳定运行。




