注册
DMHS-ORACLE_RAC到达梦主备集群双向同步
技术分享/ 文章详情 /

DMHS-ORACLE_RAC到达梦主备集群双向同步

lysrwhjy 2024/03/27 1901 4 0

一、ORACLE端DMHS安装及配置

1.1 ORACLE端安装DMHS

ORACLE端安装dmhs软件
cd /home/dmhs/bin
chown -R oracle:oinstall /home/dmhs/
cd /home/dmhs/bin
chmod +x *

1.2 安装时需注意以下几点:

–根据oracle版本,选择对应的DMHS进行安装。
–用户要求
使用oracle用户或者和oracle同一组的用户,一般系统如果有oracle用户权限控制,则要求给出一个和oracle同组的用户。
–环境要求
检查dmdba的环境变量,需要配置有ORACLE_SID,ORACLE_HOME,以及LD_LIBRARY_PATH。
–权限要求
连接oracle数据库的用户,若没有dba权限,则至少需要以下权限:
sqlplus / as sysdba
create user dmhs identified by Dmhs#dmhs123;
grant connect to dmhs
grant select any table to dmhs;
grant select any dictionary to dmhs;
grant create session to dmhs;
grant lock any table to dmhs;
grant execute on dbms_flashback to dmhs;

1.3 ORACLE配置ODBC

使用odbcinst -j 查看oracle端odbc版本信息:
[oracle@p550 ~]# /usr/local/bin/odbcinst -j
unixODBC 2.3.0
DRIVERS…: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES…: /usr/local/etc/ODBCDataSources
USER DATA SOURCES…: /home/oracle/.odbc.ini
SQLULEN Size…: 8
配置odbc.ini 与odbcinst.ini文件
vi /usr/local/etc/odbc.ini
[ORACLE]
Description = ORACLE ODBC DSN
Driver = Oracle in OraDb11g_home1
SERVER = 10.15.1.166
UID = dmhs
PWD = dmhs123456
Servername = BGP 对应oracle中tnsnames.ora中的服务名
PORT = 1521

vi /usr/local/etc/odbcinst.ini
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /u01/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1
Threading = 0

1711096686294.png

使用ldd命令查看libsqora.so.11.1是否有not found
ldd /u01/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1
如果有一下信息:libodbcinst.so.1 no => not found
查找:find / -name libodbcinst.so.1
ln -s /lib64/libodbcinst.so.2 /lib64/libodbcinst.so.1
通过ldd libdmhs_exec.so检查。
image.png

检查执行端运行环境NLS_LANG
检查dmhs服务的用户的环境变量NLS_LANG是否设置,查看echo $NLS_LANG
echo $NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
如果查询出来是空值,则需要从ORACLE数据库中查询字符集,方法如下:
SQL> select userenv(‘language’) from dual;
USERENV(‘LANGUAGE’)
AMERICAN_AMERICA.ZHS16GBK

1.4 oracle端数据库配置数据库服务网络服务名

DMHS 装载历史数据时,需要通过数据库网络服务名来抽取数据库的数据。配置 ORACLE 数据库的网络服务名可通过 ORACLE NCA 工具进行配置,也可直接修改 $ORACLE_HOME\network\admin\tnsname.ora 文件
ASM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.15.1.167)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST =10.15.1.168)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = +ASM)
)
)
#配置PDB服务名
orcl=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.15.1.166)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

1.5 创建ASM的连接用户

Su - grid
Sqlplus / as sysasm
create user test identified by Test#167;
grant sysdba to test;

1.6 开启oracle端数据库的归档及附加日志

查看oracle端归档信息
SQL>alter database archivelog;
如果没开归档做如下操作:
SQL>Shutdown immediate;
SQL>alter database archivelog;
SQL>alter system set db_recovery_file_dest=’’;
SQL>alter system set log_archive_dest=’/ORACLE的归档路径’;
SQL>Shutdown immediate;
SQL>startup mount;
SQL>alter database open;
SQL>Shutdown immediate;
SQL>startup mount;
SQL>alter database open;
开启数据库最小附加日志及全列日志。如果日志已开启,则跳过本步骤:
SQL>alter database add SUPPLEMENTAL LOG DATA;
image.png
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
image.png
SQL>select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_ALL from v$database;
image.png

1.7 oracle端开启DDL同步

oracle端执行DDL脚本:
SQL>@oracle/app/oracle/dmhs/scripts/ddl_sql_ora.sql
image.png

1.8 配置dmhs.hs文件

<?xml version=“1.0” encoding=“GB2312” standalone=“no”?>
<dmhs>
<base>
<lang>en</lang>
<version>2.0</version>
<mgr_port>3345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>1</siteid>
<group>1</group>
</base>
<exec>
<recv>
<mgr_port>3345</mgr_port>
<data_port>3346</data_port>
</recv>
<db_type>ORACLE11g</db_type>
<!–<driver>{Oracle in OraDb11g_home1}</driver>–>
<db_server>ORCL</db_server>
<db_user>dmhs</db_user>
<db_pwd>Dmhs#167</db_pwd>
<!–<char_code>PG_GB18030</char_code>–>
<db_port>1521</db_port>
<level>0</level>
<exec_thr>4</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>5000</exec_trx>
<exec_rows>250</exec_rows>
<exec_policy>2</exec_policy>
</exec>
<cpt>
<name>cpt</name>
<enable>1</enable>
<db_type>ORACLE11g</db_type>
<db_server>ORCL</db_server>
<db_user>dmhs</db_user>
<db_pwd>Dmhs#167</db_pwd>
<db_port>1521</db_port>
<char_code>PG_GB18030</char_code>
<idle_time>300</idle_time>
<ddl_mask>obj:op</ddl_mask>
<update_delay_interval>2</update_delay_interval>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
<bak_dir></bak_dir>
</arch>
<rac>
<rac_type>1</rac_type>
<db_server>ASM</db_server>
<db_user>test</db_user>
<db_pwd>Test#167</db_pwd>
<nodes>2</nodes>
<epoch>0</epoch>
</rac>
<send>
<ip>10.15.1.8</ip>
<mgr_port>3345</mgr_port>
<data_port>3346</data_port>
<standby>
<item>
<ip>10.15.1.9</ip>
<mgr_port>3345</mgr_port>
<data_port>3346</data_port>
</item>
</standby>
<trigger>0</trigger>
<compress>0</compress>
<constraint>0</constraint>
<identity>1</identity>
<filter>
<enable>
<item>TEST.</item>
</enable>
</filter>
<map>
<item>TEST.
== TEST.*</item>
</map>
</send>
</cpt>
</dmhs>

二、达梦端DMHS安装及配置

2.1 开启逻辑附加日志

修改dm8中“dm.ini”中的RLOG_APPEND_LOGIC参数的值设置为1。

2.2 开始归档日志

将dm8数据库主备库都配置配置文件“dm.ini”中的ARCH_INI参数值设置为1。
如果为主备集群,主备库都要安装DMHS软件,配置dmhs.hs配置文件。

2.3 DDL同步配置

主库使用SYSDBA用户执行ddl_sql_dm8.sql,建立DDL同步的触发器和辅助表。

LDD查看 libcpt_dm8.so ldd libdmhs_exec.so
ldd libcpt_dm8.so
linux-vdso.so.1 (0x0000ffff68670000)
libdmhs_pub.so => ./libdmhs_pub.so (0x0000ffff68460000)
libdmhs_net.so => ./libdmhs_net.so (0x0000ffff68400000)
libdmhs_ld_dm8.so => ./libdmhs_ld_dm8.so (0x0000ffff68390000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x0000ffff68020000)
libc.so.6 => /lib64/libc.so.6 (0x0000ffff67e70000)
/lib/ld-linux-aarch64.so.1 (0x0000ffff68680000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000ffff67e40000)
libdmoci.so => ./libdmoci.so (0x0000ffff67300000)
libm.so.6 => /lib64/libm.so.6 (0x0000ffff67230000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000ffff671f0000)
libdmhs_bool_parse.so => ./libdmhs_bool_parse.so (0x0000ffff671d0000)
librt.so.1 => /lib64/librt.so.1 (0x0000ffff671a0000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000ffff66ff0000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000ffff66fb0000)
ldd libdmhs_exec.so
linux-vdso.so.1 (0x0000fffe6af40000)
libdmhs_pub.so => ./libdmhs_pub.so (0x0000fffe6acb0000)
libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x0000fffe6a940000)
libdmhs_dm_obj.so => ./libdmhs_dm_obj.so (0x0000fffe6a900000)
libdmhs_cvt.so => ./libdmhs_cvt.so (0x0000fffe6a880000)
libc.so.6 => /lib64/libc.so.6 (0x0000fffe6a6d0000)
/lib/ld-linux-aarch64.so.1 (0x0000fffe6af50000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000fffe6a6a0000)
libdodbc.so => /dm/dmdbms/bin/libdodbc.so (0x0000fffe6a650000)
libm.so.6 => /lib64/libm.so.6 (0x0000fffe6a580000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000fffe6a540000)
libdmhs_exp.so => ./libdmhs_exp.so (0x0000fffe6a390000)
libdmhs_xml.so => ./libdmhs_xml.so (0x0000fffe6a370000)
libdmoci.so => ./libdmoci.so (0x0000fffe69830000)
libdmdpi.so => /dm/dmdbms/bin/libdmdpi.so (0x0000fffe68d10000)
libdmfldr.so => /dm/dmdbms/bin/libdmfldr.so (0x0000fffe68c10000)
librt.so.1 => /lib64/librt.so.1 (0x0000fffe68be0000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000fffe68a30000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000fffe689f0000)

2.4 达梦端配置dmhs.hs文件

主备集群需提前配置服务名:此处集群配置得服务名为DMDB

<?xml version=“1.0” encoding=“utf-8”?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>3345</mgr_port>
<chk_interval>2</chk_interval>
<group>1</group>
<siteid>2</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<mgr_port>3345</mgr_port>
<data_port>3346</data_port>
</recv>
<db_type>DM8</db_type>
<db_server>DMDB</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<char_code>PG_GB18030</char_code>
<db_port>5236</db_port>
<exec_thr>4</exec_thr>
<exec_sql>512</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>250</exec_rows>
<exec_policy>2</exec_policy>
</exec>
<cpt>
<db_type>dm8</db_type>
<db_server>DMDB</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<char_code>PG_GB18030</char_code>
<db_port>5236</db_port>
<db_name></db_name>
<ddl_mask>obj:op</ddl_mask>
<parse_thr>1</parse_thr>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
<bak_dir></bak_dir>
</arch>
<send>
<ip>10.15.1.166</ip>
<mgr_port>3345</mgr_port>
<data_port>3346</data_port>
<level>0</level>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<net_turns>0</net_turns>
<filter>
<enable>
<item>TEST.</item>
</enable>
<disable>
</disable>
</filter>
<map>
<item>TEST.
==TEST.*</item>
</map>
</send>
</cpt>
</dmhs>

2.5 两端启动dmhs服务及启动EXEC模块

达梦端
[dmdba@slb bin]$ ./dmhs_server
[oracle@slb bin]$ ./dmhs_server

[dmdba@slb bin]$ ./dmhs_console
DMHS >connect
DMHS>start exec
DMHS>CLEAR EXEC LSN
oracle端
[oracle@slb bin]$ ./dmhs_console
DMHS >connect
DMHS>start exec
DMHS>CLEAR EXEC LSN

2.6 两端装载字典(前提是两端数据要保持一直且没有动态数据)

[oracle@s bin]$ ./dmhs_console
DMHS>copy 0 “sch.name=‘TEST’” dict

[dmdba@slb bin]$ ./dmhs_console
DMHS>copy 0 “sch.name=‘TEST’” dict
启动cpt服务
[dmdba@slb bin]$ ./dmhs_console
DMHS>start cpt

[oracle@s bin]$ ./dmhs_console
DMHS>start cpt

三、同步测试

达梦端创建表
SQL>create table test(id int);
SQL>insert into test values(1234);
SQL>select * from test;
oracle端查看是否同步:
SQL>select * from test;
ORACLE 端插入数据:
SQL>insert into test values(5678);
达梦端查看是否同步:
SQL>select * from test;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服