OGG安裝之oracle2oracle

兩臺服務器都需要創建ogg操作系統用戶(此步驟非必須,也可以使用ORACLE用戶安裝)。
useradd -u 1003 -g oinstall -G dba ogg
passwd ogg

su - ogg
vi .bash_profile
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=XXL1
export LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/dbhome_1/lib
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH
export GGHOLE=/ogg

source .bash_profil生效

兩臺服務器都需要做同樣的操作。
mkdir /ogg
chown -R ogg:oinstall /ogg

將ogg的11g安裝包fbo_ggs_Linux_x64_ora11g_64bit.tar上傳到/ogg下
用ogg用戶解壓
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

./ggsci測試
[ogg@oracle2 ogg]$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14

Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.

GGSCI (oracle2) 1>

ORACLE建議使用單獨的表空間存放OGG數據,表空間大小50M就可以,但是最好設置數據文件的自動擴展。
select file_name from dba_data_files;查看錶空間的存放目錄
create tablespace ogg datafile ‘/u01/app/oracle/oradata/XXL/ogg01.dbf’ size 50M autoextend on;

創建OGG用戶
create user ogg identified by ogg default tablespace ogg;

爲OGG用戶授權,OGG用戶需要以下權限,也有人爲了省事,直接給OGG用戶DBA權限。
grant CONNECT, RESOURCE to ogg;
grant SELECT ANY DICTIONARY, SELECT ANY TABLE to ogg;
grant ALTER ANY TABLE to ogg;
grant FLASHBACK ANY TABLE to ogg;
grant EXECUTE on DBMS_FLASHBACK to ogg;
grant insert any table to ogg;
grant update any table to ogg;
grant delete any table to ogg;
不同的需求,OGG用戶需要的權限也不一樣,上面的權限基本可以支持大多數情況的數據複製,如上面的權限不足,需根據實際需求授權。

打開數據庫的附加日誌和force log
SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;

NAME OPEN_MODE FOR SUPPLEME

——— ——————– — ——–

DBDREAM READ WRITE NO NO

上面顯示數據庫的附加日誌和force log都沒有開啓,使用下面的命令開啓。
SQL> alter database force logging;

Database altered.

SQL> alter database add SUPPLEMENTAL log data;

Database altered.

SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;

NAME OPEN_MODE FOR SUPPLEME

——— ——————– — ——–

DBDREAM READ WRITE YES YES

確保最小附件日誌,pk,uk,fk附加日誌打開,而all columns的附加日誌是關閉的。
SQL> select SUPPLEMENTAL_LOG_DATA_MIN a,SUPPLEMENTAL_LOG_DATA_PK b,SUPPLEMENTAL_LOG_DATA_UI c,SUPPLEMENTAL_LOG_DATA_FK d,SUPPLEMENTAL_LOG_DATA_ALL e from v$database;

SUPPLEMENTAL_LOG SUPPLE SUPPLE SUPPLE SUPPLE


YES NO NO NO NO

SQL> alter database add supplemental log data (primary key,unique,foreign key) columns;

Database altered.

SQL> select SUPPLEMENTAL_LOG_DATA_MIN a,SUPPLEMENTAL_LOG_DATA_PK b,SUPPLEMENTAL_LOG_DATA_UI c,SUPPLEMENTAL_LOG_DATA_FK d,SUPPLEMENTAL_LOG_DATA_ALL e from v$database;

A B C D E


YES YES YES YES NO

關閉回收站功能(DDL)必須關閉
SQL> show parameter recyclebin

NAME TYPE VALUE


recyclebin string on
alter system set recyclebin=off scope=spfile;這樣就需要重啓數據庫生效

alter system switch logfile;

查看要是同步的用戶的狀態,確保是open
select username,account_status from dba_users;

運行OGG支持sequence

運行OGG支持DDL腳本br/>如果要讓OGG支持DDL操作,還需要額外運行幾個腳本,這些腳本是OGG帶的而不是ORACLE帶的,在OGG的安裝目錄都可以找到,如果在OGG的安裝目錄登錄數據庫,可以直接@加腳本的名字,源端與目標端都需要運行,如下:
sqlplus / as sysdba
@marker_setup.sql 建立一個DDL標記表 schema name:輸入ogg即可
@ddl_setup.sql 在數據庫中創建DDL語句的trigger等必要組件
(執行時必須斷開ggsci,不然報錯)
@role_setup.sql 建立ggs_ggsuser_role角色
@ddl_enable.sql enable ddl捕獲觸發器

如果沒有在OGG的安裝目錄登錄數據庫,需要指定腳本的位置,比如我的OGG安裝目錄爲/ogg。
sqlplus / as sysdbabr/>@/ogg/marker_setup.sql
@/ogg/ddl_setup.sql
br/>@/ogg/role_setup.sql
@/ogg/ddl_enable.sql

創建OGG的管理目錄
在正式配置OGG之前,首先需要創建OGG的管理目錄,源端和目標端都需要創建,登錄OGG,只需要執行create subdirs命令就可以了。

源端:
[ogg@dbdream ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (dbdream) 1> create subdirs
Creating subdirectories under current directory /ogg
Parameter files /ogg/dirprm: already exists
Report files /ogg/dirrpt: created
Checkpoint files /ogg/dirchk: created
Process status files /ogg/dirpcs: created
SQL script files /ogg/dirsql: created
Database definitions files /ogg/dirdef: created
Extract data files /ogg/dirdat: created
Temporary files /ogg/dirtmp: created
Stdout files /ogg/dirout: created

目標端:
[ogg@dbdream ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (dbdream) 1> create subdirs
Creating subdirectories under current directory /ogg
Parameter files /ogg/dirprm: already exists
Report files /ogg/dirrpt: created
Checkpoint files /ogg/dirchk: created
Process status files /ogg/dirpcs: created
SQL script files /ogg/dirsql: created
Database definitions files /ogg/dirdef: created
Extract data files /ogg/dirdat: created

名字 用途
dirprm 存放OGG參數各的配置信息
dirrpt 存放進程報告文件
dirchk 存放檢查點文件
dirpcs 存放進程狀態文件
dirsql 存放SQL腳本文件
dirdef 存放DEFGEN工具生成的數據定義文件
dirdat 存放Trail文件,也就是Capture進程捕獲的日誌文件
dirtmp 當事物需要的內存超過已分配內存時,默認存儲在這個目錄

OGG複製流程
之前所做的只是準備工作,現在就可以正式配置OGG了,在配置OGG之前,先看下OGG的複製流程,OGG和其他傳統複製軟件一樣,也是通過源端捕獲/挖掘ORACLE的日誌信息,
目標端根據源端傳送過來的日誌信息進行重塑,實現源端-目標端數據同步
只有commit之後的日誌信息纔會被Capture進程捕獲,未提交的事務OGG不會捕獲。

建立測試用戶並授權
create user lqh identified by lqh;
grant dba to lqh;
conn lqh/lqh


create table test100
(id number primary key,
name1 varchar2(20),
name2 varchar2(20),
name3 varchar2(20));

create table test200
(id number primary key,
name1 varchar2(20),
name2 varchar2(20),
name3 varchar2(20));

create table test300
(id number,
name1 varchar2(20),
name2 varchar2(20),
name3 varchar2(20));

begin
for i in 1..1000
loop
insert into test100 values (i,'name1-'||i,'name2-'||i,'name3-'||i);
insert into test200 values (i,'name1-'||i,'name2-'||i,'name3-'||i);
insert into test300 values (i,'name1-'||i,'name2-'||i,'name3-'||i);
if i mod 2 =0
then
commit;
end if;
end loop;
commit;
end;
/

目標:
create table test100
(id number primary key,
name1 varchar2(20),
name2 varchar2(20),
name3 varchar2(20));

create table test200
(id number primary key,
name1 varchar2(20),
name2 varchar2(20),
name3 varchar2(20));

create table test300
(id number,
name1 varchar2(20),
name2 varchar2(20),
name3 varchar2(20));

源端添加表級TRANDATA
添加表級的trandata可以理解爲需要將哪些用戶的哪些表同步到目標庫,其實也是添加表級的supplemental log,但是隻有上文打開的minimal supplemental log後,這個才生效。

用OGG用戶從OGG登錄源端數據庫。
GGSCI (dbdream) 2> DBLOGIN USERID ogg, PASSWORD ogg
Successfully logged into database.
源端添加表級TRANDATA,我們這先使用test一些表。
GGSCI (oracle1) 3> add trandata lqh.test100
Logging of supplemental redo data enabled for table LQH.TEST100.
GGSCI (oracle1) 4> add trandata lqh.test200
Logging of supplemental redo data enabled for table LQH.TEST200.
GGSCI (oracle1) 5> add trandata lqh.test300
2018-04-17 06:13:52 WARNING OGG-00869 No unique key is defined for table 'TEST300'. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key.
Logging of supplemental redo data enabled for table LQH.TEST300.
成功添加表級TRANDATA後,可以通過INFO命令查看哪些表被添加了TRANDATA.
GGSCI (oracle1) 6> info trandata lqh.*
Logging of supplemental redo log data is enabled for table LQH.TEST100.
Columns supplementally logged for table LQH.TEST100: ID.
Logging of supplemental redo log data is enabled for table LQH.TEST200.
Columns supplementally logged for table LQH.TEST200: ID.
Logging of supplemental redo log data is enabled for table LQH.TEST300.
Columns supplementally logged for table LQH.TEST300: ID, NAME1, NAME2, NAME3.

查看lqh.TEST100這張表是否開啓了trandata
GGSCI (oracle1) 8> info trandata lqh.TEST100
Logging of supplemental redo log data is enabled for table LQH.TEST100.
Columns supplementally logged for table LQH.TEST100: ID.

源端添加表級附加日誌
set heading off;
set pagesize 120
select 'add trandata "'||owner||'"."'||table_name||'"' from dba_tables where owner in('用戶');
dblogin userid goldengate,password **
add trandata "用戶"."表名"
add trandata "用戶"."表名"
add trandata "用戶"."表名"
add trandata "用戶"."表名"
add trandata "用戶"."表名"
info trandata  用戶.*

配置MGR管理進程
源端:
GGSCI (dbdream) 5> EDIT PARAMS MGR
加入以下兩行內容
PORT 7809
AUTOSTART ER
PURGEOLDEXTRACTS ./ogg/dirdat/
, USECHECKPOINTS
LAGREPORTHOURS 1  
LAGINFOMINUTES 30    
LAGCRITICALMINUTES 45

目標端:
GGSCI (stream) 2> EDIT PARAMS MGR
加入以下兩行內容
PORT 7809
AUTOSTART ER
PURGEOLDEXTRACTS ./ogg/dirdat/
, USECHECKPOINTS
LAGREPORTHOURS 1  
LAGINFOMINUTES 30    
LAGCRITICALMINUTES 45

參數說明及參考:
PORT 7809:  ---OGG管理進程監控通信端口。生產端和災備端需要保持一致
AUTOSTART ER *    ---自動啓動進程
PURGEOLDEXTRACTS:  ---清除不需要的trail文件。
/ogg/dirdat:  ---trail文件存放位置。
USECHECKPOINTS:  ---使用檢查點隊列。
LAGREPORTHOURS 1    ---每隔一小時檢查一次傳輸延遲情況
LAGINFOMINUTES 30    ---傳輸延時超過30分鐘將寫入錯誤日誌
LAGCRITICALMINUTES 45 ---傳輸延時超過45分鐘將寫入警告日誌,既error

PURGEOLDEXTRACTS ./dirdat/, USECHECKPOINTS, MINKEEPDAYS 3    
---清除過期的tail文件,保留3天
STARTUPVALIDATIONDELAY 5    --- 啓動時延遲5秒校驗
DYNAMICPORTLIST  7840-7914  
 ---用於與goldengate的複製進程,collector進程,ggsci命令進行通信。
AUTORESTART EXTRACT
, RETRIES 5, WAITMINUTES 7  
----當提取進程中斷後嘗試自動重啓,每隔7分鐘嘗試啓動一次,嘗試5次,基本不用
PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10,FREQUENCYMINUTES 30  
--此參數用於維護GGS_DDL_HIST表,默認清除1小時沒有變更過的記錄。此處爲GGS_DDL_HIST表記錄保存7-10天內沒有變更過的記錄
PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10  
--用於維護GGS_MARKER的記錄數。默認爲超過1小時的記錄沒有變更即刪除。此處的參數含義爲7-10天內的記錄沒有變更,就刪除該記錄,每30分鐘檢查並執行一次。

配置完MGR管理進程後,就可以啓動MGR管理進程(源端和目標端都需要啓動)。
GGSCI (oracle2) 6> start mgr
Manager started.
可以通過INFO命令查看進程的狀態(最好每次啓動時在兩端都查看下)。
GGSCI (oracle2) 7> info mgr
Manager is running (IP port oracle2.7809).
GGSCI (oracle1) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING

配置初始化數據進程
由於在創建測試表的時候,源端的測試表有數據,而目標端的測試表只有結構,沒有數據,所以需要初始化目標端的數據,所謂初始化,就是讓目標端的數據和源端的數據在這個時間點是一模一樣的,所以初始化工作並不需要一定使用OGG,也可以使用EXP、EXPDP、SQLLOAD等其他工具,本文主要介紹如何使用OGG進行數據初始化,下面在源端配置捕獲進程lqh。

GGSCI (oracle1) 8> add extract lqh, SOURCEISTABLE
EXTRACT added.

查看EINI_1進程狀態。
GGSCI (oracle1) 9> INFO EXTRACT *, TASKS

EXTRACT lqh Initialized 2018-04-11 01:01 Status STOPPED
Checkpoint Lag Not Available
Log Read Checkpoint Not Available
First Record Record 0
Task SOURCEISTABLE
由於只是添加了捕獲進程lqh,還沒有進行配置和啓動這個進程,所以現在的狀態是STOPPED狀態。

查看數據庫字符集如下
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
select userenv('language') from dual;
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)

源端編輯捕獲進程lqh。
GGSCI (oracle1) 10> EDIT PARAMS lqh
–加入以下內容
EXTRACT lqh
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
USERID ogg PASSWORD ogg
RMTHOST oracle2 MGRPORT 7809
RMTTASK REPLICAT GROUP xixi
TABLE LQH.TEST100;
TABLE LQH.TEST200;

參數介紹:
EXTRACT lqh:說明這是EXTRACT進程,名字是lqh
SETENV:環境變量,一定要設置和數據庫字符集一樣,否則可能會亂碼
USERID:數據庫OGG用戶
PASSWORD:數據庫用戶OGG的密碼
RMTHOST:目標端地址,如果在/etc/hosts文件裏已經設置解析,可以寫主機名
MGRPORT:目標端MGR管理進程監聽的端口
RMTTASK REPLICAT:目標端REPLICAT應用進程的組和名字
TABLE:源端要初始化數據的表的名字

編輯好捕獲進程lqh後,還需要在目標端配置REPLICAT應用進程,名字要和源端的捕獲進程lqh裏面RMTTASK REPLICAT參數配置的一樣,也就是還需要在目標端配置RMTTASK REPLICAT lqh。

配置目標端REPLICAT進程
目標端:
GGSCI (oracle1) 8> add replicat xixi,specialrun
EXTRACT added.

查看lqh進程狀態。
GGSCI (oracle2) 7> info replicat *,task

REPLICAT XIXI Initialized 2018-04-17 06:43 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:00:11 ago)
Log Read Checkpoint Not Available
Task SPECIALRUN

GGSCI (oracle2) 9> EDIT PARAMS xixi
–加入以下內容
REPLICAT xixi
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
ASSUMETARGETDEFS
USERID ogg PASSWORD ogg
DISCARDFILE ./dirrpt/xixi.dsc,PURGE
MAP lqh. TARGET lqh.;
此處的./dirrpt/lqh.dsc一定要這樣寫,否則會報OGG-01091錯誤。
之前寫的目錄是./ogg/dirrpt/xixi.ds,報錯如下
ERROR OGG-01091 Unable to open file "./ogg/dirrpt/xixi.dsc" (error 2, No such file or directory).

參數介紹:
REPLICAT xixi:說明這是REPLICAT應用進程,名字叫xixi
SETENV:語言變量,同捕獲進程xixi
ASSUMETARGETDEFS:告訴OGG目標端和源端需要同步的表的結構完全一致,不需要OGG去檢查表的結構,包括表名、字段名、字段類型、字段長度等,如果目標端和源端同步的表的結構不一樣,需要使用SOURCEDEFS參數,詳見OGG官方文檔。
USERID:數據庫OGG用戶
PASSWORD:數據庫用戶OGG的密碼
DISCARDFILE:錯誤信息存放位置及命名規則
MAP:源端捕獲的表的名字
TARGET:目標端同步的表的名字,可以不在同一SCHEMA。

初始化數據
配置好目標端的應用進程lqh後,就可以啓動源端的捕獲進程進行捕獲數據了,而目標端的應用進程lqh不需要手動去啓動,也就是說目標端lqh進程不需要管。

GGSCI (oracle1) 11> START EXTRACT lqh
Sending START request to MANAGER ...
EXTRACT LQH starting

GGSCI (oracle1) 17> view report lqh
2018-04-17 06:45:18 INFO OGG-03035 Operating system character set identified as UTF-8. Locale: en_US, LC_ALL:.
EXTRACT lqh
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
Set environment variable (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
USERID ogg PASSWORD ***
RMTHOST oracle2 MGRPORT 7809
RMTTASK REPLICAT GROUP xixi
TABLE LQH.TEST100;
Using the following key columns for source table LQH.TEST100: ID.

啓動源端的捕獲進程lqh後,正常情況下(如果配置沒問題),源端的數據已經傳送到目標端了,可以通過VIEW命令查看源端捕獲進程lqh的工作狀態。

如果看不到數據而且沒有報錯,可以再次重啓一遍抽取進程 。
有數據就說明同步成功了,同步完成後服務會自動停止(下面狀態是正常的)

GGSCI (oracle1) 33> info extract lqh

EXTRACT LQH Last Started 2018-04-12 23:49 Status ABENDED
Checkpoint Lag Not Available
Log Read Checkpoint Table LQH.TEST100
2018-04-12 23:49:26 Record 1
Task SOURCEISTABLE

如果在上面日誌的最後部分出現ERROR,就需要去檢查OGG的安裝目錄下的ggserr.log日誌,這個日誌相當於數據庫的告警日誌。

以上我們的數據就都傳輸到目標端了,但是dml語句是傳輸不過去的,需要配置數據源庫的捕獲和傳輸進程
GGSCI (oracle1) 21> edit params caplqh
–加入以下內容
--capture change from oracle1 to oracle2
EXTRACT caplqh
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
USERID ogg, PASSWORD ogg
EXTTRAIL ./dirdat/qh
TABLE lqh.test100;
TABLE lqh.test200;

其中,EXTTRAIL是指抽取跟蹤存放的數據位置。qh是文件的開頭字母前綴(該前綴只能
是2個字母) 。

生成ogguser的密碼暗文:
GGSCI (oracle2) 6> ENCRYPT PASSWORD ogg BLOWFISH ENCRYPTKEY DEFAULT
Using default key...
Encrypted password: AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB
Algorithm used: BLOWFISH
在配置好之後修改密碼記得重新啓動進程

Caplqh捕獲進程參數
EXTRACT <進程名>   
SETENV (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")  設置字符集
USERID goldengate, PASSWORD AACAAAAAAAAAAGAIF, ENCRYPTKEY default   用戶名密碼
REPORTCOUNT EVERY 30 MINUTES, RATE     ---每30分鐘報告一次已經處理的統計數字
DISCARDFILE ./dirrpt/exta.dsc, APPEND, MEGABYTES 256   ---處理中有出錯寫入到次文件
DISCARDROLLOVER AT 3:00   ---設定每天3點切換隊列時間
WARNLONGTRANS 2h, CHECKINTERVAL 3m   
---每隔3分鐘檢查一下大事務,超過2小時還沒結束的進行報告
EXTTRAIL ./dirdata/ya, MEGABYTES 256   ---指定寫入到哪個隊列
DYNAMICRESOLUTION      ---動態解析表名,表多的時候不用從數據庫中取出表結構
DBOPTIONS  ALLOWUNUSEDCOLUMN  
---在生產端庫表中存在unused列時,需要配置該參數。用於阻止抽取進程抽取數據時由於表含有unused列而導致進程abend。即使使用該參數,抽取進程抽取到unused列時也會向日志文件記錄一條警告信息。
FETCHOPTIONSNOUSESNAPSHOT  
---默認值爲usesnapshot,表示利用數據庫閃回讀取數據。Nousesnapshot表示直接從原表讀取相關數據。
TRANLOGOPTIONS  CONVERTUCS2CLOBS
 ---在解析數據庫日誌時所需要的特殊參數,CLOB字段。此參數已經v11版本後已經作廢
tranlogoptionsasmusersys@asm, asmpasswordAACAAAAAAAAAAGAIF, ENCRYPTKEY default 
TRANLOGOPTIONS altarchivelogdest primary instance rac1  /arch1 altarchivelogdest  instance  rac2 /arch2  
---rac使用,解決歸檔路徑不一致的問題;可以在一個實例上面配置多個歸檔路徑,需要保證goldengate能同時讀到各節點的歸檔,一般採用NFS掛載rac另外節點的歸檔。
THREADOPTIONS   MAXCOMMITPROPAGATIONDELAY 60000   THREADOPTIONS   IOLATENCY 1000 
--- RAC集羣中的所有節點必須同步系統時鐘。GoldenGate通過比較本地系統的時間和事務提交的時間點來做出關鍵決策。可以通過NTP來不同系統時間。所有節點上的COMPATIBLE參數設置也必須相同。這個參數在Oracle11.2版本後就不在使用了。
TRANLOGOPTIONS rawdevice offset 0  ---裸設備使用
TRANOPTIONS EXCLUDEUSER goldengate  ---排除goldengate用戶

--DDL參數區域,所有複製對象,屏蔽對象在源端體現。
DDL &
INCLUDE MAPPED OBJTYPE 'TABLE' &
INCLUDE MAPPED OBJTYPE 'INDEX' &
INCLUDE MAPPED OBJTYPE 'SEQUENCE' &
INCLUDE MAPPED OBJTYPE 'VIEW' &
INCLUDE MAPPED OBJTYPE 'PROCEDURE' &
INCLUDE MAPPED OBJTYPE 'FUNCTION' &
INCLUDE MAPPED OBJTYPE 'PACKAGE' &   ---標紅參數爲應用級災備新添加的複製內容
EXCLUDE OPTYPE COMMENT
DDLOPTIONS  addtrandata  REPORT
--匹配table/index/sequence/view/procedure/function/package對象進行DDL複製。此處參數爲按對象類型進行匹配複製
TABLE SCHEMA.;   ---需要複製的對象列表
Sequence schema.
;    ---需要複製的sequence對象

GGSCI (oracle1) 22> add extract caplqh,tranlog,begin now
EXTRACT added.

add extract ext_app, tranlog, begin now, threads 2 
單實例不需要加 add extract threads 子句;多於兩個實例的RAC庫, threads 子句指明實際的線程數

GGSCI (oracle1) 23> add exttrail ./dirdat/qh,extract caplqh,megabytes 5
EXTTRAIL added.
意思是將lqh捕獲的extract跟蹤文件添加到./dirdat 目錄,文件最大5M。
add EXTTRAIL ./dirdat/r1, extract ext_app,MEGABYTES 100 

GGSCI (oracle1) 10> start extract caplqh
Sending START request to MANAGER ...
EXTRACT CAPLQH starting

GGSCI (oracle1) 18> info extract caplqh

EXTRACT CAPLQH Last Started 2018-04-17 06:51 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:02 ago)
Log Read Checkpoint Oracle Redo Logs
2018-04-17 06:50:59 Seqno 75, RBA 41052160
SCN 0.913524 (913524)

GGSCI (oracle1) 12> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING CAPLQH 00:00:00 00:00:00

配置投遞(傳輸跟蹤文件)的pump進程
GGSCI (oracle1) 18> edit params pumplqh
內容如下:
--pump file from oracle1 to oracle2
EXTRACT pumplqh
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
PASSTHRU
RMTHOST oracle2 MGRPORT 7809
RMTTRAIL ./dirdat/md
TABLE lqh.test100;
TABLE lqh.test200;
~
GGSCI (oracle1) 41> add extract pumplqh,exttrailsource ./dirdat/qh
EXTRACT added.
以上是和caplqh一致,qh命名必須和抽取保持一致

datapump進程參數
EXTRACT <進程名>
RMTHOST IP地址, MGRPORT 7809, COMPRESS  
---目標端的ip地址,7809爲目標端的管理端口,要求配置compress壓縮參數,節省網絡帶寬,但會增加CPU開銷
PASSTHRU  
---傳輸進程直接跟抽取進程交互,而不再和數據庫進行交互,減少數據庫資源的利用
NUMFILES 5000  ---最多處理多少個表
RMTTRAIL ./dirdata/ya   ---投遞哪個隊列,必須和抽取保持一致
DYNAMICRESOLUTION     ---動態解析表名
TABLE schema.;    ---需要投遞的對象列表
Sequence schema.
;    ---需要投遞的sequence對象

如果添加錯,下面命令刪除
GGSCI (oracle1) 5> DELETE extract pumplqh
我們把qh開頭的跟蹤文件發送到目標庫。然後設置對方的接收路徑,並且文件以pu開
頭 ,最大5M 。

GGSCI (oracle1) 14> info extract pumplqh

EXTRACT PUMPLQH Initialized 2018-04-13 01:56 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:00:09 ago)
Log Read Checkpoint File ./dirdat/qh000000
First Record RBA 0

GGSCI (oracle1) 43> add rmttrail ./dirdat/md,extract pumplqh,megabytes 5
RMTTRAIL added.
以上是和pumplqh一致

GGSCI (oracle1) 18> delete extract pumplqh1
Deleted EXTRACT PUMPLQH1.
如果添加錯這樣刪除

GGSCI (oracle1) 44> start extract pumplqh
Sending START request to MANAGER ...
EXTRACT PUMPLQH starting

配置目標庫的恢復進程
GGSCI (oracle2) 17> edit params ./GLOBALS
其中的GLOBAS必須大寫 。該文件內容是:
checkpointtable ogg.ggschkpt

GGSCI (oracle2) 18> view params ./GLOBALS
checkpointtable ogg.ggschkpt

也就是添加檢查點表(實現斷點續傳) ,配置完成後必須退出重連,讓參數生效。
GGSCI (oracle2) 19> quit
[ogg@oracle2 ogg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.

GGSCI (oracle2) 1> dblogin userid ogg password ogg
Successfully logged into database.

GGSCI (oracle2) 2> add checkpointtable
No checkpoint table specified, using GLOBALS specification (ogg.ggschkpt)...
Successfully created checkpoint table ogg.ggschkpt.

[oracle@oracle2 ~]$ sqlplus ogg/ogg
SQL*Plus: Release 11.2.0.1.0 Production on Tue Apr 17 07:14:13 2018
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from tab;
TNAME TABTYPE CLUSTERID


GGSCHKPT TABLE
GGSCHKPT_LOX TABLE

GGSCI (oracle2) 3> add replicat mrpxixi exttrail ./dirdat/md
REPLICAT added.
此處和oracle1的pumplqh一致

GGSCI (oracle2) 4> edit params mrpxixi
REPLICAT mrpxixi
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
ASSUMETARGETDEFS
HANDLECOLLISIONS
USERID ogg PASSWORD ogg
DISCARDFILE ./dirrpt/mrpxixi.dsc,PURGE
MAP lqh.test100, TARGET lqh.test100;
MAP lqh.test200, TARGET lqh.test200;

其中的HANDLECOLLISIONS參數如果update 命中就insert,delete沒命中就不操作,
insert如果存在而且不能重複就變成修改數據,如果存在允許重複就插入新的。如果沒這個
參數遇到上述情況會報錯。ASSUMETARGETDEFS假定數據源表的結構和目標表相同

創建replicat進程
dblogin userid goldengate,password goldengate
add checkpointtable goldengate.chktable
add replicat  reppa,exttrail ./dirdat/r1,checkpointtable goldengate.chktable

配置目標段複製進程參數
REPLICAT <進程名>
USERIDgoldengate, PASSWORD AACAAAAAAAAAAGAIFAAAUDVHCFUGFIYF, ENCRYPTKEY default
SETENV (NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")
SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED"
 ---打開數據庫中的延遲約束的特性,避免複製進程因拆分造成插入相關的約束錯誤
REPORT AT 01:59  ---每天01:59定期生成一個report文件
REPORTCOUNT EVERY 25 MINUTES, RATE  
---此參數每隔30分鐘,goldengate向日志文件生成一條記錄(抽取進程自從啓動後處理的記錄數與計算處理速率的信息)
REPORTROLLOVER AT 02:00   ---
REPERROR DEFAULT, ABEND
 ---goldengate遇錯的處理原則,即遇到不能處理的錯誤就自動abend,啓動需要人工干預處理
ALLOWNOOPUPDATES   ---當源表有排除列情況或者有目標表不存在的列時,當更新這列goldengate默認報錯。應用該參數後,即可讓goldengate生成一條警告信息而不是報錯
ASSUMETARGETDEFS   ---
DISCARDFILE ./dirrpt/ya.dsc, APPEND, MEGABYTES 256M   ---該參數的路徑必須爲相對路徑,建議該參數的值設置爲1024M
DISCARDROLLOVER AT 02:00   ---表示discard文件每天02:00定期輪轉
assumetargetdefs   ---表示源庫與目標庫表結構一致
ALLOWNOOPUPDATES   ---

--DDL參數區域 需要屏蔽的操作類型在此區域屏蔽
DDL include mapped  ---DDL所有操作
ddloptions report
DDLERROR <error1> IGNORE  --DDL 錯誤過濾
MAP  schema.,   TARGET   schema.;

修改進程啓動的隊列文件及rba號
alter <進程名> extseqno <隊列文件>,extrba 0
start <進程名>,aftercsn   scn號
start  <進程名>

GGSCI (oracle2) 3> start replicat mrpxixi
Sending START request to MANAGER ...
REPLICAT MRPXIXI starting

GGSCI (oracle2) 4> info replicat mrpxixi

REPLICAT MRPXIXI Last Started 2018-04-13 02:03 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:09 ago)
Log Read Checkpoint File ./dirdat/md000000
First Record RBA 0

Insert,delete,update測試都沒有問題
ddl暫時還不支持,下面我們來弄ddl。
關閉回收站功能(DDL)必須關閉
SQL> show parameter recyclebin
NAME TYPE VALUE


recyclebin string on
alter system set recyclebin=off scope=spfile;這樣就需要重啓數據庫生效

SQL> @marker_setup
Marker setup script
You will be prompted for the name of a schema for the Oracle GoldenGate database objects.
NOTE: The schema must be created prior to running this script.
NOTE: Stop all DDL replication before starting this installation.

Enter Oracle GoldenGate schema name:ogg

Marker setup table script complete, running verification script...
Please enter the name of a schema for the GoldenGate database objects:
Setting schema name to OGG

MARKER TABLE

OK

MARKER SEQUENCE

OK

Script complete.

SQL> @ddl_setup 用戶ogg最後出現如下

STATUS OF DDL REPLICATION

SUCCESSFUL installation of DDL Replication software components

如果報錯需要執行@marker_remove.sql和@ddl_remove.sql腳本進行
SQL> @role_setup

SQL> grant GGS_GGSUSER_ROLE to ogg;
Grant succeeded.

SQL> @ddl_enable
Trigger altered.

SQL> @marker_status
Please enter the name of a schema for the GoldenGate database objects:
ogg
Setting schema name to OGG
MARKER TABLE

OK
MARKER SEQUENCE

OK

SQL> @?/rdbms/admin/dbmspool 該包是爲了防止下面的腳本報錯才跑的。
Package created.
Grant succeeded.

SQL> @ddl_pin.sql ogg
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.

GGSCI (oracle1) 18> info all

Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING CAPLQH 00:00:00 00:00:08
EXTRACT RUNNING PUMPLQH 00:00:00 39:34:33

GGSCI (oracle1) 19> stop EXTRACT CAPLQH
Sending STOP request to EXTRACT CAPLQH ...
Request processed.

GGSCI (oracle1) 20> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT STOPPED CAPLQH 00:00:00 00:00:04
EXTRACT RUNNING PUMPLQH 00:00:00 00:00:08

GGSCI (oracle1) 21> edit params caplqh
內容如下,藍色是新添加的DDL內容
--capture change from oracle1 to oracle2
dynamicresolution
EXTRACT caplqh
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
USERID ogg, PASSWORD ogg
TRANLOGOPTIONS EXCLUDEUSER ogg
EXTTRAIL ./dirdat/qh
DDL INCLUDE ALL
ddloptions addtrandata, report
TABLE lqh.test200;

GGSCI (oracle1) 23> start EXTRACT CAPLQH
Sending START request to MANAGER ...
EXTRACT CAPLQH starting

GGSCI (oracle1) 26> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING CAPLQH 00:00:00 00:00:10
EXTRACT RUNNING PUMPLQH 00:00:00 00:00:00

修改目標端的replicat 文件
GGSCI (oracle2) 10> edit params mrpxixi
內容如下,藍色爲添加部分
REPLICAT mrpxixi
SETENV (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
ASSUMETARGETDEFS
HANDLECOLLISIONS
USERID ogg PASSWORD ogg
DISCARDFILE ./dirrpt/mrpxixi.dsc,PURGE
dynamicresolution
ddloptions report
DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5
DDLERROR DEFAULT DISCARD
DDLERROR DEFAULT IGNORE RETRYOP
MAP lqh.test200, TARGET lqh.test200;

GGSCI (oracle2) 13> stop REPLICAT MRPXIXI
REPLICAT MRPXIXI is already stopped.

如果關不掉直接kill 如kill mrpxixi

GGSCI (oracle2) 14> start REPLICAT MRPXIXI
Sending START request to MANAGER ...
REPLICAT MRPXIXI starting

GGSCI (oracle2) 18> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING MRPXIXI 00:06:25 00:00:13

GGSCI (oracle2) 22> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING MRPXIXI 00:06:25 00:06:11
測試ddl也過來了,沒有問題。
ddl同步要謹慎。ogg中ddl和dml機制是分開的,ddl同步不怎麼穩定。
執行ddl_remove.sql  移除ddl

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章