oracle Golden Gate 實現數據同步


oracle Golden Gate 實現數據同步

1.應用場景

生產數據庫正常運行下進行ogg操作,實現到測試庫的實時同步功能。

2.原理分析

ogg主要是四個服務:Manager,Extract,Pump,Replicat

  • Manager:控制ogg 啟動 狀態 停止 等
  • Extract:捕獲 源 端數據 利用其內在的checkpoint機制,周期性地檢查 並記錄其讀寫的位置,通常是寫入到本地的trail文件
  • Pump:把Trail文件以數據塊的形式通過 TCP/IP協議發送到目標端
  • Replicat:讀取目標端Trail文件中的內容,並將解析其解析為DML或DDL語句,然后應用到目標數據庫中。

針對當前場景,
在官網:https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/instantiate.htm#GIORA403
中介紹了如下方式。

實際部署時需要注意正確的執行順序:
(1) 源端和目標端創建配置各個同步進程。
(2) 開啟源端同步抓取進程(圖上的Change Extract),開始捕獲變化。
(3) 開啟初始化進程(圖上的Initial-Load Extract),開始數據初始化加載。
(4) 等初始化加載結束,開啟目標端復制應用進程(圖上的ChangeReplicat),開始實時同步應用。

3.實現方式

3.1下載

官網的下載地址:選擇適合自己oracle版本的ogg版本。https://www.oracle.com/middleware/technologies/goldengate-downloads.html

3.2當前版本信息

|服務器ip |系統 |oracle|goldengate|實例|用戶密碼|表空間|端|
|--|--|--|--|--|--|--|--|--|
| 192.168.66.2 | centos7.5 |11.2.0.4|19.1.0.0.4|orcl|Lczy_2022|ogg|源端|
| 192.168.66.3 | centos7.5 |11.2.0.4|19.1.0.0.4|orcl|Lczy_2022|ogg|目標端|

3.3安裝ogg

源端操作:

  1. 目錄創建
mkdir /home/goldengate
mkdir -p /home/oracle/product/ogg_src
chown -R oracle:oinstall /home/goldengate/
chown -R oracle:oinstall /home/oracle/product/ogg_src
  1. 文件解壓
unzip fbo_ggs_Linux_x64_Oracle_shiphome.zip -d /home/goldengate/
chown -R oracle:oinstall /home/goldengate/
  1. 環境變量
vim /home/oracle/.bash_profile
------------------------------
export OGG_HOME=/home/oracle/product/ogg_src
export PATH=$OGG_HOME:$PATH
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH
------------------------------
source /home/oracle/.bash_profile
  1. 安裝ogg-manager
cd /home/goldengate/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1
./runInstaller ## 也可以選擇靜默安裝
alias ggsci="rlwrap /home/oracle/product/ogg_src/ggsci"
##關閉終端再連接一次,出現此頁面說明安裝完成 --oracle執行 如下報錯:bash: rlwrap: command not found... 解決:重連ssh
[oracle@oracle-m ~]$ ggsci
·················
GGSCI (oracle-m) 1> view param mgr
PORT 7809
GGSCI (oracle-m) 2> info mgr
Manager is running (IP port TCP:oracle-m.7809, Process ID 4669).
  1. 創建用戶和分配權限
    還有其他的權限配置方式,詳見文末。
cd
mkdir -p oradata/orcl
sqlplus / as sysdba
create tablespace OGG logging datafile '/home/oracle/oradata/orcl/OGG.DBF' size 20m autoextend on uniform size 2m;
create user ogg identified by ogg default tablespace OGG temporary tablespace TEMP quota unlimited on OGG;

grant unlimited tablespace to ogg;
grant dba to ogg;
  1. 開啟數據庫附加日志
## oracle 11.2.0.4和oracle 12.1.0.2及之后的版本需要設置如下參數
SQL> alter system set enable_goldengate_replication=true scope=both;
##打開最小附加日志
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SQL> ALTER DATABASE FORCE LOGGING;
SQL> SELECT supplemental_log_data_min, force_logging FROM v$database;
SQL> ALTER SYSTEM SWITCH LOGFILE;
## 有操作如下:涉及重啟數據庫 !!! 慎重 !!! 操作
SQL> select log_mode, supplemental_log_data_min, force_logging from v$database;
LOG_MODE SUPPLEME FOR
------------ -------- ---
NOARCHIVELOG NO NO
###查看后發現沒有開啟歸檔模式,需要開啟
shutdown immediate ##--關閉數據庫
startup mount; ##--啟動mount模式
alter database archivelog; ## --啟用歸檔日志
alter database open; ##--打開數據庫
alter database force logging; ##--啟用強制日志
alter database add supplemental log data; ##--啟用附加日志
alter system switch logfile; ##--切換日志文件
# 源端需要添加 用戶級別的 或者 表級別 的附加
# 選擇其一
##用戶級別的附加
ggsci
dblogin userid ogg, password ogg
add schematrandata ogg
##表級別的附加
ggsci
dblogin userid ogg, password pwd
add trandata ogg.togg;

目標端:

  1. 目錄創建
mkdir /home/goldengate
mkdir -p /home/oracle/product/ogg_trg
chown -R oracle:oinstall /home/goldengate/
chown -R oracle:oinstall /home/oracle/product/ogg_trg
  1. 文件解壓
unzip fbo_ggs_Linux_x64_Oracle_shiphome.zip -d /home/goldengate/
chown -R oracle:oinstall /home/goldengate/
  1. 環境變量
vim /home/oracle/.bash_profile
------------------------------
export OGG_HOME=/home/oracle/product/ogg_trg
export PATH=$OGG_HOME:$PATH
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH
------------------------------
source /home/oracle/.bash_profile
  1. 安裝ogg-mamager
cd /home/goldengate/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1
./runInstaller ## 也可以選擇靜默安裝
alias ggsci="rlwrap /home/oracle/product/ogg_trg/ggsci"
[oracle@oracle-s ogg_trg]$ ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Oct 17 2019 23:13:12
Operating system character set identified as US-ASCII.

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

GGSCI (oracle-s) 1> info mgr

Manager is running (IP port TCP:oracle-s.7809, Process ID 25579).
  1. 創建用戶和分配權限
cd
mkdir -p oradata/orcl
sqlplus / as sysdba
create tablespace OGG logging datafile '/home/oracle/oradata/orcl/OGG.DBF' size 20m autoextend on uniform size 2m;
create user ogg identified by ogg default tablespace OGG temporary tablespace TEMP quota unlimited on OGG;
grant unlimited tablespace to ogg;
grant dba to ogg;

3.4配置ogg

  1. 執行配置腳本(源端+目標端)
sqlplus / as sysdba ##--使用sysdba用戶登錄
@marker_setup ## -- 輸入GoldenGate賬戶名ogg
@ddl_setup ## -- 輸入GoldenGate賬戶名ogg
@role_setup ## -- 輸入GoldenGate賬戶名ogg
grant ggs_ggsuser_role to ogg;
@ddl_enable
  1. Manager
    源端操作
ggsci
info mgr
edit param mgr

編輯內容如下

PORT 7839 ## 通信端口7839, 源端和目標端需要保持一致。
DYNAMICPORTLIST 7840-7939 ##動態端口列表的范圍從7840到7939。當制定端口被占用或者出現通信故障,管理進程將會從列表中選擇下一個端口嘗試連接,避免通信端口的單點故障。
AUTOSTART EXTRACT * ##當MGR進程啟動后啟動EXTRACT進程
AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 2 ##當EXTRACT進程中斷后嘗試自動重啟,每隔2分鍾嘗試啟動一次,嘗試5次。
PURGEOLDEXTRACTS /home/oracle/product/ogg_src/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 5 ##定期清理dirdat路徑下的本地隊列(local trail)。保留期限10天,過期后自動刪除。從而控制隊列文件的目錄不會增長過大。
LAGREPORTHOURS 1 ##每隔一小時檢查各進程延時情況,並記錄到goldengate report文件。
LAGINFOMINUTES 30 ##進程復制延時超過30分鍾,向日志文件記錄一條錯誤日志
LAGCRITICALMINUTES 45 ## 傳輸延時超過45分鍾將寫入警告日志

目標端操作

ggsci
info mgr
edit param mgr
##編輯如下內容
PORT 7839 ## 通信端口7839, 源端和目標端需要保持一致。
USERID ogg, PASSWORD ogg ## GoldenGate用戶登錄數據庫的用戶名和密碼,密碼未做加密處理。如果密碼需要加密使用:GGSCI (dbtrg) 1> encrypt password pwd ,ENCRYPTKEY default 可以得到加密后的密碼字符串,之后配置進程若使用加密過的密碼,需要帶參數(ENCRYPTKEY default)。例如:USERID ogg, PASSWORD xxx(加密過的密碼) ,ENCRYPTKEY default
DYNAMICPORTLIST 7840-7939 ## ##動態端口列表的范圍從7840到7939。當制定端口被占用或者出現通信故障,管理進程將會從列表中選擇下一個端口嘗試連接,避免通信端口的單點故障。
AUTOSTART REPLICAT * ##當MGR進程啟動后啟動REPLICAT進程
AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 2 ## 當REPLICAT進程中斷后嘗試自動重啟,每隔2分鍾嘗試啟動一次,嘗試5次。
PURGEOLDEXTRACTS /home/oracle/product/ogg_trg/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 10 ##定期清理dirdat路徑下的本地隊列(local trail)。保留期限10天,過期后自動刪除。從而控制隊列文件的目錄不會增長過大。
PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10 ##刪除DDL歷史表,最小保存7天,最大保存10天。
PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10 ## 刪除MARKER歷史表,最小保存7天,最大保存10天。
LAGREPORTHOURS 1 ##每隔一小時檢查各進程延時情況,並記錄到goldengate report文件。
LAGINFOMINUTES 30 ##進程復制延時超過30分鍾,向日志文件記錄一條錯誤日志
LAGCRITICALMINUTES 45 ##傳輸延時超過45分鍾將寫入警告日志

重啟兩端的mgr服務

ggsci
stop mgr
start mgr
info mgr
view param mgr
  1. 源端配置Extract

Extract 運行在源端或者根據系統和業務的需求可以同時運行在兩端,抽取捕獲系統變更統數據;它可以配置為
初始化數據加載(直接從數據源中加載靜態的數據)

在某個時間點后源端與服務端變更數據同步(從在線日志或歸檔日志抽取捕獲變更的數據),
它也可以在支持DDL變更的系統中抽取捕獲DDL;
當配置為數據同步時,extract進程抽取捕獲extract配置文件里配置的對象的任何DML和DDL(需要額外配置)的操作,extract進程記錄這些操作,直到用戶提交或回滾事務;
當收到回滾(rollback)時,extract撤銷這些記錄;
收到(commit)操作后,extract進程記錄保存這些操作到一個或多個trail文件里並以隊列的形式發送到目標端,以確保數據傳輸速度和數據的一致性。

ggsci
dblogin userid ogg, password ogg ##使用ogg用戶登錄GoldenGate
add extract ext1,tranlog,begin now ##創建主抽取進程
add exttrail /home/oracle/product/ogg_src/dirdat/sr, extract ext1 ##創建源端trail文件並指定路徑
edit param ext1
##-----------------
extract ext1
SETENV(ORACLE_SID="orcl") ##設置Oracle數據庫實例sid
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8) ##設置goldengate的字符集變量信息,此處值會覆蓋操作系統級別的變量。該值需要和數據庫字符集匹配一致。
userid ogg, password ogg
REPORTCOUNT EVERY 30 MINUTES, RATE ##每隔30分鍾報告一次從程序開始到現在的抽取進程或者復制進程的事物記錄數,並匯報進程的統計信息
DISCARDFILE /home/oracle/product/ogg_src/dirrpt/extsr.dsc, APPEND, MEGABYTES 1024 ##將執行失敗的記錄保存在discard file中,discard file文件記錄了GoldenGate進程錯誤、數據庫錯誤、GoldenGate操作等信息。該文件位於/home/oracle/product/ogg_src/dirrpt/extsr.dsc,大小為1024MB。 文件中已經包含記錄的話,再后面繼續追加,不刪除之前的記錄。
DISCARDROLLOVER AT 3:00 ## 為了防止discard file被寫滿,每天3:00做一次文件過期設定
EXTTRAIL /home/oracle/product/ogg_src/dirdat/sr ##隊列文件路徑, trail文件存放路徑。
DYNAMICRESOLUTION ## 有時候開啟OGG進程的時候較慢,可能是因為需要同步的表太多,OGG在開啟進程之前會將需要同步的表建立一個記錄並且存入到磁盤中,這樣就需要耗費大量的時間。使用該參數來解決此問題。
ddl include all ##配置DDL語句也會同步
DBOPTIONS ALLOWUNUSEDCOLUMN ## 用於阻止抽取進程抽取數據時由於表含有unused列而導致進程異常終止(abend)。使用該參數,抽取進程抽取到unused列時也會向日志文件記錄一條警告信息。
FETCHOPTIONS NOUSESNAPSHOT ## 默認值為 usesnapshot,表示利用數據庫閃回讀取數據。Nousesnapshot表示直接從原表讀取相關數據。
FETCHOPTIONS FETCHPKUPDATECOLS ##當使用了HANDLECOLLISIONS時,請使用該參數。復制進程出現丟失update記錄(missing update)並且更新的是主鍵,update將轉換成insert。由於插入的記錄可能不是完整的行,若要保證完整需要加入此參數
table ogg.*; ##需要復制的對象列表
##-----------------

配置投遞進程(Data Pump)

配置了Data Pump,extract進程抽取捕獲數據寫入到trail,Data pump讀取trail並且通過網絡發送trail到目標端trail,data pump 加強了源端和目標端抽取捕獲數據的可用性,
主要優點:
1.保護網絡傳輸失敗和目標端失敗;
2.可以實現復雜的數據過濾和轉換;
3.可以結合多個數據源到目標端;
4.可以同步一個源數據到多個目標端。

源端可以配置多個主抽取進程,也可以配置多個Data Pump進程,但必須為每個要同步的目標端配置一個Data Pump進程

add extract dpump1, exttrailsource /home/oracle/product/ogg_src/dirdat/sr
edit param dpump1

extract dpump1
userid ogg, password ogg
SETENV(ORACLE_SID="orcl")
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8)
RMTHOST 192.168.66.3, mgrport 7839, COMPRESS ## 目標端主機IP,管理進程端口號,投遞前壓縮隊列文件
PASSTHRU ##表示傳輸進程直接跟抽取進程交互,而不再和數據庫進行交互,減少數據庫資源的利用。
ddl include all
RMTTRAIL /home/oracle/product/ogg_trg/dirdat/tr ##目標端保存隊列文件的目錄
DYNAMICRESOLUTION ##動態解析表名
table ogg.*;
##指定Data Pump進程發送trail文件到目標端的位置(目標端trail文件添加到隊列中)
add rmttrail /home/oracle/product/ogg_trg/dirdat/tr, extract dpump1
  1. 目標端配置Replicat

Checkpoint 存儲從文件讀取和寫入的檢測點位置,用於還原和恢復數據,Checkpoint確保發生變化並提交 (commit) 的數據被extract抽取捕獲和被replicat進程應用到目標端;
保證在系統、網絡或者GoldenGate需要重啟進程時發生的錯誤不會導致數據丟失;在復雜的同步配置中checkpoints啟用多個extract和replicat進程從同一個trail集中讀取數據。

ggsci
dblogin userid ogg, password ogg
add checkpointtable ogg.checkpoints
edit param ./GLOBALS
#------------------
GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoints
#------------------

##創建replicat進程
add replicat rep1, exttrail /home/oracle/product/ogg_trg/dirdat/tr, checkpointtable ogg.checkpoints
edit param rep1
#------------------
REPLICAT rep1
SETENV(ORACLE_SID="orcl")
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8)
USERID ogg, PASSWORD ogg
REPORT AT 06:00 ##每天06:00定期生成一個report文件
REPORTCOUNT EVERY 30 MINUTES, RATE ##每隔30分鍾報告一次從程序開始到現在的抽取進程或者復制進程的事物記錄數,並匯報進程的統計信息
REPORTROLLOVER AT 02:00 ##為了防止report file被寫滿,每天2:00做一次文件過期設定
REPERROR DEFAULT, ABEND ## 除了特殊指定的REPERROR語句,報告所有復制期間出現的錯誤,回滾非正常中斷的事物和進程。遇到不能處理的錯誤就自動abend,啟動需要人工干預處理
ALLOWNOOPUPDATES ##當源表有排除列情況或者有目標表不存在的列時,當更新這列goldengate默認報錯。應用該參數后,即可讓goldengate生成一條警告信息而不是報錯。
ASSUMETARGETDEFS ##使用ASSUMETARGETDEFS參數時,用MAP語句中指定的生產庫源表和災備端目標表具有相同的列結構。它指示的Oracle GoldenGate不在生產端查找源表的結構定義。
HANDLECOLLISIONS ##用於goldengate自動過濾不能出來的沖突記錄,為了嚴格保證數據一致性
DISCARDFILE /home/oracle/product/ogg_trg/dirrpt/repsa.dsc, APPEND, MEGABYTES 1024 ##將執行失敗的記錄保存在discard file中,discard file文件記錄了GoldenGate進程錯誤、數據庫錯誤、GoldenGate操作等信息。該文件位於./dirrpt/repsa.dsc,大小為1024MB。 文件中已經包含記錄的話,再后面繼續追加,不刪除之前的記錄。
DISCARDROLLOVER AT 02:00 ##為了防止discard file被寫滿,每天2:00做一次文件過期設定
ddl include all ##設置DDL語句也會同步
ddlerror default ignore retryop ##開啟DDL復制后,目標端Replicat進程參數文件中必須配置忽略或者過濾DDLERROR的參數
MAP ogg.*, target ogg.*; ##對應需要復制的對象,默認一一對應傳輸進程
#------------------
  1. 初始化

同步歷史數據,OGG只能同步增量

當前場景,先啟動源端服務,再初始化數據,最后啟動目標端服務

ggsci
start mgr
start ext1
start dpump1
info all
## 報錯查看日志/home/oracle/product/ogg_src/ggserr.log
##使用數據泵之前,需要創建一個存放文件的目錄。 這個目錄要寫入Oracle的數據字典中才能識別。
mkdir /home/oracle/backup
SQL> select * from dba_directories; ##查看
SQL> drop directory backup; ## 刪除
SQL> create directory backup as '/home/oracle/backup'; ##創建
##我這里是使用sys用戶來進行操作的。 如果是其他用戶,那么就需要對這個用戶進行賦權。
grant create any directory to system;
select * from dba_sys_privs where grantee='SYSTEM';
##如果是其他用戶使用sys創建的目錄,也需要進行賦權,如:
SQL> grant read,write on directory backup to SYSTEM;
[oracle@oracle-m dpdump]$ sqlplus / as sysdba
SQL> Select current_scn from v$database; ##scn
CURRENT_SCN
-----------
2079927
##開始導出數據--參考
expdp \" / as sysdba \" directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2;## 不指定job的導出全庫
expdp \" / as sysdba \" directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob;## 指定job的導出全庫
expdp \" / as sysdba \" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=ogg; ##導出表空間
expdp \" / as sysdba \" directory=backup dumpfile=user.dmp logfile=user.log schemas=ogg; ##導出用戶
expdp \" / as sysdba \" directory=backup dumpfile=table.dmp logfile=table.log tables=ogg.togg,ogg.GGS_SETUP; ## 導出表,這里必須是同一個schema下的表.或者這樣 expdp ogg/ogg directory=backup dumpfile=table.dmp logfile=table.log tables=togg, GGS_SETUP;
expdp system/Lczy_2022 directory=backup dumpfile=tablespace.dmp tablespaces=ywtest FLASHBACK_SCN=2079927; ## 按照scn導出
##開始導入數據--參考
impdp \" / as sysdba \" directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob table_exists_action=replace;## 導入 全庫

impdp ogg/ogg directory=backup dumpfile=table.dmp logfile=table.log tables=ogg.togg,ogg.GGS_SETUP;## 導入 表

impdp \" / as sysdba \" directory=backup dumpfile=user.dmp logfile=user.log schemas=ogg,ywtest table_exists_action=replace; ## 導入 用戶

impdp \" / as sysdba \" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=ogg,ywtest table_exists_action=replace; ## 導入表空間
##跨用戶導入
expdp \" / as sysdba \" directory=backup dumpfile=user.dmp logfile=user.log schemas=ogg;## ogg用戶導出
impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log remap_schema=ogg:ywtest;## 導入到ywtest用戶

效果如下
```bash
[oracle@oracle-m backup]$ expdp \" / as sysdba \" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=ogg;

Export: Release 11.2.0.4.0 - Production on 星期五 3月 11 12:08:17 2022

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
自動啟用 FLASHBACK 以保持數據庫完整性。
啟動 "SYS"."SYS_EXPORT_TABLESPACE_01": "/******** AS SYSDBA" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=ogg
正在使用 BLOCKS 方法進行估計...
處理對象類型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的總估計: 10 MB
處理對象類型 TABLE_EXPORT/TABLE/TABLE
處理對象類型 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
處理對象類型 TABLE_EXPORT/TABLE/INDEX/INDEX
處理對象類型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
處理對象類型 TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
處理對象類型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . 導出了 "OGG"."GGS_DDL_HIST" 884.7 KB 446 行
. . 導出了 "OGG"."GGS_DDL_HIST_ALT" 7.007 KB 37 行
. . 導出了 "OGG"."GGS_MARKER" 313.7 KB 276 行
. . 導出了 "OGG"."GGS_SETUP" 5.625 KB 8 行
. . 導出了 "OGG"."TOGG" 10.39 KB 107 行
. . 導出了 "OGG"."GGS_DDL_COLUMNS" 0 KB 0 行
. . 導出了 "OGG"."GGS_DDL_LOG_GROUPS" 0 KB 0 行
. . 導出了 "OGG"."GGS_DDL_OBJECTS" 0 KB 0 行
. . 導出了 "OGG"."GGS_DDL_PARTITIONS" 0 KB 0 行
. . 導出了 "OGG"."GGS_DDL_PRIMARY_KEYS" 0 KB 0 行
. . 導出了 "OGG"."GGS_DDL_RULES" 0 KB 0 行
. . 導出了 "OGG"."GGS_DDL_RULES_LOG" 0 KB 0 行
已成功加載/卸載了主表 "SYS"."SYS_EXPORT_TABLESPACE_01"
******************************************************************************
SYS.SYS_EXPORT_TABLESPACE_01 的轉儲文件集為:
/home/oracle/backup/tbs.dmp
作業 "SYS"."SYS_EXPORT_TABLESPACE_01" 已於 星期五 3月 11 12:08:44 2022 elapsed 0 00:00:23 成功完成

實際操作--

SQL> Select current_scn from v$database;

CURRENT_SCN
-----------
2105420
##exit 退出sql
[oracle@oracle-m backup]$ expdp system/Lczy_2022 directory=backup dumpfile=tablespace.dmp tablespaces=ywtest FLASHBACK_SCN=2105420;

Export: Release 11.2.0.4.0 - Production on 星期五 3月 11 14:57:29 2022

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
啟動 "SYSTEM"."SYS_EXPORT_TABLESPACE_01": system/******** directory=backup dumpfile=tablespace.dmp tablespaces=ywtest FLASHBACK_SCN=2105420
正在使用 BLOCKS 方法進行估計...
處理對象類型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的總估計: 64 KB
處理對象類型 TABLE_EXPORT/TABLE/TABLE
. . 導出了 "YWTEST"."STUDENT" 13.75 KB 6 行
已成功加載/卸載了主表 "SYSTEM"."SYS_EXPORT_TABLESPACE_01"
******************************************************************************
SYSTEM.SYS_EXPORT_TABLESPACE_01 的轉儲文件集為:
/home/oracle/backup/tablespace.dmp
作業 "SYSTEM"."SYS_EXPORT_TABLESPACE_01" 已於 星期五 3月 11 14:57:33 2022 elapsed 0 00:00:03 成功完成

##拷貝文件到目標庫,導入數據,查看數據,啟動rep1,再次查看數據
[oracle@oracle-m backup]$ scp -rp tablespace.dmp oracle@192.168.66.3:/home/oracle/backup/
oracle@192.168.66.3's password: ## oracle
tablespace.dmp 100% 116KB 5.1MB/s 00:00
[oracle@oracle-s ~]$ ll backup/ ##目標庫 注意權限用戶組問題
total 116
-rw-r-----. 1 oracle dba 118784 Mar 11 14:57 tablespace.dmp

####目標端配置

SQL> drop user ywtest cascade;
SQL> DROP TABLESPACE ywtest INCLUDING CONTENTS AND DATAFILES;
SQL> create tablespace ywtest datafile '/app/oracle/ywtest.dbf' size 50m autoextend on next 5m ;
SQL> create user ywtest identified by ywtest default tablespace ywtest;
SQL> grant dba to ywtest;
SQL> grant read,write on directory backup to ywtest;
[oracle@oracle-s ~]$ impdp \" / as sysdba \" directory=backup dumpfile=tablespace.dmp logfile=tablespace.log tablespaces=ywtest table_exists_action=replace;
##查看數據一致

這里新增一下:添加額外的表進行同步的配置

ggsci
dblogin userid ogg, password ogg
add schematrandata ywtest
##配置ext1、dpump1、rep1中新增所需要的用戶,以次類推,需要多個用戶同步就增加多句話
edit param ext1 ##--源端
table ywtest.*;

edit param dpump1 ##--源端
table ywtest.*;

edit param rep1 ##--目標端
MAP ywtest.*, target ywtest.*;
  1. 啟動
##源端重啟ext dpump
ggsci
info all
stop ext1
stop dpump1
start dpump1
start ext1
##目標端
start rep1, aftercsn 2105420

4.測試同步

再sqlplus中,提交事務 commit
或者直接可視化工具中做修改,查看同步情況。

5.配置

  1. 數據庫創建ogg用戶權限
#創建數據庫ogg用戶
SQL>CREATE USER ogg IDENTIFIED BY ogg DEFAULT TABLESPACE USERS ;
#授權ogg用戶,如果對用戶權限要求不嚴格可以直接授予dba權限,否則授予如下權限
#源端:
GRANT CONNECT TO goldengate;
GRANT CREATE SESSION TO goldengate;
GRANT ALTER SESSION TO goldengate;
GRANT RESOURCE TO goldengate;
GRANT SELECT ANY DICTIONARY TO goldengate;
GRANT SELECT ANY TABLE TO goldengate;
GRANT FLASHBACK ANY TABLE TO goldengate;
GRANT ALTER ANY TABLE TO goldengate;

#目標端:
GRANT ALTER SESSION TO goldengate;
GRANT CREATE SESSION TO goldengate;
GRANT CONNECT TO goldengate;
GRANT RESOURCE TO goldengate;
GRANT SELECT ANY DICTIONARY TO goldengate;
GRANT SELECT ANY TABLE TO goldengate;
GRANT FLASHBACK ANY TABLE TO goldengate;
GRANT INSERT ANY TABLE TO goldengate;
GRANT UPDATE ANY TABLE TO goldengate;
GRANT DELETE ANY TABLE TO goldengate;

6.其它場景

最后還有一些場景會遇到。

沒有數據需要初始化

  • 這種情況的啟動順序:
  • 保持mgr正常運行
  • 啟動目標端replicat進程
  • 啟動源端啟動ext dpump

新增表、表空間、用戶需要同步

關於附加日志

7.開機啟動

目標端

cd /home/oracle/product/ogg_trg ##進入到goldengate目標端根目錄中 oracle用戶執行
touch info.txt ##創建文件 oracle用戶執行
vim info.txt ##編輯此文件 oracle用戶執行
#-----------
sh date
start mgr
#-----------

chmod +x info.txt ##增加可執行權限 oracle用戶執行
touch startmgr.sh ##創建文件 oracle用戶執行
vim startmgr.sh ##編輯此文件 oracle用戶執行
#-----------
/home/oracle/product/ogg_trg/ggsci paramfile /home/oracle/product/ogg_trg/info.txt >> /home/oracle/product/ogg_trg/ggstartoutput.log
#-----------
chmod +x startmgr.sh ##增加可執行權限 oracle用戶執行
####切換到root命令行
vim /etc/rc.local
su - oracle -c "/home/oracle/product/ogg_trg/startmgr.sh"
chmod +x /etc/rc.local

效果展示

[oracle@oracle-s ogg_trg]$ touch startmgr.sh
[oracle@oracle-s ogg_trg]$ vim startmgr.sh
[oracle@oracle-s ogg_trg]$ chmod +x startmgr.sh
[oracle@oracle-s ogg_trg]$ /home/oracle/product/ogg_trg/startmgr.sh
[oracle@oracle-s ogg_trg]$ cat ggstartoutput.log
Oracle GoldenGate Command Interpreter for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Oct 17 2019 23:13:12
Operating system character set identified as US-ASCII.
Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
GGSCI (oracle-s) 1> sh date
Mon Mar 7 18:16:47 CST 2022
GGSCI (oracle-s) 2> start mgr
MGR is already running.
GGSCI (oracle-s) 3>

源端

cd /home/oracle/product/ogg_src/
vim info.txt
#-----------
sh date
start mgr
#-----------
chmod +x info.txt
touch startmgr.sh
vim startmgr.sh
#-----------
/home/oracle/product/ogg_src/ggsci paramfile /home/oracle/product/ogg_src/info.txt >> /home/oracle/product/ogg_src/ggstartoutput.log
#-----------
chmod +x startmgr.sh
###切換到root命令行
vim /etc/rc.local
su - oracle -c "/home/oracle/product/ogg_src/startmgr.sh"
chmod +x /etc/rc.local

——————————————END————————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM