【資料遷移】XTTS跨平臺傳輸表空間v4

恩強Boy發表於2020-07-29

一、  XTTS 概述

XTTS Cross-Platform transport tablespace )意為跨平臺傳輸表空間。 XTTS 實際上是 TTS 的增強功能。 TTS 意為傳輸表空間,原理是將業務表空間從一個庫傳到另一個庫,以達到資料遷移的目的。 XTTS 則可以支援跨平臺位元組格式、增量進行傳輸(跨平臺傳輸表空間僅支援 oracle 11g 或以上)。

本文采用xtts v4 版本,並且使用 RMAN 增量備份的方式進行兩庫之間遷移表空間,以實現最少的停機時間。

二、 規劃

源庫使用RMAN 增量 xtts 遷移表空間 tbs1 & tbs2 到目標庫。整個操作步驟分為準備階段、前滾階段、傳輸階段。

在準備階段中,需要準備一個軟體包:rman_xttconvert_VER4.zip 。將這個 zip 包解壓後,裡面會有一個 xttdriver.pl 指令碼。指令碼功能及引數如下:

三、  傳輸限制

ü  主庫作業系統不支援windows

ü  xtts v4 版本僅支援 oracle 11.2.0.4 或以上

ü  源庫的compatible 引數必須不能比目標庫大(向下相容),因此, XTTS 可以用於升級操作;

ü  源庫必須處於歸檔模式;

ü  源庫RMAN 預設裝置型別需要配置為 DISK ,且 RMAN 的配置不能設定 COMPRESSED ,如果設定了,可能會報以下錯誤:

ORA-19994 cross-platform backup of compressed backups different endianess

ü  源庫RMAN 配置不能設定為 BACKUP TYPE TO COPY, 必須配置為 BACKUP TYPE TO BAKCUPSET

ü  源庫RMAN 配置不能配置預設通道配置為 SBT

ü  被傳輸的表空間必須是online ,並且不存在 offline 資料檔案。該表空間必須是 read write

ü  如果表空間是read only 模式,那就沒必要使用 RMAN 增量和 DFT 方式遷移了,可以直接用傳統 XTTS 方式進行遷移。

ü  ASM 只能被用於目標端最終存放路徑,這個版本 xtts 不能將備份放在 ASM 上;

ü  目標存放備份的位置,oracle 使用者必須有讀寫許可權。

四、  思路清晰

1. 準備階段

1)  建立表空間0 級備份;

2)  源端傳輸備份檔案到目標端;

3)  以目標端位元組格式,還原資料檔案到目標端;

2. 前滾階段

1)  源庫建立增量備份;

2)  傳輸增量備份和必要檔案到目標端;

3)  目標端轉換增量備份,並應用備份為目標庫資料檔案;

4)  重複上述操作,直到準備進行最後的表空間傳輸。

3. 傳輸階段

1)  源庫中表空間設定為read only

2)  最後一次執行前滾階段;

3)  目標端使用DataPump 匯入後設資料物件;

4)  目標庫設定表空間為read write

五、  操作步驟

1.  初始化設定階段

1)  目標端安裝資料庫軟體並建立資料庫,要求字符集和國家集與源庫保持一致,並且資料庫軟體版本不小於源庫。

2)  確認目標庫建立相應的使用者,並賦予許可權

源庫檢查使用者資訊

SQL> select 'create user '||username||' identified by '||''''||password||''''||';' from dba_users where default_tablespace in(' TBS1 ' , ' TBS2 ');

源庫檢查角色許可權

SQL> select 'grant '||GRANTED_ROLE||' to '||grantee||';' from dba_role_privs where grantee in(select username from dba_users where default_tablespace in(' TBS1 ' , ' TBS2 '));

目標庫根據上述查詢結果進行建立。

3)  解壓 rman_xttconvert_VER4.zip /home/oracle/xtts 目錄

$ cd /home/oracle/xtts

$ unzip rman_xttconvert_VER4.zip

4)  配置xtt.properties 檔案

tablespaces=tbs1,tbs2

platformid=13

src_scratch_location=/home/oracle/xtts/bak

dest_datafile_location=+DATA/ORCL/datafile

dest_scratch_location=/home/oracle/xtts/bak

asm_home=/u01/app/11.2.0/grid

asm_sid=+ASM1

parallel=2

引數說明:

源庫、目標庫建立目錄:

$ mkdir -p /home/oracle/xtts/bak

5)  源端將/home/oracle/xtts 下所有檔案傳給目標端

$ scp -r /home/oracle/xtts/*  172.16.70.170:/home/oracle/xtts/

6)  源端和目標端設定TMPDIR

oracle 使用者環境變數)

源庫:$export TMPDIR=/home/oracle/xtts

目標庫:$export TMPDIR=/home/oracle/xtts

2.  準備階段

在這個階段,源端表空間資料檔案會備份,備份會傳輸到目標端

1)  源端建立備份

執行以下命令

$ perl xttdriver.pl --backup

這個命令會執行以下動作:

 - 建立備份,並放置在 src_scratch_location 目錄中

  - 建立 res.txt 檔案,放置在 TMPDIR

2)  將第一步產生的檔案傳到目標端

$ scp res.txt 172.16.70.170:/home/oracle/xtts/

$ scp /home/oracle/xtts/bak/* 172.16.70.170:/home/oracle/xtts/bak/

注:資料檔案要傳在目標端 dest_scratch_location 目錄中,res.txt 要傳在目標端 TMPDIR 中。

3)  目標端還原資料檔案

執行以下命令

$ perl xttdriver.pl --restore

當這一步完成,資料檔案將會被傳輸到目標端 dest_datafile_location 最終位置。

3. 前滾階段

在這個階段中,源庫會建立一個增量備份,傳輸到目標庫。並且會轉換為目標庫位元組格式,並應用於目標庫。這個階段可以執行多次,每一個成功的增量備份所花的時間應該比之前的要少,並且使目標庫的資料與源庫更接近。

1)  源庫建立表空間的增量備份集

源庫執行以下命令

$ perl xttdriver.pl --backup

這個命令會對傳輸的表空間產生一個增量備份集。備份集位於 src_scratch_location 目錄中。

並且會產生兩個檔案:tsbkupmap.txt,incrbackups.txt

2)  傳輸增量備份集到目標端

將上一步驟產生的增量備份集傳輸到目標端 dest_scratch_location 目錄,res.txt 要傳在目標端 TMPDIR 中。

$ scp `cat incrbackups.txt`  172.16.70.170:/home/oracle/xtts/bak/

$ scp res.txt 172.16.70.170:/home/oracle/xtts/

3)  目標端執行以下命令

$ perl xttdriver.pl --restore

目標端給表空間資料檔案應用增量備份。

4)  重複前滾階段(可選)

如果你需要使目標庫更接近源庫,則需要重複進行前滾階段;如果目標庫已經足夠接近源庫,那就直接進行傳輸階段。

4.  傳輸階段

在傳輸階段,源庫需要被設定為read only 模式,目標庫會被應用最後一次增量備份。在目標資料檔案一致後,將執行一次普通的傳輸表空間的步驟,從源庫匯出後設資料物件並匯入目標庫。在此階段結束之前,源庫只能透過 read only 方式訪問資料。

1)  源庫將表空間設定read only

SQL> alter tablespace tbs1 read only;

SQL> al t er tablespace tbs2 read only;

2)  源庫建立最後一次增量備份集

$ perl xttdriver.pl - -backup

注;由於表空間設定為read only ,執行備份會警告:

####################################################################

Warning:

------

Warnings found in executing /home/oracle/xtts/backup_Jul28_Tue_14_33_57_440//xttpreparenextiter.sql

####################################################################

Prepare newscn for Tablespaces: 'TBS2'

DECLARE*

ERROR at line 1:

ORA-20001: TABLESPACE(S) IS READONLY OR,

OFFLINE JUST CONVERT, COPY

ORA-06512: at line 284

3)  傳輸至目標端

$ scp `cat incrbackups.txt` 172.16.70.170:/home/oracle/xtts/bak/

$ scp res.txt 172.16.70.170:/home/oracle/xtts/

4)  目標端最後一次應用

$ perl xttdriver.pl --restore

5)  源庫匯出後設資料

SQL> create directory xtts _dir  as '/home/oracle/xtts /bak ';

$ expdp system/oracle dumpfile= x tts.dmp directory=xtts _dir  logfile=expdp_xtts.log transport_tablespaces=tbs1,tbs2 exclude=statistics;

匯出其他物件

$ expdp system/oracle directory=xtts _dir  dumpfile=expdp_other_mets.dmp logfile=expdp_other_meta.log content=metadata_only schemas=tbs1,tbs2

6)  將匯出的dmp 檔案傳輸到目標端同目錄

$ scp * .dmp  172.16.70.170:/home/oracle/xtts/ bak/

7)  目標庫匯入後設資料

SQL> create directory xtts _dir  as '/home/oracle/xtts /bak ';

$ impdp system/oracle dumpfile= x tts.dmp directory=xtts _dir  transport_tablespace=y datafiles='+DATA/orcl/datafile/tbs1_5.dbf','+DATA/orcl/datafile/tbs2_6.dbf';

匯入其他物件後設資料

$ impdp system/oracle dumpfile=expdp_other_mets.dmp directory=xtts _dir ;

8)  目標庫設定表空間read write

SQL> select tablespace_name,file_name from dba_data_files;

SQL> alter tablespace tbs1 read write;

SQL> alter tablespace tbs2 read write;

9)  目標庫統計資訊手工收集

SQL> exec dbms_stats.gather_schema_stats(ownname => ' tbs1 ',options => 'GATHER AUTO');

SQL> exec dbms_stats.gather_schema_stats(ownname => ' tbs2 ',options => 'GATHER AUTO');

10)  檢查物理和邏輯塊損壞,並驗證資料

RMAN> validate tablespace tbs1,tbs2 check logical;

驗證資料略

 

 

 

 

-------- end --------


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

相關文章