暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

对DM8中CASE_SENSITIVE参数的理解

原创 bxf3000 2022-06-10
3043


[dmdba@server01 ~]$ dminit help

initdb V8

db version: 0x7000c

格式: ./dminit KEYWORD=value

例程: ./dminit PATH=/public/dmdb/dmData PAGE_SIZE=16

关键字 说明(默认值)

-------------------------------------------------------------------------------

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 


1、CASE_SENSITIVE参数说明。

参数说明:CASE_SENSITIVE为dminit工具的一个参数。决定数据库对大小的敏感与否,可选值:Y/N,1/0。


2、测试环境准备。

分别创建两个数据库:

TESTDB1 设置CASE_SENSITIVE值为0(即对大小写不敏感);

TESTDB2 设置CASE_SENSITIVE值为1(即对大小写敏感);


TESTDB1:实例名为TESTDB1,库名为TESTDB1,端口号为5235,大小写不敏感。

1.初始化数据库TESTDB1。

dminit path=/dmdata INSTANCE_NAME=TESTDB1 DB_NAME=TESTDB1

PORT_NUM=5235 CASE_SENSITIVE=0


2.注册数据库服务。

[root@server01 root]# cd /opt/dmdbms/script/root/

[root@server01 root]# ./dm_service_installer.sh -t dmserver -p testdb1 -dm_ini /dmdata/TESTDB1/dm.ini

Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicetestdb1.service to /usr/lib/systemd/system/DmServicetestdb1.service.

创建服务(DmServicetestdb1)完成

[root@server01 root]# systemctl status DmServicetestdb1

● DmServicetestdb1.service - DM Instance Service(DmServicetestdb1).

Loaded: loaded (/usr/lib/systemd/system/DmServicetestdb1.service; enabled; vendor preset: disabled)

Active: inactive (dead)

[root@server01 root]# systemctl enable DmServicetestdb1

[root@server01 root]# systemctl start DmServicetestdb1

[root@server01 root]# systemctl status DmServicetestdb1

● DmServicetestdb1.service - DM Instance Service(DmServicetestdb1).

Loaded: loaded (/usr/lib/systemd/system/DmServicetestdb1.service; enabled; vendor preset: disabled)

Active: active (running) since Fri 2022-04-22 21:32:28 CST; 9s ago

[root@server01 root]# su - dmdba

[dmdba@server01 ~]$ disql sysdba/SYSDBA@192.168.118.101:5235

服务器[192.168.118.101:5235]:处于普通打开状态

登录使用时间 : 6.467(ms)

disql V8

SQL>


TESTDB2:实例名为TESTDB2,库名为TESTDB2,端口号为5236,大小写敏感。

1.初始化数据库TESTDB2。

dminit path=/dmdata INSTANCE_NAME=TESTDB2 DB_NAME=TESTDB2 PORT_NUM=5236 CASE_SENSITIVE=1


2.注册数据库服务。

[root@server01 root]# cd /opt/dmdbms/script/root/

[root@server01 root]# ./dm_service_installer.sh -t dmserver -p testdb2 -dm_ini /dmdata/TESTDB2/dm.ini

Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicetestdb2.service to /usr/lib/systemd/system/DmServicetestdb2.service.

创建服务(DmServicetestdb2)完成

[root@server01 root]# systemctl enable DmServicetestdb2

[root@server01 root]# systemctl start DmServicetestdb2

[root@server01 root]# systemctl status DmServicetestdb2

● DmServicetestdb2.service - DM Instance Service(DmServicetestdb2).

Loaded: loaded (/usr/lib/systemd/system/DmServicetestdb2.service; enabled; vendor preset: disabled)

Active: active (running) since Fri 2022-04-22 21:42:59 CST; 15s ago

[root@server01 root]# su - dmdba

[dmdba@server01 ~]$ disql sysdba/SYSDBA@192.168.118.101:5236

服务器[192.168.118.101:5236]:处于普通打开状态

登录使用时间 : 6.591(ms)

disql V8

SQL> EXIT

修改2个数据库的服务名

[dmdba@server01 ~]$ vim /etc/dm_svc.conf

[dmdba@server01 ~]$ cat /etc/dm_svc.conf

TIME_ZONE=(480)

LANGUAGE=(cn)

dmsvc=(192.168.118.101:5234)

testdb1=(192.168.118.101:5235)

testdb2=(192.168.118.101:5236)


3、针对CASE_SENSITIVE参数的不同场景进行测试。


3.1测试大小写敏感对表名的影响。

1.在testdb1库进行如下操作:

disql sysdba/SYSDBA@testdb1

SELECT CASE_SENSITIVE();

CREATE TABLE "T1" ("ID" number,"NAME" varchar2(20));

INSERT INTO "T1" ("ID", "NAME") VALUES (1,'ZHANGSAN');

SELECT * FROM "t1";

2.在testdb2库进行如下操作:

disql sysdba/SYSDBA@testdb2

SELECT CASE_SENSITIVE();

CREATE TABLE "T1" ("ID" number,"NAME" varchar2(20));

INSERT INTO "T1" ("ID", "NAME") VALUES (1,'ZHANGSAN');

SELECT * FROM "t1";

SELECT * FROM "T1";

库1(0,不敏感)中查询“T1”和“t1”都能返回结果;

库2(1,敏感)中查询“T1”能返回结果,查询“t01”不能返回结果。

说明大小写敏感对表名有影响。


3.2测试大小写敏感对模式名的影响。

1.在testdb1库进行如下操作:

SQL> SELECT CASE_SENSITIVE();

CREATE SCHEMA "SCHEMA01" AUTHORIZATION SYSDBA;

drop schema "schema01" restrict;

SQL> drop schema "schema01" restrict;

操作已执行

已用时间: 69.001(毫秒). 执行号:802.

2.在testdb2库进行如下操作:

CREATE SCHEMA "SCHEMA01" AUTHORIZATION SYSDBA;

drop schema "schema01" restrict;

SQL> drop schema "schema01" restrict;

drop schema "schema01" restrict;

第1 行附近出现错误[-2103]:无效的模式名[schema01].

已用时间: 0.224(毫秒). 执行号:0.

drop schema "SCHEMA01" restrict;

SQL> drop schema "SCHEMA01" restrict;

操作已执行

已用时间: 43.685(毫秒). 执行号:502.

库1(0,不敏感)中删除 “schema01” 成功;

库2(1,敏感)中删除“schema01” 删除失败,删除 “SCHEMA01” 删除成功。

说明大小写敏感对表名有影响。


3.3测试大小写敏感对字段名设置的影响。

1.在testdb1库进行如下操作:

disql sysdba/SYSDBA@testdb1

SELECT CASE_SENSITIVE();

CREATE TABLE "T1" ("ID" number,NAME varchar2(20));

INSERT INTO "T1" values (01,'ZHANGSAN');

SELECT * FROM "T1";

CREATE TABLE "T2" ("ID" number,name varchar2(20));

INSERT INTO "T2" values (01,'ZHANGSAN');

SELECT * FROM "T2";

CREATE TABLE "T3" ("ID" number,"NAME" varchar2(20));

INSERT INTO "T3" values (01,'ZHANGSAN');

SELECT * FROM "T3";

CREATE TABLE "T4" ("ID" number,"name" varchar2(20));

INSERT INTO "T4" values (01,'ZHANGSAN');

SELECT * FROM "T4";

2.在testdb2库进行如下操作:

disql sysdba/SYSDBA@testdb2

SELECT CASE_SENSITIVE();

CREATE TABLE "T1" ("ID" number,NAME varchar2(20));

INSERT INTO "T1" values (01,'ZHANGSAN');

SELECT * FROM "T1";

CREATE TABLE "T2" ("ID" number,name varchar2(20));

INSERT INTO "T2" values (01,'ZHANGSAN');

SELECT * FROM "T2";

CREATE TABLE "T3" ("ID" number,"NAME" varchar2(20));

INSERT INTO "T3" values (01,'ZHANGSAN');

SELECT * FROM "T3";

CREATE TABLE "T4" ("ID" number,"name" varchar2(20));

INSERT INTO "T4" values (01,'ZHANGSAN');

SELECT * FROM "T4";

说明:在大小写不敏感的库中,建表时创建的字段名大小写会自动区分。

在大小写敏感的库中,建表时创建的字段名大小写除非字段名用双引号引起来,否则都会按照大写来处理。


3.4测试大小写敏感对基于字段名做DML操作时的影响。

1.在testdb1库进行如下操作:

SELECT CASE_SENSITIVE();

CREATE TABLE "T3" ("ID" number,"NAME" varchar2(20));

INSERT INTO "T3" ("id","name") values (02,'LISI');

select * from "T3";

2.在testdb2库进行如下操作:

SELECT CASE_SENSITIVE();

CREATE TABLE "T3" ("ID" number,"NAME" varchar2(20));

INSERT INTO "T3" ("id","name") values (02,'LISI');

INSERT INTO "T3" ("ID","NAME") values (02,'LISI');

select * from "T3";

说明:大小写敏感时,往某张表插入数据,会严格判断字段名大小写是否正确;大小写不敏感时,往某张表插入数据,字段名大小写是否一致对操作无影响。


3.5测试大小写敏感对字段值的影响。

1.在testdb1库进行如下操作:

SELECT CASE_SENSITIVE();

CREATE TABLE "T4" ("ID" number,"NAME" varchar2(20));

INSERT INTO "T4" ("ID","NAME") values (01,'ZHANGSAN');

select * from "T4";

DELETE FROM "T4" WHERE "NAME"='zhangsan';

2.在testdb2库进行如下操作:

SELECT CASE_SENSITIVE();

CREATE TABLE "T4" ("ID" number,"NAME" varchar2(20));

INSERT INTO "T4" ("ID","NAME") values (01,'ZHANGSAN');

select * from "T4";

DELETE FROM "T4" WHERE "NAME"='zhangsan';

DELETE FROM "T4" WHERE "NAME"='ZHANGSAN';

说明:大小写敏感库的中,以字段值为判断依据进行delete where操作时,会严格判断字段名大小写是否一致;大小写不敏感的库中,以字段值为判断依据进行delete where操作时,操作不受字段值大小写是否一致的影响。


4、关于对CASE_SENSITIVE参数用法的总结。

  • 当CASE_SENSITIVE值为0,即大小写不敏感时。模式名、表名、字段名、字段值,大小写会自动区分,不用单独加双引号表示小写,查询添加中不区分大小写字符,查询结果中字段值也不区分大小写字符。
  • 当CASE_SENSITIVE值为1,即大小写敏感时。模式名、表名、字段名、字段值,默认小写会转为大写,除非双引号括起来表示小写,对于查询条件中是区分大小写字符的,查询结果中字段值也是区分大小写字符的。



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

最后修改时间:2022-06-21 09:09:04
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论