关于达梦DM8数据库的参数修改

达梦8中的参数文件为dm.ini,该文件可以手动编辑,也可以在数据库中修改后自动同步,类似集成了oracle的pfile加spfile的功能。

查看参数可以使用v$dm_ini或v$parameter视图,其中可以查询到参数值、文件中的值、session中的值以及参数的类型,当然也可以使用DM8提供的函数包查询SF_GET_PARA_VALUE、SF_GET_PARA_DOUBLE_VALUE、SF_GET_PARA_STRING_VALUE。

SQL>  select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='TIMER_TRIG_CHECK_INTERVAL';

行号     PARA_NAME                 PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------------- ---------- ---------- ---------- ---------
1          TIMER_TRIG_CHECK_INTERVAL 60         60         60         SYS

在达梦8中参数可以分为以下几中类型:
1、READ ONLY:手动参数,表示服务器运行过程中不可修改;
2、IN FILE:静态参数,只可修改ini文件;
3、SYS和SESSION:动态参数,ini文件和内存同时可修改,其中,SYS系统级参数;

SQL> select distinct para_type from v$dm_ini;

行号     PARA_TYPE
---------- ---------
1          READ ONLY
2          SYS
3          IN FILE
4          SESSION

已用时间: 7.713(毫秒). 执行号:2016.
SQL> 

静态:可以被动态修改,修改后重启服务器才能生效。
动态:可以被动态修改,修改后即时生效。动态参数又分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。
手动:不能被动态修改,必须手动修改dm.ini参数文件,然后重启才能生效。

一、修改参数的方法:
1、SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64)
该过程用于修改整型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在INI文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
2、SP_SET_PARA_DOUBLE_VALUE (scope int, paraname varchar(8187), value double)
该过程用于修改浮点型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在INI文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
3、SP_SET_PARA_STRING_VALUE()
该过程用于修改字符串型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在INI文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
4、SF_SET_SYSTEM_PARA_VALUE (paraname varchar(256), value int64\double\varchar(256), deferred int, scope int64)
该过程用于修改系统整型、double、varchar的静态配置参数或动态配置参数。DEFERRED参数,为0表示当前session修改的参数立即生效,为1表示当前session不生效,后续再生效,默认为0。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在INI文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。
5、SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint)
设置某个会话级INI参数的值,设置的参数值只对本会话有效。
6、ALTER SYSTEM SET ‘参数名称’ =‘参数值’ [DEFERRED] [MEMORY|BOTH|SPFILE];
参数名称:可以是静态参数、系统参数sys、会话参数session;DEFERRED只能用于动态参数。指定DEFERRED后,参数值延迟生效,对当前session不生效,只对新创建的会话生效。默认为立即生效,对当前会话和新创建的会话都生效。[MEMORY|BOTH|SPFILE] 指定生效的位置。其中,MEMORY只对内存中的值做修改;SPFILE则只对file_value中的值做修改;BOTH则都做修改。默认情况下,为MEMORY。对于静态参数,只能指定SPFILE。
7、ALTER SESSION SET ‘参数名称’ =‘参数值’ [PURGE];
参数名称指动态会话级参数名字.[PURGE] 指是否清理执行计划。设置后的值只对当前会话有效。当包含 PURGE 选项时会清除服务器保存的所有执行计划。

二、不同参数类型对应的修改方法如下:
1、READ ONLY:
手动编辑dm.ini ,建议关闭数据库后编辑。从实验中证明,数据库开启状态也可以编辑,重启数据库后生效。

以下为手动编辑dm.ini中参数UTHR_FLAG为1的过程

SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='UTHR_FLAG';

行号     PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- --------- ---------- ---------- ---------- ---------
1          UTHR_FLAG 0          0          0          READ ONLY

编辑dm.ini,修改UTHR_FLAG=1(步骤不做展示)

再次查看该参数发现FILE_VALUE已经变成了1,说明已经手动在ini文件中进行了修改。
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='UTHR_FLAG';

行号     PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- --------- ---------- ---------- ---------- ---------
1          UTHR_FLAG 0          0          1          READ ONLY

重启数据库后再次查看参数情况,参数已经修改过来了。

SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='UTHR_FLAG';

行号     PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- --------- ---------- ---------- ---------- ---------
1          UTHR_FLAG 1          1          1          READ ONLY

2、INFILE :
修改后重启生效,使用SP_SET_PARA_VALUE(修改整型,scope选择2)、SP_SET_PARA_STRING_VALUE(修改字符串型,scope选择2)
也可以使用ALTER SYSTEM SET ‘参数名称’ =‘参数值’ [DEFERRED] [MEMORY|BOTH|SPFILE];

以下为使用函数包和SQL语句修改LOG_POOL_SIZE参数的过程

SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='LOG_POOL_SIZE';

行号     PARA_NAME     PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1          LOG_POOL_SIZE 256        256        256        IN FILE

已用时间: 5.489(毫秒). 执行号:1994.
SQL> SP_SET_PARA_VALUE (2, 'LOG_POOL_SIZE',512);
DMSQL 过程已成功完成
已用时间: 5.059(毫秒). 执行号:1995.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='LOG_POOL_SIZE';

行号     PARA_NAME     PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1          LOG_POOL_SIZE 256        256        512        IN FILE

已用时间: 5.251(毫秒). 执行号:1996. 
SQL> alter system set 'LOG_POOL_SIZE'=256 SPFILE;
DMSQL 过程已成功完成
已用时间: 7.322(毫秒). 执行号:1997.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='LOG_POOL_SIZE';

行号     PARA_NAME     PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1          LOG_POOL_SIZE 256        256        256        IN FILE

已用时间: 4.881(毫秒). 执行号:1998.
SQL> 

3、session :SF_SET_SESSION_PARA_VALUE(修改当前session,其他session无效),SP_SET_PARA_VALUE、SP_SET_PARA_DOUBLE_VALUE、SP_SET_PARA_STRING_VALUE(),修改session级别的参数不能对以前连接的session生效,可以选择以后的连接以及重启数据库后是否生效。
或ALTER SESSION SET ‘参数名称’ =‘参数值’ [PURGE];

以下分别使用不同函数包和sql语句修改SORT_BUF_SIZE参数的值的过程

扫描二维码关注公众号,回复: 11826499 查看本文章
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='SORT_BUF_SIZE';

行号     PARA_NAME     PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1          SORT_BUF_SIZE 200        50         50         SESSION

已用时间: 5.214(毫秒). 执行号:1999.
SQL> SF_SET_SESSION_PARA_VALUE('SORT_BUF_SIZE',100);
DMSQL 过程已成功完成
已用时间: 0.664(毫秒). 执行号:2000.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='SORT_BUF_SIZE';

行号     PARA_NAME     PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1          SORT_BUF_SIZE 200        100        50         SESSION

已用时间: 4.578(毫秒). 执行号:2001.
SQL> SP_SET_PARA_VALUE(1,'SORT_BUF_SIZE',400);
DMSQL 过程已成功完成
已用时间: 5.093(毫秒). 执行号:2002.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='SORT_BUF_SIZE';

行号     PARA_NAME     PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1          SORT_BUF_SIZE 400        400        400        SESSION

已用时间: 4.592(毫秒). 执行号:2003.
SQL> 
SQL> alter session set 'SORT_BUF_SIZE'=50;
DMSQL 过程已成功完成
已用时间: 0.508(毫秒). 执行号:2004.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='SORT_BUF_SIZE';

行号     PARA_NAME     PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1          SORT_BUF_SIZE 400        50         400        SESSION

4、SYS: 动态参数,可以使用SF_SET_SYSTEM_PARA_VALUE函数修改,这样不用考虑整型、浮点、字符串的问题(当然也可以使用其他函数包)
或使用ALTER SYSTEM SET ‘参数名称’ =‘参数值’ [DEFERRED] [MEMORY|BOTH|SPFILE];

以下分别使用函数包和sql语句修改TIMER_TRIG_CHECK_INTERVAL参数的值的过程

SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='TIMER_TRIG_CHECK_INTERVAL';

行号     PARA_NAME                 PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------------- ---------- ---------- ---------- ---------
1          TIMER_TRIG_CHECK_INTERVAL 60         60         60         SYS

已用时间: 6.113(毫秒). 执行号:2010.
SQL>  SF_SET_SYSTEM_PARA_VALUE ('TIMER_TRIG_CHECK_INTERVAL',30,0,1);
DMSQL 过程已成功完成
已用时间: 4.139(毫秒). 执行号:2012.
SQL>  select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='TIMER_TRIG_CHECK_INTERVAL';

行号     PARA_NAME                 PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------------- ---------- ---------- ---------- ---------
1          TIMER_TRIG_CHECK_INTERVAL 30         30         30         SYS

已用时间: 7.826(毫秒). 执行号:2013.
SQL> ALTER SYSTEM SET 'TIMER_TRIG_CHECK_INTERVAL' =60 DEFERRED BOTH;
DMSQL 过程已成功完成
已用时间: 5.345(毫秒). 执行号:2014.
SQL>  select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='TIMER_TRIG_CHECK_INTERVAL';

行号     PARA_NAME                 PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------------- ---------- ---------- ---------- ---------
1          TIMER_TRIG_CHECK_INTERVAL 60         60         60         SYS

已用时间: 4.293(毫秒). 执行号:2015.
SQL> 

三、总结
虽然DM8的修改参数的方法较多,DM8本身的参数也比较多,但在日常运维中经常需要修改的参数并不多。
READ ONLY和IN FILE的参数完全可以直接编辑dm.ini文件进行修改,然后重启数据库生效。这样就不用考虑应该使用哪个函数包了。
对于sys的参数,可以使用SF_SET_SESSION_PARA_VALUE函数包,避免考虑整型、浮点、字符型的问题。
对于session的参数一般使用SF_SET_SESSION_PARA_VALUE函数来修改当前session。
大多数情况下,使用SP_SET_PARA_VALUE就可以应对日常的运维工作了。
当然习惯兼容ORACLE运维的同学来说,使用alter system/session 也是个不错的选择。

猜你喜欢

转载自blog.csdn.net/weixin_50334974/article/details/108776379