12c多租戶架構下部署GoldenGate 12c

hooca發表於2016-07-06

OS:Oracle Linux 6.6 x64和Windows Server 2008 R2 x64
DB:Oracle 12.1.2.0
GoldenGate:12.2.0.1.1

注意:先參考 https://blog.csdn.net/rgb_rgb/article/details/77346017


不然會掉坑!!


環境簡單描述:
源端和目的端都是CDB/PDB架構,源端主庫prod,目的端主庫east;兩端都含有名為pdb1的PDB。源端pdb1中含有名為sh的schema。

一、安裝

1.1 Linux安裝
環境變數:

點選( 此處 )摺疊或開啟

  1. export GGS_HOME = / u01/ggs_1

LD_LIBRARY_PATH和PATH都要加上$GGS_HOME。如果使用的是oracle使用者以外的使用者,需加上ORACLE_HOME和ORACLE_SID變數。

1.2 Windows安裝
在系統變數中加上ORACLE_HOME和ORACLE_SID變數。

1.3 安裝完成後
在命令列中進入$GGS_HOME目錄,執行ggsci,建立相關subdirs

點選( 此處 )摺疊或開啟

  1. > create subdirs

二、資料庫準備

源端和目的端:
先在mount下執行:

點選( 此處 )摺疊或開啟

  1. ALTER DATABASE ADD SUPPLEMENTAL LOG DATA ;
  2. ALTER DATABASE FORCE LOGGING ;
  3. alter database flashback on ;
  4. SELECT supplemental_log_data_min , force_logging , flashback_on FROM v$ database ;
  5. SUPPLEME FORCE_LOGGING                                                       FLASHBACK_ON
  6. -------- --------------------------------------- ------------------
  7. YES      YES                                     YES

開啟資料庫:

點選( 此處 )摺疊或開啟

  1. alter database open ;
  2. ALTER SYSTEM SWITCH LOGFILE ;

修改引數:

點選( 此處 )摺疊或開啟

  1. alter system set ENABLE_GOLDENGATE_REPLICATION = TRUE scope = both ;

  2. / / UNDO引數修改到合適大小
  3. show parameter undo

  4. NAME                                  TYPE          VALUE
  5. ------------------------------------ ----------- ------------------------------
  6. temp_undo_enabled                                        boolean      FALSE
  7. undo_management                                              string          AUTO
  8. undo_retention                          integer         86400
  9. undo_tablespace                                          string          UNDOTBS1

使用者與許可權:
在源端只需要有一個Extract程式來捕獲所有的PDB資料;而在目的端需要為每個PDB準備一個Replicat程式。因此在源端只需要在CDB建一個針對所有容器的DBA賬戶,目的端則在每個PDB建一個DBA賬戶。

點選( 此處 )摺疊或開啟

  1. / / 源端
  2. create user c##ggadm identified by ggadm ;
  3. grant dba to c##ggadm container = all ;

  4. / / 目的端,分別connect到每個PDB
  5. create user ggadm identified by ggadm ;
  6. grant dba to ggadm ;

  7. / / 以下兩條摘自文件,但不完全包含所需的許可權,比如CREATE SESSION就沒有
  8. exec dbms_goldengate_auth . grant_admin_privilege ( 'c##ggadm' ) ;
  9. exec dbms_goldengate_auth . grant_admin_privilege ( 'c##ggadm' , container = > 'all' ) ;

三、使用者認證

為了不在引數檔案中顯示密碼,可以配置Credential Store。首先為其建立目錄(比如/u01/ggs_1/credentialstore),然後進入ggsci:

點選( 此處 )摺疊或開啟

  1. edit params . / GLOBALS
  2. / / 編輯以下文字
  3. CREDENTIALSTORELOCATION / u01 / ggs_1 / credentialstore

退出ggsci,再重新進入,使以上引數生效,繼續。

點選( 此處 )摺疊或開啟

  1. ADD CREDENTIALSTORE

  2. / / 源端為CDB和每個PDB都建立一個ALIAS
  3. ALTER CREDENTIALSTORE ADD USER c##ggadm PASSWORD ggadm ALIAS ggadm DOMAIN ext
  4. ALTER CREDENTIALSTORE ADD USER c##ggadm @ pdb1 PASSWORD ggadm ALIAS ggadm1 DOMAIN ext

  5. / / 目的端為每個PDB建立一個ALIAS
  6. ALTER CREDENTIALSTORE ADD USER ggadm @ pdb1 PASSWORD ggadm ALIAS ggadm1 DOMAIN rpl
  7. //檢視配置
  8. info credentialstore
  9. //刪除使用者
  10. ALTER CREDENTIALSTORE DELETE USER ...

四、引數檔案配置

4.1 源端Manager

點選( 此處 )摺疊或開啟

  1. view params mgr

  2. PORT 7809
  3. DYNAMICPORTLIST 7810 - 7820 , 7830
  4. AUTOSTART ER *
  5. AUTORESTART ER * , RETRIES 4 , WAITMINUTES 4
  6. STARTUPVALIDATIONDELAY 5
  7. USERIDALIAS ggadm DOMAIN ext
  8. PURGEOLDEXTRACTS /u01/ggs_1/dirdat/ lt * , USECHECKPOINTS , MINKEEPHOURS 2

啟動Manager,start mgr

4.2 源端Extract程式

點選( 此處 )摺疊或開啟

  1. view params ext

  2. EXTRACT ext
  3. USERIDALIAS ggadm DOMAIN ext
  4. LOGALLSUPCOLS
  5. UPDATERECORDFORMAT COMPACT
  6. EXTTRAIL /u01/ggs_1/dirdat/ lt
  7. SOURCECATALOG pdb1
  8. TABLE sh . *;

4.3 源端Pump程式

點選( 此處 )摺疊或開啟

  1. view params ext_pump

  2. EXTRACT ext_pump
  3. USERIDALIAS ggadm DOMAIN ext
  4. RMTHOST WINEAST , MGRPORT 7809
  5. RMTTRAIL E : \ ggs_1\dirdat\rt
  6. SOURCECATALOG pdb1
  7. TABLE sh . *;

以上示例中,WINEAST是目的端主機名,在本地的/etc/hosts檔案中需事先寫入; E : \ ggs_1\dirdat\rt 是目的端的路徑。

4.4 目的端Manager程式

點選( 此處 )摺疊或開啟

  1. view params mgr

  2. PORT 7809
  3. DYNAMICPORTLIST 7810 - 7820 , 7830
  4. STARTUPVALIDATIONDELAY 5
  5. USERIDALIAS ggadm1 DOMAIN rpl

目的端的Manager程式,可以用其中一個PDB的user來作為USERIDALIAS,只要許可權足夠即可。
然後即可啟動Manager程式。

4.5 目的端Replicat程式

點選( 此處 )摺疊或開啟

  1. view params repl1
  2. REPLICAT repl1
  3. DBOPTIONS INTEGRATEDPARAMS ( parallelism 6 )
  4. USERIDALIAS ggadm1 DOMAIN rpl
  5. ASSUMETARGETDEFS
  6. SOURCECATALOG pdb1
  7. MAP sh . * , TARGET sh2 . *;

此時可以啟動兩端的manager程式,但目的端的replicat程式先不要啟動。

五、建立程式組

5.1 源端操作
5.1.1 源端分別通過先前配置的ALIAS登入到 每個PDB ,新增每個schema的補充日誌:

點選( 此處 )摺疊或開啟

  1. DBLOGIN USERIDALIAS ggadm1 DOMAIN ext
  2. add schematrandata SH allcols

  3. 2016 - 07 - 05 17 : 50 : 48  INFO    OGG - 01788  SCHEMATRANDATA has been added on schema SH .

  4. 2016 - 07 - 05 17 : 50 : 49  INFO    OGG - 01976  SCHEMATRANDATA for scheduling columns has been added on schema SH .

  5. 2016 - 07 - 05 17 : 50 : 49  INFO    OGG - 01977  SCHEMATRANDATA for all columns has been added on schema SH .

5.1.2 註冊Extract到每個PDB

登入到CDB

點選( 此處 )摺疊或開啟

  1. DBLOGIN USERIDALIAS ggadm DOMAIN ext
  2. Successfully logged into database CDB$ROOT .

  3. REGISTER EXTRACT ext DATABASE CONTAINER ( pdb1,pdb2 )
  4. 2016 - 06 - 21 18 : 48 : 39  INFO    OGG - 02003  Extract SHGRP successfully registered with database at SCN 1905154 .

PDB需是已經存在,註冊後Extract程式只會捕獲列表中的PDB資料。如果以後又新增或刪除了PDB,可以用命令REGISTER EXTRACT {ADD | DROP} CONTAINER。。。

5.1.3 新增Extract程式和本地Trail
登入到CDB

點選( 此處 )摺疊或開啟

  1. DBLOGIN USERIDALIAS ggadm DOMAIN ext

  2. > ADD EXTRACT ext , INTEGRATED TRANLOG , BEGIN NOW
  3. EXTRACT ( Integrated ) added .

  4. > ADD EXTTRAIL /u01/ggs_1 / dirdat/ lt , EXTRACT ext
  5. EXTTRAIL added .

5.1.4 新增Pump程式和遠端Trail

點選( 此處 )摺疊或開啟

  1. > ADD EXTRACT ext_pump , EXTTRAILSOURCE /u01/ggs_1 / dirdat/ lt
  2. EXTRACT added .

  3. # add remote trail(source)
  4. > ADD RMTTRAIL E : \ ggs_1\dirdat\rt , EXTRACT ext_pump
  5. RMTTRAIL added .

5.2 目的端
5.2.1 新增Replicat程式

點選( 此處 )摺疊或開啟

  1. DBLOGIN USERIDALIAS ggadm1 DOMAIN rpl

  2. > ADD REPLICAT repl1 , INTEGRATED , EXTTRAIL E : \ ggs_1\dirdat\rt
  3. REPLICAT ( Integrated ) added .

6. 同步初始化
有條件的話可以在停止源端的情況下實現同步,這個最簡單。如果不能停止源端,可按如下方式實現初始化同步。

6.1 準備Directory
兩端各自在PDB中建立Directory,並在檔案系統確認準備就緒:

點選( 此處 )摺疊或開啟

  1. create directory dumpdir as '/u01/pump' ;

6.2 源端確認當前SCN

點選( 此處 )摺疊或開啟

  1. select current_scn from v$ database ;
  2. CURRENT_SCN
  3. -----------
  4.     1816569

6.3 源端PDB匯出schema

點選( 此處 )摺疊或開啟

  1. expdp system/oracle@pdb1 directory = dumpdir SCHEMAS = sh parallel = 2 dumpfile = sh_%u . dmp flashback_scn = 1816569

將匯出檔案傳送到目的端的Directory對應路徑下。

6.4 目的端PDB匯入schema
這裡需要先行在PDB中建立需要的表空間,否則匯入會失敗。使用者可以不用先行建立,匯入時會自動建立,但事後要grant相關許可權。
另外這裡使用了map。

點選( 此處 )摺疊或開啟

  1. impdp system/oracle@pdb1 directory = dumpdir REMAP_SCHEMA = sh : sh2 dumpfile = sh_01 . dmp , sh_02 . dmp logfile = sh_imp . log

6.5 鍵和約束

確保schema中的約束(constraint)處於Validated的狀態,可以通過以下查詢確認。

點選( 此處 )摺疊或開啟

  1. select CONSTRAINT_NAME , TABLE_NAME , VALIDATED from user_constraints ;

根據MOS ID 2048907.1,如果不是VALIDATED,當發生update語句時,將導致類似如下錯誤,導致Replicat程式中止:

點選( 此處 )摺疊或開啟

  1. ERROR OGG - 01169 Encountered an update where all key columns for target table ODSMGR . YFS_INVENTORY_SUPPLY are not present .

如果發現不是VALIDATED,按以下方式修改:

點選( 此處 )摺疊或開啟

  1. ALTER TABLE dept MODIFY CONSTRAINT dname_key VALIDATE ;

6.6 從指定SCN開始Replicat

點選( 此處 )摺疊或開啟

  1. start replicat repl1 , aftercsn 1816569

以上方法,可參考MOS ID:1276058.1 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22621861/viewspace-2121593/,如需轉載,請註明出處,否則將追究法律責任。

相關文章