RAC下實施高級復制經驗交流
大家有沒在RAC環境中實施過高級復制.
比如:
Master A ----- Master B
A站點為RAC環境 兩節點
B站點為RAC環境 兩節點
A,B為異地可讀寫復制.
如何實施高級復制.
和單機環境實施的異同。
打算在RAC環境實施復制。
已經在單機環境測試過。
大家可以參考.就是RAC不知道是否一樣,高手指點一下.
例子:
基礎資料:
TESTA-TESTB做Master-Master復制
復制管理員 傳遞者 接收者 Global_name
TESTA站點 TESTB站點
repadmin
test repadmin repadmin TESTA.COM TESTB.COM
------------
安裝主站點
------------
1.使用管理員帳戶連接到TESTA DB
Sqlplus /nolog
Conn sys@testa
Pwd
2.創建復制管理員用戶在TESTA DB
CREATE USER repadmin IDENTIFIED BY test;
3.賦予復制管理員相應權限
BEGIN
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (
username => 'repadmin');
END;
/
GRANT COMMENT ANY TABLE TO repadmin;
GRANT LOCK ANY TABLE TO repadmin;
GRANT SELECT ANY DICTIONARY TO repadmin;
4.注冊傳遞者在TESTA DB
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (
username => 'repadmin');
END;
/
5.注冊接收者在TESTA DB(接收其他站點傳遞來的資料)
/*list_of_gnames => NULL
上述設置所有復制組的receiver都為repadmin
list_of_gnames => gname1,gname2,...
如果需要設置部分復制組的receiver可以使用上述配置
*/
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => 'repadmin',
privilege_type => 'receiver',
list_of_gnames => NULL);
END;
/
6.設置定期的Purge在TESTA DB(10分鐘一次)
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => SYSDATE,
interval => 'SYSDATE + 1/144',
delay_seconds => 0);
END;
/
7.在TESTB DB上重復1-6步驟(添加其他站點)
8.創建主站點之間的Scheduled Link
a.創建主站點之間的DB Link
(注意DBLink的名字要與連接到的DB的gobal_name相同,using後跟TNS中配置的連接其他DB用的字串)
CONNECT sys@testa
CREATE PUBLIC DATABASE LINK testb.com USING 'testb';
CONNECT repadmin@testa
CREATE DATABASE LINK testb.com CONNECT TO repadmin IDENTIFIED BY test;
CONNECT sys@testb
CREATE PUBLIC DATABASE LINK testa.com USING 'testa';
CONNECT repadmin@testb
CREATE DATABASE LINK testa.com CONNECT TO repadmin IDENTIFIED BY test
b.設置各站點之間定時Push機制(以下採用定期Push機制,而非連續Push)
CONNECT repadmin@testa
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => 'testb.com',
interval => 'SYSDATE + (1/1440)',
next_date => SYSDATE,
delay_seconds =>0);
END;
/
CONNECT repadmin@testb
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => 'testa.com',
interval => 'SYSDATE + (1/1440)',
next_date => SYSDATE,
delay_seconds =>0);
END;
/
---------------------------------
Creating a Master Group
---------------------------------
1.創建主復制組
CONNECT repadmin@testa
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP (
gname => 'test_repg');
END;
/
(備用)
刪除主復制組
BEGIN
DBMS_REPCAT.DROP_MASTER_REPGROUP(
gname =>'test_repg',
all_sites =>true);
END;
/
2.添加對象到主復制組
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => 'test_repg',
type => 'TABLE',
oname => 'TEST_TB',
sname => 'test',
use_existing_object => TRUE,
copy_rows => TRUE);
END;
/
(備用)
從主復制組中刪除對象
BEGIN
DBMS_REPCAT.DROP_MASTER_REPOBJECT (
sname =>'test',
oname =>'TEST_TB',
type => 'TABLE');
END;
/
3.添加其他主站點
BEGIN
DBMS_REPCAT.ADD_MASTER_DATABASE (
gname => 'test_repg',
master => 'testb.com',
use_existing_objects => TRUE,
copy_rows => TRUE,
propagation_mode => 'ASYNCHRONOUS');
END;
/
檢查結果
SELECT DBLINK FROM DBA_REPSITES WHERE GNAME = 'TEST_REPG';
如果查詢結果可以看到有添加的主站點則繼續.否則等待.
(備用)
Remove站點
BEGIN
DBMS_REPCAT.REMOVE_MASTER_DATABASES (
gname => 'test_repg',
master_list => 'testb.com');
END;
/
4.生成復制支持
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => 'TEST',
oname => 'TEST_TB',
type => 'TABLE',
min_communication => TRUE);
END;
/
使用以下語句檢查對復制組的管理操作是否已經都完成,完成之後才可以開始復制
SELECT COUNT(*) FROM DBA_REPCATLOG WHERE GNAME = 'TEST_REPG';
5.開始復制
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => 'test_repg');
END;
/
大家交流一下經驗,看怎麼做RAC下的復制。
高手留步。
[ 本帖最后由 jonnyzhang110 于 2008-4-29 14:27 编辑 ]
|