利用RMAN遷移表空間碰到的問題(四)
嘗試10.2的新特性RMAN的TRANSPORT TABLESPACE進行表空間的遷移過程,其中碰到了不少問題,簡單總結一下。
這一篇介紹TRANSPORT TABLESPACE命令碰到的RMAN-06513錯誤,對應的Oracle命令列錯誤為ORA-39070錯誤。
利用RMAN遷移表空間碰到的問題(一):http://yangtingkun.itpub.net/post/468/480070
利用RMAN遷移表空間碰到的問題(二):http://yangtingkun.itpub.net/post/468/480171
利用RMAN遷移表空間碰到的問題(三):http://yangtingkun.itpub.net/post/468/480222
這個錯誤其實比較有意思:
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='mBeh' 建立自動例項
供自動例項使用的初始化引數:
db_name=TEST
compatible=10.2.0.3.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_TEST_mBeh
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_mBeh.f
啟動自動例項 TEST
Oracle 例項已啟動
系統全域性區域總計 205520896 位元組
Fixed Size 2028912 位元組
Variable Size 146803344 位元組
Database Buffers 50331648 位元組
Redo Buffers 6356992 位元組
自動例項已建立
記憶體指令碼的內容:
{
# set the until clause
set until scn 3564357;
# 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:02
輸出檔名=/data1/backup/cntrl_tspitr_TEST_mBeh.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_AUX_DISK_1
記憶體指令碼的內容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until scn 3564357;
# 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_MBEH/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: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_system_%u_.dbf
正將資料檔案00002恢復到/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_undotbs1_%u_.dbf
正將資料檔案00003恢復到/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_sysaux_%u_.dbf
正將資料檔案00005恢復到/data1/backup/yangtk01.dbf
通道 ORA_AUX_DISK_1: 正在讀取備份段 /data1/backup/1rk4bc4v_1_1
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = /data1/backup/1rk4bc4v_1_1 標記 = TAG20090109T021038
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:46
完成 restore 於 09-1月 -09
資料檔案 1 已轉換成資料檔案副本
輸入資料檔案副本 recid=5 stamp=675656832 檔名=/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_system_4pdkbmls_.dbf
資料檔案 2 已轉換成資料檔案副本
輸入資料檔案副本 recid=6 stamp=675656832 檔名=/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_undotbs1_4pdkbmno_.dbf
資料檔案 3 已轉換成資料檔案副本
輸入資料檔案副本 recid=7 stamp=675656832 檔名=/data1/backup/TSPITR_TEST_MBEH/datafile/o1_mf_sysaux_4pdkbmn5_.dbf
資料檔案 5 已轉換成資料檔案副本
輸入資料檔案副本 recid=8 stamp=675656832 檔名=/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 序列 112 已作為檔案 /data1/oradata/test/archivelog/1_112_622258662.dbf 存在於磁碟上
存檔日誌檔名 =/data1/oradata/test/archivelog/1_112_622258662.dbf 執行緒 =1 序列 =112
介質恢復完成, 用時: 00:00:01
完成 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=oraclemBeh\)\(ARGS=^'\(DESCRIPTION=\(LOCAL=YES\)\(ADDRESS=\(PROTOCOL=beq\)\)\)^'\)\(ENVS=^'ORACLE_SID=mBeh^'\)\)\(CONNECT_DATA=\(SID=mBeh\)\)\) 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:27: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
ORA-39002: 操作無效
ORA-39070: 無法開啟日誌檔案。
ORA-39087: 目錄名 D_OUTPUT 無效
主機命令完成
刪除自動例項
關閉自動例項
Oracle 例項已關閉
自動例項已刪除
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: tranport tablespace 命令 (在 01/09/2009 02:27:43 上) 失敗
RMAN-03015: 在儲存的指令碼Memory Script中出現錯誤
RMAN-06135: 執行主命令時出錯: Additional information: 256
Additional information: 4
錯誤很簡單,由於指定了一個不存在的DIRECTORY名稱:D_OUTPUT,導致RMAN在透過命令列方式呼叫EXPDP命令時出錯。錯誤資訊很明確,解決方法也很簡單,只需要在資料庫中新增D_OUTPUT目錄就可以了。
既然問題這麼簡單,為什麼說這個問題有意思呢。有意思的在源資料庫中新增新的目錄D_OUTPUT後,問題依舊:
SQL> create directory d_output as '/data/dmp';
目錄已建立。
SQL> host
bash-2.03$ expdp test/test directory=d_output dumpfile=test.dp
Export: Release 10.2.0.3.0 - 64bit Production on 星期五, 09 1月, 2009 2:31:06
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
啟動 "TEST"."SYS_EXPORT_SCHEMA_01": test/******** directory=d_output dumpfile=test.dp
正在使用 BLOCKS 方法進行估計...
處理物件型別 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的總估計: 640 KB
處理物件型別 SCHEMA_EXPORT/USER
處理物件型別 SCHEMA_EXPORT/SYSTEM_GRANT
處理物件型別 SCHEMA_EXPORT/ROLE_GRANT
處理物件型別 SCHEMA_EXPORT/DEFAULT_ROLE
處理物件型別 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
處理物件型別 SCHEMA_EXPORT/TABLE/TABLE
處理物件型別 SCHEMA_EXPORT/TABLE/INDEX/INDEX
處理物件型別 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
處理物件型別 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
處理物件型別 SCHEMA_EXPORT/TABLE/COMMENT
處理物件型別 SCHEMA_EXPORT/FUNCTION/FUNCTION
處理物件型別 SCHEMA_EXPORT/PROCEDURE/PROCEDURE
處理物件型別 SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
處理物件型別 SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
. . 匯出了 "TEST"."T" 392.1 KB 45229 行
已成功載入/解除安裝了主表 "TEST"."SYS_EXPORT_SCHEMA_01"
******************************************************************************
TEST.SYS_EXPORT_SCHEMA_01 的轉儲檔案集為:
/data/dmp/test.dp
作業 "TEST"."SYS_EXPORT_SCHEMA_01" 已於 02:32:04 成功完成
可以看到,新增的D_OUTPUT目錄可以正常工作,但是再次執行上面的TRANSPORT TABLESPACE命令,錯誤卻沒有發生任何的變化。
其實導致這個問題的原因並不複雜,由於執行的是表空間及時點恢復,且在執行TRANSPORT TABLESPACE命令時沒有指定UNTIL SCN引數,因此RMAN自動選擇了一個時間點,而這個時間點恰好是在CREATE DIRECTORY命令之前,導致了TRANSPORT TABLESPACE命令生成的AUXILIARY例項在執行完及時點恢復後,不包含新建立的DIRECTORY。
解決這個問題最簡單的方法是指定一個系統中已經存在的目錄,如果一定要使用新建的目錄,那麼需要在TRANSPORT TABLESPACE的時候指定UNTIL SCN引數,且保證這個SCN在建立新DIRECTORY之後。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-567410/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用RMAN遷移表空間碰到的問題(五)
- 利用RMAN遷移表空間碰到的問題(三)
- 利用RMAN遷移表空間碰到的問題(二)
- 利用RMAN遷移表空間碰到的問題(一)
- RMAN遷移表空間
- 利用PLSQL實現表空間的遷移(四)SQL
- Oracle10g新特性——利用RMAN遷移表空間Oracle
- 使用RMAN簡單遷移表空間
- Oracle10g新特性——利用RMAN遷移表空間(二)Oracle
- Oracle10g新特性——利用RMAN遷移表空間(一)Oracle
- 利用可傳輸表空間跨平臺遷移 -RMAN CONVERT
- 利用oracle10g_rman_convert_transportable tablespace遷移表空間Oracle
- 利用PLSQL實現表空間的遷移(一)SQL
- 利用PLSQL實現表空間的遷移(二)SQL
- 利用PLSQL實現表空間的遷移(三)SQL
- 利用PLSQL實現表空間的遷移(五)SQL
- 表空間遷移
- 遷移表空間
- 【遷移】表空間transport
- 遷移表到新的表空間
- ORACLE表批量遷移表空間Oracle
- 遷移SYSTEM表空間為本地管理表空間
- 遷移表結構時儲存空間過大問題
- 基於可傳輸表空間的表空間遷移
- expdp/impdp 遷移表空間
- 利用CONVERT實現跨平臺表空間遷移
- 跨平臺表空間遷移(傳輸表空間)
- Oracle中表空間、表、索引的遷移Oracle索引
- table/index/LOBINDEX遷移表空間Index
- lob欄位表空間遷移
- Oracle 不同平臺間表空間遷移Oracle
- MySQL 遷移表空間,備份單表MySql
- 表、索引遷移表空間alter table move索引
- 記錄一次XTTS遷移碰到的問題TTS
- 空間遷移
- 分割槽表對應的表空間遷移案例
- 表空間遷移辦法補充
- 資料庫物件遷移表空間資料庫物件