關於oracle可傳輸表空間的總結
傳輸表空間綜述:
不論是資料字典管理的表空間還是本地管理的表空間,都可以使用傳輸表空間技術;從9i開始傳輸表空間不需要在源資料庫和目標資料庫之間具有同樣的DB_BLOCK_SIZE塊大小;使用傳輸表空間遷移資料比使用資料匯入匯出工具遷移資料的速度要快,這是因為傳輸表空間只是複製包含實際資料的資料檔案到目標資料庫的指定位置,而使用資料匯入匯出工具將傳輸表空間物件的後設資料到目標資料庫。
我們知道oracle利用imp/impdp傳輸表空間transport_tablespace需要滿足以下條件:
1.字符集相同
2.要匯出的表空間必須是read only,而且是自包含的,就是說該表空間的物件不能依賴其他表空間。
3.先匯出源資料,傳輸表空間的資料檔案複製到另一個資料庫相應目錄下。
也可以使用rman傳輸表空間,但是其過程相對複雜的多,首先要備份全庫,歸檔日誌和控制檔案,最後還得用imp/impdp進行匯入,但是利用rman的好處是可以不用把目標表空間read only;
關於傳輸表空間的一下限制:
(1)10g之前源資料庫和目標資料庫必須處於相同的平臺。10g以後可以用RMAN命令修改資料檔案實現跨平臺移動表空間。
(2)對於源資料庫和目標資料庫版本不同時,源資料庫的版本必須低於目標資料庫。
(3)兩邊設定的資料庫字符集和國家字符集必須一致。
(4)目標資料庫不能存在需要匯入的表空間,否則報錯,他自己會建立該表空間。
(5)源資料庫和目標資料庫的blocksize必須一致(9i前)。9i之後blocksize可以不一致了。
整體的操作步驟:
1、如果是跨平臺的表空間傳輸,需要檢查兩個平臺支援的位元組儲存順序,檢查方法見如上文所述,如果可以確定源資料庫和目標資料庫屬於同一平臺,可以省略此步驟;
2、選擇自包含的(self-contained)表空間,這裡的限制相對於使用資料泵來說比較變態,實驗中將會有一些粗略的介紹。
3、將源資料庫上的選定表空間修改為read-only狀態,使用expde工具生成傳輸表空間(集)。 //在這一步,如果兩個平臺間的位元組儲存次序不同,還需完成位元組儲存次序的轉換
4、傳輸表空間及與表空間對應資料檔案 (使用作業系統命令、ftp命令等方式)到目標資料庫。 //位元組儲存次序的轉換也可以在這一步完成
5、將源資料庫的表空間恢復為read-write狀態(可選)
6、在目標資料庫,使用impdp工具匯入表空間(集)
下面展示具體的操作過程:
環境情況:
Source 端:
作業系統: OracleLinux 6.2 64位
endianness格式: little
資料庫版本:11.2.0.3
Target 端:
作業系統:OracleLinux 6.2 64位
endianness 格式: little
版本:11.2.0.3
1、檢視作業系統endianness格式
col platform_name for a40
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 x86 64-bit Little
13 Linux x86 64-bit Little
15 HP Open VMS Little
16 Apple Mac OS Big
17 Solaris Operating System (x86) Little
18 IBM Power Based Linux Big
19 HP IA Open VMS Little
20 Solaris Operating System (x86-64) Little
21 Apple Mac OS (x86-64) Little
20 rows selected.
--分別檢視 source 端 和target端作業系統endianness格式
--source
SELECT d.PLATFORM_NAME,
ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
WHERE tp.PLATFORM_NAME =d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
---------------------------------------- --------------
Linux x86 64-bit Little
--target
SELECT d.PLATFORM_NAME,
ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
WHERE tp.PLATFORM_NAME =d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
---------------------------------------- --------------
Linux x86 64-bit Little
2、在source端建立測試表空間
select tablespace_name,
status
from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMPTS1 ONLINE
USERS ONLINE
OUTLN ONLINE
6 rows selected.
select file_name from dba_data_files;
FILE_NAME
------------------------------------------------
/u01/app/oracle/oradata/normal/system01.dbf
/u01/app/oracle/oradata/normal/undotbs01.dbf
/u01/app/oracle/oradata/normal/sysaux01.dbf
/u01/app/oracle/oradata/normal/users01.dbf
/u01/app/oracle/oradata/normal/undotbs02.dbf
/u01/app/oracle/oradata/normal/system02.dbf
/u01/app/oracle/oradata/normal/outln01.dbf
7 rows selected.
--建立表空間建立表空間 tset
create tablespace tset datafile '/u01/app/oracle/oradata/normal/test01.dbf' size 50M;
Tablespace created.
--建立使用者source_test,並指定表空間
--在source端
create user source_test
identified by oracle
default tablespace tset
temporary tablespace TEMPTS1;
User created.
grant connect,resource to source_test;
Grant succeeded.
--在target端(暫時只先建立使用者)
create user target_test identified by oracle temporary tablespace TEMPTS1;
User created.
grant connect,resource to target_test;
Grant succeeded.
--建立測試表
SQL> conn source_test/oracle
Connected.
SQL> create table t1(id number, name varchar2(30));
Table created.
SQL> insert into t1 values(1, 'AAAAA');
1 row created.
SQL> insert into t1 values(2, 'BBBBB');
1 row created.
SQL> commit;
Commit complete.
select * from t1;
- ID NAME
- ---------- ------------------------------
- 1 AAAAA
- 2 BBBBB
3、在source端和target端建立 backup 的目錄
[oracle@normal ~]$ mkdir -p /u01/backup
[oracle@normal ~]$ ls -l /u01
total 24
drwxr-xr-x 3 oracle oinstall 4096 Jul 28 12:31 app
drwxr-xr-x 2 oracle oinstall 4096 Sep 14 16:21 backup
SQL> show user
USER is "SYS"
SQL> create directory backup as '/u01/backup';
Directory created.
SQL> col owner format a5
SQL> col directory_name format a25
SQL> col DIRECTORY_PATH format a50
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
----- ------------------------- --------------------------------------------------
SYS BACKUP /u01/backup
SYS OUTLN_DIR /home/oracle
SYS DATA_PUMP_DIR /u01/app/oracle/product/11.2.0/db_1/rdbms/log/
SYS ORACLE_OCM_CONFIG_DIR /u01/app/oracle/product/11.2.0/db_1/ccr/state
SQL> GRANT read, write ON DIRECTORY backup TO source_test;
Grant succeeded.
--在target端
[oracle@test ~]$ mkdir -p /u01/backup
[oracle@test ~]$ ls -l /u01
total 24
drwxr-xr-x 3 oracle oinstall 4096 Aug 28 09:09 app
drwxr-xr-x 2 oracle oinstall 4096 Sep 14 16:40 backup
SQL> show user
USER is "SYS"
SQL> create directory backup as '/u01/backup';
Directory created.
SQL> col owner format a5
SQL> col directory_name format a25
SQL> col DIRECTORY_PATH format a50
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
----- ------------------------- --------------------------------------------------
SYS BACKUP /u01/backup
SYS OUTLN_DIR /home/oracle
SYS DATA_PUMP_DIR /u01/app/oracle/product/11.2.0/db_1/rdbms/log/
SYS ORACLE_OCM_CONFIG_DIR /u01/app/oracle/product/11.2.0/db_1/ccr/state
SQL> GRANT read, write ON DIRECTORY backup TO target_test;
Grant succeeded.
4、檢查表空間自包含(就是改表空間裡的資料沒有和其他表空間資料有關聯,如果有關聯會報錯)
SQL> execute dbms_tts.transport_set_check('TSET', TRUE);
PL/SQL procedure successfully completed.
--檢視自包含驗證結果:
SQL> select * from transport_set_violations;
no rows selected
--沒有記錄說明沒有錯
5、將表空間TSET設定成read?-only,生成Transportable Tablespace Set之後就可以改成read write 了。
SQL> alter tablespace TSET read only;
Tablespace altered.
select tablespace_name, status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMPTS1 ONLINE
USERS ONLINE
OUTLN ONLINE
TSET READ ONLY
7 rows selected.
6、生成:Transportable Tablespace Set ,
Transportable Tablespace Set有兩部分:
1.expdp 匯出的表空間的metadata
2.還有就是表空間對應的資料檔案
--expdp 匯出的表空間的metadata
[oracle@normal normal]$ pwd
/u01/app/oracle/oradata/normal
[oracle@normal normal]$ ll
total 2294664
-rw-r----- 1 oracle oinstall 9781248 Sep 14 16:46 control01.ctl
drwx------ 2 oracle oinstall 16384 Aug 22 12:44 lost+found
-rw-r----- 1 oracle oinstall 20979712 Sep 14 15:52 outln01.dbf
-rw-r----- 1 oracle oinstall 52429312 Sep 14 16:45 redo01a.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 16:45 redo01b.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 15:52 redo02a.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 15:52 redo02b.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 15:52 redo03a.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 15:52 redo03b.log
-rw-r--r-- 1 oracle oinstall 22633 Aug 22 17:00 su.lst
-rw-r----- 1 oracle oinstall 340795392 Sep 14 16:40 sysaux01.dbf
-rw-r----- 1 oracle oinstall 340795392 Sep 14 16:43 system01.dbf
-rw-r----- 1 oracle oinstall 314580992 Sep 14 16:43 system02.dbf
-rw-r----- 1 oracle oinstall 20979712 Sep 14 15:53 temp01.dbf
-rw-r----- 1 oracle oinstall 52436992 Sep 14 15:53 temp02.dbf
-rw-r----- 1 oracle oinstall 52436992 Sep 14 16:31 test01.dbf
-rw-r----- 1 oracle oinstall 209723392 Sep 14 16:43 undotbs01.dbf
-rw-r----- 1 oracle oinstall 209723392 Sep 14 16:40 undotbs02.dbf
-rw-r----- 1 oracle oinstall 524296192 Sep 14 15:52 users01.dbf
[oracle@normal normal]$ expdp dumpfile=test01.dmp directory=backup
transport_tablespaces=TSET transport_full_check=y logfile=TSET.log
Export: Release 11.2.0.3.0 - Production on Sun Sep 14 16:54:30 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Username: / as sysdba
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_TRANSPORTABLE_01": /********/ AS SYSDBA dumpfile=test01.dmp directory=backup transport_tablespaces=TSET transport_full_check=y logfile=TSET.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_TRANSPORTABLE_01 is:
/u01/backup/test01.dmp
******************************************************************************
Datafiles required for transportable tablespace TSET:
/u01/app/oracle/oradata/normal/test01.dbf
Job "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 16:55:13
[oracle@normal normal]$ ls -l /u01/backup/
total 80
-rw-r----- 1 oracle oinstall 77824 Sep 14 16:55 test01.dmp
-rw-r--r-- 1 oracle oinstall 1160 Sep 14 16:55 TSET.log
7、將Transportable Tablespace set 傳送到Target端
1)將表空間test 對應的資料檔案copy到Target 對應的ORADATA目錄下。
2)將expdp 匯出的表空間metadta 資料copy 到Target 端的backup 目錄下
--將表空間test 對應的資料檔案copy到Target 對應的ORADATA目錄下,這個路徑可以和source不樣。
[oracle@normal normal]$ scp /u01/backup/test01.dmp 192.168.137.12:/u01/backup
oracle@192.168.137.12 s password:
test01.dmp 100% 76KB 76.0KB/s 00:00
--將expdp 匯出的表空間metadta 資料copy 到Target 端的backup 目錄下
[oracle@normal normal]$ scp test01.dbf 192.168.137.12:/u01/app/oracle/oradata/normal/test01.dbf
oracle@192.168.137.12 s password:
test01.dbf 100% 50MB 16.7MB/s 00:03
--在target端檢視檔案是否已經傳輸
[oracle@test ~]$ ll /u01/backup/
total 76
-rw-r----- 1 oracle oinstall 77824 Sep 14 17:03 test01.dmp
[oracle@test ~]$ ll $ORACLE_BASE/oradata/normal/test01.dbf
-rw-r----- 1 oracle oinstall 52436992 Sep 14 17:04 /u01/app/oracle/oradata/normal/test01.dbf
8、在Target 系統上Import 表空間的metadata(使用target_test使用者,需要用到remap_schema)
[oracle@test ~]$ impdp directory=backup dumpfile=test01.dmp transport_datafiles=/u01/app/oracle/oradata/normal/test01.dbf remap_schema=source_test:target_test logfile=test.log
Import: Release 11.2.0.3.0 - Production on Sun Sep 14 17:09:25 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Username: / as sysdba
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_01": /********/ AS SYSDBA directory=backup dumpfile=test01.dmp transport_datafiles=/u01/app/oracle/oradata/normal/test01.dbf remap_schema=source_test:target_test logfile=test.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 17:09:55
9、檢視並修改表空間狀態
select tablespace_name,
status
from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMPTS1 ONLINE
USERS ONLINE
OUTLN ONLINE
TSET READ ONLY
7 rows selected.
SQL> alter tablespace TSET read write;
Tablespace altered.
10、驗證
SQL> conn target_test/oracle
Connected.
SQL> select * from t1;
ID NAME
---------- ------------------------------
1 AAAAA
2 BBBBB
總結:
(一):如果是跨平臺了,則需要進行平臺轉換,可以在源端操作也可以在目的端操作。
例如:
源端:
SQL>SELECTd.PLATFORM_NAME,ENDIAN_FORMATFROMV$TRANSPORTABLE_PLATFORM tp,V$DATABASE dWHEREtp.PLATFORM_NAME=d.PLATFORM_NAME;
SQL>PLATFORM_NAME ENDIAN_FORMAT
----------------------------- --------------
Linux x8664-bit Little
SQL>PLATFORM_NAME ENDIAN_FORMAT
----------------------------- --------------
Linux x8664-bit Little
目標端:
SQL>SELECTd.PLATFORM_NAME,ENDIAN_FORMATFROMV$TRANSPORTABLE_PLATFORM tp,V$DATABASEdWHEREtp.PLATFORM_NAME=d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
---------------------------------------- --------------
Solaris Operating System (x86-64) Little
PLATFORM_NAME ENDIAN_FORMAT
---------------------------------------- --------------
Solaris Operating System (x86-64) Little
那麼需要平臺轉換:
如果在源端轉換:
RMAN>converttablespace'TTBS1' toplatform="Solaris Operating System (x86-64)" db_file_name_convert='/u01/app/oracle/oradata/silent/ttbs1.dbf','/tmp/ttbs1.dbf';
Starting conversion at source at12-AUG-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input datafilefilenumber=00005name=/u01/app/oracle/oradata/silent/ttbs1.dbf
converted datafile=/tmp/ttbs1.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time:00:00:16
Finished conversion at source at12-AUG-12
Starting conversion at source at12-AUG-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input datafilefilenumber=00005name=/u01/app/oracle/oradata/silent/ttbs1.dbf
converted datafile=/tmp/ttbs1.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time:00:00:16
Finished conversion at source at12-AUG-12
如果在target端轉換,方法如下:
RMAN>CONVERTDATAFILE'/u01/app/oracle/oradata/sun/ttbs1.dbf'TOPLATFORM="Solaris Operating System (x86-64)"FROMPLATFORM="Linux x8664-bit" DB_FILE_NAME_CONVERT="/u01/app/oracle/oradata/sun/","/tmp/";
Starting conversion at target at12-AUG-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
inputfilename=/u01/app/oracle/oradata/sun/ttbs1.dbf
converted datafile=/tmp/ttbs1.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time:00:00:14
Finished conversion at target at12-AUG-12
Starting conversion at target at12-AUG-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
inputfilename=/u01/app/oracle/oradata/sun/ttbs1.dbf
converted datafile=/tmp/ttbs1.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time:00:00:14
Finished conversion at target at12-AUG-12
(二):可以使用引數:remap_tablespace=ttbs1:ttbs2,來修改傳過來的表空間名字。
心得:
可傳輸表空間加快了資料遷移的速度,可是使用邏輯匯入匯出來完成表空間傳輸需要將該表空間置為read only;雖然使用rman技術來完成表空間傳輸可以不將該表空間置為read only。但是用rman技術的過程相對非常複雜,這無疑導致該技術在生產環境使用的頻率不大。多數人還是選擇直接資料泵的方式來完成一個表空間的遷移工作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2125264/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle可傳輸表空間TTS小結OracleTTS
- 總結-表空間傳輸
- 基於可傳輸表空間的表空間遷移
- Oracle可傳輸表空間測試Oracle
- Oracle 表空間傳輸Oracle
- oracle表空間傳輸Oracle
- Oracle傳輸表空間Oracle
- Oracle 10g的可傳輸表空間操作Oracle 10g
- mysql關於表空間的總結MySql
- 聊聊Oracle可傳輸表空間(Transportable Tablespace)(上)Oracle
- 聊聊Oracle可傳輸表空間(Transportable Tablespace)(中)Oracle
- 聊聊Oracle可傳輸表空間(Transportable Tablespace)(下)Oracle
- 5.7 mysql的可傳輸表空間MySql
- 關於oracle的表空間,分割槽表,以及索引的總結Oracle索引
- 傳輸表空間操作-OracleOracle
- Oracle傳輸表空間(TTS)OracleTTS
- Oracle 傳輸表空間-RmanOracle
- 使用Oracle可傳輸表空間的特性複製資料(7)實戰RMAN備份傳輸表空間Oracle
- 關於oracle的表空間,分割槽表,以及索引的總結(轉)Oracle索引
- 關於oracle的表空間,分割槽表,以及索引的總結 -- 轉Oracle索引
- Oracle傳輸表空間學習Oracle
- Oracle 傳輸表空間-EXPDP/IMPDPOracle
- Oracle 傳輸表空間-EXP/IMPOracle
- Oracle表空間傳輸詳解Oracle
- 使用RMAN實現可傳輸的表空間
- oracle表空間傳輸的限制條件Oracle
- 用可傳輸表空間實現Oracle跨平臺移植Oracle
- oracle 傳輸表空間一例Oracle
- Oracle 10g的可傳輸表空間操作(轉並驗證)Oracle 10g
- MySQL 傳輸表空間MySql
- MySQL表空間傳輸MySql
- Oracle的UNDO表空間管理總結Oracle
- 【XTTS】Oracle傳輸表空間xtts增量方式TTSOracle
- Oracle表空間維護總結Oracle
- ORACLE臨時表空間總結Oracle
- 使用Oracle可傳輸表空間的特性複製資料(3)跨平臺的傳輸實踐Oracle
- oracle 10g 傳輸表空間的測試Oracle 10g
- 【傳輸表空間】使用 EXPDP/IMPDP工具的傳輸表空間完成資料遷移