A环境:两节点Oracle RAC版本 11.2.4.0
#pulib
192.168.1.115 rac1
192.168.1.116 rac2
#private
10.0.0.115 rac1-priv
10.0.0.116 rac2-priv
#virtual
192.168.1.117 rac1-vip
192.168.1.118 rac2-vip
#scan
192.168.1.119 rac-scan
B环境:两节点Oracle RAC版本 11.2.4.0
#public
192.168.1.228 racdb1
192.168.1.229 racdb2
#vip
192.168.1.60 racdb1-vip
192.168.1.61 racdb2-vip
#priv
10.0.0.228 racdb1-priv
10.0.0.229 racdb2-priv
#scan
192.168.1.62 racdb-scan
DMHS在运行时,需要加载本地ORACLE 动态库libclntsh.so。在部署DMHS 之前,需将libclnsh.so所在目录添加到共享库路径变量中。libclntsh.so通常位于$ORACLE_HOME/lib中。
在LINUX/UNIX系统中,设置的方法如下:
DMHS支持源端为ORACLE RAC的数据库,DMHS安装部署在RAC的两个节点上,避免某一个节点异常或故障导致DMHS无法继续同步。
根据RAC存储使用的不同,需进行其他额外的配置:
ASM =
(
DESCRIPTION =
(ADDRESS =(PROTOCOL=TCP) (HOST = 192.168.1.115) (PORT=1521))
(CONNECT_DATA =(SERVER =DEDICATED)(SERVICE_NAME=+ASM))
)
如下:A端
B端:
A端B端共4个节点均安装DMHS for oracle 11g同步工具
[oracle@racdb2~]$chmod +x dmhs_V4.3.00_oracle11g_rev119281_rh6_64_veri_20221124_sp5.bin
[oracle@racdb2 ~]$ ./dmhs_V4.3.00_oracle11g_rev119281_rh6_64_veri_20221124_sp5.bin -i
Extract install files..........
1.英文(English)
2.简体中文(简体中文)
请选择安装语言[2.简体中文(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:542 MB
安装目录: [/home/oracle/dmhs]
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:
正在安装
default start ... default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
hsca start ... hsca finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在创建快捷方式
安装成功
注意:
DMHS安装完成之后,搭建环境是RAC到RAC双向同步,需要检查4个节点的所有安装模块情况,目录切换到 DMHS软件目录,通过命令 ldd libcpt_ora.so(RAC可通过命令 ldd libcpt_rac.so),查看 DMHS日志CPT模块链接是否正常,通过命令ldd libdmhs_exec.so,查看DMHS日志执行模块链接是否正常。
所有RAC节点检查均如下图:
因为目的端是通过ODBC将源端数据库的操作同步到目的数据库,我们搭建环境双向同步所有部署DMHS ORACLE 目的端的服务器都需要安装ODBC驱动及ORACLE 动态链接库。
达梦官方推荐安装unixodbc2.3.2版本的odbc。
1) 下载unixodbc2.3.2源码unixODBC-2.3.2.tar.gz。
2) 解压unixodbc源码
tar -zxvf unixODBC-2.3.2.tar.gz
3) 进入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
4) 配置UNIXODBC
将操作系统当前目录切换到“/usr/local/etc”目录,修改 odbc.ini 和odbcinst.ini 参数。
A端odbc.ini 参数内容如下所示:
[ORACLE]
Description = ORACLE ODBC DSN
Driver = Oracle in OraDb11g_home1
SERVER = 192.168.1.119
UserID = ems
Password = ems
Servername = DM
PORT = 1521
odbcinst.ini参数内容如下所示:
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /oracle/app/oracle/product/11.2.0/lib/libsqora.so.11.1
Threading = 0
B端odbc.ini 参数内容如下所示:
[ORACLE]
Description = ORACLE ODBC DSN
Driver = Oracle in OraDb11g_home1
SERVER = 192.168.1.62
UserID = ems
Password = ems
Servername = ORCL
PORT = 1521
odbcinst.ini参数内容如下所示:
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /oracle/app/oracle/product/11.2.0/lib/libsqora.so.11.1
Threading = 0
验证:配置完成之后,可使用isql命令测试配置是否正确。
例如:isql -v ORACLE DMHS DMHS
A端测试:
B端测试:
建议客户现场DBA配合下操作,或直接由数据库管理员操作。
DMHS 装载历史数据时,需要通过数据库网络服务名来抽取数据库的数据。配置ORACLE/RAC数据库的网络服务名可通过ORACLE NCA 工具进行配置,也可直接修改$ORACLE_HOME\network\admin\tnsname.ora文件。直接修改tnsname.ora创建数据库服务监听:
A端:
DM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dm)
)
)
B端:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
验证:
配置完成之后,可使用oracle客户端工具sqlplus测试配置是否正确。
例如: sqlplus dmhs/dmhs@ORCL
如果配置正确,则可成功登陆数据库
DMHS通过分析ORACLE 数据库的归档/在线日志来捕获数据库的增量数据,DMHS运行之前,必须将数据库设置为归档模式,同时开启最小附加日志及全列日志。修改数据库为归档模式需重启数据库服务,在操作只需,需确认工作环境能停机维护。具体操作过程如下:修改数据库归档模式。如果数据库已经为归档模式,则跳过本步骤。
a) sqlplus 登录到源端数据库
b) 关闭数据库服务:srvctl stop database –d dm
c) 以mount方式启动ORACLE 数据库服务: startup mount;
d) 开启数据库归档,并设置归档文件路径:
alter system set log_archive_format =‘arch%t_%s_%r’ scope=spfile;
alter system set log_archive_dest_1=‘location=+DATA’;
alter database archivelog;
e) 将数据库切换到正常的工作状态,打开数据库: alter database open;
当数据库数据包含中文字符时,需将DMHS运作所在窗口的NLS_LANG设置为对应的字符集,建议使用AMERICAN_AMERICA.ZHS16GBK。
LINUX平台设置客户端字符集:
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
DMHS支持源端DDL的同步。源端DDL同步必须满足一下三个条件:
DMHS源端数据库用户,必须具有以下数据库操作权限:
SELECT ON SYS.V_$DATABASE
SELECT ON SYS.V_$SESSION
SELECT ON SYS.GV_$PARAMETER
SELECT ON SYS.GV_$INSTANCE
SELECT ON SYS.GV_$ARCHIVE_DEST
SELECT ON SYS.GV_$ARCHIVE
SELECT ON SYS.GV_$LOG
SELECT ON SYS.GV_$LOGFILE
SELECT ON SYS.DBA_TABLES
SELECT ON SYS.V_$INSTANCE
SELECT ON SYS.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执行端数据库用户必须具有同步对象的操作权限及操作用户下建表的权限。
[oracle@rac1 bin]$ ./dmhs_server
start exec
[oracle@rac2 bin]$ ./dmhs_server
start exec
[oracle@racdb1 ~]$ ./dmhs_server
start exec
[oracle@racdb2 ~]$ ./dmhs_server
start exec
A端两节点中任意节点的控制台管理工具中执行如下DMHS命令:
clear exec lsn 0
copy 0 "sch.name='EMS'" CREATE|INSERT|INDEX|DICT|REG|LSN
B端两节点中任意节点的控制台管理工具中执行如下DMHS命令:
COPY 0 "sch.name='EMS'" DICT|LSN
A端两节点的控制台管理工具中执行如下DMHS命令:
start cpt
B端两节点的控制台管理工具中执行如下DMHS命令:
start cpt
A端模拟数据:
B端检查:
B端模拟数据清理:
A端检查:
[oracle@rac1 bin]$ ./dmhs_server
start exec
[oracle@rac2 bin]$ ./dmhs_server
start exec
[oracle@racdb1 ~]$ ./dmhs_server
start exec
[oracle@racdb2 ~]$ ./dmhs_server
start exec
A端两节点中任意节点查询数据库当前SCN号:
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
7466673
SQL> col DIRECTORY_PATH for a50
SQL> select * from dba_directories;create directory ems as '/home/oracle';
SQL>create directory ems as '/home/oracle';
[oracle@rac1 ~]$ expdp ems/ems DIRECTORY=ems DUMPFILE=ems.dmp LOGFILE=ems.log FLASHBACK_SCN=7466673
B端两节点中任意节点进行数据灌入:
在导入前,如果系统有job,先把目标库的:job_queue_processes设置成0
SQL>alter system set job_queue_processes=0 spfile=scope;
[oracle@racdb2 ~]$ impdp ems/ems DIRECTORY=ems DUMPFILE=ems.dmp LOGFILE=ems.log cluster=no transform=segment_attributes:n table_exists_action=replace
Import: Release 11.2.0.4.0 - Production on Wed Mar 22 20:18:34 2023
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
Master table "EMS"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "EMS"."SYS_IMPORT_FULL_01": ems/******** DIRECTORY=ems DUMPFILE=ems.dmp LOGFILE=ems.log cluster=no transform=segment_attributes:n table_exists_action=replace
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"EMS" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "EMS"."DM3" 33.45 MB 345272 rows
. . imported "EMS"."DM4" 33.45 MB 345272 rows
. . imported "EMS"."DM1" 8.370 MB 86323 rows
. . imported "EMS"."DM2" 8.370 MB 86318 rows
. . imported "EMS"."TEST2" 8.640 KB 100 rows
. . imported "EMS"."DMHS_CHECKPOINT_TABLE" 6.382 KB 1 rows
. . imported "EMS"."DMHS_DTYPE_MAP" 13.47 KB 192 rows
. . imported "EMS"."DMHS_ERROR_TSK_TABLE" 8.710 KB 1 rows
. . imported "EMS"."DMHS_TRXID_TABLE" 8.929 KB 0 rows
. . imported "EMS"."TEST1" 6.187 KB 0 rows
. . imported "EMS"."TEST3" 6.187 KB 0 rows
. . imported "EMS"."DM5" 0 KB 0 rows
. . imported "EMS"."DMHS_DPC_SYNC_TABLE" 0 KB 0 rows
. . imported "EMS"."DMHS_ERROR_TABLE" 0 KB 0 rows
. . imported "EMS"."DMHS_GROUP_FOR_2" 0 KB 0 rows
. . imported "EMS"."DMHS_TABLE_SEQID" 0 KB 0 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "EMS"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Wed Mar 22 20:19:09 2023 elapsed 0 00:00:24
A端指定SCN配置文件启动,dmhs.conf 文件添加如下:
cpt_start_lsn=(7466673)
A端任意节点执行:
copy 0 "sch.name='EMS'" DICT|REG|LSN
B端任意节点执行:
COPY 0 "sch.name='EMS'" DICT|LSN
A端两节点的控制台管理工具中执行如下DMHS命令:
start cpt
B端两节点的控制台管理工具中执行如下DMHS命令:
start cpt
节点1:
节点2:
#vi dmhs.config
cpt_start_lsn=(9892262)
问题1:
EXE[ERROR]: SITEID:0 SEQID:0 TRXID:0 LAST ROWID:NULL SQL_ERROR = SQL:select 1 AS RS from v$instance where status<>‘OPEN’
EXE[WARN]: SITEID:0 SEQID:0 TRXID:0 STATE:42S02 CODE: 942 ROWID:NULL ERR:[Oracle][ODBC][Ora]ORA-00942: table or view does not exist
SQL:select 1 AS RS from v$instance where status<>‘OPEN’
EXE[ERROR]: 连接数据库失败! 数据库处于MOUNT模式
解决方法:
exec模块配置数据库用户权限问题,最简单解决方式grant dba to ems;
问题2:
EXE[ERROR]: SITEID:0 SEQID:0 TRXID:0 STATE:01000 CODE: 0 ERR:[unixODBC][Driver Manager]Can’t open lib ‘Oracle in OraDb11g_home1’ : file not found
[oracle@racdb1 bin]$ ldd libdmhs_exec.so
linux-vdso.so.1 => (0x00007ffdb8540000)
libc.so.6 => /lib64/libc.so.6 (0x00007f1695837000)
libm.so.6 => /lib64/libm.so.6 (0x00007f1695535000)
librt.so.1 => /lib64/librt.so.1 (0x00007f169532d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1695111000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f1694f0d000)
libdmhs_pub.so => ./libdmhs_pub.so (0x00007f1694c03000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00007f16946ab000)
libdmhs_dm_obj.so => ./libdmhs_dm_obj.so (0x00007f169449a000)
libdmhs_cvt.so => ./libdmhs_cvt.so (0x00007f169422c000)
libodbc.so.2 => /lib64/libodbc.so.2 (0x00007f1693fc4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1695f73000)
libdmhs_exp.so => ./libdmhs_exp.so (0x00007f1693c35000)
libdmhs_xml.so => ./libdmhs_xml.so (0x00007f1693a28000)
libclntsh.so.11.1 => /oracle/app/oracle/product/11.2.0/lib/libclntsh.so.11.1 (0x00007f1690fc0000)
libltdl.so.7 => /lib64/libltdl.so.7 (0x00007f1690db6000)
libnnz11.so => /oracle/app/oracle/product/11.2.0/lib/libnnz11.so (0x00007f16909e9000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f16907cf000)
libaio.so.1 => /lib64/libaio.so.1 (0x00007f16905cd000)
解决方法:
更换Lib库路径到ODBC的安装路径/usr/local/lib/libodbc.so.2
问题3:
OCI模块数据库登录失败,server=ASM;user=sys;password=******
DB:ORA-12514:TNS:listener does not currently know of service requested in connect descriptor
解决方法:
更换ASM监听IP为物理地址如下
原配置:
ASM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = +ASM)
)
)
更改后:
ASM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.116)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = +ASM)
)
)
问题4:
[oracle@rac1 ~]$ isql -v ORACLE
isql: symbol lookup error: /oracle/app/oracle/product/11.2.0/lib/libsqora.so.11.1: undefined symbol: SQLGetPrivateProfileStringW
解决方法:
yum remove unixODBC*
重新安装unixODBC-2.3.0.tar.gz版本或unixODBC-2.3.2.tar.gz版本
文章
阅读量
获赞