已索引

参数类型

参数可以在DM8管理员手册2.1.1.1中查看,官方手册将各参数进行了归类解释。也可以通过 v$dm_ini 或者 v$parameter(兼容oracle)查看。

在DM8管理员手册2.1.1.1中,将参数根据属性分为三种:手动、静态和动态。
手动,不能被动态修改,必须手动修改 dm.ini 参数文件,然后重启才能生效。(对应 READ ONLY)
静态,可以被动态修改,修改后重启服务器才能生效。(可以通过命令修改参数文件,但不能修改内存)
动态,可以被动态修改,修改后即时生效。动态参数又分为会话级(只影响当前会话)和系统级(影响所有会话)两种。
其中,动态修改是指 DBA 用户可以在数据库服务器运行期间,通过调用系统过程 SP_SET_PARA_{空/DOUBLE/STRING}_VALUE()对参数值进行修改。

在 v$dm_ini中,参数类型共有四种:

SQL> select distinct PARA_TYPE from v$dm_ini;

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

READ ONLY:只读参数(手动参数),只能通过修改 dm.ini 文本文件修改,重启数据库生效。
SYS:动态参数(系统级),可以动态修改,可修改内存,不需要重启。
SESSION: 动态参数(会话级),可以动态修改,不能指定修改范围,只针对当前会话生效。
IN FILE:静态参数,可以动态修改,只能修改文件,需要重启数据库才能生效。
READ ONLY 与 IN FILE 均需要重启才能生效,READ ONLY 只能人工修改 dm.ini 文件,IN FILE 可以通过命令修改 dm.ini 文件。

修改参数值

当 dm.ini 中的某参数值设置为非法值时,若设置值与参数类型不兼容,则参数实际取值为默认值;
若设置值小于参数取值范围的最小值,则实际取值为最小值;
若设置值大于参数取值范围的最大值,则实际取值为最大值。

修改参数的方法有如下几种:
方法1:通过系统函数修改
方法2:通过 alter system 或者 alter session 修改
方法3:直接修改 dm.ini 文件,重启后生效
方法4:通过 console 控制台修改,重启后生效

调用系统函数修改

分类别获取参数值:
SF_GET_PARA_{空/STRING/DOUBLE}_VALUE(scope int, paraname varchar(256));
SCOPE 参数为 1 表示获取INI 文件中配置参数的值,为 2 表示获取内存中配置参数的值。

分类别设置参数值:
SP_SET_PARA_{空/STRING/DOUBLE}_VALUE(scope int, paraname varchar(256), value int64);
SCOPE参数为1表示在内存和INI文件中都修改参数值。参数为 2 表示只在 INI 文件中修改配置参数。0表示修改内存。

统一函数设置参数值:
SF_SET_SYSTEM_PARA_VALUE (paraname varchar(256), value int64doublevarchar(256), deferred int, scope int64);
该过程用于修改系统整型、double、varchar 的静态配置参数或动态配置参数。DEFERRED 参数为 0 表示当前 session 修改的参数立即生效,为 1 表示当前 session 不生效,后续再生效,默认为 0。SCOPE 参数为 1 表示在内存和 INI 文件中都修改参数值,为 2 表示只在 INI 文件中修改配置参数。

会话级参数值:
SF_GET_SESSION_PARA_VALUE (paraname varchar(8187)) --- 获得当前会话的某个会话级 INI 参数的值
SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint) --- 设置某个会话级 INI 参数的值,设置的参数值只对本会话有效
SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187)) --- 重置某个会话级 INI 参数的值,使得这个 INI 参数的值和系统 INI 参数的值保持一致

这些函数名不用背,可以查阅DM8管理员手册20.5,或者查询 v$ifun 视图:
SQL> select name from v$ifun where name like 'S%PARA%';

示例:
先查看参数信息:

SQL> select PARA_VALUE,SESS_VALUE,FILE_VALUE,PARA_TYPE,DESCRIPTION from v$dm_ini t where para_name='COMPATIBLE_MODE';

LINEID     PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE DESCRIPTION                                                                                    
---------- ---------- ---------- ---------- --------- -----------------------------------------------------------------------------------------------
1          0          0          0          IN FILE   Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata 

从描述可知,该参数控制 DM8 与哪一个数据库兼容,目前值为0,表示未配置兼容。假如我们想改成与 Oracle 兼容,怎么修改呢?

修改参数值:

SQL> sp_set_para_value(2,'COMPATIBLE_MODE',2);    --- 第一个值2表示只修改 dm.ini 文件,成功
SQL> sp_set_para_value(0,'COMPATIBLE_MODE',2);    --- 报错,因为0表示修改内存

通过 alter 命令修改

ALTER SESSION SET '<参数名称>' =<参数值> [PURGE];
不需要指定修改范围,只对当前会话有效。当包含 PURGE 选项时会清除服务器保存的所有执行计划。

ALTER SYSTEM SET '<参数名称>' =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
[DEFERRED] 只适用于动态会话级参数,即 v$dm_ini.PARA_TYPE 值为 SESSION 的参数。alter system 如果不指定DEFERRED,参数值立即生效,对当前会话和新建的会话生效,对其它已经存在的会话不生效。若指定 DEFERRED,参数值延迟生效,对当前会话不生效,只对新创建的会话生效。对于动态系统级参数,不论是否指定DEFERRED,均对所有会话生效。
[MEMORY|BOTH|SPFILE] 设置INI参数修改的位置。其中, MEMORY只对内存中的INI值做修改; SPFILE则只对INI文件中的INI值做修改; BOTH则内存和INI文件都做修改。默认情况下,为MEMORY。对于静态参数,只能指定SPFILE。

-- By 许望(RHCA、OCM、VCP)
最后修改:2024 年 06 月 19 日 04 : 38 PM
如果觉得我的文章对你有用,请随意赞赏