兩臺ORACLE之間配置OGG-未配置同步DDL

還不算暈發表於2013-10-28
環境 :
資料庫版本Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
VBOX虛擬機器
主機名、資料庫例項、庫名及IP規劃:
源主機IP:192.168.1.213    HOSTNAME:bys001.oel.com
目標主機IP:192.168.1.213  HOSTNAME:bys2.oel.com
例項名和資料庫名兩臺主機一樣,兩臺主機的資料庫結構完全一樣。
採用先配置源主機,再克隆一臺修改一下配置做為目標機。
其中源主機已經安裝好ORACLE資料庫軟體並已經建立資料庫。

整個配置分6步:
1.修改環境變數,建立目錄
2.上傳OGG軟體解壓並安裝
3.查詢資料庫名、例項名並開啟歸檔模式,強制產生日誌等
4.在資料庫中為OGG建立使用者
5.開始配置OGG的同步--未配置DDL的同步
6.測試test使用者的test1表做DML操作能否同步
######################################

1.修改環境變數,建立目錄

[oracle@bys001 ~]$ vi .bash_profile
增加這一句:
export OGG_HOME=/u01/ogg
".bash_profile" 24L, 560C written     
[oracle@bys001 ~]$ source .bash_profile
[oracle@bys001 ~]$ cd /u01
[oracle@bys001 u01]$ mkdir ogg
[oracle@bys001 u01]$ ls
admin        checkpoints          oradata
app          diag                 oraInventory
archbys1     flash_recovery_area
cfgtoollogs  ogg
[oracle@bys001 u01]$ echo $OGG_HOME
/u01/ogg

2.上傳OGG軟體解壓並安裝

----使用SSH SECURE SHELL上傳很好用。
[oracle@bys001 ~]$ ls ogg112101_fbo_ggs_Linux_x86_ora11g_32bit.zip ogg112101_fbo_ggs_Linux_x86_ora11g_32bit.zip
[oracle@bys001 ~]$ unzip ogg112101_fbo_ggs_Linux_x86_ora11g_32bit.zip
[oracle@bys001 ~]$ ls fbo_ggs_Linux_x86_ora11g_32bit.tar
fbo_ggs_Linux_x86_ora11g_32bit.tar

[oracle@bys001 ~]$ tar -xvf fbo_ggs_Linux_x86_ora11g_32bit.tar -C $OGG_HOME

開啟 ggsci時的一個錯誤解決:
我這裡在使用ggsci遇到錯誤因為找不到庫檔案報錯:
[oracle@oel-01 ogg]$ ./ggsci
./ggsci: error while loading shared libraries: libnnz11.so: cannot open shared object file: No such file or directory
建議在使用前先在OGG的目錄執行:[oracle@bys001 ogg]$ ldd ggsci
如果庫檔案全在,可以直接執行[oracle@bys001 ogg]$ ./ggsci
如果缺少庫檔案,可以find / -name libnnz11.so  這樣在整個/目錄下查詢。
根據查出的庫檔案位置,做一個軟連結就可以了,要使用  root賬戶。如:
[root@oel-01 ~]# ln -s /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so /lib/libnnz11.so

建立OGG目錄:要注意在OGG的安裝目錄下呼叫
[oracle@bys001 ogg]$ ./ggsci

GGSCI (bys001.oel.com) 2> create subdirs

Creating subdirectories under current directory /u01/ogg

Parameter files                /u01/ogg/dirprm: already exists
Report files                   /u01/ogg/dirrpt: created
Checkpoint files               /u01/ogg/dirchk: created
Process status files           /u01/ogg/dirpcs: created
SQL script files               /u01/ogg/dirsql: created
Database definitions files     /u01/ogg/dirdef: created
Extract data files             /u01/ogg/dirdat: created
Temporary files                /u01/ogg/dirtmp: created
Stdout files                   /u01/ogg/dirout: created
只需要在開啟的視窗寫入: PORT 7809就可以了,使用是和VI一樣。
GGSCI (bys001.oel.com) 4> edit param mgr
PORT 7809
GGSCI (bys001.oel.com) 7> start mgr
Manager started.

GGSCI (bys001.oel.com) 8> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          

OGG安裝完成。因為後面才會克隆虛擬機器,所以這裡只需要做一次安裝哈哈。
OGG同步的配置在第6步。
###############################################

3.查詢資料庫名、例項名並開啟歸檔模式,強制產生日誌等

我的操作主要是使用的BYS這個DBA使用者來進行配置資料庫。
col open_mode for a10
col name for a10
col db_unique_name for a10
BYS@bys1>select * from user_role_privs;
USERNAME
------------------------------------------------------------
GRANTED_ROLE                                                 ADMIN_ DEFAUL OS_GRA
------------------------------------------------------------ ------ ------ ------
BYS                                                                             DBA  
BYS@bys1>select open_mode,name,db_unique_name,log_mode from v$database;

OPEN_MODE  NAME       DB_UNIQUE_ LOG_MODE
---------- ---------- ---------- ------------------------
READ WRITE BYS1       bys1       ARCHIVELOG

BYS@bys1>alter database force logging;
Database altered.
BYS@bys1>alter database add supplemental log data;
Database altered.
BYS@bys1>select log_mode,supplemental_log_data_min,force_logging from v$database;
LOG_MODE                 SUPPLEMENTAL_LOG FORCE_
------------------------ ---------------- ------
ARCHIVELOG               YES              YES

BYS@bys1>alter database add supplemental log data (primary key,unique,foreign key) columns;
Database altered.
BYS@bys1> select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui from v$database;
SUPPLEMENTAL_LOG SUPPLE SUPPLE
---------------- ------ ------
YES              YES    YES
#######################################################

4.在資料庫中為OGG建立使用者:                                        

BYS@bys1>create tablespace ogg datafile '/u01/oradata/bys1/ogg01.dbf' size 100m;

Tablespace created.
BYS@bys1>create user ogg identified by ogg default tablespace ogg;

User created.
BYS@bys1>grant dba to ogg;

Grant succeeded.
BYS@bys1>conn ogg/ogg
Connected.
OGG@bys1>select * from user_role_privs;
USERNAME
------------------------------------------------------------
GRANTED_ROLE                                                 ADMIN_ DEFAUL OS_GRA
------------------------------------------------------------ ------ ------ ------
OGG
DBA                                                          NO     YES    NO
################虛擬機器關機,再克隆一個做備機。備機需要修改IP,主機名等資訊,參照開頭的環境中的規劃。
###################################################

5.開始配置OGG的同步--未配置DDL的同步

主庫的配置:

按順序執行以下操作:
add extract ext1,tranlog, begin now
add exttrail /u01/ogg/dirdat/lt, extract ext1


edit params ext1
在開啟的編輯視窗寫入以下五行:
extract ext1
userid ogg, password ogg
rmthost 192.168.1.213, mgrport 7809
rmttrail /u01/ogg/dirdat/lt
table test.*;

此時源端的狀態是:
GGSCI (bys001.oel.com) 15> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
EXTRACT     STOPPED     EXT1        00:00:00      00:12:16   
#######################################3

目標庫的配置:

edit params ./GLOBAL
在編輯視窗輸入以下兩行:
GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint

這裡使用前面為OGG建立的使用者來登陸,同時要注意路徑和OGG安裝路徑的對照。
dblogin userid ogg,password ogg
add checkpointtable ogg.checkpoint
add replicat rep1,exttrail /u01/ogg/dirdat/lt, checkpointtable ogg.checkpoint

edit params rep1
在彈出編輯視窗輸入以下五行:---我這裡只設定了同步test使用者的test1表--這裡的使用者和表名在下一步的測試中再建立。
replicat rep1
ASSUMETARGETDEFS
userid ogg,password ogg
discardfile /u01/ogg/dirdat/rep1_discard.txt,append, megabytes 10
map test.test1, target test.test1;
源端和目標端配置完成
############################

啟動源庫:

start extract ext1
執行狀態:RUNNING是正常。
這裡的執行狀態如果是ABENDED,則需要檢視日誌,定位一下是哪裡的錯誤了。
GGSCI (bys001.oel.com) 18> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
EXTRACT     RUNNING     EXT1        00:00:00      00:26:26   

啟動目標庫:

start replicat rep1
GGSCI (bys2.oel.com) 26> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                          
REPLICAT    RUNNING     REP1        00:00:00      00:00:02   
可以看到兩個庫都已經成功執行

---補充:如果配置錯誤,可以刪除重新來再進行配置。
方法如下:

GGSCI (bys2.oel.com) 29> dblogin userid ggate,password ggate
GGSCI (bys2.oel.com) 30> delete extract ext1
如果已經在執行,需要先停止:
GGSCI (bys2.oel.com) 46> stop ext1
GGSCI (bys2.oel.com) 48> delete ext1
#####################################

6.測試test使用者的test1表做DML操作能否同步

在主庫的操作:

建立TEST使用者並建表插入資料如下:---注意建立的表最好帶主鍵,好像無主鍵會出現不同步的問題,沒有詳細實驗了。
TEST@bys1>conn test/test
Connected.
TEST@bys1>create table test1(aa varchar2(10)  constraint pk_aa primary key);
Table created.
TEST@bys1>set time on
22:42:46 TEST@bys1>insert into test1 values('ogg-test');
1 row created.
22:42:56 TEST@bys1>commit;
Commit complete.
22:42:59 TEST@bys1>select * from test1;
AA
--------------------
ogg-test

在目標庫上操作:

資料庫中要建一個TEST使用者和表。
TEST@bys2>create table test1(aa varchar2(10) primary key);
Table created.
TEST@bys2>set time on
22:42:13 TEST@bys2>select * from test1;
no rows selected
22:42:17 TEST@bys2>
22:43:01 TEST@bys2>select * from test1;
AA
--------------------
ogg-test

再次在源庫插入:

22:45:37 TEST@bys1>insert into test1 values('ogg-ok');
1 row created.
22:45:45 TEST@bys1>commit;
Commit complete.
22:45:50 TEST@bys1>select * from test1;
AA
--------------------
ogg-ok
ogg-test

在目標庫查詢

22:45:59 TEST@bys2>select * from test1;

AA
--------------------
ogg-ok
ogg-test

做刪除操作:

TEST@bys1>select * from test1;
AA
--------------------
ogg-ok
ogg-test
TEST@bys1>delete test1 where aa='ogg-test';
1 row deleted.
TEST@bys1>set time on
23:18:42 TEST@bys1>commit;
Commit complete.

目標端查詢:

23:18:47 TEST@bys2>select * from test1;
AA
--------------------
ogg-ok
###############################################

DDL操作不能同步:

22:45:54 TEST@bys1>create table test2(aa varchar2(10) primary key);
Table created.
22:48:36 TEST@bys1>select * from test2;
no rows selected

目標端:
22:46:01 TEST@bys2>select * from test2;
select * from test2
              *
ERROR at line 1:
ORA-00942: 表或檢視不存在

相關文章