当前位置: 首页 > news >正文

达梦数据库常用初始化参数与客户端工具使用

文章目录

  • 1概述
  • 2初始化参数
    • 2.1CASE_SENSITIVE参数
      • 2.1.1对表名的影响
      • 2.1.2对表中字段名的影响
      • 2.1.3对表中数据的影响
      • 2.1.4与Oracle、MySQL异同
    • 2.2CHARSET与LENGTH_IN_CHAR参数
    • 2.3BLANK_PAD_MODE参数
  • 3数据库客户端
    • 3.1DISQL
    • 3.2达梦管理工具(DM Manager)
    • 3.3百灵(SQLark)

1概述

在部署数据库前我们需要确认数据库的字符集CHARSET和大小写敏感CASE_SENSITIVE这两个参数,在2024年第二季度以前的版本还可以设置LENGTH_IN_CHAR(VARCHAR类型长度是否以字符为单位)参数,这些初始化参数在实例初始化后不可修改,需要重新初始化再使用逻辑还原或者使用DTS工具进行迁移。不同的参数值会有不一样的现象,在初始化前需要先确认清楚需求。

2初始化参数

2.1CASE_SENSITIVE参数

CASE_SENSITIVE参数用来指定是否大小写敏感,默认为1表示大小写敏感;0为大小写不明感。接下来看一下不同的CASE_SENSITIVE对表名、字段名、字段值的影响。
初始化一个大小写不敏感的数据库实例:

cd /home/dmdba/dmdbms/bin
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 CASE_SENSITIVE=0 log_size=2048 db_name=dmdba instance_name=dmdba SYSDBA_PWD="密码" SYSAUDITOR_PWD="密码" PORT_NUM=5236

再初始化一个大小写敏感的数据库实例:

cd /home/dmdba/dmdbms/bin
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 CASE_SENSITIVE=1 log_size=2048 db_name=dmdb_test instance_name=dmdb_test SYSDBA_PWD="密码" SYSAUDITOR_PWD="密码" PORT_NUM=15236

可以都注册为服务,注册服务需要使用root用户执行:

cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmserver -p dmdb_test -dm_ini /dmdata/dmdb_test/dm.ini

用dmdba用户启动实例:

su - dmdba
cd /home/dmdba/dmdbms/bin
./DmServicedmdb_test start

2.1.1对表名的影响

在大小写不敏感(CASE_SENSITIVE=0)的实例中,创建一张表并插入几条测试数据:

CREATE TABLE TEST.Aa1
(
"FID" INT,
"FDESC" VARCHAR2(200)
);
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'A');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'a');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'Aa');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'aA');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'aa');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'AA');

在DM管理工具可以看到:
在这里插入图片描述

查询表中数据:
在这里插入图片描述

现在进行验证:
在大小写不敏感(CASE_SENSITIVE=0)的实例中:表名不区分大小写,大小写混用也可以查出来,无需与创建的表名大小写一致。

select * from TEST.Aa1;
select * from TEST.aa1;
select * from TEST.AA1;
select * from TEST."aa1"; -- 也可以查出来
select * from TEST."AA1";-- 也可以查出来

在这里插入图片描述

此外,除了表名其他数据库对象也不区分大小写,比如我创建了一个全大写的序列:TEST_SEQ1,然后使用以下大小写混合或者全小写的方式都可以访问到

select TEST.test_seq1.NEXTVAL;
select test.test_seq1.NEXTVAL;
select test.test_seq1.nextval;

在这里插入图片描述

在大小写敏感(CASE_SENSITIVE=1)的实例中,也同样创建一张相同的表并插入几条测试数据:

CREATE TABLE TEST.Aa1
(
"FID" INT,
"FDESC" VARCHAR2(200)
);
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'A');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'a');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'Aa');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'aA');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'aa');
insert into TEST.Aa1(FID, FDESC) VALUES(1, 'AA');

然后再DM管理工具可以看到会在创建的时候将表名转换成大写:
在这里插入图片描述

并且在查询的时候也会自动将select from中的对象名转换为大小所以可以查到对应的表:

select * from TEST.AA1;
select * from TEST.Aa1;
select * from TEST.aa1;

这些语句都可以查到内容:
在这里插入图片描述

如果只想查小写的表名那么就在表名前后加一个英文的双引号:
select * from TEST.“aa1”; – 加了双引号表示不做转换
由于是大小写敏感所以这种查不出来:
在这里插入图片描述

如果再创建一个全是小写的表:

CREATE TABLE TEST."aa1"
(
"FID" INT,
"FDESC" VARCHAR2(200)
);

发现可以创建成功并没有提示表名冲突:
在这里插入图片描述

此时可以看到有两张大小写不一致的表:
在这里插入图片描述

然后下面的查询才能成功执行:

select * from TEST."aa1";

总结:在大小写不敏感(CASE_SENSITIVE=0)时,表名不区分大小写,即使表名加了双引号还是不区分大小写;在大小写敏感(CASE_SENSITIVE=1)时,在执行查询的时候会自动转换为大写表名,不加双引号查询时体验上是一致的,如果加了双引号则必须与该表大小写一致才能查询出结果。

2.1.2对表中字段名的影响

在大小写不敏感(CASE_SENSITIVE=0)的实例中,创建一张表:

CREATE TABLE TEST.Aa2
(
"FID" INT,
"FDESC" VARCHAR2(200),
C1  VARCHAR2(200),
c1 VARCHAR2(200)
);

提示c1已存在:
在这里插入图片描述

如果在字段中添加双引号会不会成功呢?

CREATE TABLE TEST.Aa2
(
"FID" INT,
"FDESC" VARCHAR2(200),
"C1"  VARCHAR2(200),
"c1" VARCHAR2(200)
);

在这里插入图片描述

可以看到还是失败,因为大小写不敏感所以c1和C1其实是相同的所以提示字段已存在。
在查询的时候字段也是不区分大小的:

select fdesc,"FdEsC" from TEST.Aa1;

在这里插入图片描述

在大小写敏感(CASE_SENSITIVE=1)的实例中,创建一张表:

CREATE TABLE TEST.Aa2
(
"FID" INT,
"FDESC" VARCHAR2(200),
C1  VARCHAR2(200),
c1 VARCHAR2(200)
);

提示C1已存在:
在这里插入图片描述

为什么提示的是大写的C因为大小写敏感的情况下,对象名会先转换为大写再进行后续的操作。

CREATE TABLE TEST.Aa2
(
"FID" INT,
"FDESC" VARCHAR2(200),
"C1"  VARCHAR2(200),
"c1" VARCHAR2(200)
);

在这里插入图片描述

可以看到在大小写敏感的时候,如果字段加了引号就不会转换为大写了,字段c1和C1是不一样的,查询的时候也需要加上引号才能区分,不然查出来的就可能不是你想要的:
在这里插入图片描述

这样才能正确查出来想要的字段:
在这里插入图片描述

总结:在大小写不敏感(CASE_SENSITIVE=0)时,字段名不区分大小写,大写一致则认为是相同的字段;在大小写敏感(CASE_SENSITIVE=1)时,在执行查询的时候会自动转换为大写字段名,如果加了双引号则必须与该表大小写一致才能查询出结果。

2.1.3对表中数据的影响

在两个实例中均创建了TEST.Aa1表,其中的全部数据如下:
在这里插入图片描述

在两个实例中均查询fdesc等于aa的记录:

select * from TEST.Aa1 where fdesc = 'aa';

在大小写不敏感(CASE_SENSITIVE=0)的实例中,表中的数据是不区分大小写的,所以查询aa的时候可以查到Aa、aA、aa、AA:
在这里插入图片描述

在大小写敏感(CASE_SENSITIVE=1)的实例中,表中的数据是严格区分大小写的,查询aa的时候只能查到aa:
在这里插入图片描述

2.1.4与Oracle、MySQL异同

在MySQL中大小写敏感是使用lower_case_table_names进行指定的,安装在在Windows环境下默认为1,Linux系统下默认为0。比如在Linux环境下不指定这个参数的话表名是区分大小写的,字段名和表中数据是不区分大小写的,因此在如果需要从MySQL(postgresql也一样)迁移数据过来的话需要留意CASE_SENSITIVE是否要需要设置为0。
在Oracle中表名、字段名、函数名是不区分大小写的,但是表中的数据是区分大小写的,也就是说查某个字段为a的记录可以查出A和a两种记录。因此,如果源库是Oracle的话需要设置CASE_SENSITIVE=1。
SQL Server也和Oracle一样表名、字段名、函数名是不区分大小写的,但是表中的数据是区分大小写的。

2.2CHARSET与LENGTH_IN_CHAR参数

CHARSET是用来指定数据库的字符集,初始化后不可修改可选3个值,分别是0:GB18030(GBK,默认值);1:UTF-8;2:EUC-KR(韩文字符集)。
不同的字符集可以存储的字符范围不一样,占用的字节长度也不一样以及字符默认排序也不一样。需要看应用场景,如果会用到一些生僻字或者特殊的表情符号比如emoji就需要使用UTF-8,如果涉及到迁移的话要与原库一致。
LENGTH_IN_CHAR表示是否以字符为单位计算字段长度,目前已废弃,无法进行设置,LENGTH_IN_CHAR只能为0,表示以字节为单位计算长度,也就是说建表的时候指定的长度。由于这个参数不能设置了,所以如果是旧版本的数据并且LENGTH_IN_CHAR为1那么就不能通过逻辑备份和物理备份进行迁移到新版的数据库了,因为长度计算方式不一样迁移的时候可能会报错字段超长,只能用DTS在迁移的时候进行批量放大字段长度,具体要放大多少倍还要看是什么字符集。
创建一个字符集为UTF-8的实例:

cd /home/dmdba/dmdbms/bin
./dminit path=/dmdata page_size=32 extent_size=32 charset=1 CASE_SENSITIVE=0 log_size=2048 db_name=dmdba_c1 instance_name=dmdba_c1 SYSDBA_PWD="密码" SYSAUDITOR_PWD="密码" PORT_NUM=15236

再创建一个字符集为GBK的数据库实例:

cd /home/dmdba/dmdbms/bin
./dminit path=/dmdata page_size=32 extent_size=32 charset=0 CASE_SENSITIVE=0 log_size=2048 db_name=dmdba_c0 instance_name=dmdba_c0 SYSDBA_PWD="密码" SYSAUDITOR_PWD="密码" PORT_NUM=25236

使用前台的方式启动就不用注册服务了:

dmserver /dmdata/dmdba_c0/dm.ini
dmserver /dmdata/dmdba_c1/dm.ini

在两个实例上创建一张测试表:

CREATE TABLE "TEST"."TABLE_1"("C1" VARCHAR(5),"C2" VARCHAR(6));

在字符集为GBK(CHARSET=0)的实例,我们往表中插入一条数据:
在这里插入图片描述

可以看到非汉字的字符串,如果字段长度是5的话可以插入5个字符,如果是汉字的话是不能插入5个字符的,所以汉字等特殊字符和英文、数字字符占用的长度是不一样的。我们使用lengthb函数可以判断VARCHAR字段的内容实际占用的字节大小,使用length函数可以查询VARCHAR字段的字符个数。
插入以下3行数据:

insert into TEST.TABLE_1("C1", "C2") VALUES('1','你');
insert into TEST.TABLE_1("C1", "C2") VALUES('12','你好');
insert into TEST.TABLE_1("C1", "C2") VALUES('123','你好啊');

执行以下查询可以看到在GBK字符集下,汉字占用两个字节:
在这里插入图片描述

在字符集为UTF-8(CHARSET=1)的实例,我们同样创建并插入数据:发现前两条可以插入,但是字段长度为6的C2字段不能插入3个中文字符
在这里插入图片描述

说明字符集不一样汉字占用不一样的字节长度,建字段的时候长度是以字符为单位计算的,查看表中各个字段占用的字节长度:
在这里插入图片描述

可以看到在字符集为UTF-8时,一个汉字字符占用3个字节长度,所以3个字符占用9个字节自然就不能插入6个字节长度限制的c2字段中。

总结:如果要存生僻字等特殊字符,字符集要选用UTF-8;如果需要进行数据迁移,那么需要关注原库的LENGTH_IN_CHAR参数是否为1,如果是1也就是用字符计算字段长度的话就不能要备份还原的方式进行迁移,需要使用DTS进行迁移,迁移的时候可以选择放大的倍数,并配置映射关系,配置VARCHAR放大倍数,具体倍数还要看是什么字符集,如果是原库是GBK字符集,则需要放大2倍的长度,如果是UTF-8则放大3倍。
在这里插入图片描述
在这里插入图片描述

2.3BLANK_PAD_MODE参数

BLANK_PAD_MODE参数是设置空格填充模式,数据库初始化设置的值可以通过以下命令进行查询:

select '空格兼容模式',para_value from v$dm_ini where para_name='BLANK_PAD_MODE';

默认值为0,表示比较字符时忽略末尾空格的差异,那么“a”和“a ”是相等的;BLANK_PAD_MODE=1时表示会区分末尾的空格,也就说比较的时候“a”和“a ”是不一样的。
创建一个BLANK_PAD_MODE=0的实例:

cd /home/dmdba/dmdbms/bin
./dminit path=/dmdata page_size=32 extent_size=32 BLANK_PAD_MODE=0 charset=1 CASE_SENSITIVE=0 log_size=2048 db_name=dmdba_b0 instance_name=dmdba_b0 SYSDBA_PWD="密码" SYSAUDITOR_PWD="密码" PORT_NUM=15236

再创建一个BLANK_PAD_MODE=1的实例:

cd /home/dmdba/dmdbms/bin
./dminit path=/dmdata page_size=32 extent_size=32 BLANK_PAD_MODE=1 charset=0 CASE_SENSITIVE=0 log_size=2048 db_name=dmdba_b1 instance_name=dmdba_b1 SYSDBA_PWD="密码" SYSAUDITOR_PWD="密码" PORT_NUM=25236

使用前台的方式启动就不用注册服务了:

dmserver /dmdata/dmdba_b0/dm.ini
dmserver /dmdata/dmdba_b1/dm.ini

在两个实例中创建测试表并插入数据:

CREATE TABLE "TEST_B"("C1" VARCHAR(5));insert into SYSDBA.TEST_B("C1") VALUES('aa');
insert into SYSDBA.TEST_B("C1") VALUES(' aa');
insert into SYSDBA.TEST_B("C1") VALUES(' aa ');
insert into SYSDBA.TEST_B("C1") VALUES('aa ');
insert into SYSDBA.TEST_B("C1") VALUES('a a');

然后执行以下查询:

select c1,'('||c1||')' from TEST_B where c1='aa';

在BLANK_PAD_MODE=0的实例:可以看到末尾有空格也查出来了
在这里插入图片描述

在BLANK_PAD_MODE=1的实例:末尾有空格的不会查出来
在这里插入图片描述

既然BLANK_PAD_MODE=1的实例中,“a”和“a ”是相等的,那主键设置的时候会不会有问题。我们直接在BLANK_PAD_MODE=0的实例中,把TEST_B的C1设置为主键列:
在这里插入图片描述

可以看到会提示违反唯一性约束,因为认为表中已有的数据:“aa”和“aa ”是相同的,所以不能设置唯一性约束。因此在迁移数据的时候也要关注这个参数。
在Oracle中默认是区分“a”和“a ”的,所以涉及到从Oracle迁移数据到达梦的话除了修改兼容Oracle的参数,BLANK_PAD_MODE也要设置为1。

3数据库客户端

3.1DISQL

disql也是一种客户端工具,只是没有可视化的图形操作界面而是一款命令行交互客户端。disql命令行工具在数据库软件安装路径的bin目录下。
如果添加了以下环境变量的话就不需要每次都进入bin目录调用disql了:

export DM_HOME=/home/dmdba/dmdbms
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin

连接数据库命令格式:disql username/password@IP:PORT,如果密码含有特殊字符的情况下,需要使用双引号将密码包含进来,同时外层再使用单引号进行转义。以用户名 SYSDBA,密码TEST@2025并且数据库实例和端口号为本机的5236端口为例,则输入:

disql SYSDBA/'"TSET@2025"'

在这里插入图片描述

不指定IP和端口号默认连接本地的5236实例。
误输入某个字符后发现退格键和Delete键都无法删除字符,可以使用以下方式重新输入:
(1)Ctrl+U:清空本行;
(2)Ctrl+退格键(Backspace):删除单个字符;
进入disql命令行直接输入需要执行的SQL语句然后回车便可看到执行结果:
在这里插入图片描述

执行脚本:待执行的脚本需要先进行授权给dmdba用户,例如需要执行/temp/AutoParaAdj5.1_dm8.sql脚本:

chown -R dmdba:dinstall /temp/AutoParaAdj5.1_dm8.sql

方法1:文件名直接作为disql参数进行执行:
需要注意的是Linux系统中需要在路径前面加一个`进行转义,而Windows平台不需要转义,如下:(注意执行完成后还是处于sql命令行模式,需要使用quit进行退出)

disql SYSDBA/'"输入你的密码"' \`/temp/AutoParaAdj5.1_dm8.sql

方法2:使用sql命令行进行执行:
(1)使用`:

`/temp/AutoParaAdj5.1_dm8.sql

(2)使用start:

start /temp/AutoParaAdj5.1_dm8.sql

disql连接成功后,在sql命令行输入host回车就会进入系统命令行,可以执行系统命令,但是只能在本机执行,并不不能在数据库服务器所在机器上执行系统命令。
在这里插入图片描述

执行单条系统命令:直接在sql命令行:host+要执行的系统命令。

3.2达梦管理工具(DM Manager)

DM Manager是达梦自带的图像化管理工具,在安装达梦数据库的时可以按需勾选,例如选择“典型安装”之后会自动安装,也可以单独安装这个客户端工具,Windows就不必多说安装后直接在系统搜索栏可以搜索并打开,在Linux要打开DM Manager工具的话在$DM_HOME/tool下可以打开:

su - dmdba
cd $DM_HOME/tool
./manager

在这里插入图片描述

连接数据库:点击“新建连接”按钮,输入连接信息
在这里插入图片描述
在这里插入图片描述

执行SQL:选中数据库后,点击“新建查询”,在打开的查询窗口里面输入需要执行的SQL语句,点击“执行”按钮即可执行选中的SQL或者整个窗口的SQL语句。在下方的“结果集”列表可以查看到对应的执行结果信息。
在这里插入图片描述

由于达梦数据库默认是需要手动提交事务的,所以执行修改操作有需要commit,或者点击一下“提交”按钮,也可以直接将上方的下拉框选择自动提交事务。
执行脚本:点击查询窗口上方的“执行脚本”按钮,选择需要执行的脚步文件便可执行,在下方的结果窗口就可以看到执行结果。
在这里插入图片描述

3.3百灵(SQLark)

SQLark又叫百灵连接,是达梦推出的另一款免费的数据库开发管理工具,专为信创场景设计,除了拥有像DM管理工具的数据库对象管理、执行SQL、导入导出等功能,还支持数据迁移、AI协作、ER图功能,还支持连接Oracle、MySQL、PostgreSQL数据库,功能更强大。可以直接在https://www.sqlark.com/进行下载。
连接数据库:点击左上角的连接,选择达梦数据库,输入账号密码等连接信息进行连接。
在这里插入图片描述
在这里插入图片描述

执行SQL:选中数据库,点击“新建查询”按钮,在查询窗口输入SQL后点击“执行”按钮即可执行选中的SQL或者整个窗口的SQL语句。在下方的“结果集”列表可以查看到对应的执行结果信息。
在这里插入图片描述
在这里插入图片描述

执行脚本:点击查询窗口上方的“执行脚本”按钮,选择需要执行的脚步文件:

在这里插入图片描述
在这里插入图片描述

然后点击“执行按钮”执行脚本文件
在这里插入图片描述

与DM管理工具一样需要手动提交事务的,所以执行修改操作有需要commit,或者点击一下“提交”按钮,也可以直接将上方的下拉框选择自动提交事务。

达梦社区地址:https://eco.dameng.com/

http://www.dtcms.com/a/445709.html

相关文章:

  • 命令行安装 MySQL 8.4.6
  • 数据库--数据库约束和表的设计
  • [Windows] 磁盘映像管理工具:WimTool v1.7.2025.1001
  • 公司自己做网站晋城企业网站建设价格
  • 【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
  • leetcode 79 单词搜索
  • 站长之家官网查询电子商务网站建设与实践上机指导
  • 二叉树实战笔记:结构、遍历、接口与 OJ 实战
  • 哈尔滨php网站开发公司设置网站默认首页
  • 华为OD机试C卷 - 分披萨 - 贪心 DFS - (Java C++ JavaScript Python)
  • 仿照STM32 HAL库设计思想使用FreeRTOS实现异步非阻塞式设备驱动
  • 铜川做网站电话网页设计规范
  • ssc-FinLLM 金融大模型 相关链接
  • 二叉排序树(建树、查找、删除)
  • Linux学习笔记--i2cget 命令
  • 网站建设的标签指的是响应式网页设计图片
  • 用 CodeBuddy CLI + Prompt,从零到可运行:前后端混合管理系统的高效实战
  • 电源——电荷泵详解
  • 榆林国贸网站建设网站的关键词挖掘方式
  • 从思路到落地:用 Redis 搭建超低延迟在线特征存储库
  • sosdp
  • 快速了解BERT
  • 在线Deflate压缩工具(支持添加zlib头及无zlib头模式)
  • 第14节-增强表结构-ALTER-TABLE
  • Ubuntu之apt更新源
  • T527 IR-RX 调试
  • 低成本能谱仪设计:基于分立器件的模拟前端与数字后端实现方案
  • 计算机视觉的数据收集与标注
  • LeetCode:92.最小路径和
  • 百度竞价推广属于什么广告广东网站se0优化公司