OGG資料庫遷移方案(三)

pingdanorcale發表於2023-03-14

的安裝與配置

配置GoldenGate 進行資料複製,主要包括如下環節:

n   對源端和目標端GoldenGate 工作環境的檢查

n   在源和目標環境分別安裝GoldenGate 軟體

n   配置源端

n   目標庫的初始化

n   配置目標端

n   啟動GoldenGate ,執行資料複製

下文將對這些部分詳細說明。

環境介紹:

源端:AIX 5.3 oracle 10.2.0.4 2 節點RAC

目標端: Linux X86 64bit oracle 11.2.0.4 2 節點RAC

ogg 程式配置:

對於資料變化量不大的系統(每天生成歸檔量小於500G ),通常源端只配置一個extract 程式即可滿足要求。目標端配置replicat 程式的多少依賴於複製效率,可以根據具體情況進行拆分。

複製的表

對於靜態表,不建議透過OGG 複製。

無法透過OGG 或者不需要透過OGG 進行復制的表,將在割接期間採用傳統的expdp & impdp 的方式實現。

需要從以下方面保證OGG 在同步過程中的資料一致性:

n   需要逐表檢查所複製的表的附加日誌已經開啟

n   保證初始化資料的完整性。

n   對於目標庫:

n   必須避免後臺的Job, 包括:Crontab Job ,資料庫內部的 job ;華為TaskMon 工具等。

n   避免人為修改目標端表中的資料

n   監視觸發器的狀態(最好匯入時在目標庫drop 觸發器)、避免有級聯觸發器等。

n   對於所複製的表,在同步期間(即開始同步到上線割接)避免修改表的主鍵或者索引欄位。

n   可以在執行資料同步期間把資料庫中其它資料庫使用者的賬號lock

如果在OGG 同步期間發現個別表的同步出現問題,可以參照以下的步驟處理:

1.        將出現問題的表從複製程式中去掉

stop rep1

edit param rep1

 

刪除或者注視出現問題的表的一行配置,比如去除tbcs.ogg_test表的複製,為其增加註釋:

-- MAP tbcs.ogg_test, TARGET tbcs.ogg_test;

 

start rep1

 

2.        重新初始化出現問題的表的資料

在目標端:

truncate table tbcs.ogg_test;

 

使用Data Pump匯入問題表的資料:

選擇一個系統負載低的時刻,首先從生產庫查詢出一個當前的SCN,比如:

col current_scn for 99999999999999999999

select current_scn from v$database;

       12872889897855

 

使用這個SCN作為flashback_scn值進行匯出&匯入:

flashback_scn   = 12872889897855

注意:僅匯入資料,不要匯入觸發器

 

記錄該SCN對應的時間點以及在目標端的trail檔案的序號:

cd $GG_HOME/dirdat01

ls –ltr

 

資料匯入完成後在目標端新建一個複製程式,主要步驟參見“3.8.8 配置OGG的複製程式Replicat”小節。

不同之處如下:

在啟動新建的複製程式之前,需要增加一個操作:

alter r_tbcs_01 extseqno xx, extrba 0

 

GSCI (kdyyb1) 2> info r_tbcs

 

REPLICAT   R_TBCS    Last Started 2015-03-04 18:45   Status RUNNING

Checkpoint Lag       00:00:02 (updated 00:00:00 ago)

Log Read Checkpoint  File ./dirdat01/tb000179

                     2015-03-05 14:54:38.002275  RBA 58679836

 

注意新建的複製程式的“Log Read Checkpoint”是剛修改的檔案序號,並且RBA為0。

 

在使用前面步驟的SCN啟動新建的複製程式。

 

如果需要重新對目標庫重建,可以參考如下步驟:

1.        停止目標端的複製程式(不要停止manager 程式),源端不作處理(即保持資料抽取的狀態)

ggsci

 

stop *

 

2.        刪除所有目標端的抽取程式

dblogin userid ggadmin, password AACAAAAAAAAAAAIAKBWGTCOFUEPDSFQH , encryptkey default

 

delete recpliat r_tbcs

……

 

3.        truncate 所有OGG 複製的表

剩下的步驟參見本文“3.6 源端配置”小節。

不同之處如下:

在增加了新建的複製程式之前,需要增加一個操作:

alter rep1 extseqno xx, extrba 0

這個trail 檔案的序號使用資料初始化時的SCN 對應的時間點,可以再往前一些。

複製的效率

作為一種準實時的資料同步工具,OGG 的同步有三個方面的延遲:

n   抽取,即Extract 程式

n   傳輸或者分發,即Data Pump 程式

n   複製,即Replicat 程式

需要察看這三個環節分別的延遲(即lag ),命令是:

登入的源或者目標端主機:

cd $GG_HOME

./ggsci

info all

 

-- 注意觀察每個程式的lag值

更的方式是使用lag命令,即

lag ext1

lag dp1

lag rep1

 

在配置好OGG 的同步後,需要監視lag ,如果發現lag 逐漸變長則需要處理。

檔案的管理

OGG 透過manager 程式實現對trail 檔案的自動清除操作。有兩種清除策略:時間或者檔案的數量。

分別透過如下引數配置:

n   MinKeepDays 或者MinKeepHours

MinKeepFiles :透過這種方式可以限制trail檔案佔用空間的總體大小(在複製正常的時刻)。

現在Oracle工程師將源端配置為

MinKeepHours 12

目標端:

MinKeepDays 1

客戶可以根據需要進行調整。

在割接當天要特別注意避免長交易,因為如果需要重起抽取程式的話,抽取程式在啟動後需要花一些時間才能追上,這樣可能會影響割接進度

說明:正常情況下僅需要停止抽取程式而不需要再啟動,則這方面沒有關係。

在重起抽取程式後OGG 需要從最早事務開始時刻的redo 中讀取資料,因此需要訪問一定量的歸檔檔案,如果因為備份已經將最近的歸檔檔案成功備份後刪除,抽取程式就會出錯,為此可以對備份策略進行調整,比如備份8 個小時之前的歸檔(這樣可以保留最近8 個小時的歸檔檔案):

backup

archivelog until time 'sysdate-1/12'

 

的監控

OGG 的監控主要包括以下方面:

n   對程式的監控,即使用info all 命令檢視源端和目標端的相關程式,其狀態為“RUNNING

n   Trail 檔案佔用磁碟空間的監控

n   lag 的監控:參見前文。

 

工作環境的檢查

xlC libpthreads 版本要求

本節內容適用於源和目標端。

根據MOS 文件“Oracle GoldenGate GGSCI fails with "0509-036 Cannot load program ggsci because of the following errors:" (Doc ID 1108601.1) ”, GoldenGate 從版本V10 開始在AIX 5.3 平臺上對xlC 庫有如下的最小版本要求:

  xlC.aix50.rte             10.1.0.0  COMMITTED  XL C/C++ Runtime for AIX 5.3

  xlC.msg.en_US.rte         10.1.0.0  COMMITTED  XL C/C++ Runtime

  xlC.rte                   10.1.0.0  COMMITTED  XL C/C++ Runtime

還要求libpthreads 庫具有5.3.0.51 或以上版本。

可以透過以下命令檢視xlC libpthreads 版本:

檢視xlC 版本:

# lslpp -l | grep -i xlc

 

檢視libpthreads 版本:

lslpp -h bos.rte.libpthreads

 

如果發現當前Aix 平臺下的xlC 或者libpthreads 版本低於規定版本則必須首先升級,然後才能安裝GoldenGate 軟體。

由於受到GoldenGate 工作機制的限制,源庫資料庫必須滿足一定的條件,才能保證GoldenGate 可以工作正常,這些條件包括:

n   資料庫執行於歸檔日誌模式下。

n   在資料庫級別開啟了Force Logging

n   在資料庫級別開啟了最小附加日誌(supplemental log min )。

檢查資料庫是否處於歸檔模式:

select log_mode from v$database;

 

使用以下SQL 語句檢查資料庫Force Logging 和附加日誌的開啟狀況:

select supplemental_log_data_min, force_logging

from v$database;

確定需要複製的表。

不能配置防火牆來阻止源端主機和目標端主機之間GoldenGate 使用的埠。具體埠是在源端和目標端mgr 程式配置中指定的埠,當前配置環境下使用的埠是: 7809 - 7820

軟體安裝

首先要為GoldenGate 軟體劃分適當的叢集檔案系統(比如GPFS 等),以/arch 為例。Goldengate 最好安裝在共享檔案系統上,但不是必須。

登入RAC 的節點1 主機,使用作業系統oracle 使用者(即Oracle 資料庫軟體的安裝和執行使用者)來安裝GoldenGate 。所使用的GoldenGate 軟體版本為11.2.1.0.18

GoldenGate for 10g : p18307056_1121018_AIX64-5L.zip

將安裝介質p18307056_1121018_AIX64-5L.zip 檔案上傳到資料庫伺服器/ogg 目錄,使用unzip 命令解壓縮,會出現ggs_AIX_ppc_ora10.2_64bit.tar 檔案,再使用tar 對該檔案解報。解壓縮/ 解包的過程就是安裝過程。

cd /arch/ogg

unzip p18307056_1121018_AIX64-5L.zip

tar xvf ggs_AIX_ppc_ora10.2_64bit.tar

解壓後,建立 GoldenGate 需要的子目錄(使用create subdirs 命令):

cd /arch/ogg

./ggsci

 

Oracle GoldenGate Command Interpreter for Oracle

… …

GGSCI (aaopdb2) 1> create subdirs

 

Creating subdirectories under current directory /arch/ogg

 

Parameter files                /arch/ogg/dirprm: already exists

Report files                   /arch/ogg/dirrpt: created

Checkpoint files               /arch/ogg/dirchk: created

Process status files           /arch/ogg/dirpcs: created

SQL script files               /arch/ogg/dirsql: created

Database definitions files     /arch/ogg/dirdef: created

Extract data files             /arch/ogg/dirdat1: created

Temporary files                /arch/ogg/dirtmp: created

Stdout files                   /arch/ogg/dirout: created

 

編輯oracle 使用者主目錄下的.profile 檔案,在檔案末尾追加以下內容:

export GG_HOME=/arch/ogg

export LIBPATH=$LIBPATH:$GG_HOME:$ORACLE_HOME/lib

 

的資料庫使用者

在舊營業系統庫建立GoldenGate 執行所需要的資料庫使用者。

使用下面的SQL 建立GoldenGate 的資料庫使用者ggadmin

-- 源端資料庫:

 

create tablespace goldengate datafile 'xxx' size 10g autoextend on;

  /* 配置DDL同步,必須為goldengate使用者分配單獨的表空間,且自動擴充套件 */

create user ggadmin identified by ggadmin default tablespace ogg temporary tablespace temp;

grant dba to ggadmin;

 

為滿足GoldenGate 的工作條件,必須對源端資料庫進行如下的配置:

 

$ sqlplus / as sysdba

 

-- 檢查foce logging當前是否啟用:

SQL> set linesize 80

SQL> col name            format a20

SQL> col force_logging   format a20

SQL>

SQL> select d.name, d.force_logging from v$database d;

 

-- 如果“force_logging”欄位的返回值為“YES”,則已經啟用,不需要執行下面的SQL;否則執行:

SQL> alter database force logging;

 

-- 重新執行上面的檢查SQL,確認返回值為“YES”。

 

如果需要進行回退,關閉強制日誌模式,請使用以下 sql

alter database no force logging;

 

根據MOS 文件“How To Turn On Supplemental Logging At The Database Or The Table Level (Oracle Specific) (Doc ID 1059352.1) ”,GoldenGate 必須要求開啟附加日誌並同時切換日誌:

 

$ sqlplus / as sysdba

 

-- 檢查資料庫級別的 Logging是否開啟:

SQL> set linesize 80

SQL> col supplemental_log_data_min   format a30

SQL>

 

-- 如果“supplemental_log_data_min”欄位的返回值為“YES”,則已經啟用,不需要執行下面的SQL;--- 否則執行:

SQL> alter database add supplemental log data;

 

-- 重新執行上面的檢查SQL,確認返回值為“YES”。

-- 執行日誌檔案的切換(This change to add supplemental logging will not take effect until the -- current redo log -- is switched, so the following command must also be executed):

SQL> alter system switch logfile;

 

回退操作:如果出現問題,可以透過以下語句進行回退:

SQL> alter database drop supplemental log data ;

選取一個schema 建立一個名為ogg_test 的測試表,建立指令碼如下:

create table SCHEMA .ogg_test(id number, in_date date);

為所有需要進行復制的表生成add trandata 命令:

由於每個schema 包含的表較多,執行該步驟會花費很長時間,可以多開幾個視窗並行執行。

GGSCI > dblogin userid ggadmin, password ggadmin

 

add trandata SI_INFORMTN_SCHEMA.*

add trandata ORDPLUGINS.*

add trandata PRDXIVMILC.*

add trandata PRDABPPSZVMIREAD.*

add trandata PRDABPPWHVMIREAD.*

add trandata PRDABPPXMVMIREAD.*

add trandata PRDABPPWHBSVMIREAD.*

add trandata PRDHKFGVMIREAD.*

add trandata PRDXIVMI1.*

add trandata PRDXIVMIBRP.*

add trandata SHARING.*

add trandata PRDSPUSERVMI2READ.*

add trandata PRDVMIBRPREAD.*

add trandata PRDSPUSERVMI1READ.*

add trandata PRDHKFGSPVMI.*

add trandata PRDINFOVMIK2.*

add trandata PRDINFREPVMI.*

add trandata PRDSPUSERVMI3.*

add trandata PRDSPVMIBRP.*

add trandata PRDSPUSERVMI2.*

add trandata CSETRACK.*

add trandata PRDCSE.*

add trandata PRDCSEVMI3.*

add trandata PRDCSEVMI2.*

add trandata PRDCSEVMIBRP.*

add trandata PRDCSEVMI1.*

add trandata PRDABPPCDVMIREAD.*

add trandata PRDABPPSHVMIREAD.*

add trandata PRDABPPBSVMIREAD.*

add trandata PRDSPUSERVMI1.*

add trandata PRDABPPWHBSVMI.*

add trandata PRDABPPSZVMI.*

add trandata PRDABPPWHVMI.*

add trandata PRDABPPXMVMI.*

add trandata PRDABPPSHVMI.*

add trandata PRDABPPCDVMI.*

add trandata PRDHKFGVMI.*

add trandata PRDABPPVMI3.*

add trandata PRDABPPVMIBRP.*

add trandata PRDABPPVMI1.*

add trandata PRDABPPVMI2.*

add trandata PRDABPPBSVMI.*

add trandata PUBLIC.*

 

檢查表的SUPPLEMENTAL_LOG是否開啟:

/* 出現如下資訊說明開啟supplemental log,若出現disable 說明未開啟

Logging of supplemental redo log data is enabled for table PRDABPPVMI1.AGGLVLCRITERIA_NC.

對未開啟supplemental log的表需要單獨新增,執行:

add trandata username.TABLE_NAME

 

info trandata SI_INFORMTN_SCHEMA.*

info trandata ORDPLUGINS.*

info trandata PRDXIVMILC.*

info trandata PRDABPPSZVMIREAD.*

info trandata PRDABPPWHVMIREAD.*

info trandata PRDABPPXMVMIREAD.*

info trandata PRDABPPWHBSVMIREAD.*

info trandata PRDHKFGVMIREAD.*

info trandata PRDXIVMI1.*

info trandata PRDXIVMIBRP.*

info trandata SHARING.*

info trandata PRDSPUSERVMI2READ.*

info trandata PRDVMIBRPREAD.*

info trandata PRDSPUSERVMI1READ.*

info trandata PRDHKFGSPVMI.*

info trandata PRDINFOVMIK2.*

info trandata PRDINFREPVMI.*

info trandata PRDSPUSERVMI3.*

info trandata PRDSPVMIBRP.*

info trandata PRDSPUSERVMI2.*

info trandata CSETRACK.*

info trandata PRDCSE.*

info trandata PRDCSEVMI3.*

info trandata PRDCSEVMI2.*

info trandata PRDCSEVMIBRP.*

info trandata PRDCSEVMI1.*

info trandata PRDABPPCDVMIREAD.*

info trandata PRDABPPSHVMIREAD.*

info trandata PRDABPPBSVMIREAD.*

info trandata PRDSPUSERVMI1.*

info trandata PRDABPPWHBSVMI.*

info trandata PRDABPPSZVMI.*

info trandata PRDABPPWHVMI.*

info trandata PRDABPPXMVMI.*

info trandata PRDABPPSHVMI.*

info trandata PRDABPPCDVMI.*

info trandata PRDHKFGVMI.*

info trandata PRDABPPVMI3.*

info trandata PRDABPPVMIBRP.*

info trandata PRDABPPVMI1.*

info trandata PRDABPPVMI2.*

info trandata PRDABPPBSVMI.*

info trandata PUBLIC.*

 

 

管理程式mgr

在舊營業系統執行該配置任務。

$ cd /arch/ogg

$ ./ggsci

 

編輯mgr 程式配置引數,配置資訊將儲存於./dirprm/mgr.prm 檔案中。

ggsci> edit params mgr

 

執行後將進入vi 編輯模式,輸入以下內容。

在源端:

Port 7809

DynamicPortList

DynamicPortReassignDelay 5

 

 

-- AutoRestart ER *, Retries 5, WaitMinutes 10, ResetMinutes 60

 

LagReportHours 1

LagInfoMinutes 3

LagCriticalMinutes 5

儲存並退出vi 編輯。啟動源端的mgr 管理程式:

ggsci> start mgr

 

DDL 複製

關閉回收站功能( 重啟資料庫生效)

alter system set recyclebin=off scope=spfile;

 

EDIT PARAMS ./GLOBALS

輸入以下內容

GGSCHEMA ggadmin

執行一系列同步DLL 語句要用到的GoldenGate 指令碼,這些指令碼存放在GG 的安裝目錄下:

停止所有資料庫連線( sqlplus goldengate 以及所有應用連線),執行過程中不要有新的連線

SYSDBA 身份登入

sqlplus / as sysdba

SQL> GRANT EXECUTE ON utl_file TO GGADMIN;

SQL> @marker_setup ggadmin

SQL> @ddl_setup

SQL> @role_setup

SQL> grant GGS_GGSUSER_ROLE to GGADMIN;

SQL> @ddl_enable

SQL> @?/rdbms/admin/dbmspool

SQL> @ddl_pin

複製支援

在主端和備端都執行sequence.sql

SQL> @sequence.sql ggadmin

在主端執行下面的命令

GRANT EXECUTE on ggadmin.updateSequence TO ggadmin;

在目標端端執行

GRANT EXECUTE on ggadmin.replicateSequence TO ggadmin;

在源端執行下面的命令

alter table sys.seq$ add supplemental log data (primary key) columns;

的資料抽取程式Extract

Extract 抽取程式 ext1

ADD EXTRACT ext1, TRANLOG, THREADS 2, BEGIN NOW

建立ext1 程式的資料佇列檔案:

ADD EXTTRAIL ./dirdat/lt, EXTRACT ext1, Megabytes 200

 

檢查配置是否正確:

GGSCI> INFO EXTRACT *

 

編輯ext1 程式引數設定,配置資訊將儲存於./dirprm/ext1.prm 檔案中。

ggsci> edit params ext1

 

ext1 抽取程式引數配置如下:(包含所有schema

SETENV (NLS_LANG=American_America.UTF8)

UserID ggadmin, Password ggadmin

DiscardFile ./dirrpt/ext1.dsc, append, Megabytes 200

 

Extract ext1

SETENV (NLS_LANG=American_America.UTF8)

UserID ggadmin@netdb, Password ggadmin

ExtTrail ./dirdat/lt

--TranlogOptions RawDeviceOffset 0

DynamicResolution

GETTRUNCATES

 

DDL INCLUDE OBJNAME I_INFORMTN_SCHEMA.* &

    INCLUDE OBJNAME ORDPLUGINS.*         &

    INCLUDE OBJNAME PRDXIVMILC.*         &

    INCLUDE OBJNAME PRDABPPSZVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPWHVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPXMVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPWHBSVMIREAD.* &

    INCLUDE OBJNAME PRDHKFGVMIREAD.*     &

    INCLUDE OBJNAME PRDXIVMI1.*          &

    INCLUDE OBJNAME PRDXIVMIBRP.*        &

    INCLUDE OBJNAME SHARING.*            &

    INCLUDE OBJNAME PRDSPUSERVMI2READ.*  &

    INCLUDE OBJNAME PRDVMIBRPREAD.*      &

    INCLUDE OBJNAME PRDSPUSERVMI1READ.*  &

    INCLUDE OBJNAME PRDHKFGSPVMI.*       &

    INCLUDE OBJNAME PRDINFOVMIK2.*       &

    INCLUDE OBJNAME PRDINFREPVMI.*       &

    INCLUDE OBJNAME PRDSPUSERVMI3.*      &

    INCLUDE OBJNAME PRDSPVMIBRP.*        &

    INCLUDE OBJNAME PRDSPUSERVMI2.*      &

    INCLUDE OBJNAME CSETRACK.*           &

    INCLUDE OBJNAME PRDCSE.*             &

    INCLUDE OBJNAME PRDCSEVMI3.*         &

    INCLUDE OBJNAME PRDCSEVMI2.*         &

    INCLUDE OBJNAME PRDCSEVMIBRP.*       &

    INCLUDE OBJNAME PRDCSEVMI1.*         &

    INCLUDE OBJNAME PRDABPPCDVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPSHVMIREAD.*   &

    INCLUDE OBJNAME PRDABPPBSVMIREAD.*   &

    INCLUDE OBJNAME PRDSPUSERVMI1.*      &

    INCLUDE OBJNAME PRDABPPWHBSVMI.*     &

    INCLUDE OBJNAME PRDABPPSZVMI.*       &

    INCLUDE OBJNAME PRDABPPWHVMI.*       &

    INCLUDE OBJNAME PRDABPPXMVMI.*       &

    INCLUDE OBJNAME PRDABPPSHVMI.*       &

    INCLUDE OBJNAME PRDABPPCDVMI.*       &

    INCLUDE OBJNAME PRDHKFGVMI.*         &

    INCLUDE OBJNAME PRDABPPVMI3.*        &

    INCLUDE OBJNAME PRDABPPVMIBRP.*      &

    INCLUDE OBJNAME PRDABPPVMI1.*        &

    INCLUDE OBJNAME PRDABPPVMI2.*        &

    INCLUDE OBJNAME PRDABPPBSVMI.*       &

    INCLUDE OBJNAME PUBLIC'.*           

 

DDLOPTIONS REPORT

--DDLOPTIONS UPDATEMETADATA, REPORT

DDLOPTIONS ADDTRANDATA, REPORT

--DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

TRANLOGOPTIONS EXCLUDEUSER ggadmin

 

 

TABLEEXCLUDE PRDABPPVMI2.RUPD$*;

TABLEEXCLUDE PRDABPPVMI3.RUPD$*;

TABLEEXCLUDE PRDABPPWHVMI.RUPD$*;

TABLEEXCLUDE PRDABPPCDVMI.RUPD$*;

TABLEEXCLUDE PRDABPPBSVMI.RUPD$*;

TABLEEXCLUDE PRDABPPXMVMI.RUPD$*;

TABLEEXCLUDE PRDABPPSZVMI.RUPD$*;

TABLEEXCLUDE PRDABPPWHBSVMI.RUPD$*;

TABLEEXCLUDE PRDABPPVMIBRP.RUPD$*;

TABLEEXCLUDE PRDABPPVMI1.RUPD$*;

TABLEEXCLUDE PRDHKFGVMI.RUPD$*;

TABLEEXCLUDE PRDABPPSHVMI.RUPD$*;

 

TABLEEXCLUDE PRDABPPVMI2.MLOG$*;

TABLEEXCLUDE PRDABPPVMI3.MLOG$*;

TABLEEXCLUDE PRDABPPWHVMI.MLOG$*;

TABLEEXCLUDE PRDABPPCDVMI.MLOG$*;

TABLEEXCLUDE PRDABPPBSVMI.MLOG$*;

TABLEEXCLUDE PRDABPPXMVMI.MLOG$*;

TABLEEXCLUDE PRDABPPSZVMI.MLOG$*;

TABLEEXCLUDE PRDABPPWHBSVMI.MLOG$*;

TABLEEXCLUDE PRDABPPVMIBRP.MLOG$*;

TABLEEXCLUDE PRDABPPVMI1.MLOG$*;

TABLEEXCLUDE PRDHKFGVMI.MLOG$*;

TABLEEXCLUDE PRDABPPSHVMI.MLOG$*;

 

 

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_UI_GROUPITEM;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SPRBOM_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_PCDW_BOMCONFLICT;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_OPERATION_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ITEM_MASTER_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ITEM_BOM_RTNG_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_CONSTRAINT_COUNT_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_CTO_ORDER_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MP_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MRQ_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MTM_FILTER;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T1_69;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T2;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_CFL;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_CONSTRAINT_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_DPD;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SMP_T2;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SO_FILTER;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ROUTING_T1;

TABLEEXCLUDE PRDABPPVMI1.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMI2.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMI3.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMIBRP.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDHKFGVMI.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDSPUSERVMI1.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE PRDXIVMI1.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE PRDXIVMIBRP.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE SHARING.Z_MID_WORKDAY_UISELECTED;

TABLEEXCLUDE SHARING.CONF_WORKDAY_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_VALID_TASK;

TABLEEXCLUDE SHARING.CONF_WORKTIME_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP2;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP1;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME1;

TABLEEXCLUDE SHARING.Z_MID_VALID_TASK_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP;

 

TABLE SI_INFORMTN_SCHEMA.*;

TABLE ORDPLUGINS.*;

TABLE PRDXIVMILC.*;

TABLE PRDABPPSZVMIREAD.*;

TABLE PRDABPPWHVMIREAD.*;

TABLE PRDABPPXMVMIREAD.*;

TABLE PRDABPPWHBSVMIREAD.*;

TABLE PRDHKFGVMIREAD.*;

TABLE PRDXIVMI1.*;

TABLE PRDXIVMIBRP.*;

TABLE SHARING.*;

TABLE PRDSPUSERVMI2READ.*;

TABLE PRDVMIBRPREAD.*;

TABLE PRDSPUSERVMI1READ.*;

TABLE PRDHKFGSPVMI.*;

TABLE PRDINFOVMIK2.*;

TABLE PRDINFREPVMI.*;

TABLE PRDSPUSERVMI3.*;

TABLE PRDSPVMIBRP.*;

TABLE PRDSPUSERVMI2.*;

TABLE CSETRACK.*;

TABLE PRDCSE.*;

TABLE PRDCSEVMI3.*;

TABLE PRDCSEVMI2.*;

TABLE PRDCSEVMIBRP.*;

TABLE PRDCSEVMI1.*;

TABLE PRDABPPCDVMIREAD.*;

TABLE PRDABPPSHVMIREAD.*;

TABLE PRDABPPBSVMIREAD.*;

TABLE PRDSPUSERVMI1.*;

TABLE PRDABPPWHBSVMI.*;

TABLE PRDABPPSZVMI.*;

TABLE PRDABPPWHVMI.*;

TABLE PRDABPPXMVMI.*;

TABLE PRDABPPSHVMI.*;

TABLE PRDABPPCDVMI.*;

TABLE PRDHKFGVMI.*;

TABLE PRDABPPVMI3.*;

TABLE PRDABPPVMIBRP.*;

TABLE PRDABPPVMI1.*;

TABLE PRDABPPVMI2.*;

TABLE PRDABPPBSVMI.*;

TABLE PUBLIC.*;

 

SEQUENCE PRDABPPVMI2.*;

SEQUENCE PRDABPPVMI3.*;

SEQUENCE PRDABPPWHVMI.*;

SEQUENCE PRDSPUSERVMI1.*;

SEQUENCE PRDSPUSERVMI2.*;

SEQUENCE PRDHKFGSPVMI.*;

SEQUENCE PRDABPPCDVMI.*;

SEQUENCE PRDSPVMIBRP.*;

SEQUENCE PRDABPPBSVMI.*;

SEQUENCE PRDABPPXMVMI.*;

SEQUENCE PRDABPPSZVMI.*;

SEQUENCE PRDABPPWHBSVMI.*;

SEQUENCE PRDABPPVMIBRP.*;

SEQUENCE SHARING.*;

SEQUENCE PRDABPPVMI1.*;

SEQUENCE PRDHKFGVMI.*;

SEQUENCE PRDSPUSERVMI3.*;

SEQUENCE PRDABPPSHVMI.*;

 

的資料傳輸程式Datapump

dp1

ADD EXTRACT dp1, exttrailsource ./dirdat/lt, begin now

 

建立遠端佇列檔案:

ADD RMTTRAIL ./dirdat/rt, EXTRACT dp1, Megabytes 200

 

編輯dp1 程式引數設定,配置資訊將儲存於./dirprm/dp1.prm 檔案中。

ggsci> edit params dp1

 

dp1 傳輸程式引數配置如下:

Extract dp1

RmtHost 10.99.205.76, MgrPort 7809, timeout 30, Compress

RmtTrail ./dirdat/rt

Passthru

 

 

TABLEEXCLUDE PRDABPPVMI2.RUPD$*;

TABLEEXCLUDE PRDABPPVMI3.RUPD$*;

TABLEEXCLUDE PRDABPPWHVMI.RUPD$*;

TABLEEXCLUDE PRDABPPCDVMI.RUPD$*;

TABLEEXCLUDE PRDABPPBSVMI.RUPD$*;

TABLEEXCLUDE PRDABPPXMVMI.RUPD$*;

TABLEEXCLUDE PRDABPPSZVMI.RUPD$*;

TABLEEXCLUDE PRDABPPWHBSVMI.RUPD$*;

TABLEEXCLUDE PRDABPPVMIBRP.RUPD$*;

TABLEEXCLUDE PRDABPPVMI1.RUPD$*;

TABLEEXCLUDE PRDHKFGVMI.RUPD$*;

TABLEEXCLUDE PRDABPPSHVMI.RUPD$*;

 

TABLEEXCLUDE PRDABPPVMI2.MLOG$*;

TABLEEXCLUDE PRDABPPVMI3.MLOG$*;

TABLEEXCLUDE PRDABPPWHVMI.MLOG$*;

TABLEEXCLUDE PRDABPPCDVMI.MLOG$*;

TABLEEXCLUDE PRDABPPBSVMI.MLOG$*;

TABLEEXCLUDE PRDABPPXMVMI.MLOG$*;

TABLEEXCLUDE PRDABPPSZVMI.MLOG$*;

TABLEEXCLUDE PRDABPPWHBSVMI.MLOG$*;

TABLEEXCLUDE PRDABPPVMIBRP.MLOG$*;

TABLEEXCLUDE PRDABPPVMI1.MLOG$*;

TABLEEXCLUDE PRDHKFGVMI.MLOG$*;

TABLEEXCLUDE PRDABPPSHVMI.MLOG$*;

 

 

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_UI_GROUPITEM;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SPRBOM_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_PCDW_BOMCONFLICT;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_OPERATION_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ITEM_MASTER_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ITEM_BOM_RTNG_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_CONSTRAINT_COUNT_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_CTO_ORDER_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MP_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MRQ_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_MTM_FILTER;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T1;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T1_69;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_ORG_T2;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_CFL;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_CONSTRAINT_T;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_PARTS_DPD;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SMP_T2;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_BOM_SO_FILTER;

TABLEEXCLUDE PRDABPPBSVMI.Z_MID_ROUTING_T1;

TABLEEXCLUDE PRDABPPVMI1.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMI2.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMI3.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDABPPVMIBRP.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDHKFGVMI.TEMP_KEY_VALUES;

TABLEEXCLUDE PRDSPUSERVMI1.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE PRDXIVMI1.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE PRDXIVMIBRP.QUEST_SL_TEMP_EXPLAIN1;

TABLEEXCLUDE SHARING.Z_MID_WORKDAY_UISELECTED;

TABLEEXCLUDE SHARING.CONF_WORKDAY_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_VALID_TASK;

TABLEEXCLUDE SHARING.CONF_WORKTIME_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP2;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP1;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME1;

TABLEEXCLUDE SHARING.Z_MID_VALID_TASK_UISELECTED;

TABLEEXCLUDE SHARING.Z_MID_WORKTIME_TMP;

 

TABLE SI_INFORMTN_SCHEMA.*;

TABLE ORDPLUGINS.*;

TABLE PRDXIVMILC.*;

TABLE PRDABPPSZVMIREAD.*;

TABLE PRDABPPWHVMIREAD.*;

TABLE PRDABPPXMVMIREAD.*;

TABLE PRDABPPWHBSVMIREAD.*;

TABLE PRDHKFGVMIREAD.*;

TABLE PRDXIVMI1.*;

TABLE PRDXIVMIBRP.*;

TABLE SHARING.*;

TABLE PRDSPUSERVMI2READ.*;

TABLE PRDVMIBRPREAD.*;

TABLE PRDSPUSERVMI1READ.*;

TABLE PRDHKFGSPVMI.*;

TABLE PRDINFOVMIK2.*;

TABLE PRDINFREPVMI.*;

TABLE PRDSPUSERVMI3.*;

TABLE PRDSPVMIBRP.*;

TABLE PRDSPUSERVMI2.*;

TABLE CSETRACK.*;

TABLE PRDCSE.*;

TABLE PRDCSEVMI3.*;

TABLE PRDCSEVMI2.*;

TABLE PRDCSEVMIBRP.*;

TABLE PRDCSEVMI1.*;

TABLE PRDABPPCDVMIREAD.*;

TABLE PRDABPPSHVMIREAD.*;

TABLE PRDABPPBSVMIREAD.*;

TABLE PRDSPUSERVMI1.*;

TABLE PRDABPPWHBSVMI.*;

TABLE PRDABPPSZVMI.*;

TABLE PRDABPPWHVMI.*;

TABLE PRDABPPXMVMI.*;

TABLE PRDABPPSHVMI.*;

TABLE PRDABPPCDVMI.*;

TABLE PRDHKFGVMI.*;

TABLE PRDABPPVMI3.*;

TABLE PRDABPPVMIBRP.*;

TABLE PRDABPPVMI1.*;

TABLE PRDABPPVMI2.*;

TABLE PRDABPPBSVMI.*;

TABLE PUBLIC.*;

 

SEQUENCE PRDABPPVMI2.*;

SEQUENCE PRDABPPVMI3.*;

SEQUENCE PRDABPPWHVMI.*;

SEQUENCE PRDSPUSERVMI1.*;

SEQUENCE PRDSPUSERVMI2.*;

SEQUENCE PRDHKFGSPVMI.*;

SEQUENCE PRDABPPCDVMI.*;

 

源端啟動資料抽取程式

ggsci> start ext1

人工記錄抽取程式啟動的時間點,例如:“ 2015-01-06 11:20:55 ,將此時間點作為在下一步中查詢長事務的一個判斷條件。

可以使用info all 檢查extract 程式狀態是否為RUNNING

如果狀態不是RUNNING ,則可以使用以下命令檢視報錯原因,再根據錯誤原因具體分析和處理:

ggsci> view report ext1

使用stats 命令對抽取和傳輸進行進行檢查:

stats ext1

通常使用的初始化方法有以下幾種:

l   對於資料量不大的資料庫可以採用資料泵的方式進行初始化。

l   對於資料量較大的資料庫,可以採用RMAN 的方式。

l   對於資料量較大且不能採用RMAN 的資料庫,建議找一箇中間環境,將資料RMAN 恢復到中間環境,再採用資料泵導數。

長事務處理:在V$TRANSACTION 中查詢當前正在執行的事務(RAC 環境下,檢視gv$transaction ),並找出相應的長事務。在執行資料同步之前,確保這些長事務已經完成,或者被kill 掉(需要得到dba 或者相關管理人員的確認)。

Select  start_time  from gv$transaction

where to_date(start_time, 'yyyy-mm-dd hh24:mi:ss')<to_date('2015-01-06 11:20:55', 'yyyy-mm-dd hh24:mi:ss');

注:透過上面的SQL語句查詢到比3.6.9歩中記錄下的時間點早的事務,需要等到該事務結束,然後執行資料同步;

同步開始時確保資料庫中長事務已完成或者被kill 掉。

SCN

SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

使用expdp 匯出生產庫資料,flashback_scn 為上一步驟獲取的scn ,並行數可適當調整。

( 並行度引數parallel 的值根據資料量大小和系統負載調整

由於指定了flashback_scn ,當資料量較大時可能會出現ORA-01555 報錯,建議在資料庫空閒時進行。)

expdp \'/ as sysdba\' directory= EXP_DIR dumpfile=PRDABPPVMI1_%U.dmp logfile=exp_PRDABPPVMI1.log  schemas=PRDABPPVMI1  parallel=4 FLASHBACK_SCN= 359963860636

使用impdp 匯入,並行數可適當調整。

impdp \'/ as sysdba\' directory= EXP_DIR dumpfile=PRDABPPVMI1_%U.dmp logfile=imp_PRDABPPVMI1.log  full=y  parallel=4 cluster=n

檢視日誌確認資料匯入正常。

 

進行初始化

源庫做RMAN 備份;

在目標庫做restore

在源庫獲取當前SCN

SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

將備份以來的所有歸檔copy 到目標庫,目標庫recover 到上一步獲取的SCN

 

注意用來啟動OGG 複製程式的SCN 為“從生產獲取的SCN - 1 ,因為”recover untial scn” 只恢復到指定SCN 之前的資料,不包括指定SCN

假如從生產獲取的 SCN 14245600463106 ,則啟動 OGG 複製程式的 SCN:

start_SCN = 14245600463106 - 1 = 14245600463105

 

軟體安裝

首先要為GoldenGate 軟體劃分適當的共享檔案系統,這裡假設使用/arch

登入RAC 的節點1 主機,使用作業系統oracle 使用者(即Oracle 資料庫軟體的安裝和執行使用者)來安裝GoldenGate 。所使用的GoldenGate 軟體版本為11.2.1.0.25

GoldenGate for 11g : p19269552_1121025_Linux-x86-64.zip

將安裝介質p19269552_1121025_Linux-x86-64.zip 檔案上傳到資料庫伺服器/arch/ogg 目錄,使用unzip 命令解壓縮,會出現fbo_ggs_Linux_x64_ora11g_64bit.tar 檔案,再使用tar 對該檔案解報。解壓縮/ 解包的過程就是安裝過程。

cd /arch/ogg

unzip p19269552_1121025_Linux-x86-64.zip

tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

解壓後,建立 GoldenGate 需要的子目錄(使用create subdirs 命令):

cd /arch/ogg

./ggsci

 

Oracle GoldenGate Command Interpreter for Oracle

… …

GGSCI (aaopdb2) 1> create subdirs

 

Creating subdirectories under current directory /arch/ogg

 

Parameter files                /arch/ogg/dirprm: already exists

Report files                   /arch/ogg/dirrpt: created

Checkpoint files               /arch/ogg/dirchk: created

Process status files           /arch/ogg/dirpcs: created

SQL script files               /arch/ogg/dirsql: created

Database definitions files     /arch/ogg/dirdef: created

Extract data files             /arch/ogg/dirdat1: created

Temporary files                /arch/ogg/dirtmp: created

Stdout files                   /arch/ogg/dirout: created

 

編輯oracle 使用者主目錄下的.profile 檔案,在檔案末尾追加以下內容:

export GG_HOME=/arch/ogg

export SHLIB_PATH =$ SHLIB_PATH:$GG_HOME:$ORACLE_HOME/lib

 

管理程式mgr

在新系統執行該配置任務。

$ cd /arch/ogg

$ ./ggsci

 

編輯mgr 程式配置引數,配置資訊將儲存於./dirprm/mgr.prm 檔案中。

ggsci> edit params mgr

 

執行後將進入vi 編輯模式,輸入以下內容。

Port 7809

DynamicPortList 7810-7820

DynamicPortReassignDelay 5

 

PurgeOldExtracts ./dirdat/rt*, UseCheckpoints, MinKeepDays 5

 

-- AutoRestart ER *, Retries 5, WaitMinutes 10, ResetMinutes 60

 

LagReportHours 1

LagInfoMinutes 3

LagCriticalMinutes 5

儲存並退出vi 編輯。啟動源端的mgr 管理程式:

ggsci> start mgr

 

的資料庫使用者

在目標資料庫建立GoldenGate 執行所需要的資料庫使用者。

使用下面的SQL 建立GoldenGate 的資料庫使用者ggadmin

目標端資料庫:

create tablespace goldengate datafile 'xxx' size 10g autoextend on; /* 建立單獨的表空間*/

 

create user ggadmin identified by gadmin

default tablespace users

temporary tablespace temp;

 

grant dba to ggadmin;

 

資料初始化完成後,在啟動複製程式前,還需要如下的檢查與配置工作。

在源端由於主外來鍵約束和級聯刪除約束所產生的DML 本身已經被GoldenGate 捕獲並且投遞到目標端,如果在目標端啟用了外來鍵約束和級聯刪除,則可能造成重複記錄等資料不一致的問題。為了防止此類問題,需要在目標庫上禁用外來鍵約束和級聯刪除約束。

透過下面的方法禁用這些約束:

在 執行下面的SQL ,生成用於禁用外來鍵約束的指令碼檔案:

set echo off verify off trim on heading off feedback off

set pagesize 2000 linesize 150

 

spool disable_foreign_constraints.sql

select 'alter table '||owner||'.'||table_name|| ' disable constraint '||constraint_name||';'

from dba_constraints

where constraint_type = 'R'

and owner 'PRDABPPVMI1','PRDSPUSERVMI1' );

spool off

 

在新系統資料庫執行disable_foreign_constraints.sql 指令碼禁用外來鍵約束。

然後執行以下語句確認所有的外來鍵約束都已經禁用:

Col owner for a10

Col table_name for a30

Col constraint_name for a30

select owner, table_name, constraint_name, status

from dba_constraints

where constraint_type='R' and owner in('PRDABPPVMI1','PRDSPUSERVMI1');

在新系統執行下面的SQL ,生成用於禁用級聯刪除的指令碼檔案:

set echo off verify off trim on heading off feedback off

set pagesize 2000 linesize 150

 

spool disable_cascade_delete_constraints.sql

 

select 'alter table '||owner||'.'||table_name||'  disable constraint '||constraint_name||';'

from dba_constraints

where owner in('PRDABPPVMI1','PRDSPUSERVMI1')  and constraint_type = 'R' and delete_rule = 'CASCADE';

 

spool off

 

在新系統資料庫執行disable_cascade_delete_constraints.sql 指令碼禁用級聯刪除。

然後執行以下語句確認所有的級聯刪除都已經禁用:

select owner, table_name, constraint_name, status

from dba_constraints

where delete_rule = 'CASCADE'and owner in('PRDABPPVMI1','PRDSPUSERVMI1');

 

在源端執行的job 會生成對應的DML GoldenGate extract 程式捕獲並且投遞到目標端,如果目標端同時也開啟了job 則有可能造成資料的不一致,例如重複記錄等。為了防止目標端資料庫系統的job 對複製產生干擾,在啟動目標端的GoldenGate 程式之前,需要禁用目標端資料庫的job

使用以下命令將新系統資料庫的job 佇列修改為0 ,從而達到禁用目標庫job 的目的:

 

修改為以後使用以下命令確認當前的修改已經生效,job 佇列為0

show parameter job;

在資料庫源端觸發器產生的DML 已經被GoldenGate extract 程式捕獲,並且透過pump 投遞到目標端。如果目標端的觸發器啟用,則可能造成目標端資料的不一致,最典型的一種場景是在目標端沒有主鍵索引的表上產生重複資料。為了防止上述情況的出現,需要在目標端資料庫禁用觸發器。

在新系統執行下面的語句,生成禁用觸發器的指令碼檔案disable_triggers.sql

set echo off verify off trim on heading off feedback off

set pagesize 2000 linesize 150

 

spool  disable_triggers.sql

select 'alter trigger '||owner||'.'||trigger_name|| ' disable;'

from dba_triggers

where owner in('PRDABPPVMI1','PRDSPUSERVMI1') and status = 'ENABLED';

 

spool off

 

在新系統執行指令碼disable_triggers.sql 禁用觸發器。然後執行以下語句確認所有的觸發器都已經被禁用:

sqlplus / as sysdba

@ disable_triggers.sql

 

select owner, status, count(*)

from dba_triggers

where owner in('PRDABPPVMI1','PRDSPUSERVMI1')

group by owner, status;

在目標端建立Checkpoint 表,表名為ggadmin.ggchkpt

$ cd /arch/ogg

$./ggsci

ggsci> DBLOGIN USERID ggadmin, PASSWORD ggadmin

Successfully logged into database.

 

ggsci> add checkpointtable ggadmin.ggchkpt

Successfully created checkpoint table GGADMIN.GGCHKPT.

 

編輯GLOBALS 引數配置檔案:

ggsci> EDIT PARAMS ./GLOBALS

CheckpointTable ggadmin.ggchkpt

GGSCHEMA ggadmin

 

的複製程式Replicat

目標端配置

分別為兩個schema 建立一個複製程式。

建立複製程式 rep1

ADD REPLICAT rep1, CHECKPOINTTABLE ggadmin.ggchkpt, EXTTRAIL ./dirdat/rt

 

編輯Rep1 的引數,自動儲存於./dirprm/repl.prm 檔案中:

 edit params rep1

Replicat rep1

SETENV (NLS_LANG=American_America.AL32UTF8)

USERID ggadmin, PASSWORD ggadmin

DiscardFile ./dirrpt/rep1.dsc, Purge, Megabytes 200

 

MaxDiscardRecs 10

REPERROR DEFAULT ABEND

DBOPTIONS DEFERREFCONST

DBOPTIONS SUPPRESSTRIGGERS

GetUpdateBefores

--AllowNoopUpdates

ASSUMETARGETDEFS

CHECKSEQUENCEVALUE

-- HandleCollisions

GETTRUNCATES

 

DDL

--DDL INCLUDE OBJNAME bocnet.*

DDLOPTIONS REPORT

DDLOPTIONS UPDATEMETADATA, REPORT

DDLSUBST 'enable' WITH 'disable' INCLUDE OBJTYPE 'trigger', OPTYPE alter

DDLERROR DEFAULT ABEND

--DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

-- To increase replicat speed

BatchSQL

 

 

MAP PRDABPPVMI1.*, TARGET PRDABPPVMI1.*;

建立複製程式 rep2

ADD REPLICAT rep2, CHECKPOINTTABLE ggadmin.ggchkpt, EXTTRAIL ./dirdat/rt

編輯Rep2 的引數,自動儲存於./dirprm/rep2.prm 檔案中:

 edit params rep2

Replicat rep2

SETENV (NLS_LANG=American_America.AL32UTF8)

USERID ggadmin, PASSWORD ggadmin

DiscardFile ./dirrpt/rep2.dsc, Purge, Megabytes 200

 

MaxDiscardRecs 10

REPERROR DEFAULT ABEND

DBOPTIONS DEFERREFCONST

DBOPTIONS SUPPRESSTRIGGERS

GetUpdateBefores

--AllowNoopUpdates

ASSUMETARGETDEFS

CHECKSEQUENCEVALUE

-- HandleCollisions

GETTRUNCATES

 

DDL

--DDL INCLUDE OBJNAME bocnet.*

DDLOPTIONS REPORT

DDLOPTIONS UPDATEMETADATA, REPORT

DDLSUBST 'enable' WITH 'disable' INCLUDE OBJTYPE 'trigger', OPTYPE alter

DDLERROR DEFAULT ABEND

--DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5

-- To increase replicat speed

BatchSQL

 

--MAPEXCLUDE bocnet.mlog$_bocorg_admin;

 

MAP PRDSPUSERVMI1.*, TARGET PRDSPUSERVMI1.*;

 

 

啟動複製程式前需要登入源端啟動 dp1 程式

登入源端系統

GGSCI> start dp1

務必確認新生產庫中需要同步表上的外來鍵約束、級聯刪除、 job 、觸發器已經禁用

在檢查確認沒有問題後,使用下面的命令啟動複製程式:

SCN

start rep2 aftercsn SCN

 

若採用資料泵初始化,SCN為“3.7.2”小節中獲取的SCN。

若採用RMAN初始化,SCN為“3.7.3”小節中獲取的SCN-1。

可以使用info all 檢查replicat 程式狀態是否為RUNNING ;如果狀態不是RUNNING ,則可以使用以下命令檢視報錯原因:

ggsci>view report rep1

然後再根據錯誤原因具體分析和處理。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10201716/viewspace-2939528/,如需轉載,請註明出處,否則將追究法律責任。

相關文章