三種ASM下將資料檔案由dg遷移到dg的方法

darren__chan發表於2015-07-14

應客戶要求,需在ASM下將資料檔案由dg遷移到dg,經過幾天測試,有以下方法                                                      
一.
[root@darren ~]# su - grid
[grid@darren ~]$ asmcmd
ASMCMD> ls
DATA/
FRA/
ASMCMD> cd data/
ASMCMD> mkdir datafile
ASMCMD> ls
datafile/

SQL>ALTER DATABASE DATAFILE '+DATA/datafile/tbs_test_tablespac.dbf' OFFLINE;
ASMCMD>cp +data/datafile/tbs_test_tablespac.dbf +fra/datafile/tbs_test_tablespac.dbf
SQL>alter database rename file '+data/datafile/tbs_test_tablespac.dbf' to '+fra/datafile/tbs_test_tablespac.dbf';
SQL>RECOVER DATAFILE '+fra/datafile/tbs_test_tablespac.dbf';
SQL>alter database datafile '+fra/datafile/tbs_test_tablespac.dbf' online;

ALTER DISKGROUP DATA DROP FILE '+data/datafile/tbs_test_tablespac.dbf';



二.RMAN 下遷移
1.查出需要遷移的ASM資料檔案,本次是需要遷移tbs_test_tablespac表空間下的檔案。
SQL> select file_name,bytes/1024/1024/1024 ,tablespace_name from dba_data_files where tablespace_name ='tbs_test_tablespac';

3.將要遷移的 ASM 資料檔案OFFLINE:
SQL> ALTER DATABASE DATAFILE '+DATA/datafile/tbs_test_tablespac.dbf' OFFLINE;

$ rman target /
RMAN> COPY DATAFILE '+data/datafile/tbs_test_tablespac.dbf' TO '+fra/datafile/tbs_test_tablespac.dbf';
SQL> ALTER DATABASE RENAME FILE '+data/datafile/tbs_test_tablespac.dbf' TO '+fra/datafile/tbs_test_tablespac.dbf';
RMAN> SWITCH DATAFILE '+fra/datafile/tbs_test_tablespac.dbf' TO COPY;
RMAN> RECOVER DATAFILE '+fra/datafile/tbs_test_tablespac.dbf';
SQL> ALTER DATABASE DATAFILE '+fra/datafile/tbs_test_tablespac.dbf' ONLINE;
SQL> SELECT file_name FROM dba_data_files;
SQL> ALTER DISKGROUP DATA DROP FILE '+data/datafile/tbs_test_tablespac.dbf';

 三.線上重定義表到新表空間:

1.建立新表空間 
sql>create bigfile tablespace tbs_test_tablespac_2 datafile '+fra/datafile/tbs_test_tablespac.dbf' size 100M autoextend off;

1)驗證是否可以基於主鍵方式遷移 
SQL>exec dbms_redefinition.can_redef_table(uname=>'test',tname=>'table_test',options_flag=>dbms_redefinition.cons_use_pk); 

alter table test.table_test add  constraint table_test_pk primary key  (table_name) enable validate;

2)建立線上重定義中間表 
SQL>create table TABLE_TEST2 (******) tablespace TBS_IDL_BID_2; 

select table_name,tablespace_name from dba_tables where owner ='TEST';

3)線上重定義表 
SQL>exec dbms_redefinition.start_redef_table(uname=>'TEST',orig_table=>'TABLE_TEST',int_table=>'TABLE_TEST2'); 
手動同步 
SQL>exec dbms_redefinition.sync_interim_table(uname=>'TEST',orig_table=>'TABLE_TEST',int_table=>'TABLE_TEST2'); 
完成重定義
exec dbms_redefinition.finish_redef_table(uname=>'TEST',orig_table=>'TABLE_TEST',int_table=>'TABLE_TEST2'); 

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

相關文章