使用可傳輸表空間向rac環境遷移資料

StudyCow發表於2008-09-09

可傳輸表空間,是一種快速的轉移資料的方式,基本過程如下:

1、檢查表空間的自包含性
2、使用exp(expdp)匯出表空間的後設資料,這個過程很快
3、將表空間置於read only模式,防止資料寫入
4、將包含後設資料的dmp檔案和表空間資料檔案複製到目標庫上
5、使用imp(imdp)匯入到後設資料

例子中說明了,如何使用可傳輸表空間向rac環境遷移資料.

[@more@]

可傳輸表空間,是一種快速的轉移資料的方式,基本過程如下:

1、檢查表空間的自包含性
2、使用exp(expdp)匯出表空間的後設資料,這個過程很快
3、將表空間置於read only模式,防止資料寫入
4、將包含後設資料的dmp檔案和表空間資料檔案複製到目標庫上
5、使用imp(imdp)匯入到後設資料

如果與目標庫的資料檔案路徑不一致、或位元組順序不一致,或可以透過rman工具進行轉換。位元組順序是指作業系統儲存多位元組二進位制資料的方式,可以查詢位元組順序:
SQL> select * from v$transportable_platform order by platform_id;

PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- -------------------------------------------------------------------------------- --------------
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
3 HP-UX (64-bit) Big
4 HP-UX IA (64-bit) Big
5 HP Tru64 UNIX Little
6 AIX-Based Systems (64-bit) Big
7 Microsoft Windows IA (32-bit) Little
8 Microsoft Windows IA (64-bit) Little
9 IBM zSeries Based Linux Big
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
12 Microsoft Windows 64-bit for AMD Little
13 Linux 64-bit for AMD Little
15 HP Open VMS Little
16 Apple Mac OS Big
17 Solaris Operating System (x86) Little
18 IBM Power Based Linux Big

上述平臺中,只要位元組順序相同,資料檔案就不需要轉換,如linux 64bit到windows平臺。


可傳輸表空間有如下限制:

1、源和目標資料庫必須處於相同的平臺,在10g中,這條約束被放寬了;
2、源和目標資料庫必須使用相同的字符集和國家字符集;
3、目標資料庫不能已經包含同名的表空間;
4、目標資料庫中必須已經存在傳輸表空間中物件的使用者
5、傳輸表空間必須是自包含的,否則需要相關的表空間一起傳輸,比如:表在一個表空間,而索引在另外一個表空間,這兩個表空間必須一起傳輸.
6、傳輸表空間無法處理同義詞、使用者、許可權

下面是oracle 10g for windows單例項到oracle 11g rac for linux環境的表空間傳輸的實驗:

環境如下:

源 庫: oracle 10g R2 for Windows 32bit
目標庫: oracle 11g RAC for linux as4 64bit

-------------------------------------------------------------------------------------------------------------------------------------
1.建立測試表空間

SQL> create tablespace ts_test datafile 'D:oracleproduct10.2.0oradataorclts_test.dbf' size 10m;

Tablespace created

SQL> create table test tablespace ts_test as select * from dba_objects;

Table created

SQL> select count(*) from test;

COUNT(*)
----------
53390

SQL>

2.設定為只讀模式

SQL> alter tablespace ts_test read only;

Tablespace altered

3.檢查表空間自包含性,是完全自包含的:

SQL> exec sys.dbms_tts.transport_set_check('ts_test',true);

PL/SQL procedure successfully completed

SQL> select * from sys.transport_set_violations;

VIOLATIONS
--------------------------------------------------------------------------------


4.使用exp或exdp匯出表空間的後設資料
C:>exp 'sys/zlsoft as sysdba' tablespaces=ts_test transport_tablespace=y file=d:backupexp_ts_test.dmp

Export: Release 10.2.0.1.0 - Production on 星期二 9月 9 16:01:33 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.


連線到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已匯出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
注: 將不匯出表資料 (行)
即將匯出可傳輸的表空間後設資料...
對於表空間 TS_TEST...
. 正在匯出簇定義
. 正在匯出表定義
. . 正在匯出表 TEST
. 正在匯出引用完整性約束條件
. 正在匯出觸發器
. 結束匯出可傳輸的表空間後設資料
成功終止匯出, 沒有出現警告。


5. 將dmp檔案和資料檔案複製到linux伺服器上


6. 使用rman進行資料檔案格式轉換,由於RAC環境使用了ASM,只有透過rman工具將資料檔案加入到ASM中,這裡ASM磁碟組的名稱為DATA

RMAN> convert datafile '/backup/TS_TEST.DBF' format '+DATA/orcl/datafile/ts_test01.dbf';
Starting conversion at target at 09-SEP-08
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=141 instance=orcl1 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=122 instance=orcl1 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=106 instance=orcl1 device type=DISK
channel ORA_DISK_1: starting datafile conversion
input file name=/backup/TS_TEST.DBF
converted datafile=+DATA/orcl/datafile/ts_test01.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
Finished conversion at target at 09-SEP-08

Starting Control File and SPFILE Autobackup at 09-SEP-08
piece handle=+DATA/orcl/autobackup/2008_09_09/s_664992614.411.664992623 comment=NONE
Finished Control File and SPFILE Autobackup at 09-SEP-08


注意:
從10g開始,支援低版本資料檔案到高版本的傳輸,9i->10g->11g,但只能跨越一個大的版本,也就是說11g不能識別9i的資料檔案。否則在用rman進行轉換時,會出現如下的錯誤:
RMAN> convert datafile '/backup/TS_TEST01.DBF' format '+DATA/orcl/datafile/ts_test01.dbf';

Starting conversion at target at 09-SEP-08
using channel ORA_DISK_1
using channel ORA_DISK_2
using channel ORA_DISK_3
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of conversion at target command at 09/09/2008 15:48:55
ORA-19942: datafile copy /backup/TS_TEST01.DBF not created with compatibility 10.0 or greater


7.在目標庫執行imp操作,注意指定正確的datafiles引數

[oracle@rac1 backup]$ imp file='/backup/exp_ts_test.dmp' tablespaces=ts_test transport_tablespace=y datafiles='+DATA/orcl/datafile/ts_test01.dbf'

Import: Release 11.1.0.6.0 - Production on Tue Sep 9 16:24:06 2008

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Username: sys/zlsoft as sysdba

Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

Export file created by EXPORT:V10.02.01 via conventional path
About to import transportable tablespace(s) metadata...
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses ZHS16GBK character set (possible charset conversion)
export client uses ZHS16GBK character set (possible charset conversion)
. importing SYS's objects into SYS
. importing SYS's objects into SYS
. importing ZLHIS's objects into ZLHIS
. . importing table "TEST"
. importing SYS's objects into SYS
Import terminated successfully with warnings.
[oracle@rac1 backup]$

--驗證一下
SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
UNDOTBS2
TOOLS
HXB
TEST
TS_TEST

10 rows selected.

SQL> select count(*) from zlhis.test;

COUNT(*)
----------
53390

SQL>


最後就是記得將源庫的表空間設定為read write模式。

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

相關文章