【达梦数据库】dminit常用参数学习


前言

dminit 是 DM 数据库初始化工具。在安装 DM 的过程中,用户可以选择是否创建初始数据库。如果当时没有创建,那么在安装完成之后,可以利用创建数据库工具 dminit 来创建。

系统管理员可以利用 dminit 工具提供的各种参数,设置数据库存放路径、段页大小、是否对大小写敏感、以及是否使用 UNICODE 等,创建出满足用户需要的数据库。该工具位于安装目录的 /bin 目录下。


一、初始化参数介绍

达梦数据库初始化参数分为手动、 静态和动态三种类型,分别对应V$PARAMETER视图中TYPE列的READ ONLY、IN FILE、SYS/SESSION。服务器运行过程中,手动参数不能被修改,静态和动态参数可以修改

  • 静态(IN FILE)参数:只能通过修改 dm.ini 文件进行修改, 修改后重启服务器才能生效,为系统级参数,生效后会影响所有的会话。

  • 动态(SYS和SESSION)参数:可在 dm.ini 文件和内存同时修改,修改后即时生效。其中, SYS为系统级参数,修改后会影响所有的会话;SESSION 为会话级参数,服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话会使用新的参数值。

  • 手动(READ ONLY) 参数:不能被动态修改,必须手动修改 dm.ini 参数文件,然后重启才能生效。

二、dminit工具实操

2.1 使用dminit

./dminit path=/dmdbms/data PAGE_SIZE=8 EXTENT_SIZE=16 CASE_SENSITIVE=y
CHARSET=0 DB_NAME=excenter INSTANCE_NAME=EXCENTER PORT_NUM=5238

上述语句表示:设置页大小为 8 KB,簇大小为 16 KB,大小写敏感,字符集为 GB18030,数据库名为 excenter,实例名为 EXCENTER,端口为 5238。

在这里插入图片描述

2.2 查看dminit参数

关键字参数说明
INI_FILE初始化文件dm.ini存放的路径
PATH初始数据库存放的路径
CTL_PATH控制文件路径
LOG_PATH日志文件路径
EXTENT_SIZE数据文件使用的簇大小(16),可选值:16、32、64,单位:页
PAGE_SIZE数据页大小(8),可选值:4、8、16、32,单位:K
LOG_SIZE日志文件大小(256),单位为:M,范围为:64M ~ 2G
CASE_SENSITIVE大小敏感(Y),可选值:Y/N,1/0
CHARSET/UNICODE_FLAG字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
SEC_PRIV_MODE权限管理模式(0),可选值:0[TRADITION],1[BMJ],2[EVAL]
LENGTH_IN_CHARVARCHAR类型长度是否以字符为单位(N),可选值:Y/N,1/0
SYSDBA_PWD设置SYSDBA密码(SYSDBA),密码长度为9到48
SYSAUDITOR_PWD设置SYSAUDITOR密码(SYSAUDITOR),密码长度为9到48
DB_NAME数据库名(DAMENG)
INSTANCE_NAME实例名(DMSERVER)
PORT_NUM监听端口号(5236)
BUFFER系统缓存大小(100),单位M
TIME_ZONE设置时区(+08:00)
PAGE_CHECK页检查模式(0),可选值:0/1/2
EXTERNAL_CIPHER_NAME设置默认加密算法
EXTERNAL_HASH_NAME设置默认HASH算法
EXTERNAL_CRYPTO_NAME设置根密钥加密引擎
RLOG_ENC_FLAG设置日志文件是否加密(N),可选值:Y/N,1/0
USBKEY_PIN设置USBKEY PIN
PAGE_ENC_SLICE_SIZE设置页加密分片大小,可选值:0、512、4096,单位:Byte
ENCRYPT_NAME设置全库加密算法
BLANK_PAD_MODE设置空格填充模式(0),可选值:0/1
SYSTEM_MIRROR_PATH SYSTEM数据文件镜像路径
MAIN_MIRROR_PATHMAIN数据文件镜像
ROLL_MIRROR_PATH回滚文件镜像路径
MAL_FLAG初始化时设置dm.ini中的MAL_INI(0)
ARCH_FLAG初始化时设置dm.ini中的ARCH_INI(0)
MPP_FLAGMpp系统内的库初始化时设置dm.ini中的mpp_ini(0)
CONTROL初始化配置文件(配置文件格式见系统管理员手册)
AUTO_OVERWRITE是否覆盖所有同名文件(0) 0:不覆盖 1:部分覆盖 2:完全覆盖
USE_NEW_HASH是否使用改进的字符类型HASH算法(1)
ELOG_PATH指定初始化过程中生成的日志文件所在路径
SYSSSO_PWD设置SYSSSO密码(SYSSSO),密码长度为9到48
SYSDBO_PWD设置SYSDBO密码(SYSDBO),密码长度为9到48
PRIV_FLAG设置权限标记,可选值:0、1
AP_PORT_NUMECS模式下AP协同工作的监听端口
DFS_FLAG初始化时设置dm.ini中的DFS_INI(0)
DFS_PATH启用dfs时指定数据文件的缺省路径
DFS_HOST指定连接分布式系统DFS的服务地址(localhost)
DFS_PORT指定连接分布式系统DFS的服务端口号(3332)
DFS_COPY_NUM指定分布式系统的副本数(3)
DFS_DB_NAME指定分布式系统的中数据库名(默认与DB_NAME一致)
SHARE_FLAG指定分布式系统中该数据库的共享属性(0)
REGION_MODE指定分布式系统中该数据库的系统表空间数据文件的区块策略(0) 0:微区策略 1:宏区策略
HUGE_WITH_DELTA是否仅支持创建事务型HUGE表(1) 1:是 0:否
RLOG_GEN_FOR_HUGE是否生成HUGE表REDO日志(0) 1:是 0:否
PSEG_MGR_FLAG是否仅使用管理段记录事务信息(0) 1:是 0:否
CHAR_TO_VARCHAR2是否允许变换定长字符类型为变长字符类型存储(Y),可选值:Y/N,1/0
HELP打印帮助信息

建库完成后,在 DM 服务器运行期间,可以通过查询 V$DM_INI 动态视图查看建库参数的具体信息。

2.3 参数调整方式

达梦数据库参数修改参数的方法与Oracle类似,可以使用alter system/session set的方式进行修改,也可以使用达梦数据库自带的过程函数来修改。

(1)使用alter system/session set方式修改

使用该方法修改参数比较简单,具体语法格式如下:

  • 修改系统参数,注意与Oracle修改方法的区别,没有了“SCOPE=”,而是直接指定SPFILE、BOTH等参数。语法格式如下。
ALTER SYSTEM SET '<参数名称>' =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];

例如:设置静态参数MTAB_MEM_SIZE 参数值为 1200。

ALTER SYSTEM SET 'MTAB_MEM_SIZE' =1200 spfile;
  • 修改会话参数,PURGE关键字指是否清理执行计划。语法格式如下。
ALTER SESSION SET '<参数名称>' =<参数值> [PURGE];

例如:设置当前会话的 HAGR_HASH_SIZE 参数值为 2000000。

ALTER SESSION SET 'HAGR_HASH_SIZE' =2000000;

(2)使用达梦数据库过程函数进行修改
达梦数据库提供SF_GET_PARA_VALUE、SF_GET_PARA_DOUBLE_VALUE和SF_GET_PARA_STRING_VALUE函数获取系统的当前配置参数,提供SP_SET_PARA_VALUE和SP_SET_PARA_DOUBLE_VALUE过程修改静态/动态配置参数。

  • SF_GET_PARA_VALUE (scope int, paraname varchar(256))
    配置参数的值类型为数值类型时使用该函数来获取当前值。SCOPE 参数为1表示获取INI文件中配置参数的值,为2表示获取内存中配置参数的值。

  • SF_GET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187))
    配置参数的值类型为浮点型时使用该函数来获取当前值。SCOPE参数为1表示获取INI文件中配置参数的值,为2表示获取内存中配置参数的值。

  • SF_GET_PARA_STRING_VALUE(scope int, paraname varchar(8187))
    配置参数的值为字符串类型时用该系统函数来获取当前值。SCOPE 参数为1表示获取INI 文件中配置参数的值,为2表示获取内存中配置参数的值。

  • SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64)
    该过程用于修改整型静态配置参数和动态配置参数。SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。当SCOPE等于1,试图修改静态配置参数时服务器会返回错误信息。只有具有 DBA 角色的用户才有权限调用 SP_SET_PARA_VALUE。

  • SP_SET_PARA_DOUBLE_VALUE(scope int,paraname varchar(8187), value double)
    该过程用于修改浮点型静态配置参数和动态配置参数。SCOPE 参数为 1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。参数为2表示只在INI文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。当SCOPE等于1,试图修改静态配置参数时服务器会返回错误信息。只有具有 DBA 角色的用户才有权限调用SP_SET_PARA_DOUBLE_VALUE。

  • 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。

  • SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint)
    设置某个会话级 INI 参数的值,设置的参数值只对本会话有效。

  • SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187))
    重置某个会话级 INI 参数的值,使得这个 INI 参数的值和系统 INI 参数的值保持一致。

  • SF_GET_SESSION_PARA_VALUE (paraname varchar(8187))
    获得当前会话的某个会话级 INI 参数的值。

(3)直接编辑可编辑参数文件修改,然后重启生效。

三、常用参数详解

达梦数据库利用./dminit进行数据库实例参数设置

./dminit help   #查看可配置参数

3.1 常用参数

  • INI_FILE
    初始化文件dm.ini存放的路径。默认存放在/dmdbms/data/DAMENG(数据库名)。

  • PATH
    初始数据库存放的路径。默认路径为 dminit.exe 当前所在的工作目录。文件路径长度最大为 256 个字符。可选参数。
    CTL_PATH 控制文件路径

  • LOG_PATH
    日志文件路径。

  • DB_NAME
    初始化数据库名称,默认为 DAMENG。名称为字符串,长度不能超过 128 个字符。可选参数。WINDOWS 下文件名不能包含字符/ \ * : ? < > " | ,LINUX 下文件名不能包含字符/\ : < > " |。

  • INSTANCE_NAME
    初始化数据库实例名称,默认为 DMSERVER。名称为字符串,长度不能超过 128 个字符。可选参数。

  • PORT_NUM
    初始化时设置 dm.ini 中的监听端口号,默认 5236。 服务器配置此参数,有效值范围(1024~65534),发起连接端的端口在 1024~65535 之间随机分配A。可选参数。

  • LOG_SIZE
    日志文件大小(256),单位为:M,范围为:64M ~ 2G。

  • EXTENT_SIZE
    数据文件使用的簇大小,即每次分配新的段空间时连续的页数。取值:16、32、64。单位:页数。缺省值 16。可选参数。

  • PAGE_SIZE
    数据文件使用的页大小。取值:4、8、16、32,单位:K。默认值为 8。可选参数。选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降。

  • CASE_SENSITIVE
    标识符大小写敏感。当大小写敏感时,小写的标识符应用""括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,在标识符比较时也不能区分大小写。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y。可选参数。

  • CHARSET/UNICODE_FLAG
    字符集选项。取值:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0。可选参数。

  • LENGTH_IN_CHAR
    VARCHAR 类型对象的长度是否以字符为单位。取值:1、Y 表示是,0、N 表示否。默认值为 0。可选参数。1 或 Y:是,所有 VARCHAR 类型对象的长度以字符为单位。0 或 N:否,所有 VARCHAR 类型对象的长度以字节为单位。

  • BLANK_PAD_MODE
    BLANK_PAD_MODE只有在数据库初始化时配置,初始化后无法进行修改,如果需要修改必须重新初始化数据库。主要用于Oracle数据的兼容,达梦默认设置BLANK_PAD_MODE=0,即在做数据对比时,默认会截断字符结尾的空格,而Oracle默认是会识别到字符结尾的空格。开启该参数可兼容Oracle空格填充行为。

其中页大小 (page_size)、簇大小 (extent_size)、大小写敏感 (case_sensitive)、字符集 (charset) 、VARCHAR类型以字符为单位(length_in_char)、空白填充模式(blank_pad_mode),一旦确定无法修改,需谨慎设置。

3.2 兼容oracle参数

  • BLANK_PAD_MODE
    BLANK_PAD_MODE只有在数据库初始化时配置,初始化后无法进行修改,如果需要修改必须重新初始化数据库。主要用于Oracle数据的兼容,达梦默认设置BLANK_PAD_MODE=0,即在做数据对比时,默认会截断字符结尾的空格,而Oracle默认是会识别到字符结尾的空格。开启该参数可兼容Oracle空格填充行为。

  • CALC_AS_DECIMAL
    缺省值为0。属于静态参数。
    0:默认值,表示整数类型的除法、整数与字符或 BINARY 串的所有四则运算,结果都处理成整数1:表示整数类型的除法全部转换为 DEC(0,0)处理2:表示将整数与字符或 BINARY 串的所有四则运算都转换为 DEC(0,0)处理注:该参数只有在 USE_PLN_POOL 为 0 或 1时有效。当 USE_PLN_POOL 为 2 或 3 时,按照 CALC_AS_DECIMAL=2 处理。

  • COMPATIBLE_MODE
    缺省值为0。属于静态参数。
    DM 提供了COMPATIBLE_MODE参数来设置数据库的兼容性模式,0:不兼容,1:兼容 SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER,4:部分兼容 MYSQL, 5:兼容 DM6,6:部分兼容 TERADATA。该参数默认为 0,修改方式有两种:
    在 dm.ini 文件中修改 COMPATIBLE_MODE 参数的值。
    利用 SQL 语句修改 COMPATIBLE_MODE 参数的值。

  • PK_WITH_CLUSTER
    缺省值为1。属于动态参数、会话级参数。
    在建表语句中指定主关键字时,是否缺省指定为 CLUSTER,0:不指定;1:指定注:该参数对列存储表和堆表无效。

  • ORDER_BY_NULLS_FLAG
    缺省值为0。属于动态参数、会话级参数。
    ASC 升序排序时,控制 NULL 值返回的位置。取值 0 或 1。1 表示 NULL 值在最后返回,0 表示 NULL 值在最前面返回。在参数等于 1 的情况下,NULL 值的返回与 ORACLE 保持一致。DESC 降序时该参数无效。

参考以下命令设置成兼容Oracle的配置

SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE',2);
SP_SET_PARA_VALUE(2,'CALC_AS_DECIMAL',1);
SP_SET_PARA_VALUE(2,'ORDER_BY_NULLS_FLAG',1);
SP_SET_PARA_VALUE(2,'PK_WITH_CLUSTER',0);

设置完后重启数据库服务才能生效。

四、部分参数验证效果

4.1 PAGE_SIZE (页大小)

已做过影响效果验证实验,详情请参考:
【达梦数据库】表空间

4.2 CASE_SENSITIVE (大小写敏感)

①当大小写敏感时,小写的标识符应用双引号括起,否则被系统自动转换为大写;
表名因为没有双引号会默认转换为大写,字段中加了双引号的字段会保持原有大小写的样子且只有使用定义时的方式才可查询到相应内容。大小写敏感时,只有“”中的内容是严格区分大小写的,其他都会默认转换为大写。

②当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。通俗地说,就是大小写不敏感时无论大小写都是一样的;表名、列名、字符串内容全部忽略大小写,无论大写、小写、是否加双引号都不影响。

③根本目的是为了兼容不同的数据库,从MYSQL和SQLSERVER 迁移过来的系统,建议使用大小写不敏感;从 ORACLE迁移过来的系统,建议使用大小写敏感,以便和原来系统匹配。

大小写敏感参数影响验证:

select sf_get_case_sensitive_flag();   #查看大小写敏感参数(1大小写敏感,0不敏感)

在这里插入图片描述
a. 大小写敏感条件下,创建相同名字的表test1和TEST1,只能创建一个。
如果创建test1表时未加引号,则大小写敏感的情况下,创建出来的是TEST1表。如果加了引号,则创建出来的test1表。
在这里插入图片描述
b. 分别向test1和TEST1插入数据时,数据均插入到test1表中。
在这里插入图片描述

4.3 CHARSET (字符集)

一般使用GB18030,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部分繁体及少数民族文字占 4 字节。如果需要国际字符可以采用 Unicode,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到 2 个字节,亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,GB18030更节省空间些。

字符集参数影响验证:

设置字符集选项为GB18030和UTF-8时,查看字母字符和汉字字符所占的字节长度。

--建表 
create table t1(c1 varchar(10));
 
--插入数据 
insert into t1 values('a');
insert into t1 values('一');
insert into t1 values('二');
commit;
 
--查看所占字节长度
select c1,lengthb(c1),(ascii(c1)) from t1;

设置字符集选项为GB18030时,运行结果:
在这里插入图片描述

设置字符集选项为UTF-8时,运行结果:

在这里插入图片描述

4.4 LENGTH_IN_CHAR (VARCHAR类型以字符为单位)

该参数的作用是建表时VARCHAR的长度是按照字符计算还是字节计算,默认以字节为单位,即字段的长度单位按照字节计算。如果采用字符为单位,字段的长度单位按照字符来计算,不同的字符集会导致字段长度不一样,实际最大长度受到页大小的限制。建议采用默认以字节为单位,如果从 MYSQL 迁移的同时又不方便扩大表结构的长度,需要设置为以字符为单位。

VARCHAR类型以字符为单位参数影响验证:

在字符集为 gb18030,varchar 长度以字节为单位时,运行代码:

--建表
create table t2(name VARCHAR(3));
 
--插入数据,执行成功
insert into t2 values('一')commit;                   ---执行成功

--插入数据,执行失败,列[NAME]长度超出定义
insert into t2 values('一二')commit;

运行结果:
在这里插入图片描述

在字符集为UTF-8,varchar 长度以字符为单位时,运行代码:

--建表
create table t2(name VARCHAR(3));
 
--插入数据,执行成功
insert into t2 values('一')commit;                   ---执行成功

--插入数据,执行成功
insert into t2 values('一二')commit;

运行结果:
在这里插入图片描述

4.5 BLANK_PAD_MODE (空格填充模式)

①BLANK_PAD_MODE:设置空格填充模式(0),可选值:0/1。
设置字符串比较时,结尾空格填充模式是否兼容ORACLE。取值1则兼容;0不兼容。

②通俗来说,就是在比较、count等操作时是否严格区分字符串’A’和’A '。
当BLANK_PAD_MODE=0时,除去group by这种分组操作时严格区分外,其他比较、count等操作不严格区分’a’和’a ',认为这两个字符串是相等的。
当BLANK_PAD_MODE=1时,所有操作严格区分’A’和’A '。

空格填充模式参数影响验证:
(1)当BLANK_PAD_MODE=0时,

--检查空格填充模式参数,当前为默认值 0
select blank_pad_mode();

执行结果如下:
在这里插入图片描述
a. 空格填充模式参数=0时,数据库系统允许插入三条分别为’A’、'A '、'A '的数据。

--创建测试表
create table test_blank(c1 varchar(10));
--插入数据测试
insert into test_blank values('A');
insert into test_blank values('A ');
insert into test_blank values('A  ');
commit;
--查看数据
select * from test_blank;

执行结果如下:
在这里插入图片描述
b. 空格填充模式参数=0时,查询数据’A’时,系统不严格区分末尾是否有空格,从而找出三条记录。

--查看数据,找出'A'的数据
select * from test_blank where c1='A';

在这里插入图片描述
c. 空格填充模式参数=0时,通过 count 统计数据’A’的数量时,系统不严格区分末尾是否有空格,统计数据为3。

select count(*) from test_blank where c1='A';

在这里插入图片描述
d. 空格填充模式参数=0时,通过 group by 分组时,将会一一区分’A’、'A '、'A '。

--测试group by
select count(*) from test_blank group by c1;

在这里插入图片描述
e. 空格填充模式参数=0时,因为系统不严格区分末尾是否有空格,认为’A’、'A '、'A '三条数据都是相等的,所以不允许建立唯一性约束。

--试图加上唯一索引
create unique index idx_test_blank on test_blank(c1);

在这里插入图片描述

  1. 当BLANK_PAD_MODE=1时

在这里插入图片描述

相同代码数据再重新执行一遍。可以明显看出为1情况下时严格区分’A’和’A ’的。

依次执行结果分别为下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

并且允许添加唯一索引:
在这里插入图片描述


总结

本文介绍了达梦数据库中的dminit工具及其实操方法,含有dminit常用参数的介绍与影响验证。如果文中有误,欢迎指出,大家共同交流进步!

更多达梦技术资讯,请访问达梦技术社区:
达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心
https://eco.dameng.com/

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值