GoldenGate OGG ORACLE資料複制實施方案
2013/05/03 BY ADMIN LEAVE A COMMENT

1 ORACLE資料複制方案環境要求
1.1 作業系統環境要求
1.1.1 磁盤要求
- 資料庫為叢集方式。要安裝Oracle GoldenGate 二進制檔案和其他檔案到共享陣列。
- 資料庫為主備HA方式。要安裝Oracle GoldenGate 二進制檔案和其他檔案到共享陣列。
- 複制軟體本身的大小為200 MB左右。
- 為Oracle GoldenGate trails配置設定足夠的磁盤空間,一般與GoldenGate配置設定到同一檔案系統。
- 這些trails檔案占用的磁盤空間依賴于處理的資料量大小,根據Trail檔案的儲存期限進行設定。說明如下:
Trail檔案可以位于Oracle GoldenGate安裝的本地驅動器上,它們也可以位于NAS或者SAN裝置上。對于存儲在源端的那些trails檔案,應該有足夠的空間處理網絡連接配接失敗時的資料累積。在典型配置下,第二個extract程序(data pump)通過網絡從本地trail發送資料,當網絡連接配接中斷,發送将失敗。然而,讀事務日志并且寫到本地trail的主extract程序将繼續。這個extract程序不應該因失敗而停止,是以應該有足夠的磁盤空間來容納資料累積。
- 在目标端的安裝位置與空間建議與源端相同。
估算trail需要的空間的方法
- 估算網絡不可用的最長時間。
- 估算商業應用程式每小時生成多少事務日志。
- 使用下面的公式計算需要的磁盤空間
[每小時的日志量] x [當機小時數] x .4 = trail需要的磁盤空間
這個等式使用百分之四十是因為Oracle GoldenGate大約隻需要一個事務日志中百分之四十的資料。
注意:這個公式隻是一個保守的估算,應該在配置好Oracle GoldenGate後,做測試來決定trail檔案需要的準确空間。
1.1.2 TCPIP的配置要求
- 配置系統使用TCP/IP 服務,包括
- 配置運作Oracle GoldenGate程序的所有系統的主機名或者IP位址,以及Oracle GoldenGate将要連接配接的系統的主機名或者IP位址。建議使用主機名。
- Oracle GoldenGate使用下列TCP/IP 端口:
Manager process 和other Oracle GoldenGate processes通訊端口.
端口範圍:預設端口範圍是從7840開始或者可以自定義256個其它端口.
具體TCP/IP端口的配置設定參見國網下發的具體文檔。
1.1.3 作業系統使用者及權限要求
- 在unix上安裝Oracle GoldenGate ,使用者必須有讀寫Oracle GoldenGate安裝目标的權限。
- 在windows上安裝Oracle GoldenGate ,使用者必須以Administrator 登入系統。
- Oracle GoldenGate 程序需要一個有權限讀、寫和删除Oracle GoldenGate目錄下的檔案和子目錄的作業系統使用者。此外,Manager程序使用者需要有權限控制Oracle GoldenGate程序。
- 推薦這些作業系統使用者給Oracle GoldenGate專用。
1.2 對ORACLE資料庫環境的要求
1.2.1 對資料/對象和操作的支援
支援的資料類型
Numeric data types
- NUMBER
- BINARY FLOAT
- BINARY DOUBLE
Character data types
- CHAR
- VARCHAR2
- LONG
- NCHAR
- NVARCHAR2
Multi-byte character types
- NCHAR and NVARCHAR2 multi-byte character data types
- Multi-byte data stored in CHAR and VARCHAR2 columns
Binary data types
- RAW
- LONG RAW
Date and timestamp data types
- DATE
- TIMESTAMP
Large object data types
- CLOB
- NCLOB
- BLOB
XML data types
- XMLType(Oracle 9i及以上)
User defined types (objects)
GoldenGate 支援UDT(user defined types)類型,要求源和目标必須有相同的結構,Schema可以不同。
Other supported data types
- ROWID
- VARRAY
- INTERVAL DAY 和 INTERVAL YEAR,要求目标必須大于等于源
不支援的資料類型
- ORDDICOM
- ANYDATA
- ANYDATASET
- ANYTYPE
- BFILE
- MLSLABEL
- TIMEZONE_ABBR
- TIMEZONE_REGION
- URITYPE
- UROWID
支援的對象和操作
對象 | 是否支援 | 說明 |
Clusters | 支援 | |
Functions | ||
Indexes | ||
Packages | ||
Procedure | ||
Tables | 包括字段,限制 | |
Tablespaces | ||
Roles | ||
Sequences | ||
Synonyms | ||
Triggers | ||
Types | ||
Views | ||
materialized views | ||
Users |
資料類型排查腳本
該腳本用于排查現有源資料庫中是否用到GoldenGate不支援的資料類型。
1.2.2 資料庫配置
- 源資料庫必須開啟歸檔模式。
- Oracle GoldenGate需要讀取資料庫的線上和歸檔日志,需要保留一定時間以内的資料庫系統産生的日志,這個時間間隔不要少于資料複制可能落後生産庫操作的最長時間。
- 對于Oracle RAC環境,必須保證GoldenGate能夠通路到每個節點存放的歸檔日志檔案。
1.2.3 資料庫使用者
- 需要建立一個資料庫使用者來管理Oracle GoldenGate(例如:ggs) 。需要連接配接到一個資料庫上的所有Oracle GoldenGate程序可以使用同一使用者 :
- Extract (源資料庫)
- Replicat (目标資料庫)
- DEFGEN (源資料庫或目标資料庫)
- 為了保護資料的安全與精确地監控Oracle GoldenGate 程序,不允許其他使用者、應用系統,或者程序以Oracle GoldenGate資料庫使用者登入或操作。
- 配置設定系統管理者權限(DBA)給運作Extract的資料庫使用者。
GRANT DBA TO GGS;
- 要運作Replicat至少授予資料庫使用者如下權限:
- CONNECT到目标資料庫
- SELECT系統視圖目錄
- 在目标資料庫表可以SELECT, INSERT, UPDATE, 和 DELETE
建議賦予DBA的權限。
2 系統環境現狀檢查與調整
2.1 作業系統現狀檢查與調整
分類 | 項目 | 目标 | 現狀檢查 | 系統調整步驟 | 備注 |
作業系統 | 磁盤要求 | 見3.1.1磁盤需求 | 1. 主備方式 2. 已經配置設定了磁盤空間 | 不需要 | |
TCPIP網絡配置 | 見3.1.2 TCPIP的配置要求 | 1. 滿足配置要求 | |||
使用者和權限 | 見3.1.3作業系統使用者及權限要求 | 1. ORACLE執行個體使用者已經存在 2. 還未建立OGG安裝目錄 | 1. 使用資料庫執行個體使用者,不需要另外定義新使用者 2. 由資料庫管理者建立GGS軟體安裝目錄:/ggsfs mkdir /ggsfs; 修改目錄的屬主和屬組為資料庫執行個體使用者及所在的組oracle:dba 3. 說明:請确認已按照安裝準備要求将OGG所在的檔案系統放置在陣列上,可以提高性能和高可用性。 |
2.2 ORACLE資料庫檢查與調整
資料庫準備 | 檢查源庫是否存在不支援的對象 | 發現不支援的對象 | 1. 檢查源資料庫 參見3.2.1排查腳本 | 沒有發現不支援的對象。如果發現有不支援的對象,應從OGG參數檔案中将該對象删除。 | |
檢查資料庫日志參數
| 確定日志處于歸檔狀态 | 1. 連接配接到ORACLE資料庫: 2. SQL> SELECT LOG_MODE FROM V$DATABASE; | 如果沒有開啟歸檔模式,按照如下步驟開啟歸檔模式。 1. SQL> SHUTDOWN IMMEDIATE 2. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST=’/U01/archive’; 3. SQL> STARTUP MOUNT; 4. SQL> ALTER DATABASE ARCHIVELOG; 5. SQL> ALTER DATABASE OPEN; 6. SQL> ARCHIVE LOG LIST; | ||
歸檔日志路徑 | 确認歸檔日志的路徑 | 檢查歸檔路徑,對于RAC環境必須保證可以通路到每個節點的歸檔檔案。 | |||
檢查日志保留政策 | 確定在系統上保留一定時間段内的歸檔日志 | 目前日志的備份政策需要保留一定時間以内的資料庫系統産生的日志,這個時間間隔不要少于資料複制可能落後生産庫操作的最長時間。 | 滿足。 如果不滿足。需要進行調整。 | ||
确認源表的DATA_CAPTURE狀态 | 確定源表必要的資料可以被同步工具捕獲 | 确認源資料庫是否開啟附加日志 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE; | 如果沒有開啟,按照如下步驟開啟附加日志。 SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; | ||
資料表準備 | 去掉目标表的限制 | 去掉trigger,cascade delete/update限制 | 在目标資料庫初始化之後,未開啟OGG複制程序之前,執行此步驟。 | ||
3 資料複制方案的部署
3.1 網省端軟體安裝
1、使用Oracle使用者(如非此使用者,請自行取代,下同)通過ftp上傳GGS軟體并解壓縮:
tar zxvf *.gz
或者分兩步解壓:
gunzip *.gz 或 gzip –d *.gz
tar xvf *.gz
2、建立子目錄,上傳參數檔案
在資料庫伺服器上建立檔案系統:/ggsfs(小寫),大小10G(營銷系統除外), GoldenGate安裝目錄統一為:/ggsfs(小寫)
隊列檔案存放在本地,存放目錄為/ggsfs/dirdat
- a) 在/ggsfs目錄下運作GGS指令行控制界面:
./ggsci
- b) 在GGS指令行界面下建立子目錄:
GGSCI> create subdirs
- c) 通過ftp上傳參數檔案mgr, ext*, dpe*到dirprm檔案夾中。
3.2 容災中心端軟體安裝
- c) 通過ftp上傳參數檔案mgr, rep*到dirprm檔案夾中。
3.3 網省端資料鍊路的配置和啟動
1、在源資料庫建立GoldenGate使用者
sqlplus / as sysdba
sql>create user ggs identified by xxx default tablespace xx(表空間名)temporary tablespace xx(表空間名);
sql>grant dba to ggs;
2、GOLDENGATE程序的配置
- a) 配置mgr程序
GGSCI>edit param mgr
GGSCI>start mgr
Manager started.
- b) 為需要抽取資料的schema增加trandata
GGSCI>dblogin userid ggs, password xxx
GGSCI>add trandata schema.*
- c) 配置源端extract程序
GGSCI>edit param dpeXX
—下面的指令在進行資料庫備份之前執行
GGSCI>add ext extXX, tranlog, begin now
EXTRACT added.
GGSCI>add exttrail /ggsfs/dirdat/XX, ext extXX, megabytes 50
EXTTRAIL added.
- d) 配置源端datapump程序
GGSCI>add ext dpeXX, exttrailsource /ggsfs/dirdat/XX
GGSCI>add rmttrail /ggsfs/dirdat/XX, ext dpeXX, megabytes 50
RMTTRAIL added.
3、啟動源端程序
- a) 啟動源端抓取程序:
GGSCI>start er *
- b) 檢視源端程序狀态:
GGSCI>info er *
RUNNING
注:若目标端mgr程序未啟動,則該步驟無法啟動dpe*程序,需等目标端mgr程序啟動後再啟動。
3.4 容災中心資料鍊路的配置和啟動
1、在目标資料庫建立GoldenGate使用者
以管理者使用者登入oracle資料庫
2、 配置MGR程序
3、配置檢查點
GGSCI>EDIT PARAMS ./GLOBALS
檔案名:GLOBALS,内容如下:
CHECKPOINTTABLE ggs.ggschkpt
GGSCI> EXIT
Shell> ggsci
GGSCI> DBLOGIN USERID ggs, PASSWORD xxx
GGSCI> ADD CHECKPOINTTABLE
4、配置目标端複制程序
GGSCI>edit param repXX
GGSCI>add rep repXX, exttrail /ggsfs/dirdat/XX
REPLICAT added.
—下面的指令在進行資料庫完全恢複之後執行
GGSCI>start repXX
REPLICAT REP* starting
5、檢視目标端程序狀态
3.5 Oracle RMAN初始化步驟
在資料初始化的過程中,不需要源資料庫停機。
注意:
一定要保證所有交易是在extract啟動之後開始的再啟動備份!
否則,可能某些交易開始早于Extract啟動,其資料變化無法捕捉。可以通過檢視(g)V$TRANSACTION中的最小的START_TIME,與extract啟動時間做對比。如果比extract啟動時間時間早就需要再等一段時間,否則就可以開始備份了。
0、清除過期的歸檔日志
$rman target /
RMAN>
run {
crosscheck backupset;
delete expired backup;
}
1、源端和目标端安裝OGG軟體,并啟動manager
2、源端配置OGG的Extract及DataPump
3、源端啟動Extract程序以及DataPump程序
4、使用oracle使用者登入,執行rman備份
crosscheck archivelog all;
backup incremental level 0 filesperset 1 format ‘/u01/oracle/rmanbk/hpdb_full_%s%t%p.dbf’ database;
sql ‘alter system archive log current’;
backup format ‘/u01/oracle/rmanbk/hp_archiveloghp_%s%t%p.dbf’ archivelog all delete input;
=================================
backup format ‘/u01/oracle/rmanbk/hpdb_ctlfile_%s%t%p.dbf’ current controlfile;
LIST BACKUP OF CONTROLFILE;
List of Backup Sets
BS Key Type LV Size Device Type Elapsed Time Completion Time
——- —- — ———- ———– ———— —————
72 Incr 0 11M DISK 00:00:34 01-DEC-10
BP Key: 72 Status: AVAILABLE Tag: TAG20101201T185001
Piece Name: /u01/oracle/rmanbk/hpdb_full_727366278761.dbf
Controlfile Included: Ckp SCN: 218216 Ckp time: 01-DEC-10
75 Full 11M DISK 00:00:03 01-DEC-10
BP Key: 75 Status: AVAILABLE Tag: TAG20101201T185358
Piece Name: /u01/oracle/rmanbk/hpdb_ctlfile_757366280381.dbf
Controlfile Included: Ckp SCN: 218562 Ckp time: 01-DEC-10
在源機執行
SQL>select * from v$log;
SQL>set line 200
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
———- ———- ———- ———- ———- — —————- ————- ———
1 1 23 104857600 1 NO CURRENT 218512 01-DEC-10
2 1 22 104857600 1 YES ACTIVE 218422 01-DEC-10
3 2 17 104857600 1 NO CURRENT 218503 01-DEC-10
4 2 16 104857600 1 YES INACTIVE 218412 01-DEC-10 (*)
擷取不活動的歸檔日志的最後一個SCN号,如果有多個INACTIVE的組,取最大的FIRST_CHANGE#,這裡取218412
記錄該SCN号
将備份檔案,FTP到目标機
========================================
hpux2:/u01/oracle$ ftp 192.168.1.27
Connected to 192.168.1.27.
220 hpux_dr FTP server (Revision 4.0 Version wuftpd-2.6.1 Wed Jun 18 07:11:14 GMT 2008) ready.
Name (192.168.1.27:oracle): oracle
331 Password required for oracle.
Password:
230 User oracle logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /u01/oracle/rmanbk
250 CWD command successful.
ftp> lcd /u01/oracle/rmanbk
Local directory now /u01/oracle/rmanbk
ftp> bin
200 Type set to I.
ftp> prompt
Interactive mode off.
ftp> mput hp*
===============================================
5、使用oracle使用者登入目标機執行恢複
在目标機建立相同的目錄結構,并正确設定:ORACLE_BASE,ORACLE_HOME,ORACLE_SID環境變量。
拷貝源機init{ORACLE_SID}.ora檔案到目标機
cp $ORACLE_HOME/dbs/initorcl.ora 目标機對應目錄
生成密碼檔案或者copy $ORACLE_HOME/dbs/PWD{ORACLE_SID}
6、啟動資料庫到nomount狀态
sqlplus ‘/ as sysdba’
SQL>startup nomount
7、啟動RMAN恢複控制檔案
rman target /
RMAN>restore controlfile from ‘/u01/oracle/rmanbk/hpdb_ctlfile_757366280381.dbf’;
8、将資料庫更改為mount狀态
SQL>alter database mount;
9、啟動RMAN恢複資料庫
RMAN>restore database;
RMAN> list backup;
查找最小的SCN号,推薦使用上面記錄的SCN号,例如:218412
run
{
set archivelog destination to ‘/u01/arch’;
SET UNTIL SCN 218412;
RECOVER DATABASE;
–SHUTDOWN IMMEDIATE;
9-1、(備選)如果源端為RAC,目标端為單機,需将目标機改為單機模式
删除多餘的redolog group
SQL> select THREAD#, STATUS, ENABLED from v$thread;
THREAD# STATUS ENABLED
———- —— ——–
1 OPEN PUBLIC
2 CLOSED PRIVATE
SQL> select group# from v$log where THREAD#=2;
GROUP#
———-
4
5
6
SQL> alter database disable thread 2;
Database altered.
SQL> alter database drop logfile group 4;
alter database drop logfile group 4
*
ERROR at line 1:
ORA-00350: log 4 of instance racdb2 (thread 2) needs to be archived
ORA-00312: online log 4 thread 2: ‘/u01/oracle/oradata/ractest/log/redo04.log’
SQL> alter database clear unarchived logfile group 4;
SQL> alter database drop logfile group 5;
SQL> alter database drop logfile group 6;
删除多餘UNDO表空間
SQL> show parameter undo;
NAME TYPE VALUE
———————————— ———– ——————————
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL> select tablespace_name from dba_tablespaces where contents=’UNDO’;
TABLESPACE_NAME
——————————
UNDOTBS1
UNDOTBS2
SQL> drop tablespace UNDOTBS2 including contents and datafiles;
Tablespace dropped.
如果源資料庫為Oracle9i,因為RMAN時不備份TEMP表空間,需重新建立TEMP表空間
SQL> create temporary tablespace TEMP tempfile ‘/u01/temp.dbf’ size 500M;
Tablespace created.
SQL> alter database default temporary tablespace TEMP;
10、目标端打開資料庫
alter database open resetlogs;
11、将目标資料庫的觸發器及限制禁止掉
腳本參見4.2節中“去掉目标表的限制”
12、目标端啟動Replicat程序
start replicat,aftercsn 218412
3.6 Oracle EXPDP/IMPDP初始化步驟
4、建立directory用于執行資料泵操作
–directory path for store dump file
CREATE OR REPLACE DIRECTORY DATA_PUMP AS ‘E:\OGG\data’;
grant read ,write on DIRECTORY DATA_PUMP to ggs ;
–users to execute expdp
grant read ,write on DIRECTORY DATA_PUMP to sglaw ;
5、源端擷取資料庫目前的SCN
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
————————
3079975
一定要保證所有交易是在extract啟動之後開始的,再選這個SCN!
6、源端資料導出
在源端OS系統中執行資料導出,導出使用者名、dmp檔案名自行修改,導出完成後ftp至目标端datapump目錄
expdp sglaw/sglaw directory=DATA_PUMP dumpfile=<dp_sglaw.dmp> flashback_scn=<scn>
—以下在目标端執行
7、建立directory用于執行資料泵操作,同時給ggs以及導入使用者賦權
CREATE OR REPLACE DIRECTORY DATA_PUMP AS ‘/ggsfs/data’;
grant read ,write on DIRECTORY DATA_PUMP to <sglaw>;
8、目标端導入資料
— 以下操作在OS中執行,具體使用者名與導入dmp檔案名視具體情況而定
impdp sglaw/sglaw DUMPFILE=DATA_PUMP:DP_SGLAW.DMP
9、将目标資料庫的觸發器及限制禁止掉
10、目标端啟動複制程序
GGSCI > start repa3, aftercsn 3079975
3.7 檢查各個程序的狀态和報告
GGSCI > view ggsevt
GGSCI > info er *
GGSCI > status er *
GGSCI > view report extXX
GGSCI > view report dpeXX
GGSCI > view report repXX
3.8 設定程序自動重新開機及HA切換
針對網絡中斷、資料庫停機等異常情況,可在GOLDENGATE TDM軟體的mgr程序 參數檔案中設定自動重新開機參數,在無需人工幹預的情況下重新開機抽取及複制程序。
mgr參數檔案如下:
port 7809
–autostart er *
autorestart er *, waitminutes 3, retries 15
在HA環境下,需要在HA腳本中添加啟動GoldenGate的指令:
sh start_mgr.sh
腳本start_mgr.sh的内容:
cd /ggsfs/dirpcs
rm -f *
cd /ggsfs
./ggsci << EOF
start mgr
EXIT
EOF
詳細内容參見附件
4 GoldenGate參數檔案樣例
4.1 源端參數檔案
4.1.1 manager參數檔案
檔案名:mgr.prm,内容如下:
PORT 7839
DYNAMICPORTLIST 7840-7914
AUTOSTART ER *
AUTORESTART ER *, WAITMINUTES 2, RETRIES 5
PURGEOLDEXTRACTS /ggsfs/dirdat/*, USECHECKPOINTS, minkeepdays 7
4.1.2 extract參數檔案
檔案名:exee.prm,内容如下:
EXTRACT exee
SETENV (ORACLE_SID = “<SID>”)
SETENV (ORACLE_HOME=/app/oracle/product/10.2.0/db_1)
SETENV (NLS_LANG = “AMERICAN_AMERICA.ZHS16GBK”)
–如果使用tnsname,可以不設定上面的ORACLE_SID環境變量
USERID ggs@gg, PASSWORD xxx
WARNLONGTRANS 2h, CHECKINTERVAL 3m
–如果是RAC環境,需要增加下面一行
–TRANLOGOPTIONS altarchivelogdest primary instance src1 /arch1, altarchivelogdest instance src2 /arch2
FETCHOPTIONS NOUSESNAPSHOT
grouptransops 20000
exttrail ./dirdat/ee, megabytes 500
discardfile ./dirrpt/ee.dsc,append, megabytes 50
dynamicresolution
–抽取哪些表,依次增加到下面
table TEST.CZ2;
4.1.3 datapump參數檔案
檔案名:dpee.prm,内容如下:
EXTRACT dpee
RMTHOST 192.168.1.7, MGRPORT 7839, compress
RMTTRAIL ./dirdat/ee
PASSTHRU
4.1.4 生成TABLE LIST腳本
–将該腳本輸出結果添加到extract和datapump參數檔案中即可
set pagesize 0
set feedback off
spool ext_table_list.txt
select ‘TABLE ‘||owner||’.’||table_name||’ ;’ from dba_tables where owner=’SGLAW’
spool off
4.2 容災端參數檔案
4.2.1 GLOBALS參數檔案
4.2.2 manager參數檔案
4.2.3 replicat參數檔案
檔案名:rpee.prm,内容如下:
REPLICAT rpee
–handlecollisions
assumetargetdefs
allownoopupdates
discardfile ./dirrpt/ee.dsc,append, megabytes 500, purge
map TEST.CZ2, target TEST.CZ2;
4.2.4 生成MAP腳本
— 生成replicat table list,用于map源與目标表,将該腳本的輸出添加到replicat參數檔案即可
spool rep_table_list.txt
select trim(‘MAP ‘||owner||’.’||table_name||’ , TARGET ‘||owner||’.’||table_name||’;’) from dba_tables where owner=<‘SGLAW’>