Oracle到dm8的双向同步
1、dm8端的配置
1)开启逻辑附加日志
修改dm8中“dm.ini”中的RLOG_APPEND_LOGIC参数的值设置为1。
2)开始归档日志
(1)将dm8数据库配置文件“dm.ini”中的ARCH_INI参数值设置为1。
(2)在与dm.ini相同目录下,增加配置文件“dmarch.ini”,并添加归档配置参数内容(可以参见dmarch_example.ini文件配置格式)。示例如下:
[ ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 10240
3)DDL同步配置
使用SYSDBA用户执行ddl_sql_dm8.sql,建立DDL同步的触发器和辅助表。
1.1 dm8端dmhs配置文件
[DMHS]
Description = ORACLE ODBC DSN
Driver = Oracle in OraDb10g_home1
SERVER = 192.168.3.11
UID = test
PWD = hust4400
Servername = ORCL 对应oracle中tnsnames.ora中的服务名
PORT = 1521
vi /usr/local/etc/odbcinst.ini
[Oracle in OraDb10g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /u01/app/oracle/product/10.2.0/db_1/lib/libsqora.so.10.1
Threading = 0
配置unixodbc中一定需要检查driver中的路径是否存在,如果是在aix,则driver中的lib库为libsqora.so。需要检查使用的libsqora.so文件位数和oracle版本位数是否一致。
可以通过 ls –la /u01/app/oracle/product/10.2.0/db_1/lib/libsqora.so.10.1检查文件是否存在。也可以通过ldd /u01/app/oracle/product/10.2.0/db_1/lib/libsqora.so.10.1检查依赖的文件是否都能够找到。如果没有找到,则为环境变量问题,检查环境变量LD_LIBRARY_PATH。
注意:odbc.ini和odbcinst.ini中每行开头禁止留有空格,否则会有如下报错信息:
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect。
1)检查unixODBC配置是否正确
注意:必须切换至oracle用户
/usr/local/bin/isql –v DMHS test hust4400
如果连接正常则表示配置正确。
2)将unixodbc动态库加到目的端DMHS安装用户环境变量中
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
(注:如果源端oracle是windows平台,windows端安装oracle后会有oracle odbc驱动,只需要在ODBC数据源中输入oracle的用户名和密码,并鼠标点击测试连接即可,如新建dmhs用户,给与dba权限,密码也是dmhs,输入用户名密码,点测试连接,测试连接成功表示oracle端odbc已配通)
2.3 检查DMHS执行端环境
1) 检查DMHS执行端依赖的动态库
unixODBC 2.3.0版本编译出来的动态库为libodbc.so.1,unixODBC2.3.2版本编译出来的动态库为libodbc.so.2。有时候执行启动时会报错找不到libdmhs_exec.so文件是由于ODBC动态库版本不一致导致。可以通过ldd libdmhs_exec.so检查。
oracle > ldd libdmhs_exec.so
linux-vdso.so.1 => (0x00007fff5ddff000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8a96ebe000)
libm.so.6 => /lib64/libm.so.6 (0x00007f8a96c67000)
librt.so.1 => /lib64/librt.so.1 (0x00007f8a96a5e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8a96841000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f8a9663c000)
libdmhs_pub.so (0x00007f8a96354000)
libdmhs_ucvt.so (0x00007f8a95e5f000)
libodbc.so.1 => /usr/local/lib/libodbc.so.1 (0x00007f8a95bf1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8a97557000)
如果ldd libdmhs_exec.so依赖的动态库为libodbc.so.2,但是安装的unixODBC版本为2.3.0,此时需要做个软连接操作解决该问题。
ln -s /usr/local/lib/libodbc.so.1 /usr/local/lib/libodbc.so.2
2) 检查执行端运行环境NLS_LANG
检查dmhs服务的用户的环境变量NLS_LANG是否设置,查看echo $NLS_LANG
echo $NLS_LANG
如果查询出来是空值,则需要从ORACLE数据库中查询字符集,方法如下:
SQL> select userenv(‘language’) from dual;
USERENV(‘LANGUAGE’)
AMERICAN_AMERICA.ZHS16GBK
将环境变量NLS_LANG设置为查询值。
3) oracle端数据库配置数据库服务网络服务名
DMHS 装载历史数据时,需要通过数据库网络服务名来抽取数据库的数据。配置 ORACLE 数据库的网络服务名可通过 ORACLE NCA 工具进行配置,也可直接修改 $ORACLE_HOME\network\admin\tnsname.ora 文件。
下例为直接修改 tnsname.ora 来添加数据
库服务监听:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA =
(SERVER = DEDICATED)
配置完成之后,可使用 oracle 客户端工具 sqlplus 测试配置是否正确。 例如: sqlplus dmhs/dmhs@ORCL 如果配置正确,则可成功登陆数据库。
2.4开启oracle端数据库的归档及附加日志
DMHS 通过分析 ORACLE 数据库的归档/在线日志来捕获数据库的增量数据,DMHS 运行之前,必须将数据库设置为归档模式,同时开启最小附加日志及全列日志。修改数据库 为归档模式需重启数据库服务,在操作只需,需确认工作环境能停机维护。具体操作过程如 下:
1)修改数据库归档模式。如果数据库已经为归档模式,则跳过本步骤。
a)sqlplus 登录到源端数据库
b)关闭数据库服务
c)以 mount 方式启动 ORACLE 数据库服务
d)开启数据库归档,并设置归档文件路径
e)重启数据库,使归档路径生效
关闭 oracle 数据库:
mount 方式启动数据库:
f)将数据库切换到正常的工作状态,打开数据库
可使用 sqlplus 执行 archive log list 查看数据库归档模式。
2)开启数据库最小附加日志及全列日志。如果日志已开启,则跳过本步骤
开启附加日志不需要重启 ORACLE 数据库服务,但重启数据库服务可加快 附加日志开启速度。
2.5 oracle端 DDL 支持
DMHS 支持源端 DDL 的同步。源端 DDL 同步必须满足一下三个条件:
- 源端数据库必须允许 DDL 触发器的触发动作,即数据库参数_system_trig_enabled 为 TRUE 或者未设置。查看该参数的命令如下:
2)需要在源端数据库以 sys 用户,在 sys 模式下创建 DDL 触发器及 DDL 记录表,详 细参照 dmhs_ddl.sql 脚本。
3) 需要日志捕获模块对 ddl_mask 进行设置。例如op:obj。 ddl_mask 可对同步对象进行过滤,详细参数请参照 ddl_mask 参数说明。
2.7oracle端配置文件
2.8 启动dmhs服务
双向同步中,装载字典前,一定要先将两端的执行器启动,创建好执行端的辅助表后再装载字典。Oracle端是linux平台的话要切换至oracle用户
1)启动两端服务
此处一定要用exec和cpt分别启动,不能用start命令,start命令后不接cpt或exec会根据配置文件同时启动cpt和exec。
[root@slb bin]# ./dmhs_console
DMHS >connect 192.168.10.15:5545
DMHS>start exec
[oracle@slb2 bin]# ./dmhs_console
DMHS >connect 192.168.10.35:5645
DMHS>start exec
2)装载字典
[root@slb bin]# ./dmhs_console
DMHS >connect 192.168.10.15:5545
DMHS>copy 0 “sch.name=‘SYSDBA’” dict
[oracle@slb2 bin]# ./dmhs_console
DMHS >connect 192.168.10.35:5645
DMHS> copy 0 “sch.name='DMHS’” dict
3) 启动cpt服务
[root@slb bin]# ./dmhs_console
DMHS >connect 192.168.10.15:5545
DMHS>start cpt
[oracle@slb2 bin]# ./dmhs_console
DMHS >connect 192.168.10.35:5645
DMHS>start cpt