RMAN異機恢復總結

xccheese發表於2012-03-15
一、RMAN的"rman: can't open target"錯誤
這是因為呼叫的是非Oracle的RMAN的緣故。
修正這個問題,我們只需要在Oracle使用者的環境變數下,將$ORACLE_HOME/bin放在PATH變數前就可以了:
export PATH=$ORACLE_HOME/bin:$PATH:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin

二、RMAN恢復到異機的步驟
1、準備工作:
確認備份(含控制檔案,資料檔案,歸檔檔案)有效(沒歸檔應該也可以,只要能確認資料檔案和控制檔案是一致備份)。在目標伺服器上建立與源伺服器上一致的oracle目錄結構,主要建立$ORACLE_BASE/admin/$ORACLE_SID/下的六個目錄;$ORACLE_BASE/oradata下建立$ORACLE_SID目錄;rman備份路徑目錄(這個地方必須要與源資料庫一致,建立好後,把源資料庫備份的資料檔案複製到這個目錄裡);歸檔日誌目錄(同樣,建立好後,把需要的歸檔日誌檔案複製到此目錄)。
以下均在目標伺服器上操作
2、連線到該sid
$export ORACLE_SID=cms
$rman target /
RMAN> set dbid 345935189
RMAN> startup nomount
3、從備份的控制檔案恢復初始化引數檔案
RMAN>restore spfile to pfile '/usr/oracle/product/10.2.0/dbs/initcms.ora' from '/usr/oracle/backup/ctl_c-345935189-20090609-00';
RMAN> startup force nomount pfile='/usr/oracle/product/10.2.0/dbs/initcms.ora';
4、恢復控制檔案並進入到載入狀態
RMAN> restore controlfile from '/usr/oracle/backup/ctl_c-345935189-20090609-00';
RMAN> alter database mount;
5、修復資料庫(這裡是源路徑修復,如果你要恢復的檔案地址與源庫地址不同的話,需要通過SET NEWNAME FOR DATAFILE命令來為資料檔案重新設定路徑。)
RMAN> restore database;
6、恢復資料庫
RMAN> recover database until time '2009-06-09 14:00:00'
7、通過open resetlogs方式開啟資料庫
RMAN> alter database open resetlogs;
測試,OK,到此使用RMAN異機恢復成功,剩下的就是其他簡單的工作了。

三、ORA-01861: literal does not match format string
RMAN中使用recover database until time '2009-06-09 14:00:00'
命令進行基於時間點的恢復時報的一個錯誤。
這個錯誤是由於時間日期格式設定的問題,設定正確的時間格式:
$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'

四、ORA-06553: PLS-801: internal error [56319]錯誤
目標資料庫恢復成功,登陸進去,一切正常。結果在執行最簡單的sql查詢的時候報這個錯,執行多個不同的sql反覆報這個錯誤,但sql語句可以正常執行。rapidsql等工具無法連線。
原因:源庫是64位的OS,目標庫是32位(9.36安裝64位10g,5.186安裝32位10g)
解決方法:
1、Shutdown immediate
2、startup migrate
注:startup migrate表示降級,在9i,無論升級/降級 資料庫都是startup migrate;10g後增加了upgrade引數,升級可直接用startup upgrade,降級仍是startup migrate.
3、@$ORACLE_HOME/rdbms/admin/utlirp.sql;
4、Shutdown immediate
5、Startup
6、@$ORACLE_HOME/rdbms/admin/utlrp.sql;
7、Shutdown immediate
8、Startup

五、一個小技巧
SQL*Plus允許建立一個login.sql檔案,每次啟動SQL*Plus時都會執行這個指令碼。另外,還允許設定一個環境變數SQLPATH,這樣不論這個login.sql指令碼具體在哪個目錄中,SQL*Plus都能找到它。
login.sql內容可以根據自己的需要新增,下面是Thomas Kyte的例子:
define _editor=vi
set serveroutput on size 1000000
set trimspool on
set long 5000
set linesize 100
set pagesize 9999
column plan_plus_exp format a80
column global_name new_value gname
set termout off
define gname=idle
column global_name new_value gname
select lower(user) || '@' || substr( global_name, 1,decode( dot, 0, length(global_name), dot-1) ) global_name
from (select global_name, instr(global_name,'.') dot from global_name );
set sqlprompt '&gname> '
set termout on
一些sqlplus的設定,從define gname=idle這句以下,用於建立SQL*Plus提示符,sqlplus登入後的提示符形如:
sys@CMS>
很清楚的可以看到當前登入使用者和例項名,在多例項的伺服器上,相當好使,可以避免因忘記export ORACLE_SID= 引起的莫名的問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25148509/viewspace-718657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章