码迷,mamicode.com
首页 > 数据库 > 详细

1.DM数据库参数说明

时间:2019-06-21 15:35:17      阅读:760      评论:0      收藏:0      [点我收藏+]

标签:unicode   cas   创建数据库   行记录   values   附加   media   页面   数据库   

达梦数据库初始化实例后初始化参数无法修改,如果要调整必须重新初始化库,所以为了移植、开发、维护的方便,根据应用特征合理规划初始化参数尤为重要,确定后形成安装规范项目组成员保持一致,如果初始化参数不一致的数据库实例间的物理备份、逻辑备份等将不能互用,切记!下面对一些重要的初始化参数进行详细说明:
初始化参数  对数据库使用的影响
页大小(page size)  字符串字段的最大长度及每行记录的总长度
日志文件大小(rlog)   高并发事务下的刷盘速度
时区(time zone)   时区不同时造成的时间不一致
字符串比较大小写敏感(string case sensitive) SQL 语句及应用是否兼容
字符集(charset)   字符的存储空间及可识别字符的数量
VARCHAR 类型以字符为单位(lengthin char) dm 字符类型默认以字节来存储,影响应用对字符长度的判断
改进字符串 HASH 算法 改进字符串 HASH 算法

 

1 页大小
 
在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,在该库的整个生命周期内,页大小都不能够改变。
页大小对字符数据类型实际最大长度及每行记录的影响如下表所示(不同的数据库版本略有差异):
数据库页大小 每个字符类型字段实际最大长度(字节) 每行记录除大字段外其他字段总长度(字节)
4K   1900 2000
8K   3900 4000
16K   8000 8000
32K   8188 16000
除了每个字段的最大长度限制外,每条记录总长度不能大于页面大小的一半。如果系统中存在或者以后可能存在含有较长的字符串类型的表,建议该参数设置为 16 或者 32
示例:采用默认的 8K 进行初始化数据库,下面的例子可以看出即使创建表时字段长度为 8188,实际插入长度及每行记录的总长度依然受到页大小的限制。

 
--建表
create table t1 (c1 varchar2(8188,c2 varchar2(8188);
--测试单个字段插入长度
--插入数据
declare
v varchar2(8188);
v_sql varchar2(8188);
begin
v:=a;
for i in 1..3800
loop
v:=v||a;
end loop;
v_sql:=insert into t1(c1) VALUES (‘‘‘||v||‘‘‘);
print(v_sql);
execute immediate v_sql;
commit;
end

 

执行结果:
技术图片
 
技术图片
--插入数据
declare
v varchar2(8188);
v_sql varchar2(8188);
begin
v:=a;
for i in 1..4000
loop
v:=v||a;
end loop;
v_sql:=insert into t1(c1) VALUES (‘‘‘||v||‘‘‘);
print(v_sql);
execute immediate v_sql;
commit;
end

 

执行结果:
技术图片
 技术图片

 

--测试每行记录总长度
--插入数据
declare
v varchar2(8188);
v_sql varchar2(8188);
begin
v:=a;
for i in 1..1900
loop
v:=v||a;
end loop;
v_sql:=insert into t1(c1,c2) VALUES (‘‘‘||v||‘‘‘,‘‘‘||v||‘‘‘);
print(v_sql);
execute immediate v_sql;
commit;
end 
执行结果:
技术图片
技术图片

 

--插入数据
declare
v varchar2(8188);
v_sql varchar2(8188);
begin
v:=a;
for i in 1..2000
loop
v:=v||a;
end loop;

 

执行结果:
技术图片
 技术图片

 

2 日志文件大小
每个 DM 数据库实例必须至少有 2 个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用,日志文件在初始化实例后可以增加和扩大,小型 OA 系统建议设置为 2*256M,在线大型交易系统建议设置为 4*2048M
 
3 时区
选择时区前,需要确认操作系统时区和数据库时区一致,以避免操作系统上看到的时间,和数据库中的时间存在差异。建议使用北京时间+8:00。
 
4 字符串比较大小写敏感
为了兼容不同的数据库,达梦在初始化数据库的时候有一个参数,用来设置字符串比较是否大小写敏感,用于确定数据库对象及数据是否区分大小写,默认为区分,不可更改。建议 MYSQL 和 SQLSERVER 迁移过来的系统,使用大小写不敏感, ORACLE 迁移过来的系统,使用大小写敏感,以便和原来系统匹配。
示例一:对于表名或字段名,如果初始化数据库采用默认的大小写敏感,之后使用 DTS从 MYSQL 迁移到达梦数据库,由于 MYSQL 的不区分大小写,迁移到达梦时对象名会变成小写,例如查询表 t1 :
 
会报错“无效的表或视图名[T1]”,这是因为在大小写敏感的情况下达梦客户端会把 SQL 中的对象名默认转为大写导致,这时需要将 SQL 改写为:
Select * from t1;

 

才能正常运行,如果应用已经开发完成,修改应用工作量将很大,所以初始化数据库 时一定要确认该参数。
Select * from "t1";

 

 
 
示例二:对于字段的值,如果 t1 表中有如下数据 a ,A
Select * from t1 where c1=’a’;
在大小写敏感的库中只会出现一条记录:
a
在大小写不敏感的库中会出现两条记录:
a
A
需要根据自己的需求合理选择该参数。

 

5 字符集
 建议采用默认值 GB18030,如果需要国际字符可以采用 Unicode,GB18030 数字字母占 1 个字节,普通汉字占 2 个字节,部分繁体及少数民族文字占 4 字节,Unicode 在达梦中采用 UTF-8 编码格式,欧洲的字母字符占 1 到 2 个字节,亚洲的大部分字符占 3 个字节,附加字符为 4 个字节。如果只存储中文和字母数字,一般来说 GB18030 更节省空间些
 
实例一:下图为 GB18030 字符集下,不同字符所占的字节长度
--建表
create table t2(c1 varchar2(10)
--插入数据
insert into t2 values(a);
insert into t2 values();
insert into t2 values(?);
commit;
--查看所占字节长度
select c1,lengthb(c1),(ascii(c1)) from t2;

 

执行结果:
技术图片
 技术图片

 

实例二:下图为 Unicode 字符集下,不同字符所占的字节长度
--建表
create table t3(c1 varchar2(10))
--插入数据
insert into t3 values(a);
insert into t3 values();
insert into t3 values(?);
commit;
--查看所占字节长度
select c1,lengthb(c1),(ascii(c1)) from t3;

技术图片

 

 
6 VARCHAR 类型以字符为单位
该参数的作用是建表时 VARCHAR 的长度是按照字符计算还是字节计算,默认以字节为单位,即字段的长度单位按照字节计算,如果采用字符为单位,字段的长度单位按照字符来计算,不同的字符集会导致字段长度不一样,实际最大长度受到页大小的限制。建议采用默认以字节为单位,如果从 MYSQL 迁移的同时又不方便扩大表结构的长度,需要设置为以字符为单位。
 
示例:页大小 16K,Unicode 字符集,以字符为单位,VARCHAR2(4100)理论上可以存放 4100 个汉字,但由于一个汉字占 3 字节,实际受到 16K 页大小字节上限 8000 的限制。
--建表
create table t4(c1 varchar2(4100)
--插入
declare
v varchar2(8188);
v_sql varchar2(8188);
begin
v:=;
for i in 1..2000
loop
v:=v||;
end loop;
v_sql:=insert into t4(c1) VALUES (‘‘‘||v||‘‘‘);
print(v_sql);
execute immediate v_sql;
commit;
end
--查询字符长度和字节长度
select c1,length(c1),lengthb(c1) from t4;

 

 
执行结果:
技术图片
 技术图片
--超过页大小限制则插入失败
declare
v varchar2(8188);
v_sql varchar2(8188);
begin
v:=;
for i in 1..3000
loop
v:=v||;
end loop;
v_sql:=insert into t4(c1) VALUES (‘‘‘||v||‘‘‘);
print(v_sql);
execute immediate v_sql;
commit;
end

 

执行结果:
技术图片
 技术图片

 

7 改进字符串 HASH 算法
 
在之前的达梦版本上用的旧的 HASH 算法(大概 2014 年 10 月前后,具体时间未知),之后的版本默认使用新 HASH 算法,如果是从之前旧版本数据还原到新版本上使用,不能使用改进字符串 HASH 算法,其他情况使用改进字符串 HASH 算法。
 
示例一:从 ORACLE 迁移一个 24 小时在线交易型系统,数据量 300G 以上,表数量 500张以上,表含有少量 VARCHAR2(4000)字段,日增数据量 10 万条以上,建议:
 
簇大小:16                    #每次申请的页数,表存满了以后会一次性连续申请16个页
页大小:16K
日志文件大小:4*2048M
时区:+8:00
字符串比较大小写敏感:是
字符集:GB18030
VARCHAR 类型以字符为单位:否
改进字符串HASH算法:是

 

 
 
示例二:从 MYSQL 迁移一个电子政务系统,含大量 VARCHAR2(4000)字段,日增数据量 100 条,建议:
 
簇大小:16
页大小:32K
日志文件大小:2*256M
时区:+8:00
字符串比较大小写敏感:否
字符集:GB18030 (如果涉及非中英文字符选择 Unicode,VARCHAR 类型以字符为单位:如
果采用达梦 DTS 迁移选否,采用 SQL 脚本迁移选是)
改进字符串HASH算法:是

 

1.DM数据库参数说明

标签:unicode   cas   创建数据库   行记录   values   附加   media   页面   数据库   

原文地址:https://www.cnblogs.com/cqdba/p/11064804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!