准备了两台Linux系统的虚拟机,已分别安装好Oracle 11和DM8数据库。
以下是对两台机器所做的部署规划:
服务 数据库 IP地址 端口号
DMHS源端 Oracle 192.168.61.131 5236
DMHS目的端 DM8 192.168.61.132 1521
在bin目录下,使用disql连接到数据库,查询数据库是否开启了归档。
开启逻辑日志后,重启数据库生效。
将dm.ini中的参数“FAST_COMMIT”设置为0,防止逻辑日志不全影响同步。
给用户授权,使其获取同步操作需要的权限。
SQL> grant resource to DMHS;
SQL> grant select any table to DMHS;
SQL> grant dba to DMHS;
SQL> grant unlimited tablespace to DMHS;
yum -y install unixODBC
使用以下命令查看配置文件路径:
odbcinst -j
对配置进行以下修改:
修改命令如下: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
创建归档目录 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; # 再次检查归档
附加日志(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;
使用以下命令检查 oracle 回收机制 :
SQL> show parameter recyclebin; #如果为on,需要关闭回收机制
SQL> alter system set recyclebin=off deferred;
需要重启数据库才能查看更新情况。
查询Oracle数据库字符集:SQL> select userenv('language') from dual;再查询系统字符集:echo $NLS_LANG
如果该变量值为空或者与查询结果不一致,则将该变量设置为查询结果的值
vi ~/.bash_profile # 增加 export NLS_LANG=”sql查询结果”
source ~/.bash_profile
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;
切换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文件目录
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
进入图形化界面,按照默认推荐进行安装。最后对安装信息进行校对。
对远程部署工具进行配置。安装完成。
按照同样的步骤运行bin文件并进行安装操作。
修改配置文件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 模块
修改配置文件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
创建表t2,并插入数据,提交数据。
查询插入的数据。
问题描述:
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
问题描述: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
问题描述:
启动DM8端DMHS服务后,执行start exec命令时报错:CSL[ERROR]: message receive failed。
产生原因:
查看模块依赖未发现问题。猜测是复制到依赖路径下的接口文件不匹配,查阅资料后发现dmhs下的 bin目录下是DMHS内置元数据库dm7的路径,也就是说此时执行器链接的是dm7的libdmoci.so所以执行异常。默认使用dm8的bin文件安装中并不包含oci接口库,不能接受信息。
解决方案:
另外添加oci动态接口文件:libdmoci.so文件,重新运行DMHS服务和指令,已经可以正常运行。
问题描述:
源端Oracle启动DMHS服务后,执行copy报错:CSL[ERROR]:需要停止捕获模块。
产生原因:
装载字典或者装载数据只能在 cpt 停止的时候进行,因此DMHS同步过程中如果需要进行字典或者数据的装载时,要先执行 stop cpt 后再进行 copy 装载。
解决办法:
先执行stop cpt,再执行copy操作。
文章
阅读量
获赞