ODI如何通过logminer技术从oracle 数据库中抽取增量数据(二)

来源:互联网 发布:一元云购cms 漏洞 编辑:程序博客网 时间:2024/05/21 15:49

ODI中通过logminer方式进行变化数据捕捉,需要首先做一些基本工作:

1.      修改数据库启动参数:

alter system set global_names=TRUE scope=BOTH;(如果您的系统里有dblink也可以不修改,到时候修改ODI的也可以)。

alter system set job_queue_processes=6 scope=BOTH;

alter system set open_links=4 scope=SPFILE;

alter system set streams_pool_size=200Mscope=BOTH;

alter system set undo_retention=3600 scope=BOTH;

JOB_QUEUE_PROCESSES (current value) + 2

PARALLEL_MAX_SERVERS (current value) + (5 * (the number of change sets planned))

PROCESSES (current value) + (7 * (the number of change sets planned))

SESSIONS (current value) + (2 * (the number of change sets planned))

Open_cursors一定要大一点(建议1000以上),尤其是10.2.0.4之前的版本。

 

2.      数据库必须在归档模式下,在sqlplus下执行:

 

SQL> select log_mode from v$database;

 

LOG_MODE

------------

ARCHIVELOG

 

如果返回如上,恭喜您,不用做这一步了,否则要执行:

SQL>conn /as sysdba

Connected.

SQL>shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>startup mount

ORACLE instance started.

 

Total System Global Area 301989888 bytes

Fixed Size                 1267140 bytes

Variable Size            163580476 bytes

Database Buffers         130023424 bytes

Redo Buffers               7118848 bytes

Database mounted.

SQL>alter database archivelog;

Database altered.

SQL> alter database force logging;

 

Database altered.

SQL> alter database add supplemental log data;

 

SQL> alter database open;

 

Database altered.

 

 

且记,如果是生产系统,一定不要在工作时间做这样的事情,而且做前一定和管理员和其它用户沟通好,如果您不小心将生产系统弄瘫了,临被干掉前别说俺没提醒过您。

 

3.      在数据库系统里面为ODI的变化数据准备存储空间,为了避免对现有生产系统产生影响,建议单独为其建立一个表空间。

create tablespace TS_ODI
 datafile '/uo1/app/oracle/oradata/test/ts_odi.dbf'
  size8192m
  autoextend on
  next32mmaxsize20480m
 extent management local;

 表空间的大小和您的业务量以及您存储多长时间的变化数据有关,具体场景最好在您的测试环境里面先试试,当然了,如果空间不是很紧张,尽量大一点。

4.      为变化数据捕捉建立一个用户,该用户将被ODI用来连接数据库,并获取变化数据。

CREATE USER cdcadmin

IDENTIFIED BY cdcadmin

DEFAULT TABLESPACE TS_ODI

TEMPORARY TABLESPACE temp

 

了配置和获取变化数据,该用户需要以下权限:

-- system privs

GRANT create session TO cdcadmin;

GRANT create table TO cdcadmin;

GRANT create sequence TO cdcadmin;

GRANT create procedure TO cdcadmin;

GRANT create any job TO cdcadmin;

 

-- role privs

GRANT execute_catalog_role TO cdcadmin;

GRANT select_catalog_role TO cdcadmin;

 

-- object privileges

GRANT execute ON dbms_cdc_publish TO cdcadmin;

GRANT execute ON dbms_cdc_subscribe TO cdcadmin;

 

-- streams specific priv

execute dbms_streams_auth.grant_admin_privilege('CDCADMIN');

 

grant select on any table to cdcadmin(这里其实只要对生产系统需要捕获数据的schema相关表授权即可,这样设有点大,这里只是为了简单)

Grant dba to cdcadmin(其实这一步可以不要,但为了操作简单,建议您还是加上,在ODI中启动日志完成后,再把其DBA revoke回去即可,说白了只是在ODI启动日志时需要,一旦启动完成,抓取数据不需要)

如果管理员坚决不能给您DBA权限,那也可以到knowledge module中修改其step即可,将需要DBA权限的步骤在knowledge module中去掉,让管理员帮忙做一下(其实只有一个步骤需要DBA,也就是这一句话alter database add supplemental log data)。如果管理员连这也不同意,那就没招了,等死吧。

 

至此,数据库的相关准备工作完成,下面就是ODI的配置工作了,关于ODI repository的配置请参照其随机文档,我们这里假设您的ODI已经做好基本配置了:

1.      打开topology manager,在物理体系架构上建立一个物理服务器(这里我们假设oracle数据库中生产数据存储在sh schema上)。在定义上起个名,输入连接数据库的用户名口令:cdcadmin/cdcadmin.

 

2.      点击JDBC TAB页:

3.      输入完成后,点击一下右下角的测试,如果通了就ok了。

4.      如下图,打开物理服务器下的物理架构,这里我们物理服务器叫sh,逻辑架构也叫sh

 

 

这是非常关键的一步,如上图中我用红色标出的两个椭圆,上面那个是源系统中实际生产数据所在的schema,下面那个是存储临时对象的那个,也就是我们在数据库里定义的存储临时数据的schema,如果这里您用生产数据所在的schema来做工作架构存储临时数据,对您来讲没啥问题,但估计管理员要追着您打了

5.      topology的逻辑体系架构下,建立一个oracle逻辑服务器,我们这里叫ODI.

 

在上下文里我们将其物理架构定义为SH.SH,如果您的系统里没有上下文(context),自己建一个就是了,然后将对应关系配置好即可。

至此,存盘退出topology manager.

原创粉丝点击