注册
Oracle到DM8的DMHS部署
培训园地/ 文章详情 /

Oracle到DM8的DMHS部署

Talking 2023/09/26 1618 0 0

Oracle到DM8的数据同步

一. 前期准备

  1. 准备了两台Linux系统的虚拟机,已分别安装好Oracle 11和DM8数据库。

  2. 以下是对两台机器所做的部署规划:

服务 数据库 IP地址 端口号
DMHS源端 Oracle 192.168.61.131 5236
DMHS目的端 DM8 192.168.61.132 1521

二. 目的端准备

1.开启归档日志

在bin目录下,使用disql连接到数据库,查询数据库是否开启了归档。

image20230829101128201.png

2.开启逻辑日志

开启逻辑日志后,重启数据库生效。

image20230829102102374.png

将dm.ini中的参数“FAST_COMMIT”设置为0,防止逻辑日志不全影响同步。
image20230829102129174.png

3.创建同步用户

给用户授权,使其获取同步操作需要的权限。

SQL> grant resource to DMHS;
SQL> grant select any table to DMHS; 
SQL> grant dba to DMHS;
SQL> grant unlimited tablespace to DMHS;

image20230829102143848.png

4.安装ODBC


yum -y install unixODBC

使用以下命令查看配置文件路径:

odbcinst -j

image20230829110029009.png

对配置进行以下修改:

修改命令如下:vi /etc/odbcinst.ini

[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8 Driver = /dm8/bin/libdodbc.so

vi /etc/odbc.ini,添加以下内容:

[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
测试连接效果,使用 dmdba 用户执行 isql 测试连接是否正常:
isql dm8 -v

image20230829142046845.png

三. 源端准备

1. 开启归档日志

创建归档目录 mkdir opt/module/oracle/oradata/orcl/archlog使用以下命令登录到数据库服务:
sqlplus / as sysdba

运行以下指令开启归档日志:


SQL> startup mount	# 以 mount 方式启动 oracle 数据库

SQL> alter database archivelog; # 开启归档

SQL> alter system set db_recovery_file_dest='';

SQL> alter system set log_archive_dest='/opt/oracle/oradata/orcl/archlog'; # 设置归档文件路径(如果使用本地路径存放归档日志,需要将 db_recovery_file_dest 参数置空,然后设置log_archive_dest 参数)
SQL> alter database open; # 恢复为 open 状态
SQL> archive log list; # 再次检查归档

image20230829145658289.png

2.开启附加日志

附加日志(supplemental log)指数据库在日志中添加额外信息到日志流中,以支持基于日志的工具,进行数据的分析。

检查附加日志:
SQL> select SUPPLEMENTAL_LOG_DATA_MIN min,SUPPLEMENTAL_LOG_DATA_PK pk,SUPPLEMENTAL_LOG_DATA_UI ui,SUPPLEMENTAL_LOG_DATA_FK fk, SUPPLEMENTAL_LOG_DATA_ALL "all" from v$database;
开启数据库最小附加日志级全列日志。

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

#再次检查附加日志

SQL> select SUPPLEMENTAL_LOG_DATA_MIN min,SUPPLEMENTAL_LOG_DATA_PK pk,SUPPLEMENTAL_LOG_DATA_UI ui,SUPPLEMENTAL_LOG_DATA_FK fk, SUPPLEMENTAL_LOG_DATA_ALL "all" from v$database;

image20230829151546901.png

3.关闭Oracle回收机制

使用以下命令检查 oracle 回收机制 :

SQL> show parameter recyclebin; #如果为on,需要关闭回收机制

SQL> alter system set recyclebin=off deferred;

需要重启数据库才能查看更新情况。

image20230829152001936.png

4.检查字符集是否一致

查询Oracle数据库字符集:SQL> select userenv('language') from dual;再查询系统字符集:echo $NLS_LANG
如果该变量值为空或者与查询结果不一致,则将该变量设置为查询结果的值

vi ~/.bash_profile # 增加 export NLS_LANG=”sql查询结果”

source ~/.bash_profile

image20230829153124612.png

5.创建同步用户

SQL> create user DMHS identified by "DMHS" default tablespace USERS temporary tablespace TEMP profile DEFAULT;
SQL> grant connect to DMHS;
SQL> grant create any table to DMHS; SQL> grant select any table to DMHS;

SQL> grant select any dictionary to DMHS; SQL> grant create session to DMHS;
SQL> grant lock any table to DMHS;
SQL> grant execute on dbms_flashback to DMHS; SQL> grant unlimited tablespace to DMHS;

image20230829153912787.png

6.安装ODBC

切换root用户安装ODBC:yum -y install unixODBC

配置unixODBC,新增odbc.ini文件,并添加以下内容:

[ORACLE]
Description = Oracle ODBC driver for Oracle 11g Driver= Oracle in OraDb11g_home1
SERVER = 192.168.61.131 ServerName = orcl
UserID = DMHS Password = DMHS Port = 1521
配置 odbcinst.ini 文件,新增以下内容:

[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /opt/module/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1 Threading = 0
配置完成之后,切换到 oralce 用户测试, 使用isql 命令测试配置是否正确。isql -v ORACLE DMHS DMHS。

四. 安装部署DMHS

1. 目的端(DM8)安装DMHS

创建dmhs文件目录

mkdir /opt/dmhs

将安装文件上传到虚拟机中,修改权限进行运行安装。

chmod +x dmhs_V4.3.06_dm8_rev124224_rh6_64_veri_20230214_sp2.bin

./dmhs_V4.1.48_pack4_dm8_rev104804_rh6_64_veri_20211228.bin

进入图形化界面,按照默认推荐进行安装。最后对安装信息进行校对。

image20230829104055288.png

对远程部署工具进行配置。安装完成。

2.源端(Oracle)安装DMHS

按照同样的步骤运行bin文件并进行安装操作。

image20230830105818212.png

五. DMHS服务部署

1.目的端(DM8)部署

修改配置文件dmhs.hs:vi /opt/dmhs/bin/dmhs.hs添加以下内容:

<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<ckpt_interval>45</ckpt_interval>
<siteid>4</siteid>
<version>2.0</version>
</base>

<data_port>5346</data_port>

<db_type>dm8</db_type>
<db_server>192.168.61.132</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>

<char_code>PG_UTF8</char_code>
<db_name></db_name>
<exec_thr>8</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>2000</exec_trx>
<exec_rows>2000</exec_rows>
<msg_col_size>30000</msg_col_size>
<ddl_continue>1</ddl_continue>
<affect_row>0</affect_row>
<exec_policy>2</exec_policy>
<enable_rowid>0</enable_rowid>
<clear_trx_file>1</clear_trx_file>
<trx_max_file>8</trx_max_file>

将模板文件复制,并授权给用户。

cp TemplateDmhsService DmhsService chmod +x DmhsService
修改DmhsService内容为:

DMHS_HOME=/opt/dmhs/bin
PROG_DIR=/opt/dmhs/bin
CONF_PATH=/opt/dmhs/bin/dmhs.hs
NEED_LIB_PATH=
HS_NLS_LANG="AMERICAN.AMERICA.AL32UTF8"
启动服务,到/opt/dmhs/bin目录下执行以下命令:

./dmhs_server dmhs.hs start exec
DMHS> exec #启动 exec 模块

image20230901150313023.png

2.源端(Oracle)部署

修改配置文件dmhs.hs:vi /home/oracle/dmhs/bin/dmhs.hs添加以下内容:

<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>45</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>

<db_type>oracle11g</db_type>
<db_server>192.168.61.131:1521/orcl</db_server>
<db_user>DMHS</db_user>
<db_pwd>DMHS</db_pwd>
<ddl_mask>op:obj</ddl_mask>
<char_code>PG_UTF8</char_code>
<clear_interval>600</clear_interval>

<clear_flag>0</clear_flag>
192.168.61.132
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>

DMHS.*

<map>
<item>DMHS.==DMHS.</item>
</map>

将模板文件,复制一份为正式服务并授权:

cp TemplateDmhsService DmhsService chmod +x DmhsService
编辑文件:

vi DmhsService

修改内容如下:

DMHS_HOME=/home/oracle/dmhs/bin
PROG_DIR=/home/oracle/dmhs/bin
CONF_PATH=/home/oracle/dmhs/bin/dmhs.hs
NEED_LIB_PATH=
HS_NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

启动服务,到/home/oracle/dmhs/bin目录下运行以下命令:

./dmhs_server dmhs.hs clear exec lsn
COPY 0 "SCH.NAME='ORCL'" CREATE
COPY 0 "SCH.NAME='ORCL'" INSERT|THREAD|2 start cpt

image20230901152301509.png

image20230901152534125.png

六.验证

1.源端插入

创建表t2,并插入数据,提交数据。

image20230901155538691.png

2.目的端查询

查询插入的数据。

image20230901155510268.png

七.问题与总结

1. Oracle监听问题

问题描述:

Oracle在启动DMHS服务后,运行命令时遇到监听启动问题,控制台报错: Instance “orcl”, status UNKNOWN, has 1 handler(s) for this service.

产生原因:

Oracle端未进行监听配置或是未开启监听服务。

解决方案:

如果未进行监听配置,则进行以下操作。修改listener.ora文件为以下内容。LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.61.131)(PORT = 1521))

) )

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl)(SID_NAME=orcl) (ORACLE_HOME=/opt/module/oracle/product/11.2.0/db_1)))

ADR_BASE_LISTENER = /opt/oracle

修改tnsnames.ora为以下内容。

LISTENER_ORCL =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.61.131)(PORT = 1521)) orcl =
(DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.61.131)(PORT = 1521)) ) (CONNECT_DATA =
(SERVER = DEDICATED) (SID = orcl)
) )

如果是未开启Oracle监听服务,则执行以下命令:

lsnrctl start

2. 依赖问题

问题描述:Oracle安装ODBC中执行isql命令测试配置时,运行失败。

产生原因:

查看配置编写有无错误,排查后发现配置无误。执行以下命令查看依赖有无问题:

ldd /opt/module/oracle/product/11.2.0/db_1/lib/libsqora.so.11.1

发现libodbcinst.so.1 =>not found 错误,依赖缺失。

解决方案:

找到此配置文件并复制到规定路径下即可。查找系统其他位置是否存在此依赖文件,运行命令:

find / -name libodbcinst*

将查找到的结果复制到依赖路径下:

cp /usr/lib64/libodbcinst.so.2 /lib64/libodbcinst.so.1

3. DM8缺少接口

问题描述:

启动DM8端DMHS服务后,执行start exec命令时报错:CSL[ERROR]: message receive failed。

产生原因:

查看模块依赖未发现问题。猜测是复制到依赖路径下的接口文件不匹配,查阅资料后发现dmhs下的 bin目录下是DMHS内置元数据库dm7的路径,也就是说此时执行器链接的是dm7的libdmoci.so所以执行异常。默认使用dm8的bin文件安装中并不包含oci接口库,不能接受信息。

解决方案:

另外添加oci动态接口文件:libdmoci.so文件,重新运行DMHS服务和指令,已经可以正常运行。

4. 装载出错

问题描述:

源端Oracle启动DMHS服务后,执行copy报错:CSL[ERROR]:需要停止捕获模块。

产生原因:

装载字典或者装载数据只能在 cpt 停止的时候进行,因此DMHS同步过程中如果需要进行字典或者数据的装载时,要先执行 stop cpt 后再进行 copy 装载。

解决办法:

先执行stop cpt,再执行copy操作。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服