1 DMHS 环境需求
管理进程间通信的默认端口 5345;发送和执行子系统之间通信的默认端口 5346;
3) 支持的数据库
当源端为 ORACLE 类型数据库时,目的端支持一下类型数据库:DM6、DM7、DM7 MPP、
Oracle9i、Oracle10g、Oracle11g、Oracle RAC、DB2、MySQL、PostgreSQL、SQL SERVER。
1.2ORACLE 数据类型的支持
限制支持:
- 不支持 lob 数据的分片更新。
- 不支持加密数据的同步。
- 对主键的更新,不支持类似 update t set key=key+n 的操作。
- 对于使用 SQL 进行同步的对象,不对对象中使用的对象进行映射。
- 不支持外部表。
- 不支持 Oracle 预留模式对象的同步。
- 不支持 Oracle 回收表的同步。
2 DMHS 系统搭建
2.1DMHS ORACLE 源端安装
2.1.1 设置 ORACLE 本地链接库路径
DMHS 在运行时,需要加载本地 ORACLE 动态库 libclntsh.so $ORACLE_HOME/lib 中
当在系统中未找到 libclntsh.so 文件, 但存在 libclntsh.so.的文件,可使
用命令 ln -s libclntsh.so. libclntsh.so 创建一个软链接。
2.1.2 源端 ORACLE RAC 环境准备
-
ASM 存储
DMHS 的部署节点必须配置 ASM 服务监听,可直接修
改$ORACLE_HOME\network\admin\tnsname.ora 文件,添加 ASM 监听
ASM =
(
DESCRIPTION =
(ADDRESS =(PROTOCOL=TCP)(HOST=***.***.***.***)(PORT=1521))
(CONNECT_DATA =(SERVER =DEDICATED)(SERVICE_NAME=+ASM))
)
-
操作系统磁盘存储
当 RAC 的归档文件存放在操作系统磁盘时,对未部署 DMHS 的 RAC 节点,必须配置
归档文件到部署 DMHS 的文件映射。
2.1.3 DMHS 安装
DMHS 源端安装完成之后,可将目录切换到 DMHS
软件目录,通过命令 ldd libcpt_ora.so(RAC 可通过命令 ldd libcpt_rac.so),
查看 DMHS 日志执行模块链接是否正常。
2.2 DMHS ORACLE 目的端安装
所以部署 DMHS ORACLE 目的
端的服务器,需要安装 ODBC 驱动及 ORACLE 动态链接库,
ODBC 驱动在安装完 ORACLE 软件之
后,会默认安装,在 UNIX/LINUX 平台中,需认为安装 UNIXODBC。
2.2.1 UNIXODBC 安装
- 下载 unixodbc2.3.2 源码 unixODBC-2.3.2.tar.gz。
-
解压 unixodbc 源码
tar -zxvf unixODBC-2.3.2.tar.gz
-
进入 unixodbc 源码目录,编译源码
cd unixodbc-2.3.2
export CC=gcc
./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes
make
make install
当服务器系统为 UNIX/LINUX 64bits 时,在./configure 之前需执行
export CFLAGS="-maix64 -DBUILD_REAL_64_BIT_MODE"
export OBJECT_MODE=64
-
配置 UNIXODBC
将操作系统当前目录切换到“/usr/local/etc”目录,修改 odbc.ini 和 odbcinst.ini 参数。
odbc.ini 参数内容如下所示:
[ORACLE]
Description = ORACLE ODBC DSN
Driver = Oracle in OraDb11g_home1
SERVER = 127.0.0.1
UID = DMHS
PWD = DMHS
Servername = ORCL
PORT = 1521
odbcinst.ini 参数内容如下所示:
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /u01/app/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1
Threading = 0
例如:isql -v ORACLE DMHS DMHS
2.2.2 DMHS 安装
UNIX/LINUX 平台中,DMHS 目的端安装完成之后,可将目录切换到 DMHS
软件目录,通过命令 ldd libdmhs_exec.so,查看 DMHS 日志执行模块链接是
否正常。
3 ORACLE/RAC 数据库环境设置
3.1源端/目的端数据库配置数据库服务网络服务名
/RAC 数据库的网络服务名可通过 ORACLE NCA 工具进行配置,也可直接修改
$ORACLE_HOME\network\admin\tnsname.ora 文件
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
sqlplus dmhs/[email protected]
3.2开启源端数据库的归档及附加日志
开启归档
shutdown immediate
startup mount
alter database archivelog
alter system set db_recovery_file_dest=’’;
alter system set log_archive_dest=‘xxxxx’;
alter database open;
archive log list;
开启最小补充日志
alter database add supplemental log data;
alter database add supplemental log data (all) columns;
select uupplemental_log_data_min,supplemental_log_data_all from v$database;
开启附加日志不需要重启 ORACLE 数据库服务
3.3设置源端/执行端 ORACLE 客户端字符集
当数据库数据包含中文字符时,需将 DMHS 运作所在窗口的 NLS_LANG 设置为对应
的字符集,建议使用 AMERICAN_AMERICA.ZHS16GBK
windows 平台设置客户端字符集:
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
UNIX/LINUX 平台设置客户端字符集:
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
3.4源端 DDL 支持
DMHS 支持源端 DDL 的同步。源端 DDL 同步必须满足一下三个条件:
-
源端数据库必须允许 DDL 触发器的触发动作,即数据库参数_system_trig_enabled
为 TRUE 或者未设置
show parameter “_system_trig_enabled”
-
需要在源端数据库以 sys 用户,在 sys 模式下创建 DDL 触发器及 DDL 记录表,详
细参照 dmhs_ddl.sql 脚本
-
需要日志捕获模块对 ddl_mask 进行设置。例如<ddl_mask>op:obj<ddl_mask>。
ddl_mask 可对同步对象进行过滤
3.5DMHS 数据库用户
DMHS 源端数据库用户,必须具有以下数据库操作权限:
SELECT ON SYS.V_KaTeX parse error: Expected group after '_' at position 26: …SELECT ON SYS.V_̲SESSION
SELECT ON SYS.GV_KaTeX parse error: Expected group after '_' at position 28: …ELECT ON SYS.GV_̲INSTANCE
SELECT ON SYS.GV_KaTeX parse error: Expected group after '_' at position 31: …ELECT ON SYS.GV_̲ARCHIVE
SELECT ON SYS.GV_KaTeX parse error: Expected group after '_' at position 22: …ELECT ON SYS.GV_̲LOGFILE
SELECT ON SYS.DBA_TABLES
SELECT ON SYS.V_ I N S T A N C E S E L E C T O N S Y S . O B J INSTANCE SELECT ON SYS.OBJ INSTANCESELECTONSYS.OBJ
SELECT ON SYS.USER$
SELECT ON SYS.COL$
SELECT ON SYS.DBA_CONS_COLUMNS
SELECT ON SYS.DBA_CONSTRAINTS
SELECT ON SYS.LOB$
SELECT ON SYS.TABPART$
SELECT ON SYS.TAB$
SELECT ON SYS.TABSUBPART$
SELECT ON SYS.TABCOMPART$
EXECUTE ON DBMS_FLASHBACK
LOCK ANY TABLE
SELECT ANY TABLE
DMHS 执行端数据库用户必须具有同步对象的操作权限及操作用户下建表的权限
3.6DMHS 目标库约束/触发器限制
-
约束
DMHS 同步过程中,需将将执行端 ORACLE 表中的外键禁用,否则,在对外键引用表
进行更新时,可能会引起执行端 ORACLE 数据库操作错误。当目的 ORACLE10g 版本高于
10.2.0.5 或者 ORACLE11G 版本高于 11.2.0.4 时,可将源端 DMHS 配置参数 constraint 设置
为 1,来避免外键引起的同步错误。
-
触发器
DMHS 同步过程中,需将将执行端 ORACLE 中的存在 DML 操作的触发器禁用,负责,
在通过过程中,会对触发器操作的表进行二次操作,导致同步结果错误。当目的 ORACLE10g
版本高于 10.2.0.5 或者 ORACLE11G 版本高于 11.2.0.4 时,可将源端 DMHS 配置参数 trigger
设置为 1,来避免外键引起的同步错误。
4 配置 ORACLE/RAC 数据同步
4.1配置 ORACLE/RAC 源端
-
创建 DMHS 配置文件 dmhs.hs
将文件路径切换到 DMHS 工作目录下,创建文件dmhs.hs。
- dmhs.hs 文件中添加 xml 文件头及 dmhs 根元素
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
</dmhs>
- dmhs 根元素添加 base 元素:
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>45</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
- dmhs 根元素添加 cpt 元素及 cpt 元素中添加源端数据库信息:
<cpt>
<db_type>oracle11g</db_type>
<db_server>brcl</db_server>
<db_user>sde</db_user>
<db_pwd>sde</db_pwd>
<ddl_mask>op:obj</ddl_mask>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
</cpt>
- cpt 元素添加数据发送设置:
<cpt>
......
<send>
<ip>127.0.0.1</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<filter>
<enable>
<item>DMHS.*</item>
</enable>
</filter>
</send>
</cpt>
- 当源端数据库使用了 ASM 时,还需要在 cpt 元素中添加 ASM 相关信息:
<cpt>
<db_type>oracle11g</db_type>
<db_server>orcl</db_server>
<db_user>dmhs</db_user>
<db_pwd>dmhs</db_pwd>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<rac>
<rac_type>1</rac_type>
<db_server>orcl</db_server>
<db_user>asm</db_user>
<db_pwd>asm123112</db_pwd>
<nodes>3</nodes>
</rac>
<send>
<ip>127.0.0.1</ip>
<mgr_port>6345</mgr_port>
<data_port>6346</data_port>
<filter>
<enable>
<item>DMHS.*</item>
</enable>
</filter>
</send>
</cpt>
-
当源端数据库为 RAC,且归档文件存放在操作系统磁盘时,需在 cpt 中添加文件映
射:
<cpt>
<db_type>oracle11g</db_type>
<db_server>orcl</db_server>
<db_user>dmhs</db_user>
<db_pwd>dmhs</db_pwd>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<rac>
<rac_type>1</rac_type>
<db_server>orcl</db_server>
<db_user>asm</db_user>
<db_pwd>asm123112</db_pwd>
<nodes>2</nodes>
<dir_replace>
<item>2#/home/oracle/arch2</item>
<item>1#/home/oracle/arch1</item>
</dir_replace>
</rac>
<send>
<ip>127.0.0.1</ip>
<mgr_port>6345</mgr_port>
<data_port>6346</data_port>
<filter>
<enable>
<item>DMHS.*</item>
</enable>
</filter>
</send>
</cpt>
其中 dir_replace 中设置的是 DMHS 可读取的归档目录,除了 DMHS 所在节点的归档目
录为真实目录外,其他的目录为 RAC 其他节点归档目录映射到 DMHS 机器的目录。
一个完整的 DMHS 源端配置文件(dmhs.hs)
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>45</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
<cpt>
<db_type>oracle11g</db_type>
<db_server>orcl</db_server>
<db_user>dmhs</db_user>
<db_pwd>dmhs</db_pwd>
<ddl_mask>op:obj</ddl_mask>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>127.0.0.1</ip>
<mgr_port>6345</mgr_port>
<data_port>6346</data_port>
<filter>
<enable>
<item>DMHS.*</item>
</enable>
</filter>
</send>
</cpt>
</dmhs>
4.2配置 ORACLE/RAC 执行端
- dmhs.hs 文件中添加 xml 文件头及 dmhs 根元素
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
</dmhs>
- dmhs 根元素添加 base 元素:
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>6345</mgr_port>
<ckpt_interval>45</ckpt_interval>
<siteid>2</siteid>
<version>2.0</version>
</base>
</dmhs>
- dmhs 根元素添加 exec 元素,设置接收及执行端数据库信息:
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>oracle11g</db_type>
<db_server>orcl</db_server>
<db_user>sde</db_user>
<db_pwd>sde</db_pwd>
<db_port></db_port>
<db_name></db_name>
</exec>
一个完整的 DMHS 执行端配置文件(dmhs.hs),如下所示:
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>6345</mgr_port>
<ckpt_interval>45</ckpt_interval>
<siteid>2</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>oracle11g</db_type>
<db_server>orcl</db_server>
<db_user>sde</db_user>
<db_pwd>sde</db_pwd>
<db_port></db_port>
<db_name></db_name>
</exec>
</dmhs>