ODI配置使用日志记录streams实现表同步
来源:互联网 发布:人工神经网络算法实例 编辑:程序博客网 时间:2024/04/29 22:01
一、配置数据库
1、修改需要发布表的数据库服务器系统变量
由于在ODI的操作中会帮我们设置数据库的参数(如java_pool、streams_pool_size)这里只需要设置补充和强制记录模式,实际在操作流程中ODI会帮我们设置特定表的日志模式,不过为了保险还有对更多表的操作有效,还是自己设置一下。
查看归档日志模式
archive log list
修改归档日志模式
alter database force logging;
alter database add supplemental log data;
2、给需要发布表的用户增加权限
需要赋予的权限有:connect\resource\create view\create database link\create synonym\createsession\create table\create sequence\create procedure\ dba\execute_catalog_role\select_catalog_role\execute ondbms_cdc_publish\execute on dbms_lock\unlimited tablespace\begin dbms_streams_auth.grant_admin_privilege('SCOTT1_NEW1'); end;\table_name(这里是需要赋予发布者要发布的表名的权限)\
3、给需要订阅表的用户增加权限
create user scott2 identified by tiger2default tablespace users;
grant connect,resource to scott2;
grant create database link to scott2;
grant create synonym to scott2;
//另外需要创建一个表结构与发布者的表结构相同的表
二、配置ODI
1、创建主资料库,并连接。(执行后可以看到除设计器以外的所有模块)
2、创建工作资料库,并连接。(执行后可以看到设计器模块)
创建工作资料库后并连接才有设计器(工作资料库是保存项目和数据模型的)
3、配置拓扑中的物理结构和逻辑结构
坑1:用户名大小写(原因:oracle对大小写敏感)
如果这里的用户名使用的小写,后面的odi自动生成的语句中,调用该用户名时就会加上“”,会出现一些问题。
坑2:把数据库A的数据导入到数据库B的相同结构表时,需要建立DBLINK,且需要配置其名字,否则会出现同义词无效,实际为在库B找不到库A的视图导致。(原因:库A和库B的物理结构中需要配置dblink名,不能使用类似orcl关键字。)
物理结构中主要配置物理结构中的{定义}{JDBC}两个页面
逻辑结构中主要配置{定义}和{上下文}两个页面
Ps:scott1是源数据库,scott2是目标数据库(这里我使用的是本机)
三、配置设计器
1、创建项目并导入知识模型
这里只需要配置一个页面
展开Designer=>知识模型,右键导入知识模型,把需要使用的知识模型导入到该项目中,这里我们使用的分别是:RKM Oracle、LKM Oracle to Oracle、CKM Oracle、IKM Oracle Incremental Update、JKM Oracle 11g Consistent (Streams)(由于我们使用的是流实现同步,所以使用该知识模块)、SKM(这里我没有使用,等以后的项目中需要再视情况导入)。
2、创建模型
新建两个模型,分别对应源数据库和目标数据库
模型的配置中主要配置{定义}{选择性逆向工程}{控制}{日记记录}四个页面
这里的逻辑方案使用的是我们前面配置的逻辑方案,注意大小写。
(这个页面的配置放在最后面,在各个页面配置好保存后,再进入该页面,然后打上如图中三个勾就会显示需要逆向工程导入到ODI的表,选择需要导入的表,即需要进行数据同步操作的表,配置好后点击左上角的逆向工程,会将需要的表导入到ODI中,如果导入失败,说明前面的物理配置或者逻辑配置是有问题的)
(这里使用我们前面导入的CKM)
(这里使用我们前面导入的JKM)
3、开启CDC日志记录
由于源表(这里我使用的scott1的EMP)在映射前必须要设置主键,所以我们先给它设置主键,对应表的主键。
展开scott1=>EMP=>约束条件,右键=>新建关键字,给关键字命名,然后在{列}中选择表中对应的主键,ctrl+s保存。Scott2=>EMP同。
右键点击源数据库中的源表,添加到CDC
添加成功后,在scott1的{已进行日志记录的表}中可以看到EMP
3、设置订阅表
展开scott2=>EMP右键=>已更改数据捕获=>订户=>订阅
输入订阅名,添加,这里的订阅会在后面的日志记录中用到,日志记录后查看日志记录中会有不同订户名的多条记录,如插入一条数据会显示多个订户的多个插入数据的记录。
4、创建接口
新建接口,选择Oracle:scott2.SCOTT2(目标数据库)
将左边的源表和目标表分别拖入映射区域,左边的区域是数据源,右边的区域是目标源。
即:源表拖入左边,目标表拖入右边,选择自动映射。
点击源表EMP,勾选仅已进行日记记录的数据,这里是在设置筛选器。
然后出现了一个筛选器的图片,点击后设置如下(这里的test2是前面的订户名):
进入流,设置映射过程中的各个知识模块。
保存,接口创建成功。
四、测试执行
1、测试连接数据库是否成功(在前面的)物理结构中配置{jdbc}后左上有测试连接。
2、测试逆向工程能否成功导入表(在前面的)模型中点击逆向工程后,能否看到有表出现在模型(scott1或scott2)下。
3、测试日志能否正常记录
开启CDC后,右键该发布表。
启动日志后,查看
启动成功后,在源数据库中增删改数据commit后,在查看日记记录。
正常情况下,日志记录中会有不同订户的相同的各个操作记录。(在同步模式下记录日志后显示正常)
Ps:我的问题就是出现在这里,前面的执行过程都是成功的,但是在这里找不到日志记录。
推测:
(1) 可能是该数据库中测试数据等执行过很多不同的指令,导致了在某个环节出现问题。
(2) 执行过程中没有报错,说明sql语句都是成功执行了,那么原因有可能如下:
1) ODI无法检测出某些sql报错,比如当sql语句无效时直接跳过。
2) Sql全部正常运行,但是在日志记录的过程中出现问题,或者日志记录后文件无法保存。
3) ODI无法正常解析Oracle生成日志文件
尝试方案:
1. 测试换个用户、换个数据库重新配置执行。
2. 1)把ODI中生成的语句在Oracle中按流程测试执行
2)在源数据库中查找日志记录表
3)在源数据库中查找日志文件
查看各个步骤的源代码时发现问题发生在源库的SNP_CDC_SET中缺失改变集。
于是我试图直接在表SNP_CDC_SET中插入一条名为改变集为SCOTT1.SCOTT1、订阅者为test2的数据。
重新启动日志并测试数据,发现日志数据能成功导出。
错误原因还没有找到,偶然通过这种方式解决了我目前的问题。
目前推测为:我在之前的测试中尝试移除过一些表数据,导致了移除掉步骤中重要的表(SNP_CDC_SUBS)的数据
4、测试接口过程能否成功执行
日志记录能正常记录后,测试能否映射成功,右键点击接口=>执行。
查看操作记录,能否正常运行。如果运行正常,在目标数据库中的表下能看到已更新到与源库一致,同步后,日志记录也会被清空。
注意:数据同步方案执行成功完成后还有延迟才能查阅到同步的数据。(但此时日志文件已经被处理,即日志文件数据为空,同步还未完成)
- ODI配置使用日志记录streams实现表同步
- ODI利用CDC实现实时同步数据
- ODI实现同步Planning主数据
- crontab 配置、日志使用记录
- 使用logback实现日志记录
- odi 配置
- log4j配置相对路径实现日志记录
- log4j配置相对路径实现日志记录
- log4j配置相对路径实现日志记录
- log4j配置相对路径实现日志记录
- log4j配置相对路径实现日志记录
- log4j配置相对路径实现日志记录
- 使用ZooKeeper实现配置同步
- 使用ZooKeeper实现配置同步
- 使用ZooKeeper实现配置同步
- 使用ZooKeeper实现配置同步
- 使用log4j.xml配置系统记录日志
- log4net日志记录,配置使用步骤
- Leetoced 81. Search in Rotated Sorted Array II
- 【Deep Learning】win10下无GPU配置tensorflow
- 利用爬虫技术获取网页数据,以及想要的指定数据
- 如何在cmd下面启动Tomcat?
- 汉诺塔问题
- ODI配置使用日志记录streams实现表同步
- 使用VMWareWorkstation10搭建学习环境(学习笔记)
- 计算机视觉学习笔记:深度学习基础——CS231n_assignment1
- 50道java基础编程(1~5)
- feign上使用摘要认证
- Gabor滤波器
- 安卓简单接口上传头像
- 求数列的和
- Linux多线程编程之线程属性设置