在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.