zoukankan      html  css  js  c++  java
  • 1.DM数据库参数说明

    达梦数据库初始化实例后初始化参数无法修改,如果要调整必须重新初始化库,所以为了移植、开发、维护的方便,根据应用特征合理规划初始化参数尤为重要,确定后形成安装规范项目组成员保持一致,如果初始化参数不一致的数据库实例间的物理备份、逻辑备份等将不能互用,切记!下面对一些重要的初始化参数进行详细说明:
    初始化参数  对数据库使用的影响
    页大小(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算法:是
  • 相关阅读:
    腰颈椎病康复运动治疗
    丹田呼吸简易教程
    丹田呼吸法
    GNU 汇编语言
    openssl命令简介
    AES128 + cbc + pkcs7 编码C语言实现
    一些linux下的性能监测工具
    git 基本使用教程
    【译】UI设计基础(UI Design Basics)--导航(Navigation)(六)
    【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)
  • 原文地址:https://www.cnblogs.com/cqdba/p/11064804.html
Copyright © 2011-2022 走看看