聊聊Oracle可傳輸表空間(Transportable Tablespace)(上)
我們在Oracle環境中,有很多進行資料備份和移植手段,如exp/imp、expdp/impdp和rman等。在這些方法中,可傳輸表空間(Transportable Tablespace)一直是傳統意義上最快資料移植的技術手段。理想情況下,Transportable Tablespace可以實現近似網路直傳的速率特點。本篇中,我們來介紹一下傳輸表空間技術的一些使用細節。
1、Transportable Tablespace概述
其他傳統意義上的備份遷移手段,大都是遵循“抽取-傳輸-還原”的模式。以expdp為例,Oracle使用專門的內部排程作業,將需要匯出的資料(Used Block)轉化為dmp格式檔案進行儲存儲存。之後,透過網路進行傳輸到Target Envionment,最後再還原到新環境上。這種模式的加速最佳化,主要體現在抽取和還原上,如使用並行等手段。
而Transportable Tablespace完全不是這樣的概念。如果比喻的話,它類似一種Portable/Plugin的理念。相同平臺、字符集的表空間,完全可以將資料檔案直接複製到Target Environment。Oracle層面只需要讓資料字典知道這些資料的metadata就可以了。
相對於其他手段,Transportable Tablespace最大的好處就在於不需要進行繁複的抽取和還原過程,而且對中間環境的空間要求很小。下面透過一系列的實驗來進行演示。
2、環境準備和前提條件
Oracle Transportable Tablespace(以下簡稱為TTS)出現的很早。傳統的TTS有三個層面基礎限制,分別為:
ü 表空間內容self contained。我們一次性匯出的表空間(一個或者多個),不能在其他表空間中存在依賴物件。比如,我們常常將一個資料表資料和索引分佈在不同的表空間上,這樣如果我們使用Transportable Tablespace,就要求必須將這些表空間一次性全部匯出;
ü Source和Target DB的Character Set、National Character Set必須完全相同;
ü 作業系統Source Target DB要求相容。注意:在10g以上版本,這個限制已經取消;
我們會在下面更加直觀的介紹這些約束和檢查方法。由於筆者環境的限制,一些實驗只能在一臺伺服器上進行。具體實驗選擇Oracle 11gR2。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
--構造兩個實驗表空間
SQL> create tablespace ttstbl datafile size 10m autoextend on
2 extent management local uniform. size 1m
3 segment space management auto;
Tablespace created
SQL> create tablespace ttsind datafile size 10m autoextend on
2 extent management local uniform. size 1m
3 segment space management auto;
Tablespace created
--測試使用者
SQL> create user test identified by test default tablespace ttstbl;
User created
SQL> grant resource, connect to test;
Grant succeeded
SQL> grant select_catalog_role to test;
Grant succeeded
使用test使用者在表空間中建立一些物件。
SQL> conn test/test@ora11gp;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as test
SQL> create table t tablespace ttstbl as select * from dba_objects;
Table created
SQL> create index idx_t_id on t(object_id) tablespace ttsind;
Index created
3、Pre-Condition Check
作為先決條件,首選確定Source資料庫的字符集資訊。
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
VALUE
--------------------
AL32UTF8
SQL> select value from nls_database_parameters where parameter='NLS_NCHAR_CHARACTERSET';
VALUE
--------------------
AL16UTF16
希望匯出新建立的表空間ttsind和ttstbl。
SQL> select file_name, tablespace_name from dba_data_files where tablespace_name like 'TTS%';
FILE_NAME TABLESPACE_NAME
-------------------------------------------------------------------------------- ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf TTSTBL
/u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf TTSIND
[oracle@bsplinux datafile]$ ls -l
total 2095500
(篇幅原因,省略部分內容)
-rw-r----- 1 oracle oinstall 10493952 Nov 19 18:04 o1_mf_ttsind_8bmyjz69_.dbf
-rw-r----- 1 oracle oinstall 20979712 Nov 19 17:59 o1_mf_ttstbl_8bmyjf3w_.dbf
-rw-r----- 1 oracle oinstall 267395072 Nov 19 18:13 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 11804672 Nov 19 17:29 o1_mf_users_7vpyc2xd_.dbf
傳統的約束條件中,作業系統平臺OS是使用TTS不能迴避的因素。Oracle將支援平臺劃分為兩個大型別Big和Little,同平臺之間可以進行自由表空間移植,異平臺之間不允許進行移植。注意:這個限制在Oracle 10g之後被打破。具體我們後面詳細介紹。
我們可以透過查詢v$transportable_platform來確定系統之間是否相容。
SQL> col platform_name for a30;
SQL> select platform_name, ENDIAN_FORMAT from v$transportable_platform;
PLATFORM_NAME ENDIAN_FORMAT
------------------------------ --------------
Solaris[tm] OE (32-bit) Big
Solaris[tm] OE (64-bit) Big
Microsoft Windows IA (32-bit) Little
Linux IA (32-bit) Little
AIX-Based Systems (64-bit) Big
HP-UX (64-bit) Big
HP Tru64 UNIX Little
HP-UX IA (64-bit) Big
Linux IA (64-bit) Little
HP Open VMS Little
Microsoft Windows IA (64-bit) Little
IBM zSeries Based Linux Big
Linux x86 64-bit Little
Apple Mac OS Big
Microsoft Windows x86 64-bit Little
Solaris Operating System (x86) Little
IBM Power Based Linux Big
HP IA Open VMS Little
Solaris Operating System (x86- Little
64)
Apple Mac OS (x86-64) Little
20 rows selected
對於自己的資料庫,v$database檢視中可以查詢自己的平臺情況資訊。
SQL> select PLATFORM_ID , PLATFORM_NAME from v$database;
PLATFORM_ID PLATFORM_NAME
----------- ------------------------------
10 Linux IA (32-bit)
確定平臺相容之後,我們需要確定一次移植的表空間之間是否“Self Contained”。Oracle提供的dbms_tts包方法來進行驗證。
SQL> exec dbms_tts.transport_set_check('ttstbl, ttsind',true);
PL/SQL procedure successfully completed
SQL> select * from transport_set_violations;
VIOLATIONS
--------------------------------------------------------------------------------
如果驗證出現錯誤,我們可以在transport_set_violations中查詢到提示資訊。只有解決了self contained問題,才能繼續下面的步驟。
4、環境資料匯出
為了控制變化,我們需要將表空間設定為只讀。具體語句為:alter tablespace xxx read only。
SQL> select tablespace_name, status from dba_tablespaces where tablespace_name like 'TTS%';
TABLESPACE_NAME STATUS
------------------------------ ---------
TTSIND READ ONLY
TTSTBL READ ONLY
Oracle TTS需要使用exp/expdp將表空間的後設資料Metadata資訊匯出為dmp檔案,用於描述表空間資訊。注意,這個過程時間很短,而且生成的dmp檔案通常很小。
[root@bsplinux ~]# cd /
[root@bsplinux /]# mkdir transtts
[root@bsplinux /]# chown -R oracle:oinstall transtts/
[root@bsplinux /]# ls -l | grep transtts
drwxr-xr-x 2 oracle oinstall 4096 Nov 19 18:19 transtts
[root@bsplinux /]#
Exp支援了TTS工作方法。
[oracle@bsplinux transtts]$ exp userid=\"/ as sysdba\" transport_tablespace=y tablespaces=ttstbl,ttsind file=ttsdmp.dmp log=res.log statistics=none
Export: Release 11.2.0.1.0 - Production on Mon Nov 19 19:32:14 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in AL32UTF8 character set and AL16UTF16 NCHAR character set
Note: table data (rows) will not be exported
About to export transportable tablespace metadata...
For tablespace TTSTBL ...
. exporting cluster definitions
. exporting table definitions
. . exporting table T
For tablespace TTSIND ...
. exporting cluster definitions
. exporting table definitions
. exporting referential integrity constraints
. exporting triggers
. end transportable tablespace metadata export
Export terminated successfully without warnings.
之後,我們只需要直接將資料檔案複製出來。
SQL> select 'cp '||file_name ||' /transtts' from dba_data_files where tablespace_name like 'TTS%';
'CP'||FILE_NAME||'/TRANSTTS'
--------------------------------------------------------------------------------
cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf /transtts
cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf /transtts
[oracle@bsplinux transtts]$ cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf /transtts
cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf /transtts
[oracle@bsplinux transtts]$ cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf /transtts
[oracle@bsplinux transtts]$
[oracle@bsplinux transtts]$ ls -l
total 30796
-rw-r----- 1 oracle oinstall 10493952 Nov 19 19:35 o1_mf_ttsind_8bmyjz69_.dbf
-rw-r----- 1 oracle oinstall 20979712 Nov 19 19:35 o1_mf_ttstbl_8bmyjf3w_.dbf
-rw-r--r-- 1 oracle oinstall 724 Nov 19 19:33 res.log
-rw-r--r-- 1 oracle oinstall 16384 Nov 19 19:33 ttsdmp.dmp
/transtts目錄中,儲存了所有需要還原資料庫的資訊。
5、資料環境恢復
我們需要將資料檔案透過FTP/SFTP傳輸到目標資料庫伺服器上。筆者先將資料環境還原,因為使用的是相同的資料庫。
SQL> drop tablespace ttstbl including contents and datafiles;
Tablespace dropped
SQL> drop tablespace ttsind including contents and datafiles;
Tablespace dropped
SQL> select file_name from dba_data_files where tablespace_name like 'TTS%';
FILE_NAME
--------------------------------------------------------------------------------
Source資料庫已經沒有TTS表空間了。下面,我們將資料檔案複製到新位置,並且匯入Metadata資訊。
[oracle@bsplinux transtts]$ cp o1_mf_ttstbl_8bmyjf3w_.dbf /u01/app/oradata/ORA11G/datafile/
[oracle@bsplinux transtts]$ cp o1_mf_ttsind_8bmyjz69_.dbf /u01/app/oradata/ORA11G/datafile/
[oracle@bsplinux datafile]$ ls -l
total 2095500
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:48 mytesttbl01.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:48 mytesttbl02.dbf
-rw-r----- 1 oracle oinstall 104865792 Nov 19 17:29 o1_mf_rman_ts_87bx5kcg_.dbf
-rw-r----- 1 oracle oinstall 838868992 Nov 19 19:46 o1_mf_sysaux_7vpyc2hb_.dbf
-rw-r----- 1 oracle oinstall 807411712 Nov 19 19:43 o1_mf_system_7vpyc1x7_.dbf
-rw-r----- 1 oracle oinstall 60825600 Nov 19 18:02 o1_mf_temp_7vpz05do_.tmp
-rw-r----- 1 oracle oinstall 10493952 Nov 19 19:47 o1_mf_ttsind_8bmyjz69_.dbf
-rw-r----- 1 oracle oinstall 20979712 Nov 19 19:46 o1_mf_ttstbl_8bmyjf3w_.dbf
-rw-r----- 1 oracle oinstall 267395072 Nov 19 19:47 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 11804672 Nov 19 17:29 o1_mf_users_7vpyc2xd_.dbf
Imp命令匯入。
[oracle@bsplinux transtts]$ imp userid=\'/ as sysdba\' file=ttsdmp.dmp transport_tablespace=y tablespaces=ttsind,ttstbl datafiles=/u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf,/u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf
Import: Release 11.2.0.1.0 - Production on Mon Nov 19 19:51:25 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export file created by EXPORT:V11.02.00 via conventional path
About to import transportable tablespace(s) metadata...
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
. importing SYS's objects into SYS
. importing SYS's objects into SYS
. importing TEST's objects into TEST
. . importing table "T"
. importing SYS's objects into SYS
Import terminated successfully without warnings.
[oracle@bsplinux transtts]$
匯入後設資料後,Oracle中可以確定匯入的表空間了。
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name like 'TTS%';
FILE_NAME TABLESPACE_NAME
-------------------------------------------------------------------------------- ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf TTSIND
/u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf TTSTBL
SQL> conn test/test@ora11gp
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as test
SQL> select count(*) from t;
COUNT(*)
----------
72348
注意,匯入後的表空間還是read only狀態,需要開啟。
SQL> alter tablespace ttsind read write;
Tablespace altered
SQL> alter tablespace ttstbl read write;
Tablespace altered
上面我們給出了一個簡單的TTS例子。對TTS來說,還有很多細節和複雜應用場景,留待後面繼續。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2145045/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 聊聊Oracle可傳輸表空間(Transportable Tablespace)(中)Oracle
- 聊聊Oracle可傳輸表空間(Transportable Tablespace)(下)Oracle
- MySQL Transportable Tablespace(傳輸表空間) 使用詳解MySql
- Oracle可傳輸表空間測試Oracle
- oracle可傳輸表空間TTS小結OracleTTS
- Oracle 表空間傳輸Oracle
- oracle表空間傳輸Oracle
- Oracle傳輸表空間Oracle
- 利用oracle10g_rman_convert_transportable tablespace遷移表空間Oracle
- 傳輸表空間操作-OracleOracle
- Oracle傳輸表空間(TTS)OracleTTS
- Oracle 傳輸表空間-RmanOracle
- 關於oracle可傳輸表空間的總結Oracle
- Oracle 10g的可傳輸表空間操作Oracle 10g
- 基於可傳輸表空間的表空間遷移
- 5.7 mysql的可傳輸表空間MySql
- Oracle傳輸表空間學習Oracle
- Oracle 傳輸表空間-EXPDP/IMPDPOracle
- Oracle 傳輸表空間-EXP/IMPOracle
- Oracle表空間傳輸詳解Oracle
- 使用Oracle可傳輸表空間的特性複製資料(7)實戰RMAN備份傳輸表空間Oracle
- 用可傳輸表空間實現Oracle跨平臺移植Oracle
- oracle 傳輸表空間一例Oracle
- 使用RMAN實現可傳輸的表空間
- 【TABLESPACE】Oracle表空間最佳實踐Oracle
- Oracle基礎 01 表空間 tablespaceOracle
- MySQL 傳輸表空間MySql
- MySQL表空間傳輸MySql
- 【XTTS】Oracle傳輸表空間xtts增量方式TTSOracle
- oracle表空間傳輸的限制條件Oracle
- 【TABLESPACE】Oracle 表空間結構說明Oracle
- oracle的臨時表空間temporary tablespaceOracle
- 【Oracle】oracle tablespace&datafile -- oracle表空間 分享[轉]Oracle
- Oracle 10g的可傳輸表空間操作(轉並驗證)Oracle 10g
- mysql之 表空間傳輸MySql
- 總結-表空間傳輸
- Oracle TTS ORA-39322: 表空間傳輸OracleTTS
- 表空間配額和UNLIMITED TABLESPACE許可權MIT