第一次做达梦数据库迁移的小伙伴,应该大多会遇到这个问题,网上查了比较多的方法,都介绍的零零散散的,希望这篇文章能够帮助到大家。
从目前我们遇到的情况来看,出现这个问题的原因主要是两个:
- 新建数据库实例的时候,没有开启大小写不敏感;
- 迁移数据库的时候,选择模式所有者是SYSDBA,而SYSDBA模式下面默认已经有了一个模式SYSDBA了,所以通过SYSDBA登录,对我们数据库执行sql语句的时候,就会报上面的错误;原因是因为达梦数据库设计就是这样的,支持一个用户管理多个模式(即数据库)。然后如果是默认的模式,执行sql的时候,数据库会默认在表名前加上”模式名.”,比如默认数据库是test,我们查询test输入的语句是select * from table1。系统执行的时候,默认执行的是select * from test.table1。
一、重新设置大小写不敏感
如果是第一个问题,大家可以通过使用系统自带的达梦数据库配置助手,删除数据库实例,再重新创建,具体操作如下:(注意一定要使用root用户)
1.1切换到/../dm8/tool目录下,运行./dbca.sh,弹出达梦数据库配置助手,选择“删除数据库实例”(备注:我们使用的是XShell远程连接的服务器,如果在Windows上面运行图形化软件,需要配套安装Xmanager,否则是出现不了下面这个界面的)
1.2选择开始,选中数据库实例,我们这里是DMSERVER,下一步
1.3点击完成,即可完成删除(如果提示说需要关闭达梦数据库服务,才能删除实例,可以再开启一个窗口,然后输入命令:systemctl stop DmServiceDMSERVER.service,停止服务)
1.4重新创建新实例有两种方式,第一种命令行方式,第二种还是用图形化方式,运行./dbca.sh
a)命令行方式,切换到/../dm8/bin目录,直接输入命令:
./dminit PATH=/app/dm8/data DB_NAME=DAMENG BLANK_PAD_MODE=1 CASE_SENSITIVE=0 CHARSET=1
参数说明:
PATH指定路径
DB_NAME数据库名称默认DAMENG
BLANK_PAD_MODE兼容模式是否兼容Oracle 1兼容,0不兼容,默认0
CASE_SENSITIVE标识符大小写敏感, Y、y、1 表示敏感;N、n、0 表示不敏感。默认值为 Y。
CHARSET/UNICODE_FLAG字符集选项。取值:0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。默认为 0
b)图形化方式,这个网上比较多,我们就贴两张图,其他都是按需下一步即可;
二、新创建用户,解决默认模式的问题
一开始我们说明了产生这个问题的原因,是因为一个用户下面多个默认,然后默认模式不是我们迁移的模式,就会引起这个问题。很多人会说,那我将我们默认的模式设为自己的数据库不就能解决嘛。对这样可以解决,但是治标不治本。达梦数据库,支持通过命令语句去设置默认的模式,但是如果服务器重启,需要重新进行设置(这个我们也是从网上找的帖子是这么说的)。其次,如果你们公司有多个数据库,那大家不得抢这个默认的模式,抢的打架。为每个数据库新创建一个管理用户,每个用户只管理一个模式(数据库),那这个肯定是默认模式呀。
好了,回归正题~~~
2.1现在我们来创建用户,输入如下命令:
创建DMDBA用户(这个用户名最好跟你的数据库名称一致)
CREATE USER DMDBA IDENTIFIED BY "密码";
赋于用户权限
GRANT RESOURCE,PUBLIC,VTI,SOI TO DMDBA;
GRANT BACKUP DATABASE,ADMIN JOB TO DMDBA;
2.2重新开始迁移
通过管理工具,新建模式DMDBA
设置所有者为我们新创建的用户名
指定模式的时候,选择DMDBA
最后下一步下一步完成迁移。
然后退出当前登录的SYSDBA用户,用创建的DMDBA用户登录达梦管理工具,执行语句就不会报错了。
好了,就到这里,温馨提醒一下,记得修改你们的连接池配置,改为DMDBA用户哈。