注册
DRS工具同步迁移SQL server-dm
专栏/技术分享/ 文章详情 /

DRS工具同步迁移SQL server-dm

崔小卡 2026/10/10 167 1 0
摘要

1.sqlserver端配置

1.1开启远程连接

Sqlserver配置管理器-sqlserver网络配置-mssqlserver的协议-tcp/ip修改为启用
Sqlserver配置管理器-sqlserver服务-重启sqlserver服务

1.2 开启cdc日志

alter database drstest set recovery FULL;

USE drstest
GO
EXEC sys.sp_cdc_enable_db
GO;

1.3 创建同步用户dmdrs,执行辅助脚本,并赋权

在库drstest中执行
CREATE LOGIN dmdrs WITH PASSWORD = 'Dameng_123';
create user dmdrs for login dmdrs;

在dmdrs目录script下
ddl_sql_mss_table.sql、ddl_sql_mss_trigger.sql、ddl_sql_mss_trigger_cdc.sql
其中ddl_sql_mss_table.sql共创建9张表,DRS_$DDL_LSN若创建失败,可手动执行create语句

--源库权限
-- ## 装载相关权限
-- 需要非同步用户下待装载表/序列上的查询权限
GRANT SELECT ON drstest.dbo.tab1 TO dmdrs;
GRANT SELECT ON drstest.dbo.tab2 TO dmdrs;

-- ## 同步相关权限
-- 源DMDRS创建辅助表和触发器的权限以及开启CDC权限
EXEC sp_addrolemember 'db_ddladmin', 'DMDRS';
GRANT ALTER ON SCHEMA::dbo TO DMDRS;
-- 需要查询事务日志的权限
GRANT VIEW SERVER STATE TO DMDRS;
-- 需要查询DBCC LOGINFO的权限
EXEC sp_addsrvrolemember 'DMDRS', 'sysadmin';


--目标库权限
-- ## 基础权限
-- 启动时需要在目标数据库中创建辅助表和辅助存储过程
EXEC sp_addrolemember 'db_ddladmin', 'DMDRS';
GRANT ALTER ON SCHEMA::dbo TO DMDRS;
-- 连接数据库时需要创建会话权限(用户创建时默认授予)
GRANT CONNECT TO DMDRS;
-- ## 装载与同步相关权限
-- 需要非同步用户模式下已存在的待同步表/序列的操作权限
GRANT INSERT ON drstest.dbo.tab1 TO DMDRS;
GRANT UPDATE ON drstest.dbo.tab1 TO DMDRS;
GRANT DELETE ON drstest.dbo.tab1 TO DMDRS;
GRANT SELECT ON drstest.dbo.tab1 TO DMDRS;

GRANT INSERT ON drstest.dbo.tab2 TO DMDRS;
GRANT UPDATE ON drstest.dbo.tab2 TO DMDRS;
GRANT DELETE ON drstest.dbo.tab2 TO DMDRS;
GRANT SELECT ON drstest.dbo.tab2 TO DMDRS;
-- 需要非同步用户模式下未存在的表/序列的数据的操作权限。也可以在目标同步表创建后,同上行所述单独为每张表赋予操作权限
GRANT INSERT ON SCHEMA::dbo TO DMDRS;
GRANT UPDATE ON SCHEMA::dbo TO DMDRS;
GRANT DELETE ON SCHEMA::dbo TO DMDRS;
GRANT SELECT ON SCHEMA::dbo TO DMDRS;
-- 需要非同步用户模式下对象的DDL权限
EXEC sp_addrolemember 'db_ddladmin', 'DMDRS';
GRANT ALTER ON SCHEMA::dbo TO DMDRS;

1.4 配置ODBC

1)控制面板-管理工具-设置odbc数据源(64位)中,设置odbc
2)系统DSN和用户DSN中进行相同的配置
3)添加-选择SQL Server Native Client 11.0-输入名称-输入服务器(local)-选择用户名密码登录-选择默认库drstest-选择语言(简体中文)
测试连接-测试成功

1.5 配置环境变量

1)在Windows桌面或“开始”菜单,右键单击“此电脑”,选择“属性”。
2)在打开的“设置”窗口中,选择“高级系统设置”。
3)在弹出的“系统属性”对话框的“高级”选项卡中,选择“环境变量”。
4)在“环境变量”对话框中,选择“系统变量”中系统变量“Path”,再选择“系统变量”下的“编辑”。
5)在“环境变量”对话框中,选择“用户变量”中用户变量“Path”,再选择“用户变量”下的“编辑”。
6)在“编辑环境变量”表格中,填写“SQL Server Native Client 11.0的ODBC驱动路径”。
7)重启服务器使环境变量配置生效

1.6 配置drs.xml

<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>Manager模块的端口号</mgr_port>
        <siteid>站点号</siteid>
    </base>
    <cpt>
        <name>CPT模块的名称</name>
        <login>
            <dbtype>源数据库的类型</dbtype>
            <driver>ODBC版本</driver>
            <server>源数据库的服务名或IP地址</server>
            <dbname>源数据库的库名</dbname>
            <user>源数据库的登录用户名</user>
            <pwd>源数据库的登录密码</pwd>
        </login>
        <send>
            <ip>下一级DMDRS服务的IP地址</ip>
            <port>下一级DMDRS服务的Manager模块的端口号</port>
            <target_name>下一级DMDRS服务的接收模块的名称</target_name>
            <map>
                <item>对象黑/白名单和映射</item>
            </map>
        </send>
    </cpt>
</drs>

1.7 配置DrsService.xml

dmdrs5/bin目录下创建DrsService.xml
CONF_PATH=C:\dmdrs5\bin\drs.xml
SERVICE_NAME=DrsService

1.8 注册并启动drs服务

将svc_win32/script下drs相关的四个bat文件复制到bin目录下
以管理员身份执行
DrsServiceInstall.bat 注册drs服务
DrsServiceStart.bat 启动drs服务
DrsServiceStop.bat 停止drs服务
DrsServiceUninstall.bat 卸载drs服务

2.达梦端配置

2.1开启归档

alter database mount;
alter database archivelog;
alter database add archivelog 'DEST=C:\dmdbms\data\arch,TYPE=LOCAL,FILE_SIZE=512,SPACE_LIMIT=10240';
alter database open;
call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);

2.2 创建同步用户dmdrs,执行辅助脚本,并赋权

create user DMDRS IDENTIFIED BY "Dameng_123";

辅助脚本在dmdrs目录script下
ddl_sql_dm8.sql

--目标库最小权限
-- ## 基础权限
-- 插入、删除、更新数据时,需要数据操作权限
GRANT PUBLIC TO DMDRS;
-- 启动时需要在目标数据库中创建辅助表和辅助存储过程
GRANT RESOURCE TO DMDRS;
-- 需要查询数据库的相关参数信息、系统表字典信息
GRANT SOI,VTI TO DMDRS;
-- 需要创建会话权限
GRANT CREATE SESSION TO DMDRS;
-- ## 装载与同步相关权限
-- 需要非同步用户模式下已存在的待同步表/序列的操作权限
GRANT INSERT ON DRSTEST.TAB1 TO DMDRS;
GRANT UPDATE ON DRSTEST.TAB1 TO DMDRS;
GRANT DELETE ON DRSTEST.TAB1 TO DMDRS;
GRANT SELECT ON DRSTEST.TAB1 TO DMDRS;
GRANT INSERT ON DRSTEST.TAB2 TO DMDRS;
GRANT UPDATE ON DRSTEST.TAB2 TO DMDRS;
GRANT DELETE ON DRSTEST.TAB2 TO DMDRS;
GRANT SELECT ON DRSTEST.TAB2 TO DMDRS;
-- 需要非同步用户模式下未存在的表/序列的数据的操作权限。也可以在目标同步表创建后,同上行所述单独为每张表赋予操作权限
GRANT INSERT ANY TABLE TO DMDRS;
GRANT UPDATE ANY TABLE TO DMDRS;
GRANT DELETE ANY TABLE TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
GRANT SELECT ANY SEQUENCE TO DMDRS;
-- 需要非同步用户模式下创建表注释的权限
GRANT COMMENT ANY TABLE TO DMDRS;
-- 需要赋予同步用户辅助存储过程的执行权限以及非同步用户下模式所属用户的存储过程的创建权限
GRANT EXECUTE ON PROCEDURE "DRS_$DDL_SQL_PROC" TO DMDRS;

--源库最小权限
-- ## 基础权限
-- 插入、删除、更新数据时,需要数据操作权限
GRANT PUBLIC TO DMDRS;
-- 需要系统表、系统字典和动态视图的查询权限
GRANT SOI,VTI TO DMDRS;
-- 需要创建会话权限
GRANT CREATE SESSION TO DMDRS;
-- ## 装载相关权限
-- 需要非同步用户下待装载表/序列上的查询权限
GRANT SELECT ON DRSTEST.TAB1 TO DMDRS;
GRANT SELECT ON DRSTEST.TAB2 TO DMDRS;
-- ## 同步相关权限
-- DM8触发器同步时,如果数据库用户不是SYSDBA用户,需要对SYSDBA.DRS_$DDL_LOG具有查询权限
GRANT SELECT ON SYSDBA.DRS_$DDL_LOG TO DMDRS;
-- ## DSC同步相关权限
-- DSC时,需要新增以下权限:
GRANT CREATE TABLE TO DMDRS;
GRANT CREATE PACKAGE TO DMDRS;

2.3 配置环境变量

vi ~/.bash_profile
export LD_LIBRARY_PATH=<DMDPI驱动路径>:$LD_LIBRARY_PATH
source ~/.bash_profile
echo $LD_LIBRARY_PATH

2.4 配置exec.xml

<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>Manager模块的端口号</mgr_port>     
        <siteid>站点号</siteid>
    </base>
    <exec>
        <name>EXEC模块的名称</name>
        <login>
            <dbtype>目标数据库的类型</dbtype>
            <server>目标数据库的服务名或IP地址</server>
            <dbname>目标数据库的库名</dbname>
            <user>目标数据库的登录用户名</user>
            <pwd>目标数据库的登录密码</pwd>
            <port>目标数据库的监听端口号</port>
        </login>
    </exec>
</drs>

3.启动

3.1启动目标端drs

1)将服务脚本模板TemplateService拷贝到服务脚本目录,并修改服务脚本模板的名称为DrsService。

cp TemplateService ../DrsService

2)打开并修改DrsService服务脚本中的相关配置参数

vi DrsService
INSTALL_HOME=/home/dmdrs/dmdrs5
PROG_DIR=/home/dmdrs/dmdrs5/bin
CONF_PATH=/home/dmdrs/dmdrs5/bin/exec.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME="drs server"

3)启动目标端drs服务

./DrsService start

3.2启动源端drs

1)配置DrsService.xml

dmdrs5/bin目录下创建DrsService.xml
CONF_PATH=C:\dmdrs5\bin\drs.xml
SERVICE_NAME=DrsService

2)注册并启动启动drs服务

将svc_win32/script下drs相关的四个bat文件复制到bin目录下
以管理员身份执行
DrsServiceInstall.bat 注册drs服务
DrsServiceStart.bat 启动drs服务
DrsServiceStop.bat 停止drs服务
DrsServiceUninstall.bat 卸载drs服务

3.3启动源DMDRS模块服务

1)启动控制台

C:\dmdrs5\bin>drcsl drs.xml

2)连接源DMDRS服务

CSL>connect

3)设置数据库当前最新的日志LSN作为日志解析的起始位置

CSL>alter cpt_mss set lsn

4)启动源DMDRS服务中的CPT模块

CSL>start

5)将源数据库中dbo模式下所有的表添加同步,添加后自动将源数据库表的全量数据装载到目标数据库,装载完成后自动进行增量数据的同步。

CSL>alter cpt_mss add table “sch.name=’dbo’”(装载schema下所有表)
CSL>alter cpt_mss add table “sch.name=’dbo’ and tab.name=’table_name’”(装载单表)

4.可能遇到的问题

4.1主备切换问题·

如果在同步过程中,出现源端断开连接,可以询问客户连接的节点每日是否有定时作业切换主备,若有需要关掉该作业,报错截图如下所示。
image.png

4.2 OBDC不符合版本问题

程序默认连接的ODBC是SQL Server Native Client 10.0版本,如果出现报错源端需要增加参数driver,具体事例如下。
image.png

<driver>SQL Server Native Client 11.0</driver>

4.3直接执行sql语句失败问题

启动后若出现该报错,需要客户在源端sqlserver手动执行bin目录下script目录下的sql文件,报错信息如下图所示。
image.png
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服