oracle goldengate 配置DML&DDL實驗
Oracle Goldengate
關於DML與DDL複製模擬環境搭建
1. Read Me
此文件的內容為搭建Oracle Goldengate(OGG)的DML複製、以及DDL複製。從生產端到容災端的配置(主到從)。主要模擬的是生產端正常工作,容災端作為災備庫;當生產端出現問題後,應用切換至容災端,並由容災端資料庫接管業務;在生產端恢復後,將資料從容災端重新透過OGG同步到生產端的一個過程。文件中並沒有雙向配置的描述,相信大家瞭解這些配置過程之後,參考Admin文件實現雙向複製應該問題不大。此文件為實驗性質的文件,肯定存在一些不足,歡迎大家批評指正。
2. 實驗環境以及OGG架構介紹:
平臺:Red Hat 5.4 (32bit)
資料庫版本: Oracle 10GR2(10.2.0.1)
OGG version: 11.1.1.0.0
OGG實現原理是透過對生產端資料庫中redo log或者archive log的內容進行抽取、投遞、複製,使生產端資料庫實現同容災端資料庫的資料同步。以下是OGG的技術架構:
OGG相關程式介紹:
序號 |
程式名 |
說明 |
1 |
Manager |
Goldengate軟體的管理程式,用於管理生產端或者容災端OGG相關程式。以下簡稱為MGR。 |
2 |
Extract |
GoldenGate軟體的抽取程式,又叫Capture程式,一般用於抽取資料庫日誌抓取資料變化或將本地佇列中資料傳遞到目標端。以下簡稱為ext_ylqa。 |
3 |
Replicat |
GoldenGate軟體的投遞程式,又稱為Delivery程式,用於將佇列檔案中的資料變化轉換為sql應用到目標庫。以下簡稱為repylqa。 |
4 |
Data Pump |
專指將本地佇列中資料傳遞到目標端的Extract程式,區別於讀取日誌的主Extract程式。以下簡稱為dpylqa。 |
● Primary Extract: The primary Extract process captures data and DDL from the database
source.
● Data pump: The data pump is a secondary Extract process that reads captured data from
a local trail on the source system and sends it over the network to the target. The data
pump adds storage flexibility and isolates the primary Extract process from TCP/IP
activity. For an illustration of how a data pump fits into the capture configuration, see
Figure 1 on page 38.
● Replicat: The Replicat process reads a remote trail and applies the transactional
changes to the target database.
3. 生產端資料庫環境準備
3.1 建立ggate使用者以及表空間
-- Create tablespace SQL> create tablespace ggs datafile '/home/app/oradata/node1/ggs01.dbf' size 50m; -- Create the user CREATE USER ggate IDENTIFIED BY ggate default tablespace ggs temporary tablespace temp quota unlimited on ggs ; -- Grant/Revoke role privileges grant resource,connect,dba to ggate; |
3.2 檢視歸檔資訊
生產端需要是歸檔模式
--檢視是否歸檔 Archive log list; --修改歸檔模式 shutdown immediate startup mount; alter database archivelog; alter database open; |
3.3 配置oracle環境變數
在oracle環境變數中新增以下內容(如果不新增,將無法啟動透過./ggsci啟動ggsci介面):
export OGG_HOME=/home/oracle/ggate export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME:$LD_LIBRARY_PATH |
3.4 開啟資料庫附件日誌
檢查附件日誌情況
select SUPPLEMENTAL_LOG_DATA_MIN ,SUPPLEMENTAL_LOG_DATA_PK ,SUPPLEMENTAL_LOG_DATA_UI ,SUPPLEMENTAL_LOG_DATA_FK ,SUPPLEMENTAL_LOG_DATA_ALL from v$database; |
開啟資料庫附件日誌
alter database add supplemental log data; alter database add supplemental log data (primary key, unique,foreign key) columns; alter system switch logfile; --回退 alter database drop supplemental log data (primary key, unique,foreign key) columns; alter database drop supplemental log data; |
3.5 開啟資料庫強制日誌模式
alter database force logging; |
3.6 生產端OGG軟體安裝
上傳安裝介質到生產端伺服器,並解壓:
(本次試驗將OGG的安裝目錄放在/home/oracle/ggate下)
--安裝軟體 cd /home/oracle/ggate tar zxvf *.gz --建立子目錄 在/home/oracle/ggate目錄下,執行以下命令: --如果沒有修改oracle環境變數,會在此步驟報錯 ./ggsci --在GGSCI命令列為複製表新增transdata (Enabling schema-level supplemental logging) DBLOGIN USERID ggate, PASSWORD ggate ADD TRANDATA SCOTT.* --在sqlplus下檢視是否完整新增 select table_name from all_tables where owner='SCOTT' and table_name not in (select distinct table_name from dba_log_group_columns where owner='SCOTT'); |
4. 生產端OGG程式配置
4.1 配置GLOBALS引數
GGSCI>EDIT PARAMS ./GLOBALS GGSCHEMA ggate—指定進行DDL複製的資料庫使用者,DML可不配置 CHECKPOINTTABLE ggate.oggchkpt |
4.2 配置MGR程式
GGSCI>edit params mgr PORT 7839 DYNAMICPORTLIST 7840-7849 --AUTOSTART EXTRACT * --AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 7 PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7 LAGREPORTHOURS 1 LAGINFOMINUTES 30 LAGCRITICALMINUTES 45 以下兩句用於DDL,單獨配置DML時,可不新增 PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7 PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7 |
4.3 配置ext_scot程式(OGG抽取程式)
GGSCI> edit params ext_scot EXTRACT ext_scot SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") DBOPTIONS ALLOWUNUSEDCOLUMN USERID ggate, PASSWORD ggate --GETTRUNCATES這個引數可以在開啟DDL複製時登出掉 REPORTCOUNT EVERY 1 MINUTES, RATE NUMFILES 5000 DISCARDFILE ./dirrpt/ext_scot.dsc, APPEND, MEGABYTES 100 DISCARDROLLOVER AT 2:00 WARNLONGTRANS 2h, CHECKINTERVAL 3m EXTTRAIL ./dirdat/ga, MEGABYTES 200 DYNAMICRESOLUTION TRANLOGOPTIONS CONVERTUCS2CLOBS TRANLOGOPTIONS RAWDEVICEOFFSET 0 以下部分是DDL的配置,DML複製可以不配置 ----------------------------------------- DDL & INCLUDE MAPPED OBJTYPE 'table' & INCLUDE MAPPED OBJTYPE 'index' & EXCLUDE OPTYPE COMMENT DDLOPTIONS NOCROSSRENAME REPORT ------------------------------------------------------ TABLE SCOTT.* ; |
4.4 配置dpescot程式
GGSCI>edit params dpescot EXTRACT dpescot RMTHOST 192.168.150.129, MGRPORT 7839, COMPRESS PASSTHRU NUMFILES 5000 RMTTRAIL ./dirdat/ga DYNAMICRESOLUTION TABLE SCOTT.* ; |
注:配置檔案中的IP是目標端,也就是容災端的IP。
4.4 配置repscob程式
(此程式用於主從切換,即原來的生產端變成目標端,原來的目標端變成生產端)
GGSCI>edit params repscob REPLICAT repscob SETENV (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8") USERID ggate, PASSWORD ggate REPORT AT 00:59 REPORTCOUNT EVERY 1 MINUTES, RATE REPORTROLLOVER AT 02:00 REPERROR DEFAULT, ABEND NUMFILES 5000 GROUPTRANSOPS 10000 --HANDLECOLLISIONS ASSUMETARGETDEFS DISCARDFILE ./dirrpt/repylqb.dsc, APPEND, MEGABYTES 200 DISCARDROLLOVER AT 02:00 GETTRUNCATES ALLOWNOOPUPDATES 以下部分是DDL的配置,DML複製可以不配置 ----------------------------------------- DDL include mapped DDLOPTIONS report ----------------------------------------- MAP SCOTT.*, TARGET SCOTT.*; |
4.5 建立OGG的DDL物件
進入OGG安裝目錄下 cd /home/oracle/ggate sqlplus "/ as sysdba" SQL> @marker_setup.sql Enter GoldenGate schema name:ggate
SQL> @ddl_setup.sql Enter GoldenGate schema name:ggate
SQL> @role_setup.sql Grant this role to each user assigned to the Extract, Replicat, GGSCI, and Manager processes, by using the following SQL command:
GRANT GGS_GGSUSER_ROLE TO
where
手動執行以上授權SQL GRANT GGS_GGSUSER_ROLE TO ggate; 啟動DDL觸發器(在OGG安裝目錄下) SQL>@ddl_enable.sql |
4.6 安裝效能提升工具
為了提供OGG的DDL複製的效能,可以將ddl_pin指令碼加入到資料庫啟動的指令碼後面,該指令碼需要帶一個OGG的DDL使用者(即安裝DDL物件的使用者,本例中是ggate)的引數(安裝過程中,會提示安裝dbms_shared_pool系統包,需要執行$ORACLE_HOME/rdbms/admin/dbmspool.sql)
SQL> @ddl_pin ggate |
4.7 新增抽取/投遞程式與佇列檔案
GGSCI> ADD EXTRACT ext_scot,tranlog,begin now GGSCI> ADD EXTTRAIL ./dirdat/ga, EXTRACT ext_scot, megabytes 100 GGSCI> ADD EXTRACT dpescot, EXTTRAILSOURCE ./dirdat/ga GGSCI> ADD RMTTRAIL ./dirdat/ga, EXTRACT dpescot, MEGABYTES 100 |
注:這個需要關注的是,配置並未新增之前配置的repscob程式。
4.8 啟動MGR程式
GGSCI> start mgr |
4.9 啟動ext_scot程式(抽取程式)
GGSCI> start extract ext_scot |
記錄啟動extract程式的時間
可以透過以下方式,獲取當前啟動extract程式的時間,例如“2012-04-24 10:20:55”
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; |
======================以下初始化過程由資料泵來實現=================
5. 災備端資料庫的資料初始化
災備端資料庫的資料初始化主要目標是,透過生產端資料庫的全庫備份,恢復資料庫至災備端。主要採用RMAN備份恢復的方式來初始化資料庫。
透過RMAN備份全庫之前,需要檢視生產端資料庫中所有事務的start時間是否晚於啟動extract的時間。
可以透過以下的步驟檢視生產端資料庫中事務start時間
SQL>select start_time from v$transaction where to_date(start_time, 'yyyy-mm-dd hh24:mi:ss') |
注:只有當所有事務的start時間晚於extract啟動的時間,才能進行全庫備份。
使用oracle使用者登入,透過RMAN進行全庫備份
--備份資料庫:
$ rman target / rman> run { ALLOCATE CHANNEL ch00 TYPE DISK; ALLOCATE CHANNEL ch01 TYPE DISK; CROSSCHECK BACKUPSET; DELETE NOPROMPT EXPIRED BACKUPSET; sql 'alter system archive log current'; BACKUP AS BACKUPSET SKIP INACCESSIBLE; TAG hot_db_bk_level0 FORMAT '/rmanbak/ogg/full_%s_%p_%t'; FULL DATABASE; RELEASE CHANNEL ch00; RELEASE CHANNEL ch01; } |
--備份歸檔日誌以及控制檔案
run { ALLOCATE CHANNEL ch00 TYPE DISK; ALLOCATE CHANNEL ch01 TYPE DISK; sql 'alter system switch logfile'; sql 'alter system switch logfile'; sql 'alter system switch logfile'; sql 'alter system archive log current'; BACKUP ARCHIVELOG ALL FORMAT '/rmanbak/ogg/ARCH_%U'; BACKUP CURRENT CONTROLFILE FORMAT /rmanbak/ogg/bk_controlfile'; RELEASE CHANNEL ch00; RELEASE CHANNEL ch01; } |
注:這裡要保證最後備份控制檔案。
--檢視備份集,透過以下命令找到最近備份的歸檔LOW SCN
$ rman target / RMAN> list backup; |
注:記錄此SCN,在恢復的時候需要用到這個SCN
使用oracle使用者登入災備端執行恢復操作
在災備端建立相同的目錄結構,並正確設定:ORACLE_BASE,ORACLE_HOME,ORACLE_SID等環境變數。
複製生產端資料庫init{ORACLE_SID}.ora檔案到目標機,將引數job_queue_processes設定為0。
生成口令檔案或者複製生產端資料庫口令檔案到災備端。
啟動資料庫nomount狀態
$ rman target / RMAN> startup nomount; |
恢復控制檔案
RMAN> restore controlfile from ‘/rmanbak/ogg/bk_controlfile’; |
啟動資料庫到mount狀態
RMAN> alter database mount; |
恢復資料庫
RMAN> crosscheck backup; RMAN> restore database; RMAN> run { set UNTIL SCN ***; --該SCN為第二步中得到的SCN號 recover database; } |
查詢災備端資料庫SCN號(在啟動災備端複製程式時,需要該SCN)
SQL> SELECT CHECKPOINT_CHANGE#,CHECKPOINT_TIME FROM V$DATAFILE_HEADER; |
災備端開啟資料庫
Alter database open resetlogs; |
至此,容災端資料庫已經恢復出來。總結一下原理就是根據SCN將容災端資料庫恢復到生產庫的一個時間點。
=====================================================================
6. 災備端資料庫相關引數配置
6.1 檢查Goldengate使用者資訊
一般情況下,透過RMAN恢復出來的庫中已經存在ggate使用者,如果不存在重新建立該使用者,參考生產端建立ggate使用者指令碼。
6.2 關閉歸檔模式
archive log list; shutdown immediate; startup mount; alter database noarchivelog; atler database open; |
6.3 關閉資料庫強制日誌模式
alter database no force logging; |
6.4 禁用災備端資料庫觸發器
declare v_sql varchar2(2000); CURSOR c_trigger IS SELECT 'alter trigger '||owner||'.'||trigger_name||' disable' from dba_triggers where owner='SCOTT'; BEGIN OPEN c_trigger; LOOP FETCH c_trigger INTO v_sql; EXIT WHEN c_trigger%NOTFOUND; execute immediate v_sql; end loop; close c_trigger; end; /
--檢查是否全部禁用 select owner||'.'||trigger_name,status from dba_triggers where owner='SCOTT' and STATUS='ENABLED'; |
6.5 禁用外來鍵
declare v_sql varchar2(2000); CURSOR c_trigger IS SELECT 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name from dba_constraints where constraint_type='R' and owner='SCOTT'; BEGIN OPEN c_trigger; LOOP FETCH c_trigger INTO v_sql; EXIT WHEN c_trigger%NOTFOUND; execute immediate v_sql; end loop; close c_trigger; end; /
--檢視結果 select status, owner||'.'||table_name from dba_constraints where owner='SCOTT' and status='ENABLED' and constraint_type='R'; |
6.6 禁用災備端JOB
在災備端資料庫恢復前,在pfile檔案中修改引數job_queue_processes為0,預設值為10。
alter system set job_queue_processes=0 scope=both;
job_queue_processes 0 |
6.7 配置災備端oracle使用者環境變數
參考生產端oracle環境變數
6.8 安裝OGG軟體
參考生產端OGG軟體的安裝,在這建立生產端和容災端安裝OGG軟體的家目錄一致。
a. 解壓檔案
b. 建立子目錄
c. 解除安裝DDL配置(這一步跟生產端不一致)
在災備端的OGG安裝目錄下執行以下指令碼:
SQL>@ddl_disable.sql SQL>@ddl_remove.sql SQL>@marker_remove.sql |
注:在執行上述指令碼的時候,會提示輸入安裝時所指定的schema名稱(這裡實驗是ggate)。
7. 災備端OGG相關程式配置
7.1 配置GLOBALS
GGSCI> EDIT PARAMS ./GLOBALS GGSCHEMA ggate CHECKPOINTTABLE ggate.oggchkpt
--新增檢查表 GGSCI> DBLOGIN USERID ggate, PASSWORD ggate GGSCI> ADD CHECKPOINTTABLE ggate.oggchkpt |
7.2 配置MGR程式
PORT 7839 DYNAMICPORTLIST 7840-7849 --AUTOSTART REPLICAT * --AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 1 PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7 LAGREPORTHOURS 1 LAGINFOMINUTES 30 LAGCRITICALMINUTES 45 |
注:在DDL複製中,目標端的MGR程式,不需要配置DDL引數。
7.3 配置repscot程式
REPLICAT repscot SETENV (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8") USERID ggate, PASSWORD ggate REPORT AT 00:59 REPORTCOUNT EVERY 1 MINUTES, RATE REPORTROLLOVER AT 02:00 REPERROR DEFAULT, ABEND NUMFILES 5000 GROUPTRANSOPS 10000 ASSUMETARGETDEFS DISCARDFILE ./dirrpt/repscot.dsc, APPEND, MEGABYTES 200 DISCARDROLLOVER AT 02:00 ALLOWNOOPUPDATES --------------------------------------DDL專用----------- DDL include mapped DDLOPTIONS report ---------------------------------- MAP SCOTT.*, TARGET SCOTT.*; |
7.4 配置ext_scob程式(主從切換時使用)
EXTRACT ext_scob SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") DBOPTIONS ALLOWUNUSEDCOLUMN USERID ggate, PASSWORD ggate GETTRUNCATES REPORTCOUNT EVERY 1 MINUTES, RATE NUMFILES 5000 DISCARDFILE ./dirrpt/ext_scob.dsc, APPEND, MEGABYTES 100 DISCARDROLLOVER AT 2:00 WARNLONGTRANS 2h, CHECKINTERVAL 3m EXTTRAIL ./dirdat/et, MEGABYTES 200 DYNAMICRESOLUTION TRANLOGOPTIONS CONVERTUCS2CLOBS TRANLOGOPTIONS EXCLUDEUSER ggate
DDL & INCLUDE MAPPED OBJTYPE 'table' & INCLUDE MAPPED OBJTYPE 'index' & EXCLUDE OPTYPE COMMENT DDLOPTIONS NOCROSSRENAME REPORT
TABLE SCOTT.* ; |
7.5 配置dpescob程式(主從切換時使用)
EXTRACT dpescob RMTHOST 192.168.150.128, MGRPORT 7839, COMPRESS PASSTHRU NUMFILES 5000 RMTTRAIL ./dirdat/et DYNAMICRESOLUTION
TABLE SCOTT.* ; |
7.6 新增repscot程式
GGSCI> ADD REPLICAT repscot, EXTTRAIL ./dirdat/ga , EXTSEQNO 0, EXTRBA 0 , CHECKPOINTTABLE ggate.oggchkpt |
7.7 啟動生產端以及災備端OGG相關程式
啟動容災端MGR程式
GGSCI>start mgr |
啟動生產端dpescot程式
GGSCI> start ext dpescot |
啟動災備端repscot程式
GGSCI>start repscot , at csn **** --這裡的SCN就是恢復出來庫的那個SCN,本次實驗沒有使用SCN |
到這,兩端的OGG配置完成,可以透過以下命令檢視OGG各個程式的狀態
cd /goldengate ./ggsci GGSCI>Info all |
可以做些測試,比如在生產端scott使用者下,新增或者刪除資料,以及建立或者Drop表。
刪除、增加、修改、drop、建立都試驗成功。
源端:
SQL> delete from scott.emp;
14 rows deleted.
SQL> commit;
Commit complete.
目標端:
SQL> select * from scott.emp
no rows selected
各位,到這如果能成功配置,應該對OGG有了一個初步的瞭解。至於反向的配置(在從將資料重新同步到生產端,讓生產端接管業務),需要幾個注意的幾點,思路如下:要做反向配置同步時,比如,在現在狀態是從生產端到災備端,突然生產端出現問題。這個時候,需要災備端接管業務,在使用災備端的資料庫之前,要保證先將之前資料庫相關引數修改回來,比如開啟歸檔,開啟強制日誌等等(如果需要DDL複製,需要建立DDL物件並啟動DDL全域性觸發器),接著將之前的複製關係刪除,並且災備端之前配置的抽取程式ext_scob啟動的時間要早於災備端資料庫接管業務的時間,不然OGG無法將修改的資料寫進trail檔案中。如果沒有這些trail檔案,那麼也無法直接透過OGG程式的配置完成資料同步。災備端的抽取程式啟動後,可以去配置生產端資料庫以及OGG引數。
=============================報錯=================================
2012-04-24 05:00:00 WARNING OGG-00869 No unique key is defined for table SALGRADE. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key.
GG的報錯說的很明白了,因為原表沒有主鍵或Unique Index,所以GG自動把原表所有的Column都拿來當主鍵用,但這樣會造成傳輸上的問題,因此GG在這種模式下,只能支援有限數量的Column表,所以報錯,建議對原表增加Unique Index,並推薦使用Keycols引數予以確認
源引:No unique key is defined for table BUSINESSSYSTEMSESSIONNUM5MIN. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21256317/viewspace-1063575/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle GoldenGate 簡單實驗OracleGo
- oracle goldengate 配置OracleGo
- oracle goldengate 初始化實驗步驟OracleGo
- 【GoldenGate】Oracle GoldenGate(三) DDL同步配置GoOracle
- 【GoldenGate】Oracle GoldenGate(二) 雙向同步配置GoOracle
- Oracle goldengate 安裝配置OracleGo
- oracle GoldenGate Veridata配置OracleGo
- Oracle GoldenGate Director配置手冊OracleGo
- Oracle GoldenGate安裝初體驗OracleGo
- oracle資料庫配置goldengate同步Oracle資料庫Go
- oracle goldengate 雙向複製配置OracleGo
- 【GoldenGate】Oracle GoldenGate Veridata 安裝配置與應用GoOracle
- 【GoldenGate】Oracle GoldenGate(一) 安裝與DML單向同步配置GoOracle
- 配置Oracle GoldenGate for DB2(雙向)OracleGoDB2
- Oracle GoldenGate 學習教程二、配置和使用OracleGo
- oracle goldengate 10g--->11g配置OracleGo
- 【goldengate】官方文件筆記三 Oracle GoldenGate 實時報表Go筆記Oracle
- Goldengate 基本配置Go
- 安裝配置Oracle GoldenGate for DB2(單向)OracleGoDB2
- 實驗5.OSPF配置實驗
- oracle goldengate專案實施結束OracleGo
- 用python生成oracle goldengate複製配置檔案PythonOracleGo
- Oracle 11g GoldenGate單向複製配置(DML)OracleGo
- 【OGG】Oracle GoldenGate 11g (二) GoldenGate 11g 單向同步配置 上OracleGo
- 【OGG】Oracle GoldenGate 11g (二) GoldenGate 11g 單向同步配置 下OracleGo
- 【goldengate】官方文件筆記四 Oracle GoldenGate實時資料分佈Go筆記Oracle
- 【goldengate】官方文件筆記五 Oracle GoldenGate實時資料倉儲Go筆記Oracle
- Oracle GoldenGate DirectorOracleGo
- oracle 11gR2 配置goldengate連線asm例項OracleGoASM
- GoldenGate的基本配置流程Go
- goldengate ddl 配置說明Go
- goldengate配置DDL複製Go
- 安裝並配置goldengateGo
- GoldenGate for win安裝配置Go
- GoldenGate雙向同步配置Go
- GoldenGate配置(三)之DDL複製配置Go
- Oracle GoldenGate Veridata 12.2.1.4安裝配置使用全手冊OracleGo
- oracle goldengate實現欄位插入時間值OracleGo