工作中总会遇到修改参数这种问题,那么达梦数据库的参数该如何修改呢,我们先了解下达梦数据库都有什么种类的参数。
SQL> select para_type,count(*) from v$dm_ini group by para_type order by 2;
行号 PARA_TYPE COUNT(*)
---------- --------- --------------------
1 READ ONLY 98
2 IN FILE 201
3 SYS 213
4 SESSION 248
已用时间: 5.171(毫秒). 执行号:1202.
参数属性分为三种:手动、静态和动态。
手动,不能被动态修改,必须手动修改 dm.ini 参数文件,然后重启才能生效。
静态,可以被动态修改,修改后重启服务器才能生效。
动态,可以被动态修改,修改后即时生效。动态参数又分为会话级和系统级两种。会话
级参数被修改后,新参数值只会影响当前会话和新创建的会话,之前创建的会话不受影响;
系统级参数的修改则会影响所有的会话。
参数若设置值与参数类型不兼容,则参数实际取值为默认值;若设置值小于参数取值范围的最小值,则实际取值为最小值;若设置值大于参数取值范围的最大值,则实际取值为最大值。
那么修改的方式有三种
第一种:
使用alter system/session set方式修改
ALTER
SYSTEM
SET
'<参数名称>'
=<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
both:表示修改内存和参数文件中的值;
spfile修改参数文件;
memory修改内存;
对于静态参数只能使用spfile,对于动态参数皆可使用。
SQL> select para_name,para_type,para_value from v$dm_ini where para_name='ENABLE_LOCAL_OSAUTH';
行号 PARA_NAME PARA_TYPE PARA_VALUE
---------- ------------------- --------- ----------
1 ENABLE_LOCAL_OSAUTH READ ONLY 1
已用时间: 4.291(毫秒). 执行号:1230.
SQL> alter system set 'ENABLE_LOCAL_OSAUTH' = 0 spfile;
DMSQL 过程已成功完成
已用时间: 1.299(毫秒). 执行号:1231.
SQL> alter system set 'ENABLE_LOCAL_OSAUTH' = 0 memory;
alter system set 'ENABLE_LOCAL_OSAUTH' = 0 memory;
[-839]:不能修改静态配置参数的内存值.
已用时间: 0.527(毫秒). 执行号:0.
SQL> alter system set 'ENABLE_LOCAL_OSAUTH' = 0 both;
alter system set 'ENABLE_LOCAL_OSAUTH' = 0 both;
[-839]:不能修改静态配置参数的内存值.
已用时间: 0.435(毫秒). 执行号:0.
SQL> select para_name,para_type,para_value from v$dm_ini where para_name='MTAB_MEM_SIZE';
行号 PARA_NAME PARA_TYPE PARA_VALUE
---------- ------------- --------- ----------
1 MTAB_MEM_SIZE SYS 8
已用时间: 7.405(毫秒). 执行号:1205.
SQL> alter system set 'MTAB_MEM_SIZE' = 12 both;
DMSQL 过程已成功完成
已用时间: 5.165(毫秒). 执行号:1206.
SQL> alter system set 'MTAB_MEM_SIZE' = 8 spfile;
DMSQL 过程已成功完成
已用时间: 4.049(毫秒). 执行号:1207.
SQL> alter system set 'MTAB_MEM_SIZE' = 12 memory;
DMSQL 过程已成功完成
已用时间: 3.741(毫秒). 执行号:1208.
第二种:
使用达梦数据库过程函数进行修改
达梦数据库提供SF_GET_PARA_VALUE、SF_GET_PARA_DOUBLE_VALUE和SF_GET_PARA_STRING_VALUE这三个函数来获取系统的当前配置参数,提供SP_SET_PARA_VALUE和SP_SET_PARA_DOUBLE_VALUE过程来修改静态/动态配置参数。
1 、SF_GET_PARA_VALUE (scope int, paraname varchar(256))
配置参数的值类型为数值类型时使用该函数来获取当前值。SCOPE 参数为1表示获取INI文件中配置参数的值,为2表示获取内存中配置参数的值。
2 、SF_GET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187))
配置参数的值类型为浮点型时使用该函数来获取当前值。SCOPE参数为1表示获取INI文件中配置参数的值,为2表示获取内存中配置参数的值。
3 、SF_GET_PARA_STRING_VALUE(scope int, paraname varchar(8187))
配置参数的值为字符串类型时用该系统函数来获取当前值。SCOPE 参数为1表示获取INI 文件中配置参数的值,为2表示获取内存中配置参数的值。
4 、SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64)
该过程用于修改整型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。当SCOPE等于1,试图修改静态配置参数时服务器会返回错误信息。只有具有 DBA 角色的用户才有权限调用 SP_SET_PARA_VALUE。
5 、SP_SET_PARA_DOUBLE_VALUE(scope int,paraname varchar(8187), alue double)
该过程用于修改浮点型静态配置参数和动态配置参数。SCOPE 参数为 1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在INI文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。当SCOPE等于1,试图修改静态配置参数时服务器会返回错误信息。只有具有 DBA 角色的用户才有权限调用SP_SET_PARA_DOUBLE_VALUE。
6 、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文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。只有具有DBA角色的用户才有权限调用SF_SET_SYSTEM_PARA_VALUE。
7 、SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint)
设置某个会话级 INI 参数的值,设置的参数值只对本会话有效。
8 、SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187))
重置某个会话级 INI 参数的值,使得这个 INI 参数的值和系统 INI 参数的值保持一致。
9 、SF_GET_SESSION_PARA_VALUE (paraname varchar(8187))
获得当前会话的某个会话级 INI 参数的值。
第三种:
编辑dm.ini文件
这个非常简单,不过只有重启才可以生效。
社区地址:https://eco.dameng.com