文章來源:http://blog.itpub.net/7199859/viewspace-704546
實驗目的
主要目的有兩個:
1: 加強goldengate的參數學習 如COMPRESSDELETES | NOCOMPRESSDELETES
2: 用ogg實現交易事務跟蹤,比如業務系統需要實時記錄某些數據的各種變化,很多人可能會用到分析歸檔日誌或trigger,或寫程序等去實現,oracle goldengate同樣也可以實現這個需求。
以下是實驗過程:
2 實驗環境
Oracle 10.2.0.1+windows 2003 32 bit 上面建立兩個庫
源端 orcl 實例 用戶paul. emp_sal表
表結構爲
create table paul.emp_sal
( empno number,
sal number(8,2),
constraint pk_emp_sal primary key(empno) using index
);
目標端 target 實例 用戶paul. emp_sal_his 歷史交易跟蹤表
create table paul.emp_sal_his
( empno number,
sal number(8,2),
before_after varchar2(32),
deal_date timestamp,
op_flag varchar2(32)
);
3 Oracle GlodenGate for windows安裝
進入以下網站下載oracle glodendate安裝軟件
<http://www.oracle.com/technology/software/products/goldengate/index.html>
這裏爲32bit for windows平臺下的安裝軟件
GGV18162-01ForOracle10g.zip
直接用unzip解壓到c:\GG目錄下
3.1 創建文件夾
點擊運行cmd,進入到c:\gg目錄
C:\Documents and Settings\Oracle.XP_ONE>cd ..
C:\Documents and Settings>cd ..
C:\>cd gg
C:\gg>ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 10.4.0.19 Build 002
Windows (optimized), Oracle 10 on Sep 18 2009 15:54:55
Copyright (C) 1995, 2009, Oracle and/or its affiliates. All rights reserved.
GGSCI (source) 1> create subdirs
Creating subdirectories under current directory C:\gg
Parameter files C:\gg\dirprm: created
Report files C:\gg\dirrpt: created
Checkpoint files C:\gg\dirchk: created
Process status files C:\gg\dirpcs: created
SQL script files C:\gg\dirsql: created
Database definitions files C:\gg\dirdef: created
Extract data files C:\gg\dirdat: created
Temporary files C:\gg\dirtmp: created
Veridata files C:\gg\dirver: created
Veridata Lock files C:\gg\dirver\lock: created
Veridata Out-Of-Sync files C:\gg\dirver\oos: created
Veridata Out-Of-Sync XML files C:\gg\dirver\oosxml: created
Veridata Parameter files C:\gg\dirver\params: created
Veridata Report files C:\gg\dirver\report: created
Veridata Status files C:\gg\dirver\status: created
Veridata Trace files C:\gg\dirver\trace: created
Stdout files C:\gg\dirout: created
Exit;
3.2 源庫和目標庫都創建goldengate用戶並賦予dba權限,並打開附加日誌
C:\Documents and Settings\Oracle.XP_ONE>s
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jan 24 00:20:38 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> create user goldengate identified by goldengate;
User created.
SQL> grant dba,connect,resource to goldengate
Grant succeeded.
SQL> alter database add supplemental log data;
Database altered.
SQL> alter system switch logfile;
System altered.
SQL> exit;
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
3.3 安裝GlodenGate 管理進程
Install the glodendate manager process
C:\gg>ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 10.4.0.19 Build 002
Windows (optimized), Oracle 10 on Sep 18 2009 15:54:55
Copyright (C) 1995, 2009, Oracle and/or its affiliates. All rights reserved.
GGSCI (source) 1> edit params ./GLOBAlS
新建個文本文件輸入以下內容
MGRSERVNAME PAUL,然後保存
添加管理進程到windows 服務中,以便隨windows操作系統自動啓動
C:\gg>install addservice addevents
Oracle GoldenGate messages installed successfully.
Service 'PAUL' created.
Install program terminated normally.
然後檢查windows服務,已經存在paul這個服務了
PAUL Automatic LOCAL SYSTEM
4 源庫配置抽取進程
4.1 啓動mgr進程
cd c:\gg
c:\gg\ggsci
GGSCI (source) 2> edit param mgr
輸入以下文件,然後按保存
--GoldenGate Manager parameter file
port 7809
輸入7809的端口
GGSCI (source) 4> start mgr
Starting Manager as service ('PAUL')...
Service started.
GGSCI (source) 5> info mgr
Manager is running (IP port source.7809).
可以看到啓動mgr進程成功
4.2 在源端創建基表
C:\gg>sqlplus goldengate/goldengate
create table paul.emp_sal
( empno number,
sal number(8,2),
constraint pk_emp_sal primary key(empno) using index
);
4.3 在源端打開表級附加日誌屬性
GGSCI (source) 2> dblogin userid goldengate@orcl,password source
Successfully logged into database.
GGSCI (source) 3> add trandata paul.emp_sal
Logging of supplemental redo data enabled for table paul.emp_sal
4.4 啓動mgr進程
GGSCI (source) 4> start mgr
Starting Manager as service ('PAUL')...
Service started.
GGSCI (source) 5> info mgr
Manager is running (IP port source.7809).
可以看到啓動mgr進程成功
4.5 添加抽取進程
ADD EXTRACT eora01,TRANLOG, BEGIN NOW, THREADS 1
edit param eora01
EXTRACT Eora01
USERID goldengate@orcl, PASSWORD goldengate
RMTHOST yibin-PC, MGRPORT 7809
RMTTRAIL ./dirdat/sq
GETUPDATEBEFORES
NOCOMPRESSDELETES
TABLE PAUL.EMP_SAL;
ADD RMTTRAIL ./dirdat/sq,extract eora01 MEGABYTES 5
4.6 生成emp_sal表的定義結構
Cd ./dirprm
Vi 0803.prm
Defsfile ./dirdef/mydefs.def, purge
Userid goldengate@orcl, password goldengate
table paul.EMP_SAL;
cd c:\gg
defgen paramfile ./dirprm/0803.prm
4.7 啓動抽取進程
Start extract Eora01
5 目標端配置複製進程
5.1 目標端創建交易跟蹤表
create table paul.emp_sal_his
( empno number,
sal number(8,2),
before_after varchar2(32),
deal_date timestamp,
op_flag varchar2(32)
);
5.2 在目標端增加checkpoint table
GGSCI (target) 1> dblogin userid goldengate@goldengate,password goldengate
Successfully logged into database.
GGSCI (target) 2> add checkpointtable goldengate.GGSCHKPT
5.3 在目標端增加複製進程
GGSCI (target) 3> ADD REPLICAT RORA01,EXTTRAIL ./dirdat/sq ,checkpointtable GOLDENGATE.GGSCHKPT
REPLICAT added.
GGSCI (target) 4> edit param rora01
REPLICAT rora01
SOURCEDEFS ./dirdef/MYDEFS.DEF
USERID goldengate@oragg2, PASSWORD goldengate
ASSUMETARGETDEFS
INSERTALLRECORDS
DISCARDFILE ./dirrpt/rora01.DSC, APPEND, MEGABYTES 10M
MAP paul.EMP_SAL, TARGET paul.EMP_SAL_HIS,
COLMAP (empno=empno,
sal=sal,
BEFORE_AFTER=@getenv("GGHEADER", "BEFOREAFTERINDICATOR"),
DEAL_DATE=@getenv ("GGHEADER", "COMMITTIMESTAMP"),
OP_FLAG=@getenv ("GGHEADER", "OPTYPE")
);
5.4 在目標端啓動複製進程
GGSCI (target) 6> start rora01
6 測試驗證結果
6.1 驗證插入
驗證insert操作
Source system
Conn paul/paul@orcl
插入幾條記錄
SQL> select * from emp_sal;
no rows selected
SQL> insert into emp_sal values(1,100);
1 row created.
SQL> insert into emp_sal values(2,200);
1 row created.
SQL> insert into emp_sal values(3,300);
1 row created.
SQL> commit;
Commit complete.
SQL> insert into emp_sal values(4,400);
1 row created.
SQL> commit;
Commit complete.
Target system
SQL> select * from emp_sal_his;
EMPNO SAL BEFORE_AFTER DEAL_DATE OP_FLAG
----- --------- -------------- ----------------------------- -------
1 100.00 AFTER 03-8月 -11 03.09.50.000000 下午 INSERT
2 200.00 AFTER 03-8月 -11 03.09.50.000000 下午 INSERT
3 300.00 AFTER 03-8月 -11 03.09.50.000000 下午 INSERT
4 400.00 AFTER 03-8月 -11 03.09.51.000000 下午 INSERT
可以看到插入操作全部捕獲。
6.2 驗證更新
Source system
修改記錄,讓每個empno的sal增加100.
SQL> update emp_sal set sal=sal+100;
4 rows updated.
SQL> select * from emp_sal;
EMPNO SAL
---------- ----------
1 200
2 300
3 400
4 500
SQL> commit;
Commit complete.
Target system
目標系統上看看是不是捕獲了修改操作信息,
SQL> select * from emp_sal_his;
EMPNO SAL BEFORE_AFTER DEAL_DATE OP_FLAG
1 100.00 BEFORE 03-8月 -11 03.09.55.000000 下午 SQL COMPUPDATE
1 200.00 AFTER 03-8月 -11 03.09.55.000000 下午 SQL COMPUPDATE
2 200.00 BEFORE 03-8月 -11 03.09.55.000000 下午 SQL COMPUPDATE
2 300.00 AFTER 03-8月 -11 03.09.55.000000 下午 SQL COMPUPDATE
3 300.00 BEFORE 03-8月 -11 03.09.55.000000 下午 SQL COMPUPDATE
3 400.00 AFTER 03-8月 -11 03.09.55.000000 下午 SQL COMPUPDATE
4 400.00 BEFORE 03-8月 -11 03.09.55.000000 下午 SQL COMPUPDATE
4 500.00 AFTER 03-8月 -11 03.09.55.000000 下午
可以看到修改前後的值都有。
6.3 驗證刪除
Source system
SQL> delete from emp_sal;
4 rows deleted.
SQL> commit;
Commit complete.
SQL>
Target system
再到target系統上看看是不是捕獲了刪除操作信息
SQL> select * from emp_sal_his;
EMPNO SAL BEFORE_AFTER DEAL_DATE OP_FLAG
1 200.00 BEFORE 03-8月 -11 03.10.14.000000 下午 DELETE
2 300.00 BEFORE 03-8月 -11 03.10.14.000000 下午 DELETE
3 400.00 BEFORE 03-8月 -11 03.10.14.000000 下午 DELETE
4 500.00 BEFORE 03-8月 -11 03.10.14.000000 下午 DELETE
可以看到刪除操作全部記錄下來。