遷移Oracle數據的兩個方案(待續)

 

                                                                    遷移Oracle數據的兩個方案(待續)

方案一:採用物理standby進行遷移,該方法適用於在相同操作系統平臺,相同數據庫版本之間進行數據遷移。在Oracle11G中可以實現,從         10G到11G的物理Standby的遷移,而且可以實現從Windows平臺到Linux平臺的遷移。 步驟:   要首先具有主備數據庫結構(如DataGuard環境),本方案針對Oracle10GR2版本。   1、在32Bit的OS上,利用RMAN或者是其他方式備份住數據庫。   2、產生備份數據庫的控制文件、以及參數文件、並把備用控制文件和參數文件拷貝到備用機器上。   3、把備份恢復到備用機器上(可以是64Bit機器),如果是普通文件備份,只拷過去即可,如果是RMAN備份,需要先拷貝備份集(或NFS)      過去,然後在備份機器上恢復。32Bit OS上的數據庫可以直接恢復到64Bit的OS上。   4、配置監聽與tnsnames.ora,使備庫可以接收日誌。(分別針對主備機上配置)   5、恢復備用庫,適用如下命令      recover automatic standby database;      或者      recover managed standby database disconnect from session;   6、等到日誌全部恢復完畢後,執行如下命令做切換:      主:alter database commit to switchover to physical standby with session shutdown;      備:alter database commit to switchover to primary;   7、等切換完畢後,關閉新主庫,如果是RAC先關閉RAC環境參數:      alter system set cluster_database=false scope=spfile;      shutdown immediate;   8、使用UPGRADE方式打開新主庫:      startup upgrade;   9、執行數據庫格式轉換腳本,此時不要執行DDL      spool utlirp.log      /u01/oracle/ora10g/rdbms/admin/utlirp.sql(具體路徑會有差異)      spool off   10、重新啓動主庫,如果是RAC環境,先打開RAC參數:     alter system set cluster_database=true scope=spfile;     shutdown immediate;     startup open;   11、編譯經過上面過程可能失效的包:     spool utlrp.log     /u01/oracle/ora10g/rdbms/admin/utlrp.sql(具體路徑會有差異)     spool off   12、檢驗是否還存在失效對象:     select distinct object_name from dba_objects where status='INVALID';   13、等原來的主庫成爲備用庫後,在其上完成如下操作:     srartup monut;     recover managed standby database disconnect from session;(恢復日誌)

方案二:使用prebuilt MV 進行數據遷移,該方法適用於在短時間內,對大數據量表進行遷移,要求被遷移表具有主鍵,可以實現跨平臺、跨         數據庫的版本遷移,而且可以實現重組優化,但是不能實現跨字符集的遷移,並且被遷移表不要頻繁的被更新。 步驟:    1、進行表的分級,如100M以上的表作爲大表,100M以下的表作爲小表,對於小表可以使用      insert /*+append+*/ into...... from table@db_link;    進行插入。    2、對於大表在表上創建MV日誌:      create materialized view log on tablename;    3、在目標數據庫上創建於該表具有相同結構的表,並且在表上創建主鍵或者唯一約束,其他索引或者約束,可以在全刷新後再創建。最後       使用如下命令在目標數據庫的新表上創建prebuilt mv:       create materialized view table_name on prebuilt table refresh fast as select * from table_name@db_link;    4、執行全刷新與增量刷新:       exec dbms_mview.refresh('table_name','complete');       exec dbms_mview.refresh('table_name');       執行後創建相關索引:create index index_name on table_name(filed_name);    5、創建一個數據庫JOB,定時同步增量日誌,如下定義每一分鐘同步一次:       declare jobid number;       begin         sys.dbms_job.submit(job=>jobid,                             what=>'dbms_mview.refresh(''table_name'');',                             next_date=>sysdate,                             interval=>'sysdate+1/1440');         commit;       end;       /    6、依次處理完所有大表。    7、在目標數據庫創建好於小表相同結構的表包括索引等,整理好insert into腳本。    8、預先創建好除序列外的其他對象,如function,procedure,type等。    9、停機切換:      .停止原數據庫一切活動,包括任何DML與DDL。      .等待最後一批日誌刷新完畢。      .運行insert into腳本遷移小表數據。      .等大表刷新完成,刪除相關MV信息        在原數據庫上執行:drop materialized view log on table_name;        在目標數據庫上執行:drop materialized view table_name;    10、創建與表有依賴關係的對象,如序列。   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章