您好,登錄后才能下訂單哦!
項目 | 源端 | 目標端 |
ip | 192.168.12.23 | 192.168.22.24 |
oracle sid | orcl | orcl |
goldengate用戶 | oracle | oracle |
ogg版本 | 11.2.1.0.1 | 11.2.1.0.1 |
操作系統版本 | linux | linux |
兩臺服務器都需要創建ogg操作系統用戶(此步驟非必須)。
useradd -u 1003 -g oinstall -G dba ogg1 passwd ogg
PATH=$PATH:$HOME/bin
export PATH
umask 022
export ORACLE_HOSTNAME=segment2
export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=orcl
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
exportPATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_BASE/ogg
exportPATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib
exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
exportLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
exportCLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
exportLIBPATH=${CLASSPATH}:$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export ORACLE_OWNER=oracle
export SPFILE_PATH=$ORACLE_HOME/dbs
export ORA_NLS10=$ORACLE_HOME/nls/data
exportOGG_HOME=$ORACLE_BASE/ogg
mkdir /ogg chown -Rogg:oinstall /ogg
將OGG安裝文件上傳到兩臺服務器的OGG操作系統用戶的家目錄(默認為/home/ogg)。
fbo_ggs_Linux_x64_ora11g_64bit.tar
fbo_ggs_Linux_x64_ora11g_64bit.tar解包到/ogg目錄(源和目標端都需要操作)
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /ogg
$./ggsci
解壓安裝后目錄
[oracle@sourceogg]$ ls -l |grep ^d
drwxr-x---2 oracle oinstall 4096 Apr 23 2012 cfg
drwxr-x---2 oracle oinstall 4096 Apr 23 2012 dirjar
drwxr-x---2 oracle oinstall 4096 Apr 23 2012 dirprm
drwxr-x---7 oracle oinstall 4096 Apr 23 2012 UserExitExamples
GGSCI(source) 1> create subdirs
Creatingsubdirectories under current directory /u01/app/oracle/ogg
Parameterfiles /u01/app/oracle/ogg/dirprm: already exists
Reportfiles /u01/app/oracle/ogg/dirrpt: created
Checkpointfiles /u01/app/oracle/ogg/dirchk: created
Processstatus files /u01/app/oracle/ogg/dirpcs: created
SQLscript files /u01/app/oracle/ogg/dirsql: created
Databasedefinitions files /u01/app/oracle/ogg/dirdef: created
Extractdata files /u01/app/oracle/ogg/dirdat: created
Temporaryfiles /u01/app/oracle/ogg/dirtmp: created
Stdoutfiles /u01/app/oracle/ogg/dirout: created
文件路徑 | 說明 |
/u01/app/oracle/ogg/dirprm | 存放OGG參數各的配置信息 |
/u01/app/oracle/ogg/dirrpt | 存放進程報告文件 |
/u01/app/oracle/ogg/dirchk | 存放檢查點文件 |
/u01/app/oracle/ogg/dirpcs | 存放進程狀態文件 |
/u01/app/oracle/ogg/dirsql | 存放SQL腳本文件 |
/u01/app/oracle/ogg/dirdef | 存放DEFGEN工具生成的數據定義 |
ORACLE建議使用單獨的表空間存放OGG數據,表空間大小50M就可以,但是最好設置數據文件的自動擴展。
SQL>create tablespace ogg datafile'/u01/app/oracle/oradata/orcl/ogg01.dbf'size 50M autoextend on
SQL>create user ogg identified by ogg default tablespace ogg;
OGG用戶需要以下權限,也有人為了省事,直接給OGG用戶DBA權限。
SQL> grant CONNECT, RESOURCE to ogg;
SQL> grant SELECT ANY DICTIONARY, SELECT ANY TABLEto ogg;
SQL> grant ALTER ANY TABLE to ogg;
SQL> grant FLASHBACK ANY TABLE to ogg;
SQL> grant EXECUTE on DBMS_FLASHBACK to ogg;
SQL> grant insert any table to ogg;
SQL> grant update any table to ogg;
SQL>grant delete any table to ogg;
SQL> selectNAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
SQL> alter database force logging;
SQL> alter database add SUPPLEMENTAL log data;
SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MINfrom v$database;
如果要讓OGG支持DDL操作,還需要額外運行幾個腳本,這些腳本是OGG帶的而不是ORACLE帶的,在OGG的安裝目錄都可以找到,如果在OGG的安裝目錄登錄數據庫,可以直接@加腳本的名字,源端與目標端都需要運行
如下:
sqlplus / as sysdba
GRANT CREATE TABLE,CREATE SEQUENCE TO OGG;
權限配置以后.要重新執行
SQL>@ddl_setup
SQL>@role_setup
SQL> grantGGS_GGSUSER_ROLE to ogg;
SQL>@ddl_enable
創建測試數據
源數據庫
@demo_ora_create.sql
@demo_ora_insert.sql
目標數據
@demo_ora_create.sql
添加表級的trandata可以理解為需要將哪些用戶的哪些表和目標庫同步,其實也是添加表級的
supplemental log,但是只有上文打開的minimal supplemental log后,這個才生效。
GGSCI (oggsource) 2> dbloginuserid ogg,password ogg
GGSCI (dbdream) 3> add trandata hr.tcustmer;
GGSCI (dbdream) 4> add trandata scott.dept_ogg
成功添加表級TRANDATA后,可以通過INFO命令查看哪些表被添加了TRANDATA.
INFO TRANDATA scott.*
GGSCI (stream) 2> EDITPARAMS MGR 加入以下兩行內容
PORT 7809
PURGEOLDEXTRACTS /ogg/dirdat,USECHECKPOINTS
參數說明:
PORT 7809:OGG管理進程監控端口。
PURGEOLDEXTRACTS:清除不需要的trail文件。
/ogg/dirdat:trail文件存放位置。
USECHECKPOINTS:使用檢查點隊列。
start mgr
GGSCI (oggtarget) 4> info mgr
文件存放路徑$OGG_HOME/dirprm
由于在創建測試表的時候,源端的測試表有數據,而目標端的測試表只有結構,沒有數據,所以需要初始化目標端的數據,所謂初始化,就是讓目標端的數據和源端的數據在這個時間點是一模一樣的,所以初始化工作并不需要一定使用OGG,也可以使用EXP、EXPDP、SQLLOAD等其他工具,
本文主要介紹如何使用OGG進行數據初始化,
下面在源端配置捕獲進程EINI_1。
GGSCI (dbdream) 11> ADD EXTRACT EINI_1, SOURCEISTABLE--------------源端加同步進程
GGSCI (dbdream) 12> INFO EXTRACT *, TASKS EXTRACT
GGSCI (dbdream) 13> EDIT PARAMS EINI_1
EXTRACT EINI_1
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID=dbdream)
userid ogg, passwordogg
RMTHOST 192.168.12.203, MGRPORT 7839
RMTTASK REPLICAT, GROUP RINI_1-----目標端名字一定要對應
TABLE SCOTT.EMP_OGG;
TABLE SCOTT.DEPT_OGG;
EXTRACT EINI_1:說明這是EXTRACT進程,名字是EINI_1 SETENV:
環境變量,一定要設置和數據庫字符集一樣,否則可能會亂碼
USERID:數據庫OGG用戶 PASSWORD:數據庫用戶OGG的密碼
RMTHOST:目標端地址,如果在/etc/hosts文件里已經設置解析,可以寫主機名 MGRPORT:
目標端MGR管理進程監聽的端口RMTTASK REPLICAT:
目標端REPLICAT應用進程的組和名字
TABLE:源端要初始化數據的表的名字
B、配置目標端REPLICAT進程
---------------------特別留意名字為源端配置的名
add replicatRINI_1,specialrun------目標端添加同步進程
EDIT PARAMS RINI_1
--加入以下內容
REPLICAT RINI_1
SETENV(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
ASSUMETARGETDEFS
USERID ogg, PASSWORD ogg
DISCARDFILE /u01/app/oracle/ogg/dirrpt/RINIaa.dsc, PURGE
MAP scott.*, TARGET scott.*;
REPLICAT RINI_1:說明這是REPLICAT應用進程,名字叫RINI_1
SETENV:語言變量,同捕獲進程EINI_1
ASSUMETARGETDEFS:告訴OGG目標端和源端需要同步的表的結構完全一致,不需要OGG去檢查表的結構,包括表名、字段名、字段類型、字段長度等,如果目標端和源端同步的表的結構不一樣,需要使用SOURCEDEFS參數,
USERID、PASSWORD:同捕獲進程EINI_1參數介紹
DISCARDFILE:錯誤信息存放位置及命名規則
MAP:源端捕獲的表的名字
TARGET:目標端同步的表的名字,可以不在同一SCHEMA
C、初始化數據-----源端
配置好目標端的應用進程RINI_1后,就可以啟動源端的捕獲進程進行捕獲數據了,而目標端的應用進程RINI_1不需要手動去啟動,也就是說目標端RINI_1進程不需要管。
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
GGSCI (oggsource asogg@dbdream) 17> START EXTRACT EINI_1
GGSCI (oggsource as ogg@dbdream) 17>VIEW REPORT EINI_1
可以看到初始化是正確的。初始化之后,上文提到的初始化進程(EINI_1、RINI_1)自動停止,因為通常情況下初始化數據工作只會做一次。可以通過INFO命令查看進程的狀態。
INFO EXTRACT EINI_1-------------源端
INFO REPLICAT RINI_1-------目標端
此步驟不是必須的,但是為了讓OGG網絡中斷、服務器宕機、掉電等在突發情況也能正確斷點續傳,ORACLE建議配置OGG的檢查點隊列。
GGSCI (stream) 2> EDIT PARAMS ./GLOBALS
CHECKPOINTTABLE ogg.ggschkpt
這就告訴OGG檢查點存放到OGG用戶下的GGSCHKPT表中,但是還需要使用OGG用戶登錄數據庫,創建檢查點表,此時需要退出OGG,重新登錄,否則可能會遇到下面的錯誤。
[ogg@oggsource ogg]$ ./ggsci
GGSCI (oggsource) 1> dblogin userid ogg,password ogg
GGSCI (oggsource as ogg@dbdream) 2> ADD CHECKPOINTTABLE
[ogg@dbdream ogg]$ sqlplus ogg/ogg
No checkpoint table specified. Using GLOBALS specification(ogg.ggschkpt)...
Successfully created checkpoint table ogg.ggschkpt.
此時用OGG登錄數據庫,就可以看到OGG創建的檢查點表。
SQL> select * from tab;
$ edit param ext1
EXTRACT ext1
SETENV(ORACLE_HOME="/oracle/app/product/11.2/db")
SETENV (ORACLE_SID="orcl")
SETENV(NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
USERID ogg password ogg
EXTTRAIL ./dirdat/ext1/sd
gettruncates
DDL INCLUDE MAPPED , OBJTYPE 'TABLE' &
INCLUDE MAPPED OBJTYPE 'INDEX'
table scott.*;
add extract ext1 tranlog, begin now
ADD EXTTRAIL ./dirdat/ext1/sd EXTRACT ext1, MEGABYTES 100-----注意是相對路徑
start ext1
ADD EXTRACT EORA_2, TRANLOG, BEGIN NOW
ADD EXTTRAIL /u01/app/oracle/ogg/dirdat/zz,EXTRACT EORA_2, MEGABYTES 5
添加PUMP進程PORA_1到OGG,并指定本地的TRAIL文件。
edit pram dp1
EXTRACT dp1
PASSTHRU
DYNAMICRESOLUTION
RMTHOST 192.168.12.24 ,MGRPORT 7809
RMTTRAIL ./dirdat/ext2/sd
DISCARDFILE./dirrpt/dp2.dsc,APPEND,MEGABYTES 100
DISCARDROLLOVER AT 6:00
REPORTROLLOVER AT 6:00
REPORTCOUNT EVERY 1 HOURS,RATE
TABLE scott.*;
ADD EXTRACT dp1, EXTTRAILSOURCE./dirdat/ext1/sd
INFO EXTRACT dp2
ADD RMTTRAIL ./dirdat/ext1/sd, EXTRACT dp1, MEGABYTES100-----注意相對路徑
ADD EXTRACT PORA_1, EXTTRAILSOURCE /u01/app/oracle/ogg/dirdat/pa
為PUMP進程PORA_1指定將本地TRAIL文件傳輸到目標端后保存成目標端TRAIL文件的名字。
ADD RMTTRAIL /u01/app/oracle/ogg/dirdat/pa, EXTRACTPORA_1, MEGABYTES 5
START EXTRACT dp1
GGSCI (oggsource as ogg@dbdream) 36>INFO EXTRACT dp1
注意路徑存在和環境變量相關內容
edit param rep1
REPLICAT rep1
SETENV (ORACLE_HOME ="/u01/app/oracle/product/11.2.0/db_1" )
SETENV (ORACLE_SID = "orcl")
SETENV (NLS_LANG ="AMERICAN_AMERICA.ZHS16GBK")
USERID ogg, PASSWORD ogg
--HANDLECOLLISIONS
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/rep2.dsc ,append,megabytes 10
---SOURCEDEFS./dirdef/def.def
DDL INCLUDE MAPPED , OBJTYPE 'TABLE' &
INCLUDE MAPPED OBJTYPE 'INDEX'
MAP SCOTT.EMP_OGG ,TARGET SCOTT.EMP_OGG ;
MAP SCOTT.DEPT_OGG ,TARGET SCOTT.DEPT_OGG ;
ADD REPLICAT rep1, EXTTRAIL ./dirdat/ext1/sd
START REPLICAT rep1
注意參數
ERROR OGG-00423 Could not find definitionfor source.person
In the Replicat param Please tryASSUMETARGETDEFS , if source and target have same table structure..
if both the structures are different ,generate the source definition and use SOURCEDEFS in Replicate Param.
handcollisions被注釋了,也就是說當target端缺失delete 、update數據時,target端無法自動處理。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。