利用OGG實現Oracle數據庫雙向同步

本文轉自:https://www.cnblogs.com/aegis1019/p/9050401.html

環境:

  • 服務器一(RAC實例一的任意一個節點)

IP地址:              10.19.100.91

Oracle數據庫版本     11.2.0.4

Oracle數據庫實例名   aegisdb

Oracle數據庫端口     1521

待同步數據庫schema   aegis

OGG端口               7809

  • 服務器二(RAC實例二的任意一個節點)

IP地址:              10.19.100.92

Oracle數據庫版本     11.2.0.4

Oracle數據庫實例名   aegisdb

Oracle數據庫端口     1521

待同步數據庫schema   aegis

OGG端口               7809

  • Oracle GoldenGate版本

12.2.0.1

  • 數據庫連接串(tnsname.ora文件,2臺服務器配置上相同):
AEGISDB91 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.19.100.91)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = aegisdb)
    )
  )

AEGISDB92 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.19.100.92)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = aegisdb)
    )
  )

在兩個服務器的Oracle數據庫上各創建表用於測試同步

$ sqlplus aegis/123456


SQL*Plus: Release 11.2.0.4.0 Production on Sat Mar 5 21:26:36 2016
Copyright (c) 1982, 2013, Oracle.  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


SQL> create table t1(col1 number);

Table created.

SQL> create table t2(col1 varchar2(10),col2 number);

Table created.

 

一、 安裝前準備

此步驟需要在兩臺服務器上都執行

  1. 配置環境變量
[oracle@localhost ~]$ more /home/oracle/.bash_profile

# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=aegisdb
export OGG_HOME=/u01/app/ogg

export PATH=$OGG_HOME:$ORACLE_HOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME

二、 安裝Oracle GoldenGate

此步驟需要在兩臺服務器上都執行

這裏使用SecureCRT + Xmanager的圖形界面來安裝Oracle GoldenGate。

#創建Oracle GoldenGate軟件目錄
mkdir /u01/app/ogg
#準備安裝文件
$ cd /opt/Oracle/

$ unzip fbo_ggs_Linux_x64_shiphome.zip

$ cd fbo_ggs_Linux_x64_shiphome/Disk1/

#開始安裝
$ ./runInstaller

 

根據數據庫版本選擇GoldenGate版本,點擊next

 

選擇軟件安裝路徑。Manager進程可啓可不啓,就算這裏不啓動之後也要手工啓動,所以這裏可以選start Manager。點擊next

 

確認安裝信息,點擊Install

 

等待安裝完成

 

點擊Close完成安裝

 

三、 對數據庫進行必要的配置

此步驟需要在兩臺服務器上都執行

3.1 修改數據庫參數

ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;

3.2 啓動歸檔模式

SQL> shutdown immediate

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area  521936896 bytes
Fixed Size                  2254824 bytes
Variable Size             209717272 bytes
Database Buffers          306184192 bytes
Redo Buffers                3780608 bytes
Database mounted.

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> alter database add supplemental log data;

Database altered.

SQL> alter database force logging;

Database altered.

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

System altered.

全部完成後應有如下結果:

SQL>  select log_mode,supplemental_log_data_min,force_logging from v$database;

LOG_MODE     SUPPLEME FOR
------------ -------- ---
ARCHIVELOG   YES      YES

3.3  創建OGG用戶,OGG用戶需要獨立表空間

SQL> create tablespace oggtbs datafile '/DATA/aegisdb/oggtbs.dbf' size 100M autoextend on;

Tablespace created.
 
SQL> create user ogg identified by ogg default tablespace oggtbs temporary tablespace temp;

User created.

SQL> grant connect,resource to ogg;

Grant succeeded.

SQL> grant execute on utl_file to ogg;

Grant succeeded.

3.4  在數據庫上執行GoldenGate腳本

注意:一定要cd到ogg的目錄下去執行,而且oracle用戶的bash_profile裏需要有export LD_LIBRARY_PATH=$ORACLE_HOME/lib

$ cd /u01/app/ogg/

$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sat Mar 5 20:34:34 2016
Copyright (c) 1982, 2013, Oracle.  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

SQL> @marker_setup.sql;

輸入之前創建的ogg用戶名

SQL> @ddl_setup.sql;

輸入之前創建的ogg用戶名

SQL> @role_setup.sql;

輸入之前創建的ogg用戶名

SQL>grant GGS_GGSUSER_ROLE to ogg;

Grant succeeded.

SQL>@ddl_enable.sql;

Trigger altered.

四、 配置Oracle GoldenGate

注意:一定要cd到ogg的目錄下去執行

GoldenGate的日誌位於其安裝目錄下的ggserr.log中,在配置過程中出現錯誤的時候可以通過日誌排查問題。

4.1    啓動兩個服務器上GoldenGate的Manager進程

此步驟需要在兩臺服務器上都執行

$ cd /u01/app/ogg/

./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.2.0.1.1 OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Dec 12 2015 00:54:38
Operating system character set identified as UTF-8.

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

   
GGSCI (localhost.localdomain) 1> start mgr

Manager started.

GGSCI (localhost.localdomain) 2> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

下面這個命令可以看到mgr的運行端口,也可以修改它,並對管理進程進行配置,不配置並不影響同步

GGSCI (localhost.localdomain) 3>edit params mgr

PORT 7809

#DYNAMICPORTLIST 7840-7939
#AUTORESTART EXTRACT *,RETRIES5,WAITMINUTES 3
#PURGEOLDEXTRACTS /ogg/app/dirdat/*,usecheckpoints, minkeepdays 3
#LAGREPORTHOURS 1
#LAGINFOMINUTES 30
#LAGCRITICALMINUTES 45

參數說明:

  • PORT:指定服務監聽端口,默認端口爲7809
  • DYNAMICPORTLIST:動態端口:可以制定最大256個可用端口的動態列表,當指定的端口不可用時,管理進程將會從列表中選擇一個可用的端口,源端和目標段的Collector、Replicat、GGSCI進程通信也會使用這些端口;
  • COMMENT:註釋行,也可以用--來代替;
  • AUTOSTART:指定在管理進程啓動時自動啓動哪些進程;
  • AUTORESTART:自動重啓參數設置:本處設置表示每3分鐘嘗試重新啓動所有EXTRACT進程,共嘗試5次;
  • PURGEOLDEXTRACTS:定期清理trail文件設置:本處設置表示對於超過3天的trail文件進行刪除。
  • LAGREPORT、LAGINFO、LAGCRITICAL:定義數據延遲的預警機制:本處設置表示MGR進程每隔1小時檢查EXTRACT的延遲情況,如果超過了30分鐘就把延遲作爲信息記錄到錯誤日誌中,如果延遲超過了45分鐘,則把它作爲警告寫到錯誤日誌中。

4.2    在服務器一上創建一個extract進程

 

GGSCI (localhost.localdomain) 1> add extract ext_t2,tranlog,begin now

EXTRACT added.

GGSCI (localhost.localdomain) 2> add exttrail /u01/app/ogg/dirdat/t2,extract ext_t2,megabytes 10

EXTTRAIL added.

其中megabytes表示隊列大小,本處爲10M

編輯extract進程的參數

GGSCI (localhost.localdomain) 3> edit params ext_t2

extract ext_t2

userid ogg@aegisdb91,password ogg     #如果是rac的話,@後請寫rac唯一實例名
rmthost 10.19.100.92,mgrport 7809
rmttrail /u01/app/ogg/dirdat/t2
table aegis.t2, FILTER(@STREQ (COL1, 'PEK')=1);

該extract進程會把服務器一上所有對aegis.t2表裏col1=‘PEK’的數據的修改(insert、delete、update)同步出去。

爲了保證update操作被同步,還需要在ogg登錄服務一的數據庫,並執行一些命令

GGSCI (localhost.localdomain) 4> dblogin userid ogg@aegisd,password ogg

Successfully logged into database.

GGSCI (localhost.localdomain as ogg@aegisdb) 5> ADD TRANDATA aegis.t2

2016-03-05 21:38:23  WARNING OGG-06439  No unique key is defined for table T2. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key.

Logging of supplemental redo data enabled for table AEGIS.T2.
TRANDATA for scheduling columns has been added on table 'AEGIS.T2'.
TRANDATA for instantiation CSN has been added on table 'AEGIS.T2'.

啓動同步進程

GGSCI (localhost.localdomain) 5> start ext_t2

Sending START request to MANAGER ...

EXTRACT EXT_T2 starting

GGSCI (localhost.localdomain) 6> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          
EXTRACT     RUNNING     EXT_T2        00:00:00      00:28:16

可以看到在服務器二的/u01/app/ogg/dirdat/目錄下產生了文件

$ ls /u01/app/ogg/dirdat/

t2000000000

4.3    在服務器二上創建一個replicat進程

 

$ ./ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.2.0.1.1 OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Dec 12 2015 00:54:38
Operating system character set identified as UTF-8.

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

GGSCI (localhost.localdomain) 1> edit params ./GLOBALS
GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint

GGSCI (localhost.localdomain) 2> dblogin userid ogg,password ogg
Successfully logged into database.

GGSCI (localhost.localdomain as ogg@aegisdb) 3> add checkpointtable ogg.checkpoint
Successfully created checkpoint table ogg.checkpoint.

GGSCI (localhost.localdomain as ogg@aegisdb) 4> add replicat rep_t2, exttrail /u01/app/ogg/dirdat/t2, checkpointtable ogg.checkpoint
REPLICAT added.

GGSCI (localhost.localdomain as ogg@aegisdb) 5> edit params rep_t2
replicat rep_t2
ASSUMETARGETDEFS
userid ogg, password ogg
discardfile /u01/app/ogg/dirdat/rep_t2_discard.txt, append, megabytes 10
DDL include all

map aegis.t2, target aegis.t2;

啓動replicate進程

GGSCI (localhost.localdomain) 6> start rep_t2

Sending START request to MANAGER ...

REPLICAT REP_T2 starting

GGSCI (localhost.localdomain) 7> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          
REPLICAT    RUNNING     REP_T2        00:00:00      00:00:02

4.4    檢查從服務器一到服務器二的同步是否成功

在服務器一的sqlplus中執行

SQL> select * from t1;

no rows selected

SQL> insert into t2 values('PEK',1);
row created.

SQL> insert into t2 values('FOC',2);
row created.

SQL> commit;

Commit complete.

如果同步配置成功可以在服務器二上看到

SQL> select * from t2;

COL1             COL2
---------- ----------
PEK                 1

對服務器一上aegis.t2表中col1=’PEK’的修改被同步到了服務器二上

爲了避免數據不一致導致GoldenGate出問題,這裏重置一下數據。

停止複製進程在兩個庫上均執行

truncate table t2;
insert into t2 values (‘PEK’,1);
insert into t2 values (‘FOC’,2);
commit;

4.5    在服務器二上創建一個extract進程

GGSCI (localhost.localdomain) 1> add extract ext1,tranlog,begin now

EXTRACT added.

GGSCI (localhost.localdomain) 2> add exttrail /u01/app/ogg/dirdat/lt,extract ext1

EXTTRAIL added.

GGSCI (localhost.localdomain) 3> edit params ext1

extract ext1

userid ogg@aegisdb92,password ogg

rmthost 10.19.100.91,mgrport 7809

rmttrail /u01/app/ogg/dirdat/lt

table aegis.t2, FILTER(@STREQ (COL1, 'PEK')=0);

該extract進程會把服務器二上所有對aegis.t2表裏col1 <>‘PEK’的數據的修改(insert、delete、update)同步出去。

爲了保證update操作被同步,同樣也需要在ogg登錄服務二的數據庫,並執行一些命令

GGSCI (localhost.localdomain) 4> dblogin userid ogg,password ogg
Successfully logged into database.

GGSCI (localhost.localdomain as ogg@aegisdb) 5> ADD TRANDATA aegis.t2
2016-03-05 21:38:23  WARNING OGG-06439  No unique key is defined for table T2. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key.

Logging of supplemental redo data enabled for table AEGIS.T2.
TRANDATA for scheduling columns has been added on table 'AEGIS.T2'.
TRANDATA for instantiation CSN has been added on table 'AEGIS.T2'.

啓動同步進程

GGSCI (localhost.localdomain) 6> start ext1

Sending START request to MANAGER ...

EXTRACT EXT1 starting

GGSCI (localhost.localdomain) 7> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          
EXTRACT     RUNNING     EXT1        00:00:00      00:04:50   
REPLICAT    RUNNING     REP1        00:00:00      00:00:07

4.6    在服務器一上創建一個replicat進程

GGSCI (localhost.localdomain) 1> edit params ./GLOBALS
GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint

GGSCI (localhost.localdomain) 2> dblogin userid ogg,password ogg
Successfully logged into database.

GGSCI (localhost.localdomain as ogg@aegisdb) 3> add checkpointtable ogg.checkpoint
Successfully created checkpoint table ogg.checkpoint.

GGSCI (localhost.localdomain as ogg@aegisdb) 4> add replicat rep1, exttrail /u01/app/ogg/dirdat/lt, checkpointtable ogg.checkpoint
REPLICAT added.

GGSCI (localhost.localdomain as ogg@aegisdb) 5> edit params rep1

replicat rep1
ASSUMETARGETDEFS
userid ogg, password ogg
discardfile /u01/app/ogg/dirdat/rep1_discard.txt, append, megabytes 10
DDL include all
map aegis.t2, target aegis.t2;

啓動replicate進程

GGSCI (localhost.localdomain as ogg@aegisdb) 6> start rep1

Sending START request to MANAGER ...
REPLICAT REP1 starting

GGSCI (localhost.localdomain as ogg@aegisdb) 7> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          
EXTRACT     RUNNING     EXT1        00:00:00      00:00:03   
REPLICAT    RUNNING     REP1        00:00:00      00:00:01

4.7    雙向同步是否成功

服務器一上

SQL> select * from t2;

COL1             COL2
---------- ----------
PEK                 1
FOC                 2

SQL> update t2 set col2=10 where col2=1;  
row updated.

SQL> commit;

Commit complete.

服務器二上可以看到

SQL> select * from t2;

COL1             COL2
---------- ----------
PEK                10
FOC                 2

服務器二上

SQL> update t2 set col2=20 where col2=2;
row updated.

SQL> commit;

Commit complete.

SQL> select * from t2;

COL1             COL2
---------- ----------
PEK                10
FOC                20

服務器一上可以看到

SQL> select * from t2;

COL1             COL2
---------- ----------
PEK                10
FOC                20

這樣在基礎數據相同,且服務器一的數據庫只處理COL1=’PEK’的數據,服務器二的數據庫只處理COL1<>’PEK’的數據的情況下,實現了數據雙主雙活。

五、 卸載

$ cd /ogg/app/

$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Mon Jul 11 10:31:48 2016
Copyright (c) 1982, 2013, Oracle.  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

SQL> @ddl_disable.sql

Trigger altered.

SQL> @ddl_remove.sql

DDL replication removal script.
WARNING: this script removes all DDL replication objects and data.

You 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.
Enter Oracle GoldenGate schema name:ogg
Working, please wait ...
Spooling to file ddl_remove_spool.txt

Script complete.

SQL> @marker_remove.sql

Marker removal script.
WARNING: this script removes all marker objects and data.

You 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.
Enter Oracle GoldenGate schema name:ogg

PL/SQL procedure successfully completed.

Sequence dropped.

Table dropped. 

Script complete.

SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

$ ./deinstall/deinstall.sh

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章