透過xtts遷移單例項檔案系統表空間到RAC ASM儲存表空間

kunlunzhiying發表於2016-11-23
    xtts遷移檔案系統表空間到檔案系統表空間可參考,oracle小知識點14--xtts傳輸表空間 http://blog.itpub.net/28539951/viewspace-1978401/

測試:
os:源端:centos 6.6 目標端:centos 6.6
db:源端:11.2.0.4 檔案系統 單例項 目標端:11.2.0.4 ASM RAC
host:源端:ct6604 192.108.56.120 目標端:ct66rac01 192.108.56.101
源端例項:ctdb 目標端例項:rac11g1

1.##ct66rac01
##在目標端例項上建連線源端的dblink和用於存放資料檔案的目錄directory.
    #此步驟是為了最近透過impdp dblink的方式匯入資料檔案到目標端,如果準備採用本地匯入則不需要建dblink.
    [oracle@ct66rac01 ~]$ cd /u01/app/oracle/product/11.2.0/db_1/network/admin/
    [oracle@ct66rac01 admin]$ vi tnsnames.ora
    CTDB =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.108.56.120)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ctdb)
        )
      )
    [oracle@ct66rac01 dbs]$ ORACLE_SID=ctdb
    [oracle@ct66rac01 ~]$ sqlplus / as sysdba
    SQL> create directory dump_oradata as '+DATA';
    SQL> create public database link lnk_ctdb connect to system identified by system using 'ctdb';
    SQL> select * from dual@lnk_ctdb;
    /*
    DUMMY
    X
    */
    SQL> exit

2.##ct66rac01
##在目標端配置nfs服務.
    #整個xtts的過程源端產生的資料檔案,增量備份,執行指令碼都是要傳到目標端.透過測試發現,使用nfs的方式將傳輸直接在生成檔案的時候就完成了,方便操作,又減少錯誤.如果不使用nfs,手動去傳也是可以.
    [oracle@ct66rac01 ~]$ mkdir /home/oracle/xtts

    [oracle@ct66rac01 ~]$ su -
    [root@ct66rac01 oracle]# service nfs status
    [root@ct66rac01 ~]# cat /etc/exports
    /home/oracle/xtts *(rw,sync,no_root_squash,insecure,anonuid=500,anongid=500)
    [root@ct66rac01 oracle]# service nfs start

3.##ct6604
##在源端建立測試用的使用者,表空間,表,許可權.
    #此處的許可權和表用於遷移之後的驗證
    [oracle@ct6604 ~]$ ORACLE_SID=ctdb
    [oracle@ct6604 ~]$ sqlplus / as sysdba
    SQL> create tablespace tbs01 datafile '/u02/oradata/ctdb/tbs01.dbf' size 10m autoextend on next 2m maxsize 4g;
    SQL> create tablespace tbs02 datafile '/u02/oradata/ctdb/tbs02.dbf' size 10m autoextend on next 2m maxsize 4g;

    SQL> create user test01 identified by test01 default tablespace tbs01;
    SQL> create user test02 identified by test02 default tablespace tbs02;
    SQL> grant connect,resource to test01;
    SQL> grant connect,resource to test02;
    SQL> grant execute on dbms_crypto to test02;

    SQL> create table test01.tb01 as select * from dba_objects;
    SQL> create table test02.tb01 as select * from dba_objects;
    SQL> grant select on test01.tb01 to test02;
    SQL> exit

4.##ct6604
##在源端連線目標端的nfs,mount到/home/oracle/xtts下.
    [oracle@ct6604 ~]$ mkdir /home/oracle/xtts
    [oracle@ct6604 ~]$ su -
    [root@ct6604 ~]# showmount -e 192.108.56.101
    Export list for 192.108.56.101:
    /home/oracle/xtts *
    [root@ct6604 ~]# mount -t nfs 192.108.56.101:/home/oracle/xtts /home/oracle/xtts

5.##ct6604
##在源端解壓rman-xttconvert指令碼,配置xtts的引數檔案.
    #此處的操作都是在/home/oracle/xtts下,它也目標端nfs是的一個目錄,所以目標端就不需要再配置這些.
    #配置檔案引數說明:tablespaces要傳輸的表空間
                      platformid源端平臺ID,透過V$DATABASE.PLATFORM_ID檢視
                      srcdir,dstdir,srclink是用於透過dbms_file_transfer傳輸的引數,本測試透過rman,不使用
                      dfcopydir源端生成資料檔案的目錄
                      backupformat源端生成增量備份的目錄
                      stageondest目標端存放源資料檔案和增量備份的目錄
                      storageondest目錄端存放目標資料檔案的目錄                  backupondest目標端使用ASM時轉換增量備份的目錄,目標端使用資料檔案建議和stageondest設的一樣,測試發現目標端為ASM也可以把目錄設為和stageondest一樣,因為無需轉換增量備份即可應用增量roll forward
                      parallel,rollparallel,getfileparallel並行度,此處用的預設
                      asm_home,asm_sid目標端使用ASM時,用於指定asm例項的oracle_home,sid.      此測試沒使用的引數:cnvinst_home,cnvinst_sid目標端輔助例項的oracle_home,sid,如果目標端是單獨又裝的11.2.04的軟體,需要指定
                            
    [root@ct6604 xtts]# su - oracle
    [oracle@ct6604 ~]# cd /home/oracle/xtts
    [oracle@ct6604 xtts]$ mkdir  backup script
    [oracle@ct6604 xtts]$ cp /home/oracle/rman-xttconvert_2.0.zip /home/oracle/xtts/
    [oracle@ct6604 xtts]$ unzip rman-xttconvert_2.0.zip
    [oracle@ct6604 xtts]$ mv xtt.properties xtt.properties.bak
    [oracle@ct6604 xtts]$ cat xtt.properties.bak|grep -v ^#|grep -v ^$ >xtt.properties
    [oracle@ct6604 xtts]$ vi xtt.properties
    [oracle@ct6604 xtts]$ cat xtt.properties
    tablespaces=TBS01,TBS02
    platformid=13
    #srcdir=SOURCEDIR1,SOURCEDIR2
    #dstdir=DESTDIR1,DESTDIR2
    #srclink=TTSLINK
    dfcopydir=/home/oracle/xtts/backup
    backupformat=/home/oracle/xtts/backup
    stageondest=/home/oracle/xtts/backup
    storageondest=+DATA
    backupondest=/home/oracle/xtts/backup
    asm_home=/u01/app/11.2.0/grid
    asm_sid=+ASM1
    parallel=3
    rollparallel=2
    getfileparallel=4

6.##ct6604
##在源端執行準備prepare操作
    #此處生成資料檔案和轉換指令碼
    [oracle@ct6604 xtts]$ ORACLE_SID=ctdb
    [oracle@ct6604 xtts]$ TMPDIR=/home/oracle/xtts/script
    [oracle@ct6604 xtts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -p

7.##ct66rac01
##在目標端執行行轉換convert操作
    #因為使用nfs,所以轉換之前源端產生的檔案就無需傳過來,直接執行就可以
    [root@ct66rac01 ~]# su - oracle
    [oracle@ct66rac01 ~]$ cd /home/oracle/xtts
    [oracle@ct66rac01 xtts]$ ORACLE_SID=rac11g1
    [oracle@ct66rac01 xtts]$ TMPDIR=/home/oracle/xtts/script
    [oracle@ct66rac01 xtts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -c

8.##ct6604
##在源端模擬生成新增資料
    [oracle@ct6604 xtts]$ ORACLE_SID=ctdb
    [oracle@ct6604 xtts]$ sqlplus / as sysdba
    SQL> insert into test01.tb01 select * from test01.tb01;
    SQL> insert into test02.tb01 select * from test02.tb01;
    SQL> commit;
    SQL> exit

9.##ct6604
##在源端執行增量備份incremental
    [oracle@ct6604 xtts]$ ORACLE_SID=ctdb
    [oracle@ct6604 xtts]$ TMPDIR=/home/oracle/xtts/script
    [oracle@ct6604 xtts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -i

10.##ct66rac01
##在目標端應用增量roll forward
    #因為使用nfs,所以轉換之前源端產生的檔案就無需傳過來,直接執行就可以
    #應用增量roll forward是應用到轉換後的資料檔案上
    [oracle@ct66rac01 xtts]$ ORACLE_SID=rac11g1
    [oracle@ct66rac01 xtts]$ TMPDIR=/home/oracle/xtts/script
    [oracle@ct66rac01 xtts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -r

11.##ct6604
##在源端模擬生成新增資料,並將要傳輸的表空間設定只讀
    #此時才算開始計算停機時間
    [oracle@ct6604 xtts]$ ORACLE_SID=ctdb
    [oracle@ct6604 xtts]$ sqlplus / as sysdba

    SQL> insert into test01.tb01 select * from test01.tb01;
    SQL> insert into test02.tb01 select * from test02.tb01;
    SQL> commit;

    SQL> alter tablespace tbs01 read only;
    SQL> alter tablespace tbs02 read only;

    SQL> exit

12.##ct6604
##在源端執行最後一次增量備份incremental
    [oracle@ct6604 xtts]$ ORACLE_SID=ctdb
    [oracle@ct6604 xtts]$ TMPDIR=/home/oracle/xtts/script
    [oracle@ct6604 xtts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -i

13.##ct66rac01
##在目標端應用最後一次增量roll forward
    #因為使用nfs,所以轉換之前源端產生的檔案就無需傳過來,直接執行就可以
    [oracle@ct66rac01 ~]$ cd /home/oracle/xtts
    [oracle@ct66rac01 xtts]$ ORACLE_SID=rac11g1
    [oracle@ct66rac01 xtts]$ TMPDIR=/home/oracle/xtts/script
    [oracle@ct66rac01 xtts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -r

14.##ct66rac01
##在目標端產生執行匯入的指令碼
    #因為之前沒有設定dstdir,srclink引數,所以此處產生的匯入指令碼需要手動加上dblink和directory的名稱
    [oracle@ct66rac01 xtts]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e

15.##ct66rac01
##在目標端新建使用者,匯入傳輸表空間
    [oracle@ct66rac01 ~]$ ORACLE_SID=rac11g1
    [oracle@ct66rac01 xtts]$ sqlplus / as sysdba
    SQL> create user test01 identified by test01 ;
    SQL> create user test02 identified by test02 ;
    SQL> grant connect,resource to test01;
    SQL> grant connect,resource to test02;
    SQL> exit

    [oracle@ct66rac01 ~]$ ORACLE_SID=rac11g1
    /home/oracle/xtts/script/xttplugin.txt
    [oracle@ct66rac01 ~]$ impdp directory=dump_oradata nologfile=y network_link=lnk_ctdb transport_full_check=no transport_tablespaces=TBS01,TBS02 transport_datafiles='+DATA/tbs01_5.xtf','+DATA/tbs02_6.xtf'


    Import: Release 11.2.0.4.0 - Production on Fri Jan 15 17:18:14 2016

    Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

    Username: system
    Password:

    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    Data Mining and Real Application Testing options
    Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/******** directory=dump_oradata nologfile=y network_link=lnk_ctdb transport_full_check=no transport_tablespaces=TBS01,TBS02 transport_datafiles=+DATA/tbs01_5.xtf,+DATA/tbs02_6.xtf
    Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
    Processing object type TRANSPORTABLE_EXPORT/TABLE
    Processing object type TRANSPORTABLE_EXPORT/GRANT/OWNER_GRANT/OBJECT_GRANT
    Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
    Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Fri Jan 15 17:19:07 2016 elapsed 0 00:00:48

16.##ct66rac01
##在目標端驗證匯入的資料和許可權和源端是否一致
    #此處發現源端給test02使用者的execute on dbms_crypto許可權沒有匯入,這是impdp原本的問題.所以在做xtts之前就要確定好這些許可權的問題,以減少停機時間.
    [oracle@ct66rac01 xtts]$ sqlplus / as sysdba
    SQL> alter tablespace tbs01 read write;
    SQL> alter tablespace tbs02 read write;
    SQL> alter user test01 default tablespace tbs01;
    SQL> alter user test02 default tablespace tbs02;

    SQL> select count(1) from test01.tb01;
    /*
    COUNT(1)
    345732
    */

    SQL> select * from dba_tab_privs where grantee='TEST02';
    /*
    GRANTEE    OWNER    TABLE_NAME    GRANTOR    PRIVILEGE    GRANTABLE    HIERARCHY
    TEST02    TEST01    TB01    TEST01    SELECT    NO    NO
    */
    #select * from dba_tab_privs where owner ='SYS' and grantee='TEST02';
    SQL> grant execute on dbms_crypto to test02;
    SQL> exit

測試中的一些小問題:
1.報Cant find xttplan.txt, TMPDIR undefined at xttdriver.pl line 1185.
要注意設定環境變數TMPDIR=/home/oracle/xtts/script  
2.Unable to fetch platform name
執行xttdriver.pl之前沒有指定ORACLE_SID
3.Some failure occurred. Check /home/oracle/xtts/script/FAILED for more details
      If you have fixed the issue, please delete /home/oracle/xtts/script/FAILED and run it
      again OR run xttdriver.pl with -L option
執行xttdriver.pl報錯後,下次執行要刪除FAILED檔案.
4.Can't locate strict.pm in @INC
使用$ORACLE_HOME/perl/bin/perl而不是使用perl

備註:
測試完成,比較簡單吧.做好準備工作,透過在源端和目標端執行幾次$ORACLE_HOME/perl/bin/perl xttdriver.pl,再執行impdp就完成.此測試中使用nfs可以省去檔案的傳輸,使用整個操作方便清晰許多.           
減少遷移停機時間的goldengate也是不錯.另外整庫遷移如果平臺不同或相同,但位元組順序相同,可先考慮dataguard,Data Guard Support for Heterogeneous Primary and Physical Standbys in Same Data Guard Configuration (文件 ID 413484.1).



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

相關文章