【資料遷移】XTTS跨平臺傳輸表空間v3(2.RMAN增量)

恩強Boy發表於2020-07-26

 

一、  XTTS 概述

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

XTTS 有三種方式:傳統方式、 RMAN 增量方式、 DFT 方式( DBMS_FILE_TRANSFER )。本文演示為 RMAN 增量方式。

二、  規劃

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

1.  準備階段

在準備階段中,表空間的資料檔案副本最終要傳輸到目標系統(如果跨位元組格式需要自動convert )。

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

2.  前滾階段

在上一步準備階段中,資料檔案副本已經傳輸到目標端。在前滾階段中,將使用增量備份來進行前滾。可以執行多次此步驟,並且每次的增量備份會變得越來越小,目標端應用也會越來越快,直到目標庫資料與源庫資料同步。

3.  傳輸階段

在傳輸階段中,被傳輸的表空間需要被設定為read only 模式,然後在源庫做最後一次增量備份,應用到目標庫中,讓目標庫的資料與源庫保持一致。然後從源庫中使用 Datapump 匯出後設資料,並匯入到目標庫中。最後,傳輸到目標庫的表空間需要設定為 read write

三、  傳輸限制

ü  主庫作業系統不支援windows

ü  源庫必須在10.2.0.3 版本或以上;

ü  源庫的compatible 引數在 10.2.0 或以上;

ü  源庫的compatible 引數必須不能比目標庫大(向下相容);

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

ü  目標庫必須在11.2.0.4 或以上;

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

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

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

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

四、  思路清晰

1.  初始化設定階段

- 目標端安裝資料庫軟體並建立資料庫

- 源庫表空間自包含檢查

- 目標庫建立使用者,賦予許可權

- 源端上傳 zip 軟體包,修改 xtt.properties 配置檔案

2.  準備階段

- 源端建立資料檔案副本

- 將資料檔案副本傳輸到目標端

- 目標端轉換資料檔案副本

3.  前滾階段

- 源端建立表空間增量備份集

- 將增量備份集傳輸到目標端

- 轉換增量備份集並應用到目標庫

- 確定下次增量備份的 SCN

- 重複前滾階段(可選)

4.  傳輸階段

- 源庫將表空間設定為 read only

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

- 將增量備份集傳到目標端,並應用到目標庫

- 源庫匯出後設資料

- 目標庫匯入後設資料

- 將表空間設定為 read write

- 壞塊驗證,資料驗證

五、  操作步驟

1.  初始化設定階段

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

2)  源庫表空間自包含檢查

SQL> execute dbms_tts.transport_set_check('tbs1,tbs2',true);

SQL> select * from transport_set_violations;

如果上述沒結果,那麼說明該表空間不存在自包含。

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

源庫檢查使用者資訊

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 '));

4)  備庫按照上述結果,建立使用者及分配許可權,示例如下:

SQL> create user TBS1 identified by oracle;

SQL> grant RESOURCE to TBS1;

SQL> grant CONNECT to TBS1;

5)  源端新建目錄/home/oracle/xtt 。上傳 rman_xttconvert_v3.zip 檔案到 xtt 目錄下,並賦予許可權。

# mkdir /home/oracle/xtt s

# chown -R oracle:dba /home/oracle/xtt s /

oracle 使用者解壓 zip

$ cd /home/oracle/xtt s /

$ unzip rman_xttconvert_v3.zip

6)  編輯xtt.properties 檔案(重要!)

按照下面內容進行修改:

tablespaces= TBS1,TBS2

platformid=13

dfcopydir=/home/oracle/xtts/bak

backupformat=/home/oracle/xtts/bakincr

stageondest=/home/oracle/xtts/bak

storageondest=+DATA/ ORCL /datafile

backupondest=+DATA/ ORCL /datafile

asm_home=/u01/app/ 11.2.0/grid

asm_sid=+ASM 1

parallel= 8

rollparallel= 4

getfileparallel= 4

desttmpdir=/home/oracle/xtts

引數說明:

源端建立目錄:

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

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

目標端建立目錄

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

7)  源端和目標端設定TMPDIR

oracle 使用者環境變數)

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

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

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

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

2.  準備階段

在這個階段,源端傳輸的表空間資料檔案副本會被建立和轉換位元組格式。並且這些檔案會被傳輸到目標資料庫。這個階段只執行一次即可。

1)  源端執行下面命令

$ perl xttdriver.pl -p

這個命令會產生以下結果:

(注:下述目錄都寫在xtt.properties 配置檔案中)

建立表空間資料檔案副本到 dfcopydir 目錄下;

確認表空間處於online 模式, read write ;並且不包含離線資料檔案;

新建以下兩個檔案:xttplan.txt,rmanconvert.cmd

2)  傳輸資料檔案副本到目標端

將上一步生成的資料檔案副本傳輸到目標端,資料檔案副本位於 dfcopydir 目錄下。在目標端資料檔案必須存放在 stageondest 目錄下。

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

3)  目標端轉換資料檔案副本

將源端產生的rmanconvert.cmd 傳輸到目標端 xtts 目錄下

$ scp rmanconvert.cmd 172.16.70.170:/home/oracle/xtts/

目標端執行以下命令

$ perl xttdriver.pl -c

這個命令會將 stageondest 目錄下的資料檔案轉換成目標端位元組格式。這些檔案轉換後會被寫在 storageondest 目錄下。這個命令執行完畢後, stageondest 這裡面的資料檔案就沒用了,可以選擇刪除。

3.  前滾階段

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

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

源庫執行以下命令

$ perl xttdriver.pl -i

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

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

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

將上一步驟產生的增量備份集傳輸到目標端 stageondest 目錄

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

3)  轉換增量備份集並應用到目標庫

源端複製xttplan.txt,tsbkupmap.txt 到目標端。

$ scp xttplan.txt tsbkupmap.txt 172.16.70.170:/home/oracle/xtts/

目標端執行以下命令

$ perl xttdriver.pl -r

如果命令報以下錯誤,請到 backupondest 去檢視是否有備份檔案,如果有,忽視這個錯誤。

Error:

------

No tablepsace entries found

注:

ü  每次做增量的時候,都要複製xttplan.txt tsbkupmap.txt 這兩個檔案到目標端。

ü  源端xttplan.txt.new 不要做任何複製或改動

ü  目標例項會被關閉和重啟

4)  確定下次增量備份的scn

源庫執行下面指令碼

$ perl xttdriver.pl -s

確定一個新的scn, 記錄在 xttplan.txt 檔案中。

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

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

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 -i

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

$ scp xttplan.txt tsbkupmap.txt 172.16.70.170:/home/oracle/xtts/

3)  目標端最後一次應用

$ perl xttdriver.pl -r

4)  源庫匯出後設資料

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

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

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

6)  目標庫匯入後設資料

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 ;

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

SQL> select tablespace_name,file_name from dba_data_files;

SQL> alter tablespace tbs1 read write;

SQL> alter tablespace tbs2 read write;

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

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

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

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

RMAN> validate tablespace tbs1,tbs2 check logical;

驗證資料略

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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

相關文章