標籤:goldengate ddl 支援
在http://lqding.blog.51cto.com/9123978/1695162 文章中我們實現了表的DML操作同步。
我們做如下測試
在源端執行表的truncate
SQL> truncate table tcustmer;Table truncated.
在目的端,查看錶資料
SQL> select count(*) from tcustmer; COUNT(*)---------- 2
資料並沒有同步
我們如何讓Goldengate實現DDL操作的同步呢?
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/73/47/wKiom1X5El_gBw_RAAHAw9lr7eI581.jpg" title="ogg07.PNG" alt="wKiom1X5El_gBw_RAAHAw9lr7eI581.jpg" />
要想支援DDL同步,需要在來源資料庫上做些設定,使得可以跟蹤DDL操作。包括如下內容Trigger、marker和history table,一個使用者角色和其他各式各樣的資料庫物件。
首先要配置GLOBALS參數,告訴gg使用那個schema來儲存DDL操作。
GGSCI (localhost.localdomain) 19> edit params ./GLOBALS-- GoldenGate GLOBALS parameter file--GGSCHEMA GGDDL
2. 使用sqlplus 建立ggddl使用者,並安裝ddl支援
SQL> conn / as sysdbaConnected.SQL> create user ggddl identified by ggddl ;User created.SQL> grant connect,resource to ggddl;Grant succeeded.
關閉資料資源回收筒功能
SQL> ALTER SYSTEM SET RECYCLEBIN = OFF scope=spfile;System altered.SQL> startup forceORACLE instance started.Total System Global Area 835104768 bytesFixed Size 2217952 bytesVariable Size 574621728 bytesDatabase Buffers 255852544 bytesRedo Buffers 2412544 bytesDatabase mounted.Database opened.
運行marker_setup.sql (ogg的安裝目錄,進入sqlplus)
[[email protected] ogg]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Fri Sep 11 19:58:40 2015Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> @marker_setup.sqlMarker setup scriptYou will be prompted for the name of a schema for the Oracle GoldenGate database objects.NOTE: The schema must be created prior to running this script.NOTE: Stop all DDL replication before starting this installation.Enter Oracle GoldenGate schema name:GGDDLMarker setup table script complete, running verification script...Please enter the name of a schema for the GoldenGate database objects:Setting schema name to GGDDLMARKER TABLE-------------------------------OKMARKER SEQUENCE-------------------------------OKScript complete.
在彈出對話方塊輸入GGSCHEMA的名稱
運行ddl_setup.sql
SQL> @ddl_setup.sql
運行role_setup.sql
SQL> @role_setup.sqlGGS Role setup scriptThis script will drop and recreate the role GGS_GGSUSER_ROLETo use a different role name, quit this script and then edit the params.sql script to change the gg_role parameter to the preferred name. (Do not run the script.)You will be prompted for the name of a schema for the GoldenGate database objects.NOTE: The schema must be created prior to running this script.NOTE: Stop all DDL replication before starting this installation.Enter GoldenGate schema name:ggddlWrote file role_setup_set.txtPL/SQL procedure successfully completed.Role setup script completeGrant this role to each user assigned to the Extract, GGSCI, and Manager processes, by using the following SQL command:GRANT GGS_GGSUSER_ROLE TO <loggedUser>where <loggedUser> is the user assigned to the GoldenGate processes.
建立好角色後,並不是要把這個角色賦予ggddl使用者,而是要將該角色賦予Extract,Replicat等使用的schema 。
我們之前配置的是system使用者
SQL> GRANT GGS_GGSUSER_ROLE TO system;Grant succeeded.
啟用ddl,其實就是使trigger enable
SQL> @ddl_enable.sqlTrigger altered.
關閉Manager,Extract,Replicat
源端
GGSCI (localhost.localdomain) 1> stop Extract eorakkGGSCI (localhost.localdomain) 5> stop mgr !
目的端
GGSCI (localhost.localdomain) 1> stop replicat rorakkSending STOP request to REPLICAT RORAKK ...Request processed.GGSCI (localhost.localdomain) 2> stop manager
編輯Extract參數
GGSCI (localhost.localdomain) 5> edit params eorakk---- Change Capture parameter file to capture-- TCUSTMER and TCUSTORD Changes--EXTRACT EORAKKUSERID system, PASSWORD oracleRMTHOST 192.168.199.104, MGRPORT 7809EXTTRAIL ./dirdat/KKDDL INCLUDE ALLTABLE SCOTT.TCUSTMER;TABLE SCOTT.TCUSTORD;
在原有基礎上添加一行DDL INCLUDE ALL
編輯Replicat參數
GGSCI (localhost.localdomain) 4> edit params rorakk---- Change Delivery parameter file to apply-- TCUSTMER and TCUSTORD Changes--REPLICAT RORAKKUSERID system, PASSWORD oracleHANDLECOLLISIONSASSUMETARGETDEFSDISCARDFILE ./dirrpt/RORAKK.DSC, PURGEDDL INCLUDE MAPPEDMAP scott.tcustmer, TARGET scott.tcustmer;MAP scott.tcustord, TARGET scott.tcustord;
在原有基礎上添加一行DDL INCLUDE MAPPED
啟動Manager、Extract、Replicat
源端
GGSCI (localhost.localdomain) 6> start managerManager started.GGSCI (localhost.localdomain) 7> start extract eorakkSending START request to MANAGER ...EXTRACT EORAKK starting
目的端
GGSCI (localhost.localdomain) 5> start mgrManager started.GGSCI (localhost.localdomain) 16> start replicat rorakkSending START request to MANAGER ...REPLICAT RORAKK starting
驗證資料
源端
SQL> truncate table tcustmer;Table truncated.SQL> desc tcustmer Name Null? Type ----------------------------------------- -------- ---------------------------- CUST_CODE NOT NULL VARCHAR2(4) NAME VARCHAR2(30) CITY VARCHAR2(20) STATE CHAR(2)SQL> alter table tcustmer add state_desc varchar2(30);Table altered.
目的端
SQL> select * from tcustmer;no rows selectedSQL> desc tcustmer Name Null? Type ----------------------------------------- -------- ---------------------------- CUST_CODE NOT NULL VARCHAR2(4) NAME VARCHAR2(30) CITY VARCHAR2(20) STATE CHAR(2) STATE_DESC VARCHAR2(30)
資料已同步。
本文出自 “叮咚” 部落格,請務必保留此出處http://lqding.blog.51cto.com/9123978/1695389
Goldengate 實現Oracle for Oracle 單向DDL操作同步