相关组件
1. 确定 DDL SCHEMA
需要配置在 GLOBALS 中: GGSCHEMA odc
2. 退出所有 ORACLE 会话,不允许新会话产生
3.sqlplus "/as sysdba" ---- 必须 sysdba 连入
注:对于是10g 的源端,需要关闭回收站:
alter session set recyclebin=off;
4.@marker_setup
该脚本安装 marker 系统,这部分为启用 DLL 支持所必备,执行该脚本时会提示输入 GoldenGate 管理帐户 schema 名。
5. @ddl_setup
执行该脚本要确认关闭掉所有 ORACLE 会话,未被关闭的会话会以列表形式显示,执行过程中会要求希望对象属主,并选择安装模式。如果是初次安装就选择“ INITIALSETUP ”,该模式假设当前没有任何 GoldenGate DDL 对象存在,如果存在则会删除并重建。如果是重新安装,则应该选择“ NORMAL ” .
提示输入 DDL SCHEMA ,择安装类型: INITIALSETUP
6. @role_setup
该操作会重建 DDL 同步所需的权限,授予 GoldenGate 中的 DDL 对象以 DML 权限。
提示你执行一条 GRANT 语句,执行即可!
7. @ddl_enable.sql
启用 DDL 触发器,以捕获 DDL 操作。
8. @ddl_pin.sql odc
要提高 DDL 触发器的性能,可以通过 ddl_pin 脚本,该脚本会将触发器使用的包加载到内存,以此提高效率。该脚本执行时需要引用 dbms_shared_pool 系统包,因此在使用 ddl_pin 脚本前需要确保 dbms_shared_pool 可用。执行 ddl_pin 脚本需要指定 GoldenGate 管理员 schema 名称 .
添加表级别附加日志
ggsci> dblogin userid odc password odc
ggsci>
ggsci>
注:
对于9i 的数据库,因为列太多会报错,要求不能超过33 列,所以列太多的表格要分开添加,例如:
查出该表的列
SQL> select COLUMN_NAME from DBA_TAB_COLUMNS where table_name='ACMRTB_20121129' order by COLUMN_ID;
分组添加补充日志
SQL> alter table OGGTEST.ACMRTB_20121129 ADD SUPPLEMENTAL LOG GROUP loggroup1 (SETTDATE,ACCTYPE)
SQL> alter table OGGTEST.ACMRTB_20121129 ADD SUPPLEMENTAL LOG GROUP loggroup2 (SETTDATE,ACCTYPE,ACCBAL,TODAYSVCNT,TODAYSVAMT,TODAYFHCNT,TODAYFHAMT,TODAYQCCNT,TODAYQCAMT,TODAYRTNCNT,TODAYRTNAMT,TODAYMVCNT,TODAYMVAMT,TODAYHDFEECNT,TODAYHDFEEAMT,TODAYSRVFEECNT,TODAYSRVFEEAMT,TODAYOVERFEECNT,TODAYOVERFEEAMT,TOTALSVCNT,TOTALSVAMT,TOTALFHCNT,TOTALFHAMT,TOTALQCCNT,TOTALQCAMT,TOTALRTNCNT,TOTALRTNAMT,TOTALMVCNT,TOTALMVAMT,TOTALHDFEECNT,TOTALHDFEEAMT,TOTALSRVFEECNT,TOTALSRVFEEAMT) ALWAYS;
SQL> alter table OGGTEST.ACMRTB_20121129 ADD SUPPLEMENTAL LOG GROUP loggroup3 (TOTALOVERFEECNT,TOTALOVERFEEAMT,RSVD)
SQL>select COLUMN_NAME from DBA_TAB_COLUMNS where table_name='ACMRTB_20121129' order by COLUMN_ID;
SQL>alter table OGGTEST.BATGOODSINOUTTXNTB ADD SUPPLEMENTAL LOG GROUP loggroup4 (INOUTSEQ,ORDERID,ORDERSTATE,ORDERTYPE,CARDNUMBER,TOSTOREID,TOSTORENAME,FROMSTOREID,FROMSTORENAME,INOUTFLAG,ERRCODE,CTDEALTIME,EDTTIME,EDTOPRID,GOODSCOUNT,GOODSID,GOODSATTR,SINGLEPRICE,SUMPRICE,OPRID,TXNDATE,TXNTIME,PECULIARDATA1,PECULIARDATA2,PECULIARDATA3,PECULIARDATA4,PAYTYPE,PAYTYPEID,RSVD1,RSVD2,RSVD3,RSVD4,RSVD5)
SQL>alter table OGGTEST.BATGOODSINOUTTXNTB ADD SUPPLEMENTAL LOG GROUP loggroup5 (TODPTID,FROMDPTID,SENDSTOREID)
抽取进程要配置的参数:
参数 |
阀值 |
定义 |
extract |
sm_ext |
指定进程名和类型 |
setenv |
(NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") |
配置系统环境变量 |
userid/ password |
odc |
指定OGG 连接数据库的用户名和密码 |
exttrail |
./dirdat/sm |
指定写入到本地的哪个队列 |
tranlogoptions |
偏移量设置需要查找偏移量 $ORACLE_HOME/bin/offset ( TRANLOGOPTIONS RAWDEVICEOFFSET 0 ) |
指定在解析数据库日志时所需要的特殊参数, 如果是AIX 的RAC ,redolog 在裸设备上,需设置偏移量
|
altarchivelogdest |
instance ora11g1+MCDATA/archlog,altarchivelogdest instance ora11g2 +MCDATA/archlog |
指定归档路径,不同的操作系统、数据库版本有不通的配置方法 |
FETCHOPTIONS |
|
指定ogg 获取数据的方式 |
FETCHPKUPDATECOLS |
|
复制进程出现丢失update 记录(missing update )并且更新的是主键,update 将转换成insert 。( 当使用了HANDLECOLLISIONS 时,请使用该参数。) |
ddl |
include objname OGGTEST.* exclude objtype 'TRIGGER' |
使用DDL 参数,指定DDL 的支持和过滤DDL 操作。 |
table |
OGGTEST.* |
定义需要复制的表,后面需以; 结尾 |
添加进程:
ggsci> (如果是单机,可以不写thread 参数)
ggsci>
注:
tranlog :表示数据抓取的来源是数据库的 redo 数据。
threads 2 :表示数据库有多少个 threads ,单实例基本上是 1 或者不设。
begin now :表示在启动这个抓取进程的就去抓取数据。
./dirdat :表示 trail 文件的目录
sm : trail 文件的前缀
extract sm_ext :值指定给那个进程用的( sm_ext )。
参数配置:
情况一:单机数据库
直接配置归档路径
ggsci>
extract sm_ext
setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
userid odc,password odc
exttrail ./dirdat/sm
tranlogoptions altarchivelogdest /archive
FETCHOPTIONS FETCHPKUPDATECOLS
ddl include objname OGGTEST.* exclude objtype 'TRIGGER' &
include objname OGGTEST.* exclude objtype 'TRIGGER'
table OGGTEST.*;
情况二: rac 数据库
参数配置方法一:
配置 ASM 连接串,需要将各节点的归档信息都配置在参数文件中,且需要配置 asm 动态注册,并将 asm 的 sys 用户名和密码配置在进程参数文件中,适用所有数据库版本。
具体方法如下:
在 tnsnames.ora 中添加连接串(只要在要安装 ogg 服务的那个节点配置即可):
[ oracle@rac1 admin]$ cat tnsnames.ora
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.16)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = +ASM)
(INSTANCE_NAME = +ASM1)
)
)
注: 11g 只要配置连接串即可(因为 asm 实例注册进监听状态为 ready ), 10g 需要配置监听,如果源端生产库可以重启监听,只要加入 OGG 监听静态注册即可,如果源端生产库不让重启监听,则要加入一个新的 OGG 监听动态注册,配置如下:
########## 添加一个监听(避免重启原有监听)###########
[oracle@rac1 rac1]$ vi listener.ora
SID_LIST_LISTENER_OGG =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = +ASM)
(ORACLE_HOME = /oracle/app/product/10.2.0)
(SID_NAME = +ASM1)
)
)
LISTENER_OGG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.11)(PORT = 1522))
)
)
启动新监听listener_ogg
参数配置:
setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
userid odc,password odc
exttrail ./dirdat/sm
tranlogoptions altarchivelogdest instance ora11g1+MCDATA/archlog,altarchivelogdest instance ora11g2 +MCDATA/archlog
tranlogoptions asmuser sys@asm, asmpassword oracle
FETCHOPTIONS FETCHPKUPDATECOLS
include objname OGGTEST.* exclude objtype 'TRIGGER'
table OGGTEST.*;
参数配置方法二:
数据库版本 10.2.0.5 及以上的版本,或 11.2.0.2 以上版本(但 11gR1 不支持), Oracle 提供了一个新的 ASM API 接口 ,可以让 extract 进程直接利用数据库服务器来访问 redo 和 archive log ,无需配置归档路径,直接配置参数 tranlogoptions dblogreader 参数即可,自动会找到归档路径。
具体参数如下
extract sm_ext
setenv (NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK")
userid odc,password odc
exttrail ./dirdat/sm
tranlogoptions dblogreader
FETCHOPTIONS FETCHPKUPDATECOLS
ddl include objname OGGTEST.* exclude objtype 'TRIGGER' &
include objname OGGTEST.* exclude objtype 'TRIGGER'
table OGGTEST.*;
注 1 :关于参数 DBLOGREADER 的说明, mos 文档中写到:
(Oracle)Valid for Extract in classic capture mode. Causes Extract to use a newer ASM API that is available as of Oracle 10.2.0.5 and later10gR2 versions and Oracle 11.2.0.2 and later 11gR2 versions(but not in Oracle 11gR1 versions). This API uses the database server to access the redo log and archive logs, instead of connecting directly to the Oracle ASM instance.The database must contain the libraries that contain the API modules and must be running
To use this feature,the Extract database user must have SELECT ANY TRANSACTION privilege.
另外,对于版本高于 11.2.0.4 的源端数据库,需要开启数据库级别的参数 ENABLE_GOLDENGATE_REPLICATION ,方法如下:
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
注 2 :如果源端是 AIX redo 是裸设备上且设置了偏移量,则需要在以上参数里加上:
TRANLOGOPTIONS RAWDEVICEOFFSET 0
检查 AIX 裸设备是否有偏移量:
$ORACLE_HOME/bin/offset
$[/oracle]$ORACLE_HOME/bin/offset /dev/lv_redo2_1g_22 4096
$[/oracle]$ORACLE_HOME/bin/offset /dev/lv_redo1_1g_01 4096
情况三:只挖归档模式( ALO mode )
OGG 在捕获数据变更的时候优先从在线日志中抽取数据,如果该 redo 已经切换,则会去归档日志中抽取数据变更。
如果需要强制设置 ogg 从归档日志读取数据,则需要使用参数 TRANLOGOPTIONS ARCHIVEDLOGONLY
只读归档:
在备库环境上部署抽取进程,则需要配置 TRANLOGOPTIONS ARCHIVEDLOGONLY 参数,且需要在 tnsnames.ora 文件中配置连接串能够连到源端生产库(具体部署节点的 ip ,不要配置 scan-ip ),参数如下:
userid odc@orcl,password odc --orcl 连接串为刚才配置在tnsnames.ora 文件中的
TRANLOGOPTIONS ARCHIVEDLOGONLY -- 只挖归档的参数
tranlogoptions altarchivelogdest /data/orcl/archlog -- 具体归档路径
情况四:表结构不同的配置
当源端的表结构和目标端的表结构(包括字段名、数据类型)不一致时(或源端和目标端数据库不一致时),需要多配置一个定义文件,使 ogg 目标端可正常应用。
源端编辑
GGSCI (rac2) 3> edit params defgen
defsfile /odc/dirdef/sm.def purge
userid odc, password odc
table oggtest.t2;
table oggtest.test;
desfile :def 文件输出路径
table: 可以指定table ,也可以使用username.* 到相应用户下所有表结构信息。
生成目标端需要的定义文件
[oracle@rac2 ~]$ cd /odc
[oracle@rac2 odc]$ ./defgen paramfile /odc/dirprm/defgen.prm
会在/odc/dirdef 路径下生成sm.def 文件。
手工将产生的定义文件传输到目标端的dirdef 目录下
目标端应用进程中添加参数SOURCEDEFS 以及colmap 参数:
SOURCEDEFS /odc/dirdef/sm.def
map oggtest.t2,target oggtest.t2,colmap(USEDEFAULTS col1=col,col2=col2,col3=col3);
具体见创建replicat 进程章节
其他配置一样。
启动进程观察,能够挖掘再继续下面的操作:
start sm_ext
传输进程要配置的参数:
参数 |
阀值 |
定义 |
extract |
sm_dmp |
指定进程名和类型 |
userid/ password |
odc |
指定OGG 连接数据库的用户名和密码 |
rmthost |
172.10.10.154 |
指定目标端主机IP |
mgrport |
7809 |
指定管理进程端口号 |
rmttrail |
./dirdat/sm |
指定目标端保存队列文件的目录 |
passthru |
/oradata/oradata/smkdb/archive |
采用pass-through 模式处理表 |
table |
OGGTEST.* |
定义需要复制的表,后面需以; 结尾 |
ggsci>
注:
EXTTRAILSOURCE :指定提取文件作为数据源
ADD RMTTRAIL :在目标数据库上创建一个 trail
ggsci>edit param sm_dmp
参数:
extract sm_dmp
userid odc,password odc
rmthost 172.16.10.154, mgrport 7809
rmttrail ./dirdat/sm
--rmttrail ./dirdat/tj, 11.1
passthru
table OGGTEST.*;
ggsci>start sm_dmp