Oracle到dm8的DMHS同步

13 篇文章 0 订阅
12 篇文章 0 订阅

目录

一.环境信息

1.1源端环境信息

    1.2目标端环境信息

二.Dm端配置:

2.1安装dmhs(源端和目标端):

(1)可执行文件授权:

2.2 开启逻辑附加日志

2.3 开启归档日志

2.4 DDL同步配置

2.5 DMHS服务配置

2.6 DMHS配置文件(dmhs.hs)

三.Oracle端配置:

3.1、安装unixodbc工具

3.2下载安装 oracle ODBC Driver

3.3 配置unixODBC

3.4 安装dmhs,并检查DMHS执行端环境

3.4.1 验证DMHS执行环境:

3.4.2 验证oracle服务名称

3.5 查看数据库归档状态

3.6开启逻辑附加日志

3.7 oracle端 DDL 支持

3.8  同步连接用户&授权

3.9 DMHS启动服务配置

3.10 DMHS配置文件(dmhs.hs)

四.DMHS进行全量和增量同步

4.1  源端创建数据(Oracle端)

4.2启动Oracle端和DM端dmhs服务

全量同步:

4.3 启动控制台执行命令

4.4 字典的初始化和数据装载

增量同步

4.5 开启CPT同步

五.验证同步情况

六.报错处理

6.1 启动dmhs后,出现乱码

6.2 unixODBC配置文件及环境变量注意点

6.3 源端数据装载报错load log analysis module failure


一.环境信息

1.1源端环境信息

ORACLE数据库

操作系统版本

Red Hat Enterprise Linux Server release 7.6 (Maipo)

数据库版本

Oracle 11gR2

IP地址

192.168.135.88

数据库架构

单机

数据库软件目录

/u01

数据库监听名

prod

数据库端口

1521

逻辑附加日志(最小附加日志及全列日志)

开启

归档模式

开启

归档目录

/arch

字符集

ZHS16GBK

软件目录

/home/oracle/dmhs

DMHS

管理端口

5345

数据端口

5346

    1.2目标端环境信息

操作系统版本

Linux version 4.19.90-24.4.v2101.ky10.x86_64

数据库版本

03134283890-20220720-165295-10045

IP地址

192.168.135.1

数据库架构

单机

DM数据库

数据库软件目录

/home/dmdba/dmdbms

数据库实例目录

/dm8/dmdata/DAMENG/dm.ini

归档目录

/dm8/dmarch/

备份路径

/dm8//dmbak

数据库端口

5236

同步管理用户

SYSDBA

DMHS版本

V4.2.94-Build(2022.08.11-113147trunc)_64_2208(Enterprise Edition)

软件目录

/home/dmdba/dmhs

DMHS

管理端口

5345

数据端口

5346

二.Dm端配置:

2.1安装dmhs(源端和目标端):

(1)可执行文件授权:

[dmdba@DM1 ~]$ mv dmhs_V4.1.48_pack4_dm8_rev104804_rh6_64_veri_20211228.bin /home/dmdba

[dmdba@DM1 ~]$ chmod +x dmhs_V4.1.48_pack4_dm8_rev104804_rh6_64_veri_20211228.bin

  1. 检查下tmp空间

是否有1G大小,不足的话在root进行扩容:

df -h

mount -o remount,size=2G /tmp

  1. 启动dmhs执行文件

[dmdba@DM1 ~]$ ./dmhs_V4.1.48_pack4_dm8_rev104804_rh6_64_veri_20211228.bin -i

 

至此DMHS安装完成,我们环境安装路径为/home/dmdba/dmhs,源端虚机和目的端虚机环境都需要安装

2.2 开启逻辑附加日志

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

2.3 开启归档日志

(1)将DM8数据库配置文件“dm.ini”中的ARCH_INI参数值设置为1。

(2)在与dm.ini相同目录下,增加配置文件“dmarch.ini”,并添加归档配置参数设置

[ ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dm8/dmarch

ARCH_FILE_SIZE = 512

ARCH_SPACE_LIMIT = 0

2.4 DDL同步配置

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

创建完dmhs后,会在安装的子目录的script下存在”ddl_sql_dm8.sql脚本,建议在DM管理工具中执行该脚本,在disql中执行会报错。

执行完成后,使用以下SQL语句查询辅助表是否创建成功

select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';

执行以下SQL语句查询触发器是否创建成功:

select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';

正常创建成功后会有关于DMHS的9张表和4个触发器

目标端也需要执行。

2.5 DMHS服务配置

cd /home/dmdba/dmhs/bin

cp TemplateDmhsService DmhsService

vim DmhsService

2.6 DMHS配置文件(dmhs.hs)

<?xml version="1.0" encoding="GB2312" standalone="no"?>

<dmhs>

<base>

<lang>en</lang>

<mgr_port>5345</mgr_port>

<name>DM8_HS</name>

<ckpt_interval>60</ckpt_interval>

<siteid>2</siteid>

<version>2.0</version>

</base>

<exec>

<recv>

<data_port>5346</data_port>

</recv>

<enable>1</enable>

<name>dm8_exec</name>

<db_type>DM8</db_type>

<db_server>192.168.135.1</db_server>

<db_user>SYSDBA</db_user>##或使用DMHS用户也可

<db_pwd>SYSDBA</db_pwd>

<db_port>5236</db_port>

<char_code>PG_GB18030</char_code>

<exec_thr>4</exec_thr>

<exec_sql>512</exec_sql>

<exec_trx>5000</exec_trx>

<exec_rows>250</exec_rows>

<trxid_tables>1</trxid_tables>

<vpool>7</vpool>

<recv_caches>8</recv_caches>

</exec>

</dmhs>

三.Oracle端配置:

3.1、安装unixodbc工具

1、下载unixodbc压缩包(unixODBC-2.3.11.tar.gz),用ssh工具将其上传linux服务器。(下载地址:http://www.unixodbc.org/)

2、输入以下命令,进行安装:

tar   -zxvf   unixODBC-2.3.11.tar.gz  ——解压

cd  unixODBC-2.3.11               ——进入解压后的安装目录

./configure                        ——对unixODBC-2.311软件进行配置

make&&make install                ——安装unixODBC-2.311

默认安装路径为/usr/local目录下面,如果要指定安装目录,可以在configure的后面指定--includedir=/usr/include --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc

如果数据库中需要支持对中文表名和字段名的同步,则需要将unixODBC编译选项增加以下两个:

--enable-iconv=yes  --with-iconv-char-enc=GB18030

3.2下载安装 oracle ODBC Driver

官方下载地址 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

下载文件:

instantclient-basic-linux.x64-11.2.0.4.0.zip

instantclient-odbc-linux.x64-11.2.0.4.0.zip

上传至服务器端,解压,然后将so格式的动态库copy到oracle的$ORACLE_HOME/lib下

unzip /soft/instantclient-basic-linux.x64-11.2.0.4.0.zip

unzip /soft/instantclient-odbc-linux.x64-11.2.0.4.0.zip

cp /soft/instantclient_11_2/*so* /u01/oracle/lib/

3.3 配置unixODBC

如果已经安装好了unixODBC可以通过命令odbcinst查看unixODBC的版本,以及读取的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

SQLLEN Size........: 8

SQLSETPOSIROW Size.: 8

默认在/usr/local/etc目录下面odbc.ini和odbcinst.ini中进行配置,如果安装是指定了sysconfdir,则在指定目录下的odbc.ini和odbcinst.ini中配置。

vi /usr/local/etc/ odbc.ini

[DMHS]

Description=ORACLE ODBC DSN

Driver=Oracle11g

SERVER=192.168.135.88

UID=dmhs

PWD=dmhs

Servername=prod

PORT=1521

vi /usr/local/etc/odbcinst.ini

[Oracle11g]

Description = ODBC DRIVER FOR ORACLE

Driver = /u01/oracle/lib/libsqora.so.11.1

Threading = 0

注意:odbc.ini和odbcinst.ini中每行开头禁止留有空格,否则会有如下报错:

[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified

[ISQL]ERROR: Could not SQLConnect。

1)检查libsqora.so.11.1动态库依赖是否完整:

通过 ls –la  /u01/oracle/lib/libsqora.so.11.1检查文件是否存在。也可以通过ldd  /u01/oracle/lib/libsqora.so.11.1检查依赖的文件是否都能够找到。如果没有找到,则为环境变量问题,检查环境变量LD_LIBRARY_PATH。

将unixodbc动态库加到目的端DMHS安装用户环境变量中

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

此类情况,需要添加添加软连接,因为odbc编译后的文件为libodbcinst.so,lib库需要的是libodbcinst.so1

ln -s /u01/oracle/lib/libodbcinst.so /u01/oracle/lib/libodbcinst.so.1

chown oracle:oinstall /u01/oracle/lib/libodbcinst.so.1

 

   

2)检查unixODBC配置是否正确

注意:必须切换至oracle用户

/usr/local/bin/isql –v DMHS dmhs dmhs

如果连接正常则表示配置正确。

3.4 安装dmhs,并检查DMHS执行端环境

安装步骤参见DM端配置2.1步骤,此处省略。

 目的端为oracle,建议将DMHS 软件所属用户组调整为oracle:oinstall 中,避免出现用户权限原因导致环境变量引用缺失!!!

3.4.1 验证DMHS执行环境:

oracle1:/home/oracle/dmhs/bin(prod)> ldd libdmhs_exec.so

安装完数据库后,使用ldd libdmhs_exec.so查看执行端的动态库依赖是否完整,不完整的话,需要对环境变量路径进行补全,或进行已有环境变量的软链接。

这里将缺失的动态库补齐,部分动态库来自dmdbms/bin下copy的

3.4.2 验证oracle服务名称

DMHS 装载历史数据时,需要通过数据库网络服务名来抽取数据库的数据。配置 ORACLE 数据库的网络服务名可通过 ORACLE NCA 工具进行配置,也可直接修改 $ORACLE_HOME\network\admin\tnsname.ora 文件。

下例为直接修改 tnsname.ora 来添加数据

库服务监听:

prod =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.135.88 )(PORT = 1521)) (CONNECT_DATA =

 (SERVER = DEDICATED)

配置完成之后,可使用 oracle 客户端工具 sqlplus 测试配置是否正确。 例如: sqlplus dmhs/dmhs@prod 如果配置正确,则可成功登陆数据库。

3.5 查看数据库归档状态

--确认ORACLE_SID后,使用sqlplus / as sysdba登录数据库

SQL> archive log list

--若为非归档模式(no archive mode),需关闭实例并以mount状态启动。

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;

SQL> alter system set db_recovery_file_dest=’’;

SQL> alter system set log_archive_dest_1='location=/arch';

SQL> alter database open;

SQL> archive log list

3.6开启逻辑附加日志

查看全列日志查看是否开启

SQL>select supplemental_log_data_min,supplemental_log_data_all from v$database;

  1. 开启数据库最小附加日志及全列日志。如果日志已开启,则跳过本步骤

SQL> alter database add supplemental log data;

SQL> alter database add supplemental log data (all) columns;

SQL> select supplemental_log_data_min,supplemental_log_data_all from v$database;

开启附加日志不需要重启 ORACLE 数据库服务,但重启数据库服务可加快 附加日志开启速度。

3.7 oracle端 DDL 支持

DMHS 支持源端 DDL 的同步。源端 DDL 同步必须满足一下三个条件:

  1. 源端数据库必须允许 DDL 触发器的触发动作,即数据库参数 _system_trig_enabled 为 TRUE 或者未设置。查看该参数的命令如下:

SQL> show parameter "_system_trig_enabled";

SQL> alter system set "_system_trig_enabled"=true;

  1. 登录数据库在DMHS用户下执行:

可选择含触发器的DDL同步方式,也可是选择不含触发器DDL的同步方式

以下为选择DDL同步方式,执行以下sql文件,文件在/dmhs/script目录下:

SQL>start /home/oracle/dmhs/scripts/ddl_sql_ora.sql

  1. 需要日志捕获模块对 ddl_mask 进行设置。例如op:obj(代表同步所有对象), ddl_mask 可对同步对象进行过滤。

3.8  同步连接用户&授权

(11G环境)创建用户DMHS作为连接用户,授权若不能以dba角色授予以下权限:

create user dmhs identified by dmhs;

grant connect to dmhs;

grant select any table to dmhs;

grant select any dictionary to dmhs;

grant create table to dmhs;

grant create session to dmhs;

grant lock any table to dmhs;

grant execute on dbms_flashback to dmhs;

grant administer database trigger  to dmhs;

grant create trigger to dmhs;

grant select on sys.obj$ to dmhs;

grant select on sys.user$ to dmhs;

3.9 DMHS启动服务配置

cd /home/oracle/dmhs/bin

cp TemplateDmhsService DmhsService

vim DmhsService

3.10 DMHS配置文件(dmhs.hs)

<?xml version="1.0" encoding="GB2312" standalone="no"?>

<dmhs>

<base>

<lang>en</lang>

<mgr_port>5345</mgr_port>

<name>ORA_HS</name>

<ckpt_interval>60</ckpt_interval>

<siteid>1</siteid>

<version>2.0</version>

</base>

<cpt>

<enable>1</enable>

<name>ora_cpt</name>

<db_type>ORACLE11G</db_type>

<db_server>prod</db_server>

<db_user>dmhs</db_user>

<db_pwd>dmhs</db_pwd>

<db_port>1521</db_port>

<idle_time>300</idle_time>

<ddl_mask>OP:OBJ:REC</ddl_mask>

<parse_thr>1</parse_thr>

<check_date>0</check_date>

<char_code>PG_GBK</char_code>

<arch>

<clear_flag>0</clear_flag>

<clear_interval>600</clear_interval>

</arch>

<send>

<max_log_num>2000</max_log_num>

<ip>192.168.135.1.</ip> #写DM端的地址

<mgr_port>5345</mgr_port> #需要与源端的端口对应

<net_pack_size>256</net_pack_size> #需要与源端的端口对应

<data_port>5346</data_port>

<timeout>0</timeout>

<filter>

<name_len>255</name_len>

<enable>

<item>DMHS.*</item> #根据oracle实际用户而定

</enable>

</filter>

<map>

<item>DMHS.*==DMHS.*</item>#根据oracle用户名而定,对应DM端的模式名。如PDB模式下,MAP模块不变

</map>

</send>

<send_delay_second>0</send_delay_second>##源端到目的端延时秒数

<start_scn>0</start_scn>##加载归档日志时的最小SCN

<supplement_log>0</supplement_log>是否支持只开启表级附加日志0不支持1支持

<rec_heap_size>16</rec_heap_size>##日志分析链表单个节点的内存堆大小,一般默认16M即可

<vpool_size>8</vpool_size>##CPT模块使用共享内存池大小,默认8M即可(DDL操作多或开启在线日志备份功能时需要配大一些)

</cpt>

</dmhs>

四.DMHS进行全量和增量同步

4.1  源端创建数据(Oracle端)

create table dmhs.test_insert(id int,name varchar(100),addr varchar(200));

insert into dmhs.test_insert values(1,'liu','bj');

insert into dmhs.test_insert values(2,'you','lz');

insert into dmhs.test_insert values(3,'rui','sx');

commit;

4.2启动Oracle端和DM端dmhs服务

启动装载字典前,一定要先将两端的执行器启动,创建好执行端的辅助表后再装载字典。Oracle端要切换至oracle用户

Oracle端:

oracle1:/home/oracle/dmhs/bin(prod)>./DmhsService start

Starting DmhsService:                                      [ OK ]

DM端:

[dmdba@DM1 bin]$ ./DmhsService start

Starting DmhsService:                                      [ OK ]

全量同步:

4.3 启动控制台执行命令

Oracle 端:

./dmhs_console

connect 192.168.135.88:5345

DM 端:

./dmhs_console

connect 192.168.135.1:5345

4.4 字典的初始化和数据装载

DM端:

    start  exec;

Oracle端:

CLEAR EXEC LSN  清空目标端的事务表,设置日志起始 LSN

COPY 0 "SCH.NAME='DMHS'" DICT|CREATE|INSERT

增量同步

4.5 开启CPT同步

场景说明:目标端已经有相关数据表和数据,不需要装载数据,直接进行CPT模块启动;

Oracle端:

./dmhs_console

connect 192.168.135.88:5345

start cpt

 开启后,可以继续进行同步,目前这种配置暂时只适用于静态库。

DM端:此时,可以实时同步DMHS下的数据

五.验证同步情况

全量同步后:

Oracle端:

DM端:

增量同步后:

Oracle端:

insert into dmhs.test_insert values (4,'xx','sh');

commit;

DM端:

插入数据验证同步成功!

六.报错处理

6.1 启动dmhs后,出现乱码

原因:启动脚本DmhsService的字符集设置为ZHS16GBK,而且建议将dmhs.hs中lang改为英文,这样能做到任何环境都适配。

解决:

  1. 修改启动脚本的参数为:HS_NLS_LANG=“AMERICAN_AMERICA.AL32UTF8”
  2. 修改dmhs.hs中参数为:<lang>en</lang>

6.2 unixODBC配置文件及环境变量注意点

odbc.ini中配置的用户名、密码、服务名、端口根据目的配置指定。

安装完成后检查LD_LIBRARY_PATH环境变量是否存在unixODBC库路径:(根据实际unixodbc安装路径而定)

若不存在,永久添加

vim .bash_profile

添加exeport LD_LIBRARY_PATH=/u01/app/oracle/product/11.2/db/lib/:/usr/lib

使用修改的内容立即生效

source .bash_profile

6.3 源端数据装载报错load log analysis module failure

后台日志报错:

2023-06-09 18:24:04 MGR[INFO]: load ORACLE log analysis module...

2023-06-09 18:24:04 MGR[ERROR]: lib libcpt_ora.so can not found,error code 0, errmsg:libcpt_ora.so: cannot open shared object file: No such file or directory

2023-06-09 18:24:04 MGR[INFO]: Log analysis module loading failure

原因&解决:

find该动态库:

[root@oracle1 ~]# find / -name "libcpt_ora.so"

[root@oracle1 ~]#

发现不存在该文件,怀疑和dmhs版本有关,经在博客查看后发现该文件原本存在于/dmhs/bin下,但实际不存在,此次在Oracle安装的dmhs包为dm8通用,替换为Oracle的dmhs包即可。附博客报错处理:http://t.csdn.cn/QkKH6

达梦云适配技术社区
https://eco.dameng.com/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值