Oracle10g新特性——利用RMAN遷移表空間
轉載自yangtingkun,感謝!
Oracle10g對遷移表空間特性進行了進一步增強,利用RMAN進行表空間遷移,可以避免將源資料庫的表空間置於READ ONLY狀態。
Oracle的遷移表空間是資料裝載、遷移、升級的一個重要手段,利用這種方法,Oracle不再需要將表空間內所有表的資料匯出到DMP檔案,然後再通過匯入工具匯入到目標資料庫中。
Oracle從9i開始支援遷移表空間。採用了直接拷貝資料檔案的方法,而匯入、匯出只需要處理表空間中對應的源資料即可。從而使得匯入、匯出的速度得到了很大的提高。
但是遷移表空間一直有一個比較嚴重的問題,制約著產品環境下使用這個特性。這就是傳輸表空間的過程中,要求源資料庫將表空間置於只讀狀態,雖然源資料庫環境仍然可以讀取表空間的內容,但是不能進行修改了。這對於7*24環境的產品系統而言,無疑是一個很致命的限制。
不過在Oracle的10.2中,Oracle將RMAN與資料泵結合在一起,成功的解決了這個問題。通過RMAN新增的TRANSPORT TABLESPACE命令,Oracle不再需要從資料庫中的表空間讀取資料檔案,而是直接從資料庫的備份中生成,而且這個命令將讀取備份,將表空間的資料檔案還原到指定目的地,恢復到一致性狀態,利用資料泵匯出源資料,生成資料泵的匯入指令碼這些複雜的操作在一個命令中全部完成。
下面看一個簡單的例子:
bash-2.03$ export ORACLE_SID=test
bash-2.03$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 星期五 1月 9 01:46:08 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/data1/oradata/test/test/system01.dbf
/data1/oradata/test/test/undotbs01.dbf
/data1/oradata/test/test/sysaux01.dbf
/data1/oradata/test/test/users01.dbf
/data1/oradata/test/test/yangtk01.dbf
SQL> exit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
斷開
bash-2.03$ rman target /
恢復管理器: Release 10.2.0.3.0 - Production on 星期五 1月 9 02:10:07 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連線到目標資料庫: TEST (DBID=1920405094)
RMAN> backup database;
啟動 backup 於 09-1月 -09使用通道 ORA_DISK_1通道 ORA_DISK_1: 啟動全部資料檔案備份集通道 ORA_DISK_1: 正在指定備份集中的資料檔案輸入資料檔案 fno=00001 name=/data1/oradata/test/test/system01.dbf輸入資料檔案 fno=00003 name=/data1/oradata/test/test/sysaux01.dbf輸入資料檔案 fno=00002 name=/data1/oradata/test/test/undotbs01.dbf輸入資料檔案 fno=00004 name=/data1/oradata/test/test/users01.dbf輸入資料檔案 fno=00005 name=/data1/oradata/test/test/yangtk01.dbf通道 ORA_DISK_1: 正在啟動段 1 於 09-1月 -09通道 ORA_DISK_1: 已完成段 1 於 09-1月 -09段控制程式碼=/data/oracle/product/10.2/database/dbs/1tk4bden_1_1 標記=TAG20090109T023255 註釋=NONE通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:25完成 backup 於 09-1月 -09
啟動 Control File and SPFILE Autobackup 於 09-1月 -09段 handle=/data1/backup/test/c-1920405094-20090109-01 comment=NONE完成 Control File and SPFILE Autobackup 於 09-1月 -09
在資料庫TEST中,準備遷移YANGTK表空間。首先確保Oracle執行及時點恢復所需的所有表空間的備份存在,以及恢復所需的ARCHIVELOG檔案存在。這裡為了簡化,提前備份資料庫,避免執行TRANSPORT TABLESPACE的過程中找不到備份而報錯,下面就可以執行TRANSPORT TABLESPACE命令了:
RMAN> transport tablespace yangtk auxiliary destination '/data1/backup'
2> datapump directory d_output dump file 'yangtk_meta.dp'
3> export log 'yangtk_meta.log' import script 'yangtk_imp.src'
4> tablespace destination '/data1/backup';
RMAN-05026: 警告: 假定以下表空間集適用於指定的時間點
表空間列表要求具有 UNDO 段表空間 SYSTEM表空間 UNDOTBS1
使用 SID='bxbu' 建立自動例項
供自動例項使用的初始化引數:
db_name=TEST
compatible=10.2.0.3.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_TEST_bxbu
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=/data1/backup
control_files=/data1/backup/cntrl_tspitr_TEST_bxbu.f
啟動自動例項 TEST
Oracle 例項已啟動
系統全域性區域總計 205520896 位元組
Fixed Size 2028912
位元組
Variable Size 146803344 位元組
Database Buffers 50331648 位元組
Redo Buffers 6356992 位元組自動例項已建立
記憶體指令碼的內容:
{
# set the until clause
set until scn 3564484;
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log for tspitr to a resent until time
sql 'alter system archive log current';
# avoid unnecessary autobackups for structural changes during TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
}正在執行記憶體指令碼
正在執行命令: SET until clause
啟動 restore 於 09-1月 -09分配的通道: ORA_AUX_DISK_1通道 ORA_AUX_DISK_1: sid=34 devtype=DISK
通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集通道 ORA_AUX_DISK_1: 正在復原控制檔案通道 ORA_AUX_DISK_1: 正在讀取備份段 /data1/backup/test/c-1920405094-20090109-00通道 ORA_AUX_DISK_1: 已恢復備份段 1段控制程式碼 = /data1/backup/test/c-1920405094-20090109-00 標記 = TAG20090109T021104通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:03輸出檔名=/data1/backup/cntrl_tspitr_TEST_bxbu.f完成 restore 於 09-1月 -09
sql 語句: alter database mount clone database
sql 語句: alter system archive log current
sql 語句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;釋放的通道: ORA_DISK_1釋放的通道: ORA_AUX_DISK_1
記憶體指令碼的內容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until scn 3564484;
# set an omf destination filename for restore
set newname for clone datafile 1 to new;
# set an omf destination filename for restore
set newname for clone datafile 2 to new;
# set an omf destination filename for restore
set newname for clone datafile 3 to new;
# set an omf destination tempfile
set newname for clone tempfile 1 to new;
# set a destination filename for restore
set newname for datafile 5 to
"/data1/backup/yangtk01.dbf";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile 1, 2, 3, 5;
switch clone datafile all;
#online the datafiles restored or flipped
sql clone "alter database datafile 1 online";
#online the datafiles restored or flipped
sql clone "alter database datafile 2 online";
#online the datafiles restored or flipped
sql clone "alter database datafile 3 online";
#online the datafiles restored or flipped
sql clone "alter database datafile 5 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace "YANGTK", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog;
alter clone database open resetlogs;
# PLUG HERE the creation of a temporary tablespace if export fails due to lack
# of temporary space.
# For example in Unix these two lines would do that:
#sql clone "create tablespace aux_tspitr_tmp
# datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";
}正在執行記憶體指令碼
正在執行命令: SET until clause
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
臨時檔案 1 在控制檔案中已重新命名為 /data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_temp_%u_.tmp
啟動 restore 於 09-1月 -09分配的通道: ORA_AUX_DISK_1通道 ORA_AUX_DISK_1: sid=36 devtype=DISK
通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集通道 ORA_AUX_DISK_1: 正在指定從備份集恢復的資料檔案正將資料檔案00003恢復到/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_sysaux_%u_.dbf正將資料檔案00005恢復到/data1/backup/yangtk01.dbf通道 ORA_AUX_DISK_1: 正在讀取備份段 /data1/backup/test/1oisppvj_1_1通道 ORA_AUX_DISK_1: 已恢復備份段 1段控制程式碼 = /data1/backup/test/1oisppvj_1_1 標記 = TAG20070925T024154通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:16通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集通道 ORA_AUX_DISK_1: 正在指定從備份集恢復的資料檔案正將資料檔案00001恢復到/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_system_%u_.dbf正將資料檔案00002恢復到/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_undotbs1_%u_.dbf通道 ORA_AUX_DISK_1: 正在讀取備份段 /data1/backup/test/1nisppvj_1_1通道 ORA_AUX_DISK_1: 已恢復備份段 1段控制程式碼 = /data1/backup/test/1nisppvj_1_1 標記 = TAG20070925T024154通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:36完成 restore 於 09-1月 -09
資料檔案 1 已轉換成資料檔案副本輸入資料檔案副本 recid=5 stamp=675657350 檔名=/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_system_4pdkv341_.dbf資料檔案 2 已轉換成資料檔案副本輸入資料檔案副本 recid=6 stamp=675657350 檔名=/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_undotbs1_4pdkv34h_.dbf資料檔案 3 已轉換成資料檔案副本輸入資料檔案副本 recid=7 stamp=675657350 檔名=/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_sysaux_4pdktlvx_.dbf資料檔案 5 已轉換成資料檔案副本輸入資料檔案副本 recid=8 stamp=675657350 檔名=/data1/backup/yangtk01.dbf
sql 語句: alter database datafile 1 online
sql 語句: alter database datafile 2 online
sql 語句: alter database datafile 3 online
sql 語句: alter database datafile 5 online
啟動 recover 於 09-1月 -09使用通道 ORA_AUX_DISK_1
正在開始介質的恢復
存檔日誌執行緒 1 序列 105 已作為檔案 /data1/oradata/test/archivelog/1_105_622258662.dbf 存在於磁碟上存檔日誌執行緒 1 序列 106 已作為檔案 /data1/oradata/test/archivelog/1_106_622258662.dbf 存在於磁碟上存檔日誌執行緒 1 序列 107 已作為檔案 /data1/oradata/test/archivelog/1_107_622258662.dbf 存在於磁碟上存檔日誌執行緒 1 序列 108 已作為檔案 /data1/oradata/test/archivelog/1_108_622258662.dbf 存在於磁碟上存檔日誌執行緒 1 序列 109 已作為檔案 /data1/oradata/test/archivelog/1_109_622258662.dbf 存在於磁碟上存檔日誌執行緒 1 序列 110 已作為檔案 /data1/oradata/test/archivelog/1_110_622258662.dbf 存在於磁碟上存檔日誌執行緒 1 序列 111 已作為檔案 /data1/oradata/test/archivelog/1_111_622258662.dbf 存在於磁碟上存檔日誌執行緒 1 序列 112 已作為檔案 /data1/oradata/test/archivelog/1_112_622258662.dbf 存在於磁碟上存檔日誌執行緒 1 序列 113 已作為檔案 /data1/oradata/test/archivelog/1_113_622258662.dbf 存在於磁碟上存檔日誌檔名 =/data1/oradata/test/archivelog/1_105_622258662.dbf 執行緒 =1 序列 =105存檔日誌檔名 =/data1/oradata/test/archivelog/1_106_622258662.dbf 執行緒 =1 序列 =106存檔日誌檔名 =/data1/oradata/test/archivelog/1_107_622258662.dbf 執行緒 =1 序列 =107存檔日誌檔名 =/data1/oradata/test/archivelog/1_108_622258662.dbf 執行緒 =1 序列 =108存檔日誌檔名 =/data1/oradata/test/archivelog/1_109_622258662.dbf 執行緒 =1 序列 =109存檔日誌檔名 =/data1/oradata/test/archivelog/1_110_622258662.dbf 執行緒 =1 序列 =110存檔日誌檔名 =/data1/oradata/test/archivelog/1_111_622258662.dbf 執行緒 =1 序列 =111存檔日誌檔名 =/data1/oradata/test/archivelog/1_112_622258662.dbf 執行緒 =1 序列 =112存檔日誌檔名 =/data1/oradata/test/archivelog/1_113_622258662.dbf 執行緒 =1 序列 =113介質恢復完成, 用時: 00:01:18完成 recover 於 09-1月 -09
資料庫已開啟
記憶體指令碼的內容:
{
#mark read only the tablespace that will be exported
sql clone "alter tablespace YANGTK read only";
# export the tablespaces in the recovery set
host 'expdp userid="/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/data/oracle/product/10.2/database/bin/oracle)(ARGV0=oraclebxbu)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'ORACLE_SID=bxbu^'))(CONNECT_DATA=(SID=bxbu))) as sysdba" transport_tablespaces=
YANGTK dumpfile=
yangtk_meta.dp directory=
d_output logfile=
yangtk_meta.log';
}正在執行記憶體指令碼
sql 語句: alter tablespace YANGTK read only
Export: Release 10.2.0.3.0 - 64bit Production on
星期五, 09 1月, 2009 2:37:28
Copyright (c) 2003, 2005, Oracle. All rights reserved.
連線到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options啟動
"SYS"."SYS_EXPORT_TRANSPORTABLE_01": userid="/********@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/data/oracle/product/10.2/database/bin/oracle)(ARGV0=oraclebxbu)(ARGS=(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))))(ENVS=ORACLE_SID=bxbu))(CONNECT_DATA=(SID=bxbu)))
AS SYSDBA" transport_tablespaces= YANGTK dumpfile=yangtk_meta.dp directory=d_output logfile=yangtk_meta.log
處理物件型別 TRANSPORTABLE_EXPORT/PLUGTS_BLK處理物件型別 TRANSPORTABLE_EXPORT/TABLE處理物件型別
TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK已成功載入/解除安裝了主表 "SYS"."SYS_EXPORT_TRANSPORTABLE_01"
******************************************************************************
SYS.SYS_EXPORT_TRANSPORTABLE_01 的轉儲檔案集為:
/data/dmp/yangtk_meta.dp作業 "SYS"."SYS_EXPORT_TRANSPORTABLE_01"
已於 02:38:19 成功完成
主機命令完成
/*
The following command may be used to import the tablespaces.
Substitute values for <logon> and <directory>.
impdp <logon> directory=<directory> dumpfile= 'yangtk_meta.dp' transport_datafiles= /data1/backup/yangtk01.dbf
*/
--------------------------------------------------------------
-- Start of sample PL/SQL script for importing the tablespaces
--------------------------------------------------------------
-- creating directory objects
CREATE DIRECTORY STREAMS$DIROBJ$1 AS '/data1/backup/';
/* PL/SQL Script to import the exported tablespaces */
DECLARE
-- the datafiles
tbs_files dbms_streams_tablespace_adm.file_set;
cvt_files dbms_streams_tablespace_adm.file_set;
-- the dumpfile to import
dump_file dbms_streams_tablespace_adm.file;
dp_job_name VARCHAR2(30) := NULL;
-- names of tablespaces that were imported
ts_names dbms_streams_tablespace_adm.tablespace_set;
BEGIN
-- dump file name and location
dump_file.file_name := 'yangtk_meta.dp';
dump_file.directory_object := 'd_output';
-- forming list of datafiles for import
tbs_files( 1).file_name := 'yangtk01.dbf';
tbs_files( 1).directory_object := 'STREAMS$DIROBJ$1';
-- import tablespaces
dbms_streams_tablespace_adm.attach_tablespaces(
datapump_job_name => dp_job_name,
dump_file => dump_file,
tablespace_files => tbs_files,
converted_files => cvt_files,
tablespace_names => ts_names);
-- output names of imported tablespaces
IF ts_names IS NOT NULL AND ts_names.first IS NOT NULL THEN
FOR i IN ts_names.first .. ts_names.last LOOP
dbms_output.put_line('imported tablespace '|| ts_names(i));
END LOOP;
END IF;
END;
/
-- dropping directory objects
DROP DIRECTORY STREAMS$DIROBJ$1;
--------------------------------------------------------------
-- End of sample PL/SQL script
--------------------------------------------------------------
刪除自動例項關閉自動例項
Oracle 例項已關閉自動例項已刪除已刪除輔助例項檔案 /data1/backup/cntrl_tspitr_TEST_bxbu.f已刪除輔助例項檔案
/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_system_4pdkv341_.dbf已刪除輔助例項檔案 /data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_undotbs1_4pdkv34h_.dbf已刪除輔助例項檔案
/data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_sysaux_4pdktlvx_.dbf已刪除輔助例項檔案 /data1/backup/TSPITR_TEST_BXBU/datafile/o1_mf_temp_4pdkz09s_.tmp已刪除輔助例項檔案
/data1/backup/TSPITR_TEST_BXBU/onlinelog/o1_mf_1_4pdkyqj3_.log已刪除輔助例項檔案 /data1/backup/TSPITR_TEST_BXBU/onlinelog/o1_mf_2_4pdkyr45_.log已刪除輔助例項檔案 /data1/backup/TSPITR_TEST_BXBU/onlinelog/o1_mf_3_4pdkythh_.log
至此,TRANSPORT TABLESPACE工作告一段落。
相關文章
- table/index/LOBINDEX遷移表空間Index
- MySQL 遷移表空間,備份單表MySql
- Oracle中表空間、表、索引的遷移Oracle索引
- Oracle 12cbigfile表空間物件遷移Oracle物件
- 【資料遷移】XTTS跨平臺傳輸表空間v3(2.RMAN增量)TTS
- Oracle RMAN 表空間恢復Oracle
- 【MOS】如何利用RMAN可傳輸表空間遷移資料庫到不同位元組序的平臺(文件 ID 1983639.1)資料庫
- mysql共享表空間擴容,收縮,遷移MySql
- Oracle 18c新特性詳解 - 表和表空間相關的新特性Oracle
- MySQL 8.0表空間新特性簡單實驗MySql
- 用傳輸表空間跨平臺遷移資料
- 表空間利用率及表空間的補充
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- [20210527]rman與undo表空間備份.txt
- Oracle 12C新特性-RMAN恢復表Oracle
- MySQL 5.7新特性之線上收縮undo表空間MySql
- MySQL 5.7 新特性 共享臨時表空間及臨時表改進MySql
- [20190718]12c rman新特性 表恢復.txt
- Oracle rman duplicate遷移測試Oracle
- 用rman遷移資料庫資料庫
- oracle sql 表空間利用率OracleSQL
- 【資料遷移】XTTS跨平臺傳輸表空間v4TTS
- 達夢(DM)資料庫的表空間建立和遷移維護資料庫
- mysql Innodb表空間解除安裝、遷移、裝載的使用方法MySql
- 對Oracle分割槽表進行表空間遷移並處理ORA-14511問題Oracle
- Oracle資料庫遷移 - 異構傳輸表空間TTS HP-UX遷移至Redhat Linux 7.7Oracle資料庫TTSRedhatLinux
- 【資料遷移】XTTS跨平臺傳輸表空間(1.傳統方式)TTS
- 達夢資料庫系統表空間資料檔案遷移過程資料庫
- 16、表空間 建立表空間
- Oracle RMAN備份為什麼會大量使用temp表空間?Oracle
- [待整理]oracle10g刪除(釋放)資料檔案/表空間流程Oracle
- oracle10g RMAN增量備份策略Oracle
- Oracle 12C RMAN備份佔用大量臨時表空間Oracle
- Oracle使用RMAN從Windows遷移資料到LinuxOracleWindowsLinux
- 資料遷移的時候出現RMAN-03002,RMAN-06026
- impala 資料表在叢集間遷移方案
- 【資料遷移】XTTS跨平臺傳輸表空間v3(3.DFT方式)TTS
- 移動分割槽表和分割槽索引的表空間索引