[原創]帶主體複製環境的資料庫遷移

husthxd發表於2009-06-12

源資料庫:windows 2003 32bit,oracle9.2.0.5

目標資料庫:windows 2008 64bit,oracle 10.2.0.3


-- 在源資料庫伺服器上執行的操作

-- 1.全庫備份

exp system/system file=d:\db_backup\db.dmp full=y direct=y log=d:\db_backup\db.log

-- shutdown資料庫

-- 修正另一主體複製站點的tns,連線到新的伺服器上


-- 在目標資料庫伺服器上執行的操作

-- 以sysdba登入

-- 2.建立源資料庫有,目標資料庫沒有的表空間

CREATE TABLESPACE ywuser DATAFILE

'F:\oracle\product\10.2.0\oradata\testj\ywuser.DBF' SIZE 3000M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

......


-- 3.建立資料庫使用者

create user ywuser identified by ywuser;

grant dba to ywuser;

alter user ywuser default tablespace ywuser;


create user repadmin identified by repadmin;

grant resource,connect to repadmin;


-- 4給repadmin使用者授權

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;


begin

  dbms_defer_sys.register_propagator(username=>'repadmin');

end;

/


begin

  dbms_repcat_admin.register_user_repgroup(username=>'repadmin',privilege_type=>'receiver',list_of_gnames=>null);

end;

/


-- 5.資料庫引數修正

alter system set global_names=true;

alter database rename global_name to web.test;


-- 6.建立資料庫連結

-- 注意:配置網路服務名test,連線到主體複製站點

DROP PUBLIC DATABASE LINK test.test;

CREATE PUBLIC DATABASE LINK test.testconnect to repadmin identified by repadmin USING 'test';

-- check it!

select * from global_name@test.test;


-- 7.全庫匯入:rows=n

imp system/systemfile=d:\db_backup\db.dmp buffer=40960000 full=y log=d:\db_backup\imp_full.log rows=n ignore=y indexes=n


-- 全庫匯入:rows=y

-- 把觸發器置為無效

-- 連線到業務使用者

spool disable_trigger.sql


select 'alter trigger '||trigger_name||' disable;'

from user_triggers

/


spool off


@disable_trigger.sql


-- 把其他使用者的約束置為無效


spool disable_constrain.sql


select 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name||';'

from dba_constraints

where owner in ('SH','OE','HR','PM','QS','QS_CBADM','QS_CS','QS_ES','QS_OS','QS_WS','SCOTT','PERFSTAT');


spool off


@disable_constrain.sql


host del disable_trigger.sql

host del disable_constrain.sql

-- 執行匯入操作

imp system/systemfile=d:\db_backup\db.dmp buffer=40960000 full=y log=d:\db_backup\imp_full_data.log rows=y ignore=y feedback=10000


-- 8.開啟入隊功能:

BEGIN

  dbms_aqadm.start_queue('SYSTEM.DEF$_AQCALL', TRUE, FALSE);

  COMMIT;

END;

/


-- 9.測試複製環境

-- do sth


-- conn repadmin/repadmin

-- 監控延遲事務

select * from deftran where rownum < 10;

select count(*) from DEFTRANDEST;


select count(*) from deftran;

select count(*) from system.def$_aqcall;

select count(*) from defcall;

select count(*) from deferror;


-- Push所有的事務

variable v_ret number;

exec :v_ret := DBMS_DEFER_SYS.PUSH(destination=>'test.test',parallelism=>4,stop_on_error=>false);

commit;


-- Purge所有延遲事務

variable v_ret number;

exec :v_ret := DBMS_DEFER_SYS.PURGE(delay_seconds=>0);

commit;


-- 重新監控,並登陸到另一主體複製站點檢查資料是否已複製


-- 把業務使用者的觸發器重置為有效

-- 連線到業務使用者

spool enable_trigger.sql


select 'alter trigger '||trigger_name||' enable;'

from user_triggers

/


spool off


@
enable_trigger.sql


-- ALL IS OK!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-606018/,如需轉載,請註明出處,否則將追究法律責任。

相關文章