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

达梦数据库踩坑系统之服务名

IT小Chen 2023-12-25
2154

环境说明:

    版本:达梦 8.1.3.26
    架构:达梦守护集群

    问题说明:

      dm_svc.conf配置问题,导致dexp逻辑备份失败。

      问题现象:

      创建测试表

        SQL> create table t5(id int);

        插入测试数据

          SQL> insert into t5 values(1);
          SQL> 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呢?

                              ###chenjuchao 20231222###

                              文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论