使用OGG,兩個Oracle庫之間單向同步資料,oggoracle
配置:來源資料庫100.100.100.21 執行個體名dbsid2
目標資料庫100.100.100.41 執行個體名db1
實驗目標:來源資料庫中的 scott使用者 emp表同步到目標資料庫 scott中的test表
安裝包為檔案ogg112101_fbo_ggs_Linux_x64_ora10g_64bit.zip
解壓之後,然後再tar解壓tar -xvf fbo_ggs_Linux_x64_ora10g_64bit.tar -C /oracle/ogg/
1. 來源資料庫(dbsid2)配置:
(1) 使用者權限:grant dba to scott
(2) 開啟歸檔模式
(3)附加日誌:
alter database add supplemental log data;
alter database force logging;
(4)將目標資料庫db1資訊添加到 tnsnames.ora中
2. 目標資料庫(db1)配置:
(1) scott使用者建立空表test,表結構和emp相同
(2) 開啟歸檔模式
(3) 附加日誌:
alter database add supplemental log data;
alter database force logging;
(4) 將來源資料庫(dbsid2)的資訊添加到 tnsnames.ora中
3. 來源資料庫伺服器 goldengate安裝
(1) 解壓到/oracle/ogg目標下面
(2) 運行./ggsci
(3) 建立子目錄: GGSCI (host2) 1> create subdirs
Creating subdirectories under current directory /oracle/ogg
Parameter files /oracle/ogg/dirprm: already exists
Report files /oracle/ogg/dirrpt: created
Checkpoint files /oracle/ogg/dirchk: created
Process status files /oracle/ogg/dirpcs: created
SQL script files /oracle/ogg/dirsql: created
Database definitions files /oracle/ogg/dirdef: created
Extract data files /oracle/ogg/dirdat: created
(4) 配置字元管理的Port參數
GGSCI (host2) 6> edit params mgr
輸入: PORT 7809 然後儲存
檢查輸入情況:
GGSCI (host2) 7> view params mgr
PORT 7809
(5) 啟動Start mgr:
GGSCI (host2) 8> start mgr
MGR is already running.
GGSCI (host2) 9> info mgr
Manager is running (IP port host2.7809).
4. 目標資料庫伺服器 goldengate安裝(和源目標伺服器相同)
(1) 解壓到/oracle/ogg目標下面
(2) 運行./ggsci
(3) 建立子目錄: GGSCI (host2) 1> create subdirs
Creating subdirectories under current directory /oracle/ogg
Parameter files /oracle/ogg/dirprm: already exists
Report files /oracle/ogg/dirrpt: created
Checkpoint files /oracle/ogg/dirchk: created
Process status files /oracle/ogg/dirpcs: created
SQL script files /oracle/ogg/dirsql: created
Database definitions files /oracle/ogg/dirdef: created
Extract data files /oracle/ogg/dirdat: created
(4) 配置字元管理的Port參數
GGSCI (host2) 6> edit params mgr
輸入: PORT 7809 然後儲存
檢查輸入情況:
GGSCI (host2) 7> view params mgr
PORT 7809
(4) 啟動Start mgr:
GGSCI (host2) 8> start mgr
MGR is already running.
GGSCI (host2) 9> info mgr
Manager is running (IP port host2.7809).
5. 配置來源資料庫伺服器(dbsid2)傳輸進程extract
(1)添加名字為source1的進程
GGSCI (host2) 19> add extract source1,sourceistable
EXTRACT added.
(3) 修改source1參數
GGSCI (host2) 20> edit params source1
添加如下,並且儲存
extract source1
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid scott,password tiger
rmthost 100.100.100.41,mgrport 7809
rmttask replicat,group target1
table scott.emp;
註:1、需要複製表的使用者名稱為scott,密碼tiger
2、目標資料庫(db1)的IP為100.100.100.41,連接埠為7809
3. 目標資料庫(db1)的接收進程名字為 target1
4. 需要複製的table為: scott.emp表。
查看修改的參數
GGSCI (host2) 21> view params source1
6. 配置目標資料庫db1 replicat接收進程
(1) 添加replicat進程,名字為source1
GGSCI (host2) 9> add replicat target1,specialrun
REPLICAT added.
(2) 添加修改參數:GGSCI (host2) 13> edit params target1
replicat target1
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
assumetargetdefs
userid scott,password tiger
discardfile ./dirrpt/target1.dsc,purge
map scott.emp,target scott.test;
註:1. 目標資料庫帳號為scott,tiger
2. 將來源資料庫的表scott.emp同步到scott.test表中
查看修改之後
GGSCI (host2) 1> view params target1
7. 來源資料庫(dbsid2)開始同步
(1) 開始同步
GGSCI (host2) 11> start extract source1
Sending START request to MANAGER ...
EXTRACT SOURCE1 starting
(2) 監控同步過程
GGSCI (host2) 12> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
(3) 來源資料庫查看同步處理記錄
GGSCI (host2) 13> view report source1
8. 目標資料庫(db1)查看同步情況
SQL> select * from test;
怎實現兩個Oracle資料庫的資料同步?
執行定時的 exp 資料庫A, 然後 imp 資料庫B
急,怎在兩個oracle資料庫之間的相同結構的兩個表實現資料的同步更新,dblink已經建好了
資料類型都一樣的麼,可以考慮用觸發器實現 以oracle資料庫為例 有兩張表test和test01 欄位有id name age sal
create or replace trigger TRIG_UPDATE_TEST
after insert or delete or update on test
for each row
declare
l_id varchar2(50);
l_name varchar2(50);
l_age number;
l_sal number;
begin
if(deleting or updating) then
delete test01
where id=:old.id;
if(deleting) then
return;
end if;
end if;
l_id:=:new.id;
l_name:=:new.name;
l_age:=:new.age;
l_sal:=:new.sal;
begin
insert into test01(id,name,age,sal) values(l_id,l_name,l_age,l_sal);
end;
end TRIG_UPDATE_TEST;
再簡化點就是在觸發器中不聲明變數,直接用:new.欄位代替
哎,沒分啊