2021-02-26

Oracle到dm8的双向同步
1、dm8端的配置
1)开启逻辑附加日志
修改dm8中“dm.ini”中的RLOG_APPEND_LOGIC参数的值设置为1。
2)开始归档日志
(1)将dm8数据库配置文件“dm.ini”中的ARCH_INI参数值设置为1。
(2)在与dm.ini相同目录下,增加配置文件“dmarch.ini”,并添加归档配置参数内容(可以参见dmarch_example.ini文件配置格式)。示例如下:
[ ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/data/DAMENG/arch
ARCH_FILE_SIZE = 256
ARCH_SPACE_LIMIT = 10240
3)DDL同步配置
使用SYSDBA用户执行ddl_sql_dm8.sql,建立DDL同步的触发器和辅助表。
1.1 dm8端dmhs配置文件

<?xml version="1.0" encoding="utf-8"?> en 5545 2 1 2.0 5545 5546 DM8 192.168.10.15 SYSDBA SYSDBA123 5236 4 512 5000 250 2 dm8 192.168.10.15 SYSDBA SYSDBA123 5236 obj:op 1 600 1 192.168.10.35 5645 5646 0 0 0 0 0 SYSDBA.* SYSDBA.*==DMHS.* 2、Oracle端的配置 oracle端需要安装unixODBC。 2.1安装unixODBC (1)通过源码安装(需要有gcc) gunzip unixODBC-2.3.0.tar.gz tar –xvf unixODBC-2.3.0.tar cd unixODBC-2.3.0 ./configure make && make install 默认安装路径为/usr/local目录下面,如果要指定安装目录,可以在configure的后面指定--includedir=/usr/include --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc 在aix平台编译unixodbc是需要设置一下环境变量: export CC=gcc export CFLAGS="-maix64 -DBUILD_REAL_64_BIT_MODE" export OBJECT_MODE=64 ./configure --enable-drivers=no --enable-gui=no gmake && gmake install 注意aix平台下面一定要使用gmake 编译。 如果数据库中需要支持对中文表名和字段名的同步,则需要将unixODBC编译选项增加以下两个: --enable-iconv=yes --with-iconv-char-enc=GB18030 (2)通过rpm包安装 rpm -ivh unixODBC-2.3.0-5.i386.rpm rpm -ivh unixODBC-devel-2.3.0-5.i386.rpm (3)直接拷贝 找到对应平台的unixODBC动态库,将其拷贝到/usr/local/lib下。 2.2 配置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 = Oracle in OraDb10g_home1
SERVER = 192.168.3.11
UID = test
PWD = hust4400
Servername = ORCL 对应oracle中tnsnames.ora中的服务名
PORT = 1521

vi /usr/local/etc/odbcinst.ini
[Oracle in OraDb10g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /u01/app/oracle/product/10.2.0/db_1/lib/libsqora.so.10.1
Threading = 0
配置unixodbc中一定需要检查driver中的路径是否存在,如果是在aix,则driver中的lib库为libsqora.so。需要检查使用的libsqora.so文件位数和oracle版本位数是否一致。
可以通过 ls –la /u01/app/oracle/product/10.2.0/db_1/lib/libsqora.so.10.1检查文件是否存在。也可以通过ldd /u01/app/oracle/product/10.2.0/db_1/lib/libsqora.so.10.1检查依赖的文件是否都能够找到。如果没有找到,则为环境变量问题,检查环境变量LD_LIBRARY_PATH。
注意:odbc.ini和odbcinst.ini中每行开头禁止留有空格,否则会有如下报错信息:
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect。

1)检查unixODBC配置是否正确
注意:必须切换至oracle用户
/usr/local/bin/isql –v DMHS test hust4400
如果连接正常则表示配置正确。
2)将unixodbc动态库加到目的端DMHS安装用户环境变量中
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
(注:如果源端oracle是windows平台,windows端安装oracle后会有oracle odbc驱动,只需要在ODBC数据源中输入oracle的用户名和密码,并鼠标点击测试连接即可,如新建dmhs用户,给与dba权限,密码也是dmhs,输入用户名密码,点测试连接,测试连接成功表示oracle端odbc已配通)
2.3 检查DMHS执行端环境
1) 检查DMHS执行端依赖的动态库
unixODBC 2.3.0版本编译出来的动态库为libodbc.so.1,unixODBC2.3.2版本编译出来的动态库为libodbc.so.2。有时候执行启动时会报错找不到libdmhs_exec.so文件是由于ODBC动态库版本不一致导致。可以通过ldd libdmhs_exec.so检查。
oracle > ldd libdmhs_exec.so
linux-vdso.so.1 => (0x00007fff5ddff000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8a96ebe000)
libm.so.6 => /lib64/libm.so.6 (0x00007f8a96c67000)
librt.so.1 => /lib64/librt.so.1 (0x00007f8a96a5e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8a96841000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f8a9663c000)
libdmhs_pub.so (0x00007f8a96354000)
libdmhs_ucvt.so (0x00007f8a95e5f000)
libodbc.so.1 => /usr/local/lib/libodbc.so.1 (0x00007f8a95bf1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8a97557000)
如果ldd libdmhs_exec.so依赖的动态库为libodbc.so.2,但是安装的unixODBC版本为2.3.0,此时需要做个软连接操作解决该问题。
ln -s /usr/local/lib/libodbc.so.1 /usr/local/lib/libodbc.so.2
2) 检查执行端运行环境NLS_LANG
检查dmhs服务的用户的环境变量NLS_LANG是否设置,查看echo $NLS_LANG
echo $NLS_LANG
如果查询出来是空值,则需要从ORACLE数据库中查询字符集,方法如下:
SQL> select userenv(‘language’) from dual;
USERENV(‘LANGUAGE’)

AMERICAN_AMERICA.ZHS16GBK
将环境变量NLS_LANG设置为查询值。
3) oracle端数据库配置数据库服务网络服务名
DMHS 装载历史数据时,需要通过数据库网络服务名来抽取数据库的数据。配置 ORACLE 数据库的网络服务名可通过 ORACLE NCA 工具进行配置,也可直接修改 $ORACLE_HOME\network\admin\tnsname.ora 文件。
下例为直接修改 tnsname.ora 来添加数据
库服务监听:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA =
(SERVER = DEDICATED)
配置完成之后,可使用 oracle 客户端工具 sqlplus 测试配置是否正确。 例如: sqlplus dmhs/dmhs@ORCL 如果配置正确,则可成功登陆数据库。
2.4开启oracle端数据库的归档及附加日志
DMHS 通过分析 ORACLE 数据库的归档/在线日志来捕获数据库的增量数据,DMHS 运行之前,必须将数据库设置为归档模式,同时开启最小附加日志及全列日志。修改数据库 为归档模式需重启数据库服务,在操作只需,需确认工作环境能停机维护。具体操作过程如 下:
1)修改数据库归档模式。如果数据库已经为归档模式,则跳过本步骤。
a)sqlplus 登录到源端数据库
b)关闭数据库服务
c)以 mount 方式启动 ORACLE 数据库服务
d)开启数据库归档,并设置归档文件路径

e)重启数据库,使归档路径生效
关闭 oracle 数据库:
mount 方式启动数据库:
f)将数据库切换到正常的工作状态,打开数据库
可使用 sqlplus 执行 archive log list 查看数据库归档模式。
2)开启数据库最小附加日志及全列日志。如果日志已开启,则跳过本步骤

开启附加日志不需要重启 ORACLE 数据库服务,但重启数据库服务可加快 附加日志开启速度。
2.5 oracle端 DDL 支持
DMHS 支持源端 DDL 的同步。源端 DDL 同步必须满足一下三个条件:

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

2)需要在源端数据库以 sys 用户,在 sys 模式下创建 DDL 触发器及 DDL 记录表,详 细参照 dmhs_ddl.sql 脚本。
3) 需要日志捕获模块对 ddl_mask 进行设置。例如op:obj。 ddl_mask 可对同步对象进行过滤,详细参数请参照 ddl_mask 参数说明。
2.7oracle端配置文件

<?xml version="1.0" encoding="utf-8"?> en 5645 2 2 2.0 5645 5646 ORACLE10g oadb dmhs dmhs 1521 4 512 5000 250 2 ORACLE10g oadb dmhs dmhs 1521 obj:op 1 600 1 192.168.10.15 5545 5546 0 0 0 0 0 DMHS.* DMHS.*==SYSDBA.*

2.8 启动dmhs服务
双向同步中,装载字典前,一定要先将两端的执行器启动,创建好执行端的辅助表后再装载字典。Oracle端是linux平台的话要切换至oracle用户
1)启动两端服务
此处一定要用exec和cpt分别启动,不能用start命令,start命令后不接cpt或exec会根据配置文件同时启动cpt和exec。

[root@slb bin]# ./dmhs_console
DMHS >connect 192.168.10.15:5545
DMHS>start exec

[oracle@slb2 bin]# ./dmhs_console
DMHS >connect 192.168.10.35:5645
DMHS>start exec
2)装载字典
[root@slb bin]# ./dmhs_console
DMHS >connect 192.168.10.15:5545
DMHS>copy 0 “sch.name=‘SYSDBA’” dict

[oracle@slb2 bin]# ./dmhs_console
DMHS >connect 192.168.10.35:5645
DMHS> copy 0 “sch.name='DMHS’” dict
3) 启动cpt服务
[root@slb bin]# ./dmhs_console
DMHS >connect 192.168.10.15:5545
DMHS>start cpt

[oracle@slb2 bin]# ./dmhs_console
DMHS >connect 192.168.10.35:5645
DMHS>start cpt

已标记关键词 清除标记
相关推荐
<p> <span style="color:#337FE5;"><strong>【为什么还需要学习C++?】</strong></span> </p> <p style="margin-left:0cm;"> 你是否接触很多语言,但从来没有了解过编程语言的本质? </p> <p style="margin-left:0cm;text-align:start;"> 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? </p> <p style="margin-left:0cm;text-align:start;"> 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? </p> <p style="margin-left:0cm;text-align:start;">   </p> <p style="margin-left:0cm;text-align:start;"> 那么C++就是你个人能力提升,职业之路进阶的不二之选。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;"> <strong><span style="color:#337FE5;">【课程特色】</span></strong> </p> <p style="margin-left:0cm;text-align:start;"> 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 </p> <p style="margin-left:0cm;text-align:start;"> 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 </p> <p style="margin-left:0cm;text-align:start;"> 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p class="ql-long-24357476"> <span style="color:#337FE5;"><strong>【学完后我将达到什么水平?】</strong></span> </p> <p class="ql-long-24357476"> 1.对C++的各个知识能够熟练配置、开发、部署; </p> <p class="ql-long-24357476"> 2.吊打一切关于C++的笔试面试题; </p> <p class="ql-long-24357476"> 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 </p> <p class="MsoNoSpacing" style="margin-left:18pt;"> <br /> </p> <div> <br /> </div> <p> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#337FE5;"><strong>【面向人群】</strong></span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">1.希望一站式快速入门的C++初学者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">2.希望快速学习 C++、掌握编程要义、修炼内功的开发者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">3.有志于挑战更高级的开发项目,成为资深开发的工程师。</span> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p> <br /> </p> <p> <span style="color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> 本课程包含3大模块 </p> <p> <strong>基础篇</strong><br /> 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 </p> <p> <br /> <strong>进阶篇</strong><br /> 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 </p> <p> <br /> <strong>提升篇:</strong><br /> 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。 </p> <p> <img src="https://img-bss.csdnimg.cn/202007091130239667.png" alt="" /> </p>
百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密   Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。   设定字符串为“张三,你好,我是李四”   产生张三的密钥对(keyPairZhang)   张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节   通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥   Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输   Jav
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页