利用PLSQL實現表空間的遷移(一)
在9i的時候,表空間的遷移使用EXP/IMP來實現。在10g中,除了使用EXP/IMP之外,還可以使用資料泵EXPDP/IMPDP,以及RMAN的命令TRANSPORT TABLESPACE命令,除此之外,還可以透過PL/SQL包DBMS_STREAMS_TABLESPACE_ADM來實現。
這一篇介紹PULL_SIMPLE_TABLESPACE過程。
Oracle的DBMS_STREAMS_TABLESPACE_ADM包提供了8個過程:ATTACH_TABLESPACES、ATTACH_SIMPLE_TABLESPACE、CLONE_TABLESPACES、CLONE_SIMPLE_TABLESPACE、DETACH_TABLESPACES、DETACH_SIMPLE_TABLESPACE、PULL_TABLESPACES、PULL_SIMPLE_TABLESPACE。
其中包含了4個SIMPLE過程,SIMPLE過程可以用來處理一個表空間,且這個表空間中僅包含一個資料檔案的情況。
ATTACH過程用於將表空間載入到目標資料庫中,這個過程的功能類似IMP匯入。
CLONE過程用於將表空間置於只讀,並匯入源資料,並將表空間對應的資料檔案複製到指定目錄,這個操作包含了EXP的功能。
DETACH過程和CLONE過程功能型別,區別在於DETACH過程在複製完成後,會從源資料庫中刪除表空間。
PULL過程實際上包含了CLONE以及ATTACH兩個過程,其中還包括了DBMS_FILE_TRANSFER包的呼叫,使得在目標資料庫執行一個命令就完成表空間遷移的所有的操作。
使用Oracle提供PL/SQL包,可以與TRANSPORT TABLESPACE命令,以及EXP/IMP、EXPDP/IMPDP工具配合。比如透過TRANSPORT TABLESPACE命令,或EXP/EXPDP生成的匯出源資料以及表空間的資料檔案,可以利用ATTACH過程進行匯入。利用CLONE過程或DETACH過程生成的源資料以及資料檔案,也可以透過IMP/IMPDP方式匯入的目標資料庫中。
這裡介紹一個最簡單的例子,由於當前要遷移一個表空間,且表空間僅包含了一個資料檔案,因此這裡選擇了最簡單的PULL_SIMPLE_TABLESPACE過程。
首先檢查源資料庫:
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
SQL> SHOW PARAMETER COMPATIBLE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 10.2.0.1.0
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
2 FROM DATABASE_PROPERTIES
3 WHERE PROPERTY_NAME LIKE '%CHARACTERSET%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET ZHS16GBK
SQL> SELECT FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'SCKC';
FILE_NAME
-------------------------------------------------------------------------------
/data/oracle/oradata/kaifa/sckc01.dbf
SQL> SHOW PARAMETER DB_BLOCK_SIZE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 16384
SQL> EXEC DBMS_TTS.TRANSPORT_SET_CHECK('SCKC', TRUE)
PL/SQL procedure successfully completed.
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
no rows selected
檢查目標資料庫:
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
SQL> SHOW PARAMETER COMPATIBLE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 10.2.0.1.0
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
2 FROM DATABASE_PROPERTIES
3 WHERE PROPERTY_NAME LIKE '%CHARACTERSET%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
SQL> SHOW PARAMETER DB_BLOCK_SIZE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 16384
SQL> SELECT TABLESPACE_NAME
2 FROM DBA_TABLESPACES
3 WHERE TABLESPACE_NAME = 'SCKC';
no rows selected
目標資料庫的版本,相容性設定、字符集以及DB_BLOCK_SIZE都與源資料庫一致,因此不需要進行其他額外的處理。源資料庫和目的資料庫所在平臺也一致,不需要在進行CONVERT轉換操作。
在源資料庫建立目錄,使得源資料庫可以讀取資料檔案:
SQL> CREATE DIRECTORY D_DATAFILE AS '/data/oracle/oradata/kaifa';
Directory created.
SQL> GRANT READ, WRITE ON DIRECTORY D_DATAFILE TO SYSTEM;
Grant succeeded.
在目標資料庫建立目標使用者:
SQL> CREATE USER SCKC IDENTIFIED BY SCKC;
User created.
SQL> GRANT CONNECT, RESOURCE TO SCKC;
Grant succeeded.
建立到源資料庫的資料庫鏈:
SQL> CREATE DATABASE LINK KAIFA
2 CONNECT TO SYSTEM
3 IDENTIFIED BY PASSWORD
4 USING 'KAIFA';
Database link created.
SQL> SELECT GLOBAL_NAME FROM GLOBAL_NAME@KAIFA;
GLOBAL_NAME
----------------------------------------------------------------------------------------
KAIFA
SQL> SELECT FILE_NAME FROM DBA_DATA_FILES
2 WHERE TABLESPACE_NAME = 'SYSTEM';
FILE_NAME
----------------------------------------------------------------------------------
/data/oradata/test08/system01.dbf
SQL> CREATE DIRECTORY D_TRANS AS '/data/oradata/test08';
Directory created.
下面就可以執行PULL_SIMPLE_TABLESPACE過程了:
SQL> EXEC DBMS_STREAMS_TABLESPACE_ADM.PULL_SIMPLE_TABLESPACE('SCKC', 'KAIFA', 'D_TRANS')
PL/SQL procedure successfully completed.
很簡單,過程就執行完了,檢查一下對應的日誌資訊:
SQL> host more /data/oradata/test08/sckc01.plg
Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_01":
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/COMMENT
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 15:22:53
檢查表空間載入情況:
SQL> SELECT FILE_NAME FROM DBA_DATA_FILES
2 WHERE TABLESPACE_NAME = 'SCKC';
FILE_NAME
----------------------------------------------------------------------
/data/oradata/test08/sckc01.dbf
SQL> SELECT OWNER, COUNT(*) FROM DBA_OBJECTS
2 WHERE WNER = 'SCKC'
3 GROUP BY OWNER;
OWNER COUNT(*)
------------------------------ ----------
SCKC 127
表空間和資料檔案成功載入,表空間中的物件也匯入到對應的目標使用者中。這個PULL_SIMPLE_TABLESPACE過程來執行表空間的遷移果然很簡單。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-600878/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中表空間、表、索引的遷移Oracle索引
- table/index/LOBINDEX遷移表空間Index
- MySQL 遷移表空間,備份單表MySql
- Oracle 12cbigfile表空間物件遷移Oracle物件
- mysql共享表空間擴容,收縮,遷移MySql
- 表空間利用率及表空間的補充
- 用傳輸表空間跨平臺遷移資料
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- 達夢(DM)資料庫的表空間建立和遷移維護資料庫
- mysql Innodb表空間解除安裝、遷移、裝載的使用方法MySql
- Laravel5.5執行表遷移命令出現表為空的解決方案Laravel
- oracle sql 表空間利用率OracleSQL
- 【資料遷移】XTTS跨平臺傳輸表空間v4TTS
- 【MOS】如何利用RMAN可傳輸表空間遷移資料庫到不同位元組序的平臺(文件 ID 1983639.1)資料庫
- 對Oracle分割槽表進行表空間遷移並處理ORA-14511問題Oracle
- 當使用者無限制使用表空間配額且表空間有足夠空間時出現超出表空間的空間限額
- Oracle資料庫遷移 - 異構傳輸表空間TTS HP-UX遷移至Redhat Linux 7.7Oracle資料庫TTSRedhatLinux
- 移動分割槽表和分割槽索引的表空間索引
- 【資料遷移】XTTS跨平臺傳輸表空間(1.傳統方式)TTS
- 達夢資料庫系統表空間資料檔案遷移過程資料庫
- 16、表空間 建立表空間
- 利用魯棒控制實現深度強化學習駕駛策略的遷移強化學習
- impala 資料表在叢集間遷移方案
- 【資料遷移】XTTS跨平臺傳輸表空間v3(3.DFT方式)TTS
- 【資料遷移】XTTS跨平臺傳輸表空間v3(2.RMAN增量)TTS
- 高效利用佇列的空間佇列
- 核間遷移的影響
- KingbaseES的表空間
- PostgreSQL在不同的表空間移動資料檔案SQL
- 二維網格的遷移(java實現)Java
- 表空間TSPITR恢復-實驗
- 【Oracle 恢復表空間】 實驗Oracle
- 【TABLESPACE】Oracle表空間最佳實踐Oracle
- 刪除表空間出現ORA-22868錯誤(一)
- oracle表空間的整理Oracle
- 利用rman copy的方法實現儲存上裸裝置資料檔案的遷移ITPUB
- Oracle表空間Oracle
- oracle 表空間Oracle