环境说明:
版本:达梦 8.1.3.26
架构:达梦守护集群
问题说明:
dm_svc.conf配置问题,导致dexp逻辑备份失败。
问题现象:
创建测试表
SQL> create table t5(id int);
插入测试数据
insert into t5 values(1);
commit;
执行dexp,导出t5表:
dexp CJC/********:5238 file=t5.dmp log=t5.log directory=/home/dmdba/expdp tables=t5
dexp V8
----- [2023-12-22 17:37:32]导出表:t5 -----
[警告]Error Code:-2111,第1 行附近出现错误:
无效的列名[COMMENT]
整个导出过程共花费 0.015 s
成功终止导出, 但出现警告
问题分析:
看警告提示,初步怀疑表列名属于保留字?
但经查询id并不属于保留字。
select keyword from v$reserved_words where reserved='Y' and UPPER(keyword)='ID';
到底和保留字有没有关系呢?
保留字配置通常在dm.ini服务端,或dm_svc.conf客户端。
检查dm_svc.conf配置,发现配置了保留字
vi /etc/dm_svc.conf
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
XXX=192.168.0.100:5238
KEYWORDS=(DOMAIN,COMMENT,PERCENT)
##服务配置区
[XXX]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
解决方案:
尝试注释掉dm_svc.conf 文件中的KEYWORDS配置,或者将KEYWORDS配置放到最下面:
vi /etc/dm_svc.conf
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
XXX=192.168.0.100:5238
##KEYWORDS=(DOMAIN,COMMENT,PERCENT)
##服务配置区
[XXX]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
或者
vi /etc/dm_svc.conf
##全局配置区
TIME_ZONE=(480)
LANGUAGE=(cn)
XXX=192.168.0.100:5238
##服务配置区
[XXX]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
KEYWORDS=(DOMAIN,COMMENT,PERCENT)
再次执行dexp,可以正常导出表
dexp CJC/******:5238 file=t5.dmp log=t5.log directory=/home/dmdba/expdp tables=t5
dexp V8
----- [2023-12-22 17:38:41]导出表:t5 -----
导出模式下的对象权限...
表t5导出结束,共导出 1 行数据
整个导出过程共花费 0.035 s
成功终止导出, 没有出现警告
什么是服务名?
受oracle运维经验的影响,误认为达梦的dm_svc.conf类似于Oracle的tnsnames.ora,用于简化连接,隐藏端口号等,只有使用服务名连接数据库时,dm_svc.conf才起作用?
例如:disql cjc/***@xxx
但实际上dm_svc.conf的功能更复杂一些,并不只是用于连接。
比如修改dm_svc.conf配置文件中的LANGUAGE=(cn)配置,你会发现即使disql或其他客户端工具没有使用服务名连接数据库,提示语言也由英文变成中文了,所以个人认为dm_svc.conf配置文件除了用来连接以外,还起到环境变量的作用。
查看达梦官方文档描述:
https://eco.dameng.com/document/dm/zh-cn/ops/DW-installation-cluster.html
dm_svc.conf 是使用达梦数据库时非常重要的配置文件,它包含了达梦各接口和客户端工具所需要配置的一些参数。
通过它可以实现达梦各种集群的读写分离和均衡负载,且必须和接口/客户端工具位于同一台机器上才能生效。
初始 dm_svc.conf 文件由达梦安装时自动生成。
不同的平台生成目录有所不同,注意相应访问用户需要对该文件有读取权限。
32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于 /etc 目录。
dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。
全局配置区在前,可配置所有的配置项,服务配置区在后,以“[服务名]”开头,可配置除了服务名外的所有配置项。
服务配置区中的配置优先级高于全局配置区(服务配置区的相同配置项会覆盖全局配置区对应的配置项)。
从官方文档的描述可以看到,dm_svc.conf配置文件分为全局配置区和服务配置区,KEYWORDS需要配置在下面的服务配置区,如果误配置到全局配置区,先不讨论KEYWORDS参数是否生效,为何会影响到dexp呢?
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!