第一部分 先配置單向同步(含DDL)
一 源端安裝GoldenGate
-
創建用戶
創建目錄
mkdir -p /opt/ogg
chmod -R 777 /opt/ogg
chown -R oracle:oinstall /opt/ogg
ogg用戶
useradd -g oinstall -G dba ggate
-
解壓軟件
-
設置環境變量
配置goldengate用戶變量
su – ggate
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=prm
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/u01/app/oracle/ggate
export GGATE=/opt/ogg
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$PATH:$ORACLE_HOME/bin:$GGATE
-
安裝GoldenGate
圖形化安裝方法中,在software location部分選擇環境變量中GGATE的值,不過要注意給GGATE目錄適當的權限;
Database Location部分就是ORACLE_HOME的值。
二 目標端安裝GoldenGate
-
創建用戶
創建目錄
mkdir -p /opt/ogg
chmod -R 755 /opt/ogg
chown -R oracle:oinstall /opt/ogg
ogg用戶
useradd -g oinstall -G dba ggate
-
解壓軟件
-
設置環境變量
配置goldengate用戶變量
su – ggate
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=prm
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/u01/app/oracle/ggate
export GGATE=/opt/ogg
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$PATH:$ORACLE_HOME/bin:$GGATE
-
安裝GoldenGate
圖形化安裝方法中,在software location部分選擇環境變量中GGATE的值,不過要注意給GGATE目錄適當的權限;
Database Location部分就是ORACLE_HOME的值。
三 配置源端數據庫
-
開啟歸檔
開啟歸檔
修改之前 創建參數文件做備份
create pfile='/home/oracle/initdemo.ora' from spfile;
alter system set log_archive_dest='/arch/prm' scope=spfile; --修改歸檔的路徑
---alter system set db_recovery_file_dest='' scope=spfile; --關閉閃回
shutdown immediate;
startup mount;
alter database archivelog;
archive log list;
alter database open;
-
設置數據庫force logging
實際生產應用中,最好同時打開ORACLE的強制日志模式,以防止源數據庫因直接路徑加載忽略redo生成而導致這部分數據無法同步:
SQL> select force_logging from v$database;
SQL> Alter database force logging;
-
開啟最小附加日志(DDL的話好開啟數據庫級別)
Oracle數據庫需要開啟歸檔日志,並開啟最小附加日志模式。
SQL> select supplemental_log_data_min from v$database; --查看是否開啟了最小附加日志模式
SQL> alter database add supplemental log data; --開啟最小附加日志模式
千萬不要小看這步日志設置,其實在GoldenGate的配置中,這步是最容易出錯的環節。如果開啟DDL復制做冗災備份,最好直接在數據庫級別打開補全日志:
SQL> alter database add supplemental log data (primary key,unique,foreign key) columns;
檢查一下,全是YES就OK了(整個數據庫級別補全)
SQL> select supplemental_log_data_min,
supplemental_log_data_pk,supplemental_log_data_ui from v$database;
-
源庫關閉回收站
SQL> show parameter recyclebin
SQL> alter system set recyclebin=off scope=spfile;
SQL>shutdown immediate;
SQL>startup;
SQL> show parameter recyclebin
-
UNDO設置
alter system set undo_retention=86400;
-
創建goldengate用戶並且授權
創建表空間、用戶、賦予dba權限
create tablespace ogg datafile '/u01/app/oracle/oradata/prm/ogg01.dbf' size 1024M;
create user ggate identified by ggate default tablespace ogg temporary tablespace temp;
grant connect,resource,unlimited tablespace to ggate;
grant connect,resource,dba to ggate;
grant execute on utl_file to ggate;
grant select any dictionary,select any table to ggate;
grant alter any table to ggate;
grant flashback any table to ggate;
grant execute on DBMS_FLASHBACK to ggate;
grant insert any table to ggate;
grant delete any table to ggate;
grant update any table to ggate;
運行DDL同步需要的腳本
cd $GGATE
@marker_setup.sql;
@ddl_setup.sql;
@role_setup.sql;
grant GGS_GGSUSER_ROLE to ggate;
@ddl_enable.sql;
安裝性能優化包。
SQL> @?/rdbms/admin/dbmspool
ddl_pin將觸發器用到的plsql包放進內存中
cd $GGATE
SQL> @ddl_pin ggate
-
添加傳輸表【transdata】
光開啟最小附加日志模式還不夠,還需要打開表級的補全日志,可以在GoldenGate中使用add trandata命令強制重做日志記錄主鍵值,以保證在目標端能成功復制:
GGSCI> dblogin userid ggate,password ggate --GoldenGate中登錄OARCLE數據庫
GGSCI>add trandata sender.* --表名可以使用通配符
GGSCI> add trandata coss3.per_test,nokey,cols(sampletime, objectid)
--無主鍵指定字段補全的示例
也可以在數據庫中打開:
SQL> alter table <tablename> add supplemental log data (primary key) columns;
示例:
GGSCI(node1) 1> dblogin userid ogg,password oracle
GGSCI(node1) 2> add trandata SCOTT.DEPT
四 配置源端進程組
-
配置管理進程【1】mgr
GGSCI(node1) 1> edit param mgr
(粘貼下面這段配置)
PORT 8839
--DYNAMICPORTLIST 8000-9000
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
--PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
--PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
-
配置源端./GLOBALS
GGSCI (node1) > edit params ./GLOBALS
GGSCHEMA ggate
-
啟動管理進程
GGSCI(node1) 2> start mgr
Managerstarted.
GGSCI(node1) 3> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
-
配置抽取進程【2】extnd
增加EXTRAIL
GGSCI(node1)> add extract extnd, tranlog, begin now
EXTRACT added.
修改EXTRAIL參數
GGSCI (GOLDENGATE1) 4> edit params extnd
EXTRACT extnd
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
SETENV (ORACLE_SID = "prm")
USERID ggate, PASSWORD ggate
EXTTRAIL ./dirdat/nd
DISCARDFILE ./dirdat/extnd.dsc,APPEND,MEGABYTES 5
TRANLOGOPTIONS ALTARCHIVELOGDEST /arch/prm
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbf
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA
FETCHOPTIONS, USESNAPSHOT, NOUSELATESTVERSION, MISSINGROW REPORT
STATOPTIONS REPORTFETCH
WARNLONGTRANS 1H, CHECKINTERVAL 5M
TABLE sender.*;
添加該extract對應的trail文件,用來存儲抽取的數據。單個文件大小設置為100MB
GGSCI(node1)> add exttrail ./dirdat/nd, extract extnd, megabytes 100
EXTTRAIL added.
-
添加傳輸進程【3】dpend,配置參數
增加PUMP
GGSCI(node1)>add extract dpend, exttrailsource ./dirdat/nd, begin now
EXTRACT added.
修改PUMP參數
GGSCI(node1)> edit params dpend
EXTRACT dpend
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
USERID ggate, PASSWORD ggate
RMTHOST 192.168.80.166, MGRPORT 8809
RMTTRAIL ./dirdat/nd
DISCARDFILE ./dirdat/dpend.dsc,APPEND,MEGABYTES 5
TABLE sender.*;
添加RMTRAILS
GGSCI(node1)> add rmttrail ./dirdat/nd, extract dpend, megabytes 100
RMTTRAIL added.
五 配置目標數據庫【含源端業務新增數據模擬】
-
數據庫初始化【1】
-
數據庫先在目標端進行初始化(使用rman備份恢復的方式)
-
源數據庫端進行一些數據的更新,並且刷新幾個日志
-
創建GoldenGate數據庫用戶並授權【2】
創建表空間、用戶、賦予dba權限
create tablespace ogg datafile '/u01/app/oracle/oradata/prm/ogg01.dbf' size 1024M;
create user ggate identified by ggate default tablespace ogg temporary tablespace temp;
grant connect,resource,unlimited tablespace to ggate;
grant connect,resource,dba to ggate;
grant execute on utl_file to ggate;
grant select any dictionary,select any table to ggate;
grant alter any table to ggate;
grant flashback any table to ggate;
grant execute on DBMS_FLASHBACK to ggate;
grant insert any table to ggate;
grant delete any table to ggate;
grant update any table to ggate;
運行DDL同步需要的腳本
@$GGATE/marker_setup.sql;
@$GGATE/ddl_setup.sql;
@$GGATE/role_setup.sql;
grant GGS_GGSUSER_ROLE to ggate;
@$GGATE/ddl_enable.sql;
安裝性能優化包。
SQL> @?/rdbms/admin/dbmspool
ddl_pin將觸發器用到的plsql包放進內存中
SQL> @ddl_pin ggate
六 配置目標端進程組
-
配置MGR參數mgr
GGSCI(node2) 1> edit param mgr
(粘貼下面這段配置)
PORT 8839
--DYNAMICPORTLIST 8000-9000
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
--PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
--PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
-
配置目標端./GLOBALS
GGSCI (node2)> edit params ./GLOBALS
GGSCHEMA ggate
CHECKPOINTTABLE ggate.chkpoint
-
添加checkpoint表
需要先退出ggsci
GGSCI (node2)> dblogin userid ggate, password ggate
Successfully logged into database.
GGSCI (node2)> add checkpointtable ggate.chkpoint
Successfully created checkpoint table goldengate.chkpoint.
-
配置復制隊列【4】repnd
增加目標端REP
GGSCI (node2)> add replicat repnd, exttrail ./dirdat/nd, checkpointtable ggate.chkpoint
REPLICAT added.
修改REP參數
GGSCI (node2)> edit params repnd
REPLICAT repnd
ASSUMETARGETDEFS
USERID ggate, PASSWORD ggate
DISCARDFILE ./dirrpt/repnd.dsc,APPEND,MEGABYTES 5
DDL INCLUDE ALL
DDLOPTIONS REPORT
BATCHSQL
DBOPTIONS DEFERREFCONST
DBOPTIONS LOBWRITESIZE 102400
DDLERROR DEFAULT DISCARD RETRYOP MAXRETRIES 5 RETRYDELAY 20
MAP sender.* , TARGET sender.* ;
七 啟動進程進行數據庫同步
-
啟動源端進程組
start mgr
-
啟動抽取進程和傳輸進程
start extnd
start dpend
-
啟動目標端進程
start mgr
start repnd
八 數據同步測試
-
數據同步測試
源數據庫上創建數據
conn sender/oracle
create table t1 (id number CONSTRAINT id_nn NOT NULL,
name VARCHAR2(40),
PRIMARY KEY (id)
);
insert into t1 values (1,'aaa');
insert into t1 values (2,'bbb');
insert into t1 values (3,'ccc');
insert into t1 values (4,'ddd');
create table t2 (id number CONSTRAINT id_nm NOT NULL,
addr VARCHAR2(40),
PRIMARY KEY (id)
);
insert into t2 values (1,'word');
insert into t2 values (2,'now');
insert into t2 values (3,'values');
insert into t2 values (4,'beijing');
測試時使用語句
insert into t1 values (5,'eee')
insert into t1 values (6,'fff')
insert into t1 values (7,'ggg')
create table t3 as select * from t1 where 1=0;
create table t4 as select * from t1;
alter table t2 rename to t4;
九 環境說明
-
環境介紹
十 各程序組配置名稱及參數【成功后記錄】
-
源端進程組
管理進程:mgr
參數:
GGSCI(node1) 1> edit param mgr
(粘貼下面這段配置)
PORT 8839
--DYNAMICPORTLIST 8000-9000
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
--PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
--PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
GLOBALS:
GGSCI (node1) > edit params ./GLOBALS
GGSCHEMA ggate
抽取進程:extnd
參數:
增加EXTRAIL
GGSCI(node1)> add extract extnd, tranlog, begin now
EXTRACT added.
修改EXTRAIL參數
GGSCI (GOLDENGATE1) 4> edit params extnd
EXTRACT extnd
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
SETENV (ORACLE_SID = "prm")
USERID ggate, PASSWORD ggate
EXTTRAIL ./dirdat/nd
DISCARDFILE ./dirdat/extnd.dsc,APPEND,MEGABYTES 5
TRANLOGOPTIONS ALTARCHIVELOGDEST /arch/prm
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbf
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA
FETCHOPTIONS, USESNAPSHOT, NOUSELATESTVERSION, MISSINGROW REPORT
STATOPTIONS REPORTFETCH
WARNLONGTRANS 1H, CHECKINTERVAL 5M
TABLE sender.*;
添加該extract對應的trail文件,用來存儲抽取的數據。單個文件大小設置為100MB
GGSCI(node1)> add exttrail ./dirdat/nd, extract extnd, megabytes 100
EXTTRAIL added.
傳輸進程:dpend
參數:
增加PUMP
GGSCI(node1)>add extract dpend, exttrailsource ./dirdat/nd, begin now
EXTRACT added.
修改PUMP參數
GGSCI(node1)> edit params dpend
EXTRACT dpend
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
USERID ggate, PASSWORD ggate
RMTHOST 192.168.80.166, MGRPORT 8809
RMTTRAIL ./dirdat/nd
DISCARDFILE ./dirdat/dpend.dsc,APPEND,MEGABYTES 5
TABLE sender.*;
添加RMTRAILS
GGSCI(node1)> add rmttrail ./dirdat/nd, extract dpend, megabytes 100
RMTTRAIL added.
-
目標端進程組
管理進程:mgr
參數:
GGSCI(node2) 1> edit param mgr
(粘貼下面這段配置)
PORT 8839
--DYNAMICPORTLIST 8000-9000
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
--PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
--PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
GLOBALS:
GGSCI (node2)> edit params ./GLOBALS
GGSCHEMA ggate
CHECKPOINTTABLE ggate.chkpoint
復制進程:repnd
參數:
增加目標端REP
GGSCI (node2)> add replicat repnd, exttrail ./dirdat/nd, checkpointtable ggate.chkpoint
REPLICAT added.
修改REP參數
GGSCI (node2)> edit params repnd
REPLICAT repnd
ASSUMETARGETDEFS
USERID ggate, PASSWORD ggate
DISCARDFILE ./dirrpt/repnd.dsc,APPEND,MEGABYTES 5
DDL INCLUDE ALL
DDLOPTIONS REPORT
BATCHSQL
DBOPTIONS DEFERREFCONST
DBOPTIONS LOBWRITESIZE 102400
DDLERROR DEFAULT DISCARD RETRYOP MAXRETRIES 5 RETRYDELAY 20
MAP sender.* , TARGET sender.* ;
第二部分配置雙向同步(含DDL)
-
現目標端數據庫配置【這次目標端和源端和第一部分的正好互換】
確認源庫處於歸檔模式
因為現源端數據庫是之前目標端數據庫rman初始化過來的,所以這部分忽略
確認源庫為FORCE_LOGGIN
因為現源端數據庫是之前目標端數據庫rman初始化過來的,所以這部分忽略
確認源庫打開輔助日志
因為現源端數據庫是之前目標端數據庫rman初始化過來的,所以這部分忽略
源庫關閉回收站
因為現源端數據庫是之前目標端數據庫rman初始化過來的,所以這部分忽略
保證字符集一致
因為現源端數據庫是之前目標端數據庫rman初始化過來的,所以這部分忽略
UNDO設置
因為現源端數據庫是之前目標端數據庫rman初始化過來的,所以這部分忽略
安裝DDL_OBJETS
因為現源端數據庫是之前目標端數據庫rman初始化過來的,所以這部分忽略
-
現源端MGR配置
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPFILES 10
----這個之前配置過 忽略
-
現目標端MGR配置
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPFILES 10
----這個之前配置過 忽略
-
./GLOBALS配置(現目標端)
GGSCI (node1)> edit params ./GLOBALS
GGSCHEMA ggate
CHECKPOINTTABLE ggate.chkpoint
GGSCI (node1)>exit
GGSCI (node1)> dblogin userid ggate, password ggate
GGSCI (node1)> add checkpointtable ggate.chkpoint
GGSCI (node1)>exit
-
增加EXTRACT(現源端)extd2
增加EXTRACT
add extract extd2, tranlog, begin now
修改配置:
GGSCI (node1)> edit params extd2
EXTRACT extd2
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
SETENV (ORACLE_SID = "prm")
USERID ggate, PASSWORD ggate
TRANLOGOPTIONS EXCLUDEUSER ggate
IGNOREREPLICATES
EXTTRAIL ./dirdat/et
DISCARDFILE ./dirdat/extd2.dsc,APPEND,MEGABYTES 5
TRANLOGOPTIONS ALTARCHIVELOGDEST /arch/prm
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbf
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA
FETCHOPTIONS, USESNAPSHOT, NOUSELATESTVERSION, MISSINGROW REPORT
STATOPTIONS REPORTFETCH
WARNLONGTRANS 1H, CHECKINTERVAL 5M
TABLE sender.*;
添加該extract對應的trail文件,用來存儲抽取的數據。單個文件大小設置為100MB
GGSCI (node2)> add exttrail ./dirdat/et,extract extd2,megabytes 100
-
修改原源庫【現目標端】EXTRAIL參數
GGSCI (node1)>edit param EXTND
TRANLOGOPTIONS EXCLUDEUSER ggate
IGNOREREPLICATES
去掉以下兩行 不然啟動不起來
TRANLOGOPTIONS ALTARCHIVELOGDEST /arch/prm
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbf
-
增加PUMP(現源端)dpnd2
增加PUMP
GGSCI (node2)>add extract dpnd2, exttrailsource ./dirdat/et, begin now
修改配置:
GGSCI (node2)> edit params dpnd2
EXTRACT dpnd2
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
USERID ggate, PASSWORD ggate
RMTHOST 192.168.80.160, MGRPORT 8809
RMTTRAIL ./dirdat/et
DISCARDFILE ./dirdat/dpnd2.dsc,APPEND,MEGABYTES 5
TABLE sender.*;
添加遠程TRAIL文件:
GGSCI (node2)> add rmttrail ./dirdat/et, extract dpnd2, megabytes 100
-
增加現目標端REP進程repnd2
增加目標端REP進程
GGSCI (node1)> add replicat repnd2, exttrail ./dirdat/et, checkpointtable ggate.chkpoint
修改配置參數:
GGSCI (node1)> edit params repnd2
REPLICAT repnd2
ASSUMETARGETDEFS
USERID ggate, PASSWORD ggate
DISCARDFILE ./dirrpt/repnd2.dsc,APPEND,MEGABYTES 5
DDL INCLUDE ALL
DDLOPTIONS REPORT
BATCHSQL
DBOPTIONS DEFERREFCONST
DBOPTIONS LOBWRITESIZE 102400
DDLERROR DEFAULT DISCARD RETRYOP MAXRETRIES 5 RETRYDELAY 20
MAP sender.* , TARGET sender.* ;
-
在現源端增加傳輸表
GGSCI (node2)>exit
GGSCI (node2)> dblogin userid ggate, password ggate
GGSCI (node2)> add trandata sender.*
GGSCI (node2)>exit
-
查現現源庫SCN
SQL> select current_scn from v$database;
1297690
-
啟動GG各進程【注意啟動現目標端repnd2進程】
停止兩端所有近程
GGSCI (node1)> stop EXTND
GGSCI (node1)> stop DPEND
GGSCI (node1)> stop mgr
GGSCI (node2)> stop repnd
GGSCI (node2)> stop mgr
重啟兩端所有進程
node1:
start mgr
start EXTND
start DPEND
start repnd2, aftercsn 1297690
node2:
start mgr
start repnd
strat extd2
start dpnd2
-
數據測試
測試時使用語句
insert into t1 values (6,'fff');
insert into t1 values (7,'ggg');
insert into t1 values (7,'hhh');
insert into t1 values (8,'eee');
insert into t1 values (9,'fff');
insert into t1 values (10,'ggg');
create table t5 as select * from t1 where 1=0;
create table t4 as select * from t1;
conn / as sysdba
alter system switch logfile;
create tablespace test01 datafile '/u01/app/oracle/oradata/prm/test01.dbf' size 5m;
create table t6 as select * from t1;
alter table t6 rename to t7;
conn / as sysdba
alter system switch logfile;
drop tablespace test01 including contents and datafiles;
alter table t7 rename to t6;
十一 附件
-
DDL同步
GoldenGate的DDL同步只支持兩邊一致的數據庫,限制條件較多(如不能進行字段映射、轉換等),具體可以參考官方文檔。DDL的抓取不是通過日志抓取來捕獲的,而是通過觸發器來實現,所以對源數據庫的性能影響要比單純的數據抓取要大很多,可謂屏棄了GoldenGate的優勢。盡量不要使用GoldenGate的DDL復制功能,在大多數業務系統中,實際上不會有頻繁的數據庫結構變動,完全可以通過手工的方式進行維護。確實有大量DDL操作的環境,如果可以,還是推薦物理DG之類的替換方案;確實要使用GoldenGate的DDL復制,那么請詳細參考官方文檔的限制和說明。
--以上主要為個人意見,有不同看法的請無視
開啟DDL復制的基本配置步驟為:
(1)關閉ORACLE的回收站功能。
(2)選擇一個數據庫schema存放支持DDL的GoldenGate對象,運行相應創建腳本。
(3)編輯globals參數文件。
(4)修改extl和repl的配置文件
具體操作步驟:
(1)關閉數據庫回收站:
SQL>alter system set recyclebin=off scope=both;
(2)編輯globals參數文件:
GGSCI>edit param ./globals
添加以下內容后保存:
GGSCHEMA ddw --標明支持DDL的GG對象存放在哪個schema下
(3)執行創建腳本:
首先需要命令行進入GG安裝目錄下,然后再運行sqlplus執行腳本,如果不進入目錄下腳本執行會報錯(應該是由於GG腳本中子腳本嵌套使用相對路徑的問題所造成)。
SQL>@marker_setup.sql --提示輸入目標schema
SQL>@ddl_setup.sql --提示輸入目標schema,輸入initialsetup最后輸入yes
SQL>@role_setup.sql
SQL>grant GGS_GGSUSER_ROLE to ddw; --不進行該步賦權后面起進程會報錯
SQL>@ddl_enable.sql --使觸發器生效
(4)修改提取進程和復制進程的配置文件,分別加入ddl include all屬性。
此時repl必須指定assumetargetdefs屬性,這表明只有兩邊數據庫結構一致的情況下才可以啟用DDL復制。另外,開啟DDL同步不能再只映射單表了,對整個模式下的對象都有效。
加入DDL復制之后,數據復制的lag明顯增加了。
清除數據庫中DDL復制的設置
在實際測試中,由於我在同一個數據庫中進行映射,映射表結構不一致,導致進程報了一系列的錯誤。這個時候需要把通過腳本創建的GG對象中的數據清空,安裝目錄下只提供了清除對象的腳本,可以如下操作:
首先要求把所有的GG進程停掉,包括mgr進程
SQL>@ddl_disable.sql --首先使DDL觸發器失效
SQL>@ddl_remove.sql
SQL>@marker_remove.sql
role_setup.sql沒有對應的清除腳本,但是這塊不影響配置信息的清除
然后重新再創建腳本。