我們經常希望把各地的數據入庫後進行統一的應用
首先
如果具備高級復制功能
db_domain = 指明數據庫的域名(默認的是WORLD)
跟數據庫job執行有關的參數
job_queue_processes =
job_queue_interval =
distributed_transactions =
open_links =
第一行定義SNP進程的啟動個數為n
做完了初步的准備
假設在Internet上有兩個數據庫
具體配置如下
數據庫名
數據庫域名
數據庫sid號 China
Listener端口號
服務器ip地址
確認兩個數據庫之間可以互相訪問
中國這邊的數據庫連接字符串是以下的格式
Japan =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =
)
(CONNECT_DATA =
(SERVICE_NAME = Japan)
)
)
運行$tnsping Japan
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=
OK(n毫秒)
表明中國數據庫可以訪問日本數據庫
改數據庫全局名稱
用system身份登錄China數據庫
SQL>alter database rename global_name to ;
用system身份登錄Japan數據庫
SQL>alter database rename global_name to ;
用system身份登錄China數據庫
SQL>create public database link using
測試數據庫全局名稱和公共的數據庫鏈接
SQL>select * from global
返回結果為就對了
用system身份登錄Japan數據庫
SQL>create public database link using
測試數據庫全局名稱和公共的數據庫鏈接
SQL>select * from global
返回結果為就對了
建立管理數據庫復制的用戶repadmin
用system身份登錄China數據庫
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
SQL>execute dbms_defer_sys
SQL>grant execute any procedure to repadmin;
SQL>execute dbms_repcat_admin
SQL>grant comment any table to repadmin;
SQL>grant lock any table to repadmin;
同樣用system身份登錄Japan數據庫
在數據庫復制的用戶repadmin下創建私有的數據庫鏈接
用repadmin身份登錄China數據庫
SQL>create database link connect to repadmin identified 試這個私有的數據庫鏈接
SQL>select * from global
返回結果為就對了
用repadmin身份登錄Japan數據庫
SQL>create database link connect to repadmin identified by repadmin;
測試這個私有的數據庫鏈接
SQL>select * from global
返回結果為就對了
創建或選擇實現數據庫復制的用戶和對象
用internal身份登錄China數據庫
SQL>create user scott identified by tiger default tablespace users temporary tablespace temp;
SQL>grant connect
SQL>grant execute on sys
用scott身份登錄China數據庫
SQL>create table dept
(deptno number(
dname varchar
loc varchar
如果數據庫對象沒有主關鍵字
SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno));
在China數據庫scott用戶下創建主關鍵字的序列號
SQL> create sequence dept_no increment by
在China數據庫scott用戶下插入初始化數據
SQL>insert into dept values (dept_no
SQL>insert into dept values (dept_no
SQL>commit;
在Japan數據庫那邊同樣運行以上①
在Japan數據庫scott用戶下創建主關鍵字的序列號
SQL> create sequence dept_no increment by
在Japan數據庫scott用戶下插入初始化數據
SQL>insert into dept values (dept_no
SQL>insert into dept values (dept_no
SQL>commit;
在Japan數據庫那邊同樣運行以上①
在Japan數據庫scott用戶下創建主關鍵字的序列號
SQL> create sequence dept_no increment by
在Japan數據庫scott用戶下插入初始化數據
SQL>insert into dept values (dept_no
SQL>insert into dept values (dept_no
SQL>commit;
創建要復制的組scott_mg
用repadmin身份登錄China數據庫
SQL> execute dbms_repcat
在復制組scott_mg裡加入數據庫對象
SQL>execute dbms_repcat
參數說明
sname 實現數據庫復制的用戶名稱
oname 實現數據庫復制的數據庫對象名稱
type 實現數據庫復制的數據庫對象類別
use_existing_object true表示用主復制節點已經存在的數據庫對象
gname 主復制組名
對數據庫對象產生復制支持
SQL>execute dbms_repcat
確認復制的組和對象已經加入數據庫的數據字典
SQL>select gname
SQL>select * from dba_repobject;
創建主復制節點
用repadmin身份登錄China數據庫
SQL>execute dbms_repcat
(gname=>
參數說明
gname 主復制組名
master 加入主復制節點的另一個數據庫
use_existing_object true表示用主復制節點已經存在的數據庫對象
copy_rows false表示第一次開始復制時不用和主復制節點保持一致
propagation_mode 異步地執行
確認復制的任務隊列已經加入數據庫的數據字典
SQL>select * from user_jobs;
使同步組的狀態由停頓(quiesced )改為正常(normal)
用repaa數據庫
SQL> execute dbms_repcat
From:http://tw.wingwit.com/Article/program/Oracle/201311/17132.html