Oracle RMAN 恢復數據庫到不同主機(二)


我們在recover database時報一個錯誤:

       RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 149 and starting SCN of 3507749

       這里是提醒恢復到一個未知的scn號。我們在備份時只有148號歸檔,149號還是online redo,所以沒有copy過來,如果我們不指定recover的結束時間,最后就會提示我們上面的信息:RMAN-06054.  所以在alter database mount之后,通過set until scn或者set until time命令設置恢復到的scn號或時間,就可以避免這個錯誤。如:

 

RMAN> run{
      set until sequence 149;
      recover database;
      }

executing command: SET until clause

Starting recover at 2016-05-12 23:27:34
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 2016-05-12 23:27:34

 

L、恢復完成之后,還有一個十分重要的工作要做,那就是恢復redo log files.如果源庫的目錄結構與新庫的目錄結構相同的話,在open resetlogs 時,會重新創建online redo log。但是現在redo log file文件的位置變了,open resetlogs時報如下錯誤:

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 05/12/2016 23:37:46
ORA-00344: unable to re-create online log '/u01/app/oracle/oradata/scp/redo01.log'
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 1

 由於源庫和目標庫的路徑不相同,oracle試圖在原來舊的位置去創建redo log file,但是卻發現目標庫上不存在這個路徑了.解決方法仍然是將舊文件的路徑重置為新的路徑,但是我們怎么知道源庫redo log file文件的位置呢?因為數據庫已經mount上了,直接執行查詢:

RMAN> select group#,type,member from v$logfile;

group# type MEMBER -------------------------------------------------------------------------------- 3 online /u01/app/oracle/oradata/scp/redo03.log 2 online /u01/app/oracle/oradata/scp/redo02.log 1 online /u01/app/oracle/oradata/scp/redo01.log

接下來我們將這些redo log file指定到新的文件位置:

RMAN>  run{
    ALTER DATABASE RENAME file '/u01/app/oracle/oradata/scp/redo01.log' TO '/home/OracleData/scp/redo01.log';
    ALTER DATABASE RENAME file '/u01/app/oracle/oradata/scp/redo02.log' TO '/home/OracleData/scp/redo02.log';
    ALTER DATABASE RENAME file '/u01/app/oracle/oradata/scp/redo03.log' TO '/home/OracleData/scp/redo03.log';
    }

Statement processed
Statement processed
Statement processed

 這個時候我們以resetlogs方式打開數據庫,oracle報ora-00392的錯誤,

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of sql statement command at 05/13/2016 00:07:37
ORA-00392: log 2 of thread 1 is being cleared, operation not allowed
ORA-00312: online log 2 thread 1: '/home/OracleData/scp/redo02.log'

我們這個時候來查詢一下redo log file的狀態:

RMAN>  select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS          
---------- ---------- ---------- ---------- ----------------
         1          0   52428800          1 CLEARING        
         3          0   52428800          1 CLEARING        
         2          0   52428800          1 CLEARING_CURRENT

以下是oracle的官方文檔:

(1)CLEARING ---- Log is being re-created as an empty log after an ALTER DATABASE CLEAR LOGFILE statement.After the log is cleared, the status changes to UNUSED.

(2)CLEARING_CURRENT ----Current log is being cleared of a closed thread. The log can stay in this status  if there is some failure in the switch such as an I/O error writing the new log header.

解決辦法:

RMAN> alter database clear logfile group 2;

Statement processed

RMAN>  select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS          
---------- ---------- ---------- ---------- ----------------
         1          0   52428800          1 CLEARING        
         3          0   52428800          1 CLEARING        
         2          0   52428800          1 CURRENT         

M、最后用open resetlogs方式打開數據庫,並執行一些日志切換。

RMAN> alter database open resetlogs;

Statement processed

RMAN> alter system switch logfile;

Statement processed

RMAN> alter system switch logfile;

Statement processed

RMAN>  select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS          
---------- ---------- ---------- ---------- ----------------
         1          1   52428800          1 ACTIVE          
         2          2   52428800          1 ACTIVE          
         3          3   52428800          1 CURRENT 

N、這還沒有完,我們需要創建spfile文件、臨時表空間和密碼文件:

RMAN> alter tablespace temp add tempfile '/home/OracleData/scp/temp01.dbf' size 29m reuse autoextend on next 640k maxsize 32767m; 
Statement processed

RMAN> create spfile from pfile; RMAN
> host; [oracle@scpdb rmanbak]$ orapwd file='$ORACLE_HOME/dbs/orapwscp' password='abc123!@#' entries=3

關於密碼文件,要注意文件名格式 orapw$ORACLE_SID (注意不需要后綴名),具體請參照Oracle官方文檔:
https://docs.oracle.com/cd/B28359_01/server.111/b28310/dba007.htm

 

至此,利用rman恢復數據庫到不同主機的操作就全部完成了,記得馬上做一次RMAN的全備!!!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM