每创建一个 DM 数据库,就会自动生成对应的dm.ini 参数文件。dm.ini 是 DM 数据库启动所必须的配置文件,DM8数据库所有实例级配置均依赖参数文件生效,是数据库启动、运行、调优的核心依据,该文件的主要作用如下:
DM8所有参数根据生效方式、修改权限、作用范围,分为四大属性类型,这是参数修改的核心依据,直接决定修改命令与生效方式。
静态参数在数据库运行期间不能修改内存中的值,动态参数在数据库运行期间可以修改内存中的值(修改后立即生效)。可通过查询v$dm_ini的PARA_TYPE 来查看参数的类型。
SQL> select PARA_TYPE from v$dm_ini;
行号 PARA_TYPE
---------- ---------
1 READ ONLY
2 SYS
3 IN FILE
4 SESSION
适用场景:只读参数、静态参数批量调整、参数异常数据库无法启动修复
[root@dm8 ~]# systemctl stop DmServiceDMSERVER
[dmdba@dm8 ~]#vim /data/dmdata/DAMENG/dm.ini
[root@dm8 ~]# systemctl start DmServiceDMSERVER
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='参数名';
适用场景:适用于修改 SYS、SESSION、IN FILE类型的参数。
在使用 SP_SET_PARA_VALUE(scope, paraname, value) 等存储过程时,scope 的取值含义如下:
SYS、SESSION)。SYS、SESSION),若尝试修改静态参数(IN FILE)会报错。IN FILE)。根据参数值类型的不同,可分为整型参数、字符串参数、浮点型参数,不同的参数值类型需要通过对应的存储过程进行修改,否则会报[-3503]:无效的函数参数,同时还可以设置仅针对当前会话生效。
SQL> SP_SET_PARA_VALUE(scope, '参数名', 值);
SQL> SP_SET_PARA_STRING_VALUE(scope, '参数名', '值');
SQL> SP_SET_PARA_DOUBLE_VALUE(scope, '参数名', 值);
SQL> SF_SET_SESSION_PARA_VALUE('参数名', 值);
在通过ALTER SYSTEM 语句修改参数时,根据使用的参数不同,生效的范围也存在不同,具体影响范围如下;
MEMORY(默认) :仅修改内存值,重启后失效。BOTH : 同时修改内存和 dm.ini 文件,动态参数立即永久生效。SPFILE :只修改配置文件,静态参数需用此方式,重启后生效。可通过ALTER SYSTEM 语句进行参数修改,需注意修改参数时需要在参数名称处加单引号,具体SQL语法如下:
ALTER SYSTEM SET '<参数名称>' =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
其中 DEFERRED 含义如下:
提供的 Console 工具可以可视化加载并修改 dm.ini 中的参数,修改完成后同样需要重启数据库实例才能生效,适合不习惯命令行操作的环境。
#调用console图形化工具
[dmdba@dm8 ~]$ cd /home/dmdba/dmdbms/tool/
[dmdba@dm8 tool]$ ./console
初始化参数决定数据库底层架构,是建库的核心参数,以下为数据库初始化常用参数:
| 参数名 | 作用说明 | 常用取值 |
|---|---|---|
| PATH | 数据库文件存储路径 | /data/dmdata |
| DB_NAME | 数据库名称 | DAMENG |
| INSTANCE_NAME | 数据库实例名,服务名依据该参数生成 | DMSERVER |
| PORT_NUM | 数据库监听端口 | 5236 |
| PAGE_SIZE | 数据页大小,影响单条数据存储上限 | 4/8/16/32 ,单位默认为K |
| EXTENT_SIZE | 数据文件使用的簇大小 | 16/32/64 ,单位默认为页 |
| CHARSET | 数据库字符集 | 0=GB18030,1=UTF-8,2=EUC-KR |
| CASE_SENSITIVE | 标识符大小写敏感 | 0/N=不敏感(适配MySQL、SqlServer)<br>1/Y=敏感(适配Oracle) |
| BLANK_PAD_MODE | 设置空格填充模式 | 0/1(兼容Oracle值为1) |
| SYSDBA_PWD | 管理员初始密码 | 自定义复杂度密码 |
| SYSAUDITOR_PWD | 审计员初始密码 | 自定义复杂度密码 |
| LOG_SIZE | 日志文件大小 | 范围为:256M ~ 8G,单位默认为M |
| LENGTH_IN_CHAR | 控制 VARCHAR/VARCHAR2 字段定义长度的计数单位:是按「字节」还是「字符」计算存储上限 | 0/1(该参数新版本已废弃,默认以字节存储) |
数据库初始化完成后,可在数据库软件安装目录 log 目录下,查看数据库初始化配置,具体路径可参考如下:
/home/dmdba/dmdbms/log/dminit_DAMENG_xxxxx.log
在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,在该库的整个生命周期内,页大小都不能够改变。
如果要修改该参数,需要重新初始化实例。
页大小对字符数据类型实际最大长度及每行记录的影响如下表所示(不同的数据库版本略有差异):
| 数据库页大小 | 每个字符类型字段实际最大长度(字节) | 每行记录除大字段外其他字段总长度(字节) |
|---|---|---|
| 4K | 1900 | 2000 |
| 8K | 3900 | 4000 |
| 16K | 8000 | 8000 |
| 32K | 8188 | 16000 |
除了每个字段的最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或者以后可能存在含有较长的字符串类型的表,建议该参数设置为 16 或者 32。
--查询当前数据库页大小
SQL> SELECT SF_GET_PAGE_SIZE();
行号 SF_GET_PAGE_SIZE()
---------- ------------------
1 32768
建议采用默认值 GB18030,如果需要国际字符可以采用 Unicode,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到 2 个字节,亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间一些。当业务系统涉及到韩文时,可采用EUC-KR字符集。
如果要修改该参数,需要重新初始化实例。
--查询数据库当前字符集
SQL> SELECT '字符集',CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' then 'UTF-8' when '2' then 'EUC-KR' end;
行号 '字符集' CASESF_GET_UNICODE_FLAG()WHEN'0'THEN'GBK18030'WHEN'1'THEN'UTF-8'WHEN'2'THEN'EUC-KR'END
---------- ----------- --------------------------------------------------------------------------------------
1 字符集 GBK18030
该参数用来设置字符串比较是否大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感, ORACLE 迁移过来的系统,使用大小写敏感,以便和原来系统匹配。
如果要修改该参数,需要重新初始化实例。
--查询数据库当前大小写敏感
SQL> SELECT '大小写敏感',cast(case SF_GET_CASE_SENSITIVE_FLAG()when '1' then '是' when '0' then '否' end as varchar);
行号 '大小写敏感' CAST(CASESF_GET_CASE_SENSITIVE_FLAG()WHEN'1'THEN'是'WHEN'0'THEN'否'ENDASVARCHAR)
---------- ----------------- ----------------------------------------------------------------------------------
1 大小写敏感 是
该参数用于控制在字符串比较、唯一性约束、GROUP BY、ORDER BY等操作中,是否将字符串结尾的空格)视为有效字符参与运算。该参数建库后无法修改,缺省值为 0。兼容Oracle时,该参数设置为1。
如果要修改该参数,需要重新初始化实例。
--查询数据库当前BLANK_PAD_MODE值
SQL> select PARA_NAME,PARA_VALUE from V$DM_INI WHERE PARA_NAME='BLANK_PAD_MODE';
行号 PARA_NAME PARA_VALUE
---------- -------------- ----------
1 BLANK_PAD_MODE 0
示例如下:
CREATE TABLE t_blank(id INT, name VARCHAR(20));
INSERT INTO t_blank VALUES(1, 'A');
INSERT INTO t_blank VALUES(2, 'A '); -- 尾部一个空格
COMMIT;
-- BLANK_PAD_MODE=0 时:返回 2,两条都查出来了
SQL> SELECT COUNT(*) FROM t_blank WHERE name = 'A';
行号 COUNT(*)
---------- --------------------
1 2
-- BLANK_PAD_MODE=1 时:
-- 返回 1,只查到 'A'
SQL> SELECT COUNT(*) FROM t_blank WHERE name = 'A';
行号 COUNT(*)
---------- --------------------
1 1
-- 返回 1,只查到 'A '
SQL> SELECT COUNT(*) FROM t_blank WHERE name = 'A ';
行号 COUNT(*)
---------- --------------------
1 1
该参数的作用是建表时 VARCHAR 的长度是按照字符计算还是字节计算,默认以字节为单位,即字段的长度单位按照字节计算,如果采用字符为单位,字段的长度单位按照字符来计算,不同的字符集会导致字段长度不一样,实际最大长度受到页大小的限制。建议采用默认以字节为单位,如果从 MYSQL 迁移的同时又不方便扩大表结构的长度,需要设置为以字符为单位。
需要注意的是该参数在新版本已取消,初始化时无法指定该参数,默认以字节为单位。
--查询数据库当前LENGTH_IN_CHAR值
SQL> SELECT 'char是否以字符为单位',DECODE(PARA_VALUE,0,'否',1,'是') FROM V$DM_INI WHERE PARA_NAME='LENGTH_IN_CHAR';
行号 'char是否以字符为单位' DECODE(PARA_VALUE,0,'否',1,'是')
---------- ------------------------------ ----------------------------------
1 char是否以字符为单位 否
文章
阅读量
获赞
