天天看點

rman指令學習-tina(下)

五、rman删除 

    delete指令 

    删除相關的備份集或鏡像副本的實體檔案,同時将删除标記delete更新到控制檔案,如果使用恢複目錄,則是清除恢複目錄内的備份集。 

    delete (archivelog, backuppiece, backupset, backup, controlfilecopy, copy, datafilecopy, expired, force, 

    foreign, global, noprompt, obsolete, proxy, script) 

    rman> delete backupset; 

    rman> delete backupset n; 

    rman> delete obsolete ; 

    rman> delete obsolete redundancy 2; 

    rman> delete noprompt copy; 

    rman> delete noprompt backupset tag tag20101016t143521;  --prompt 提示 ->noprompt 不提示 

    rman> delete obsolete recovery window of 7 days; 

    rman> delete expired backupset; 

    rman> delete expired copy; 

    rman> delete expired archivelog all; 

    rman> delete archivelog until time 'sysdate-5'; 

舉例: 

rman> delete backupset 17; 

rman> delete backupset tag tinadb1218_0; 

using channel ora_disk_1 

list of backup pieces 

bp key  bs key  pc# cp# status      device type piece name 

------- ------- --- --- ----------- ----------- ---------- 

20      20      1   1   available   disk        /orabak/db_0_tinadb_0mqp4b88_1_1 

23      23      1   1   available   disk        /orabak/db_0_tinadb_0pqp4bou_1_1 

do you really want to delete the above objects (enter yes or no)? ---需要輸入yes确認 

rman> delete noprompt backupset tag tinadb1218_0;    ---不确認直接删除 

六、rman恢複 

1)恢複spfile 

rman>restore spfile to '/u01/oracle/testspfile.ora' from autobackup; 

rman>restore spfile from '/u01/oracle/tinadb/autobackup/2015_12_17/o1_mf_s_898707140_c74xy47h_.bkp' 

2)恢複control file 

rman> set dbid=1669126943 

rman> restore controlfile to '/u01/oradata/tinadb/control01.ctl' from autobackup; 

rman> restore controlfile from autobackup until time "to_date('2015-12-18 15:00:00','yyyy/mm/dd hh24:mi:ss')"; 

---這不是備份時的精确時間,是指這時間點之前最近一次的控制檔案的備份。 

3)恢複archive log 

   restore archivelog 的各種選項 

   1.恢複全部歸檔日志檔案 

     rman> restore archivelog all; 

   2.隻恢複5到8這四個歸檔日志檔案 

     rman> restore archivelog from logseq 5 until logseq 8; 

   3.恢複從第5個歸檔日志起 

     rman> restore archivelog from logseq 5; 

   4.恢複7天内的歸檔日志 

     rman> restore archivelog from time 'sysdate-7'; 

   5.sequence between 寫法 

     rman> restore archivelog sequence between 1 and 3; 

   6.恢複到哪個日志檔案為止 

     rman> restore archivelog until logseq 3; 

   7.從第五個日志開始恢複 

     rman> restore archivelog low logseq 5; 

   8.到第5個日志為止 

     rman> restore archivelog high logseq 5; 

4)恢複資料庫 

rman> restore database; 

rman> recover database until time "to_date('2015-12-18 15:00:00','yyyy-mm-dd hh24:mi:ss')"; 

七、rman report 

report用于判斷資料庫目前可恢複狀态、以及資料庫已有備份的資訊。 

最常使用的是report obsolete; report schema; 

report {device, need, obsolete, schema, unrecoverable} 

report schema;---報告資料庫模式 

report obsolete;---報告已丢棄的備份集(配置了保留政策)。 

report unrecoverable;---報告目前資料庫中不可恢複的資料檔案(即沒有這個資料檔案的備份、或者該資料檔案的備份已經過期) 

report need backup;---報告需要備份的資料檔案(根據條件不同) 

report need backup days=3; 

        --最近三天沒有備份的資料檔案(如果出問題的話,這些資料檔案将需要最近3天的歸檔日志才能恢複) 

report need backup incremental=3; 

        --需要多少個增量備份檔案才能恢複的資料檔案。(如果出問題,這些資料檔案将需要3個增量備份才能恢複) 

report need backup redundancy=3; 

        --報告出備援次數小于3的資料檔案 

        --例如資料檔案中包含2個資料檔案system01.dbf和users01.dbf. 

        --在3次或都3次以上備份中都包含system01.dbf這個資料檔案,而users01.dbf則小于3次 

        --那麼,報告出來的資料檔案就是users01.dbf 

        --即,報告出資料庫中備援次數小于 n 的資料檔案 

report need backup recovery window of 2 days; 

        --報告出恢複需要2天歸檔日志的資料檔案 

八、crosscheck指令 

用于檢驗存儲倉庫中的備份集或鏡像副本,執行改指令後,将更新存儲倉庫中的剛剛校驗的對象狀态,便于後續操作處理。 

rman備份校驗是的幾種狀态: 

expired:對象不存在于磁盤或錄音帶。當一個備份集處于expired狀态,則該備份集中所有的備份片同樣處于expired狀态。 

available:對象處于可用狀态。當一個備份集可用,則改備份集内的所有備份片同樣可用。 

unavailable:對象處于不可用狀态。當一個備份可不用,則改備份集内的所有備份片同樣不可用 

    rman> crosscheck backupset;   

    rman> crosscheck copy;                  

    rman> crosscheck backup of controlfile;    

    rman> crosscheck backup of archivelog all; 

    rman> crosscheck backup of datafile 1,2;  

    rman> crosscheck backup of tablespace sysaux,system;                     

    rman> crosscheck backup completed between '13-oct-10' and '23-oct-10'; 

    rman> crosscheck backupset 1067,1068; 

九、validate指令 

    驗證一個備份集内的資料的完整性。rman掃描備份集得所有備份片,并檢查校驗和,驗證其内容是否可以成功還原, 

    validate是較crosscheck更高一級的驗證操作,crosscheck僅僅是檢查備份集的頭部資訊,檢驗檔案的存在性,validate驗證資料的有效性。 

rman> validate backupset <primary key> [check logical] 

十、change 

1、改變備份集狀态 

      可用change backupset .. unavailable/available 來改變一個備份集的狀态。 

      rman>change backupset 22 unavailable 

2、改變映像副本狀态 

      資料檔案:change datafilecopy .. available/unavailable 

      控制檔案:change controlfilecopy .. available/unavailable 

      歸檔日志:change archivelog .. available/unavailable 

      例如: 

      rman>change datafilecopy 'd:\backup\demo_37.bak' unavailable; 

3、建立長期備份 

      長期備份是指被長期保留的備份檔案,使用長期備份的目的是為了可以将資料庫恢複到過去的特定時間點。當社頂了長期備份之後,rman會從裝置備援政策中 

      免除該備份檔案,也就是說,長期備份檔案不會被标記為陳舊備份。 

      指令:change .. keep/nokeep 

      (1)使備份集156永久保留 

         rman>change backupset 156 keep forever logs; 

      (2)使備份集198保留60天 

         rman>change backupset 198 keep until time 'sysdate+60' logs; 

      (3)免除備份集156的保留期限 

         rman>change backupset 156 nokeep 

十一、常在run塊中運作的指令 

1)給資料檔案指定新的路徑和名稱,例如: 

rman>run { 

    allocate channel c1 device type disk; 

    set newname for datafile 4 to 'd:\oracle\bobnew\users01.dbf'; 

                } 

2)設定恢複到的時間點或scn,例如: 

    set until time "to_date('2013-12-27 10:33:05','yyyy-mm-dd hh24:mi:ss') "; 

    ...  

3)定義備份片段的備援數: 

    set backup copies 3; 

    ... 

4)指定resetore/recover指令産生的歸檔檔案的存儲路徑,預設情況下歸檔檔案會在log_archive_dest_1指定路徑下,如果通過 

set archivelog destination to指定後,則歸檔檔案産生與set指定的路徑下 

    set archivelog destination to '新路徑'; 

十二、如何正确地删除archivelog: 

   archivelog并不能直接得從os層直接實體删除,因為archivelog的相關資訊是記錄在controlfile中的, 

   當實體删除後不會改變controlfile的設定。并且在查詢相關的動态視圖(例如v$archived_log)時,該部分日志仍然标注為存在。 

   也就是說oracle并不認為這些日志被删除了,是以在删除archivelog的時候,需要我們在其他地方做一些設定。 

1)使用rman清楚實體删除後的記錄 

可以使用rman來删除archivelog,具體可以按以下步驟操作: 

1、實體删除archivelog 

2、進入rman 

3、crosscheck archivelog all; 

4、delete expried archivelog all; 

這樣就在一些oracle的記錄中查不到相應的archivelog記錄了。 

2)直接使用rman删除archivelog 

其實在rman中是可以使用指令直接将archivelog删除的,指令如下: 

rman> delete archivelog all completed before 'sysdate-7'; 

表示删除7天以前的所有archivelog,但是這個指令的缺點是無法對archivelog進行細緻的劃分。 

3)删除n天以前的歸檔日志,有兩個指令: 

delete archivelog until time 'sysdate-n' 

delete archivelog all completed before 'sysdate-n' 

差別已經很明顯: 

list archivelog until time 'sysdate-1'; 此時是按照歸檔日志開始時間即fisrt_time作為截止時間 

list archivelog all completed before 'sysdate-1' 是按照歸檔日志完成時間即completion_time作為截止時間 

試想如果删除歸檔日志,還是采用delete archivelog all completed before 'sysdate-n' 

十三、備份相關的動态性能視圖及監控 

    1.相關視圖 

        v$backup_files 

        v$backup_set 

        v$backup_piece 

        v$backup_redolog 

        v$backup_spfile 

        v$backup_device 

        v$rman_configuration 

        v$archived_log 

        v$backup_corruption 

        v$copy_corruption 

        v$database_block_corruption 

        v$backup_datafile 

   2.檢視rman完整的進度      

        sql> select sid,serial#,context,sofar,totalwork, 

          2  round(sofar/totalwork*100,2) "% complete" 

          3  from v$session_longops 

          4   where opname like 'rman:%' 

          5  and opname not like 'rman:aggregate%' 

          6  and totalwork!=0;    

   3.通過如下sql獲得rman用來完成備份操作的服務程序的sid與spid資訊: 

        select sid, spid, client_info 

          from v$process p, v$session s 

         where p.addr = s.paddr 

           and client_info like '%id=rman%' 

十四、oracle10g 中rman的增強功能catalog  start with---将備份集注冊到控制檔案 

rman> catalog start with '/orabak/tinadb'; 

通過注冊的形式,可以讓db讀取到我們的備份集,也可通過此方式異地進行備份集恢複。 

常見報錯:rman-08137: warning: archive log not deleted as it is still need 

archived log file name=+fra_dg/omsdb/archivelog/2013_12_31/thread_1_seq_78149.4167.835588207 thread=1 sequence=78149 

rman-08137: warning: archived log not deleted, needed for standby or upstream capture process 

archived log file name=+fra_dg/omsdb/archivelog/2013_12_31/thread_1_seq_78150.15705.835589103 thread=1 sequence=78150 

archived log file name=+fra_dg/omsdb/archivelog/2013_12_31/thread_1_seq_78151.8949.835590003 thread=1 sequence=78151 

發現有個告警資訊,通過檢視備份日志,發現: 

released channel: ora_disk_1 

released channel: ora_disk_2 

piece handle=/ora01/db_bak/9rmqc9u3_1_1 tag=tag20111030t035751 comment=none 

channel ora_disk_1: backup set complete, elapsed time: 00:04:57 

rman-08137: warning: archive log not deleted as it is still needed 

經過研究後确認是由于這個資料庫上配置了oracle stream replication,因為在備份完後進行删除時, 

這個歸檔日志還沒有被capture process解析完,是以就不能删除,出這樣的告警。 

嘗試删除歸檔日志,oracle提示這些歸檔日志還要用到standby資料庫上面,不讓删除, 

這個特點不錯,可以避免由于沒有同步standby而誤删除archivelog的情況。 

要删除,需要加上force删除就可以了。 

rman> delete noprompt  force archivelog all; 

這種方法不可取 

rman> configure archivelog deletion policy to shipped to standby; 

old rman configuration parameters: 

configure archivelog deletion policy to shipped to all standby; 

new rman configuration parameters: 

configure archivelog deletion policy to shipped to standby; 

new rman configuration parameters are successfully stored 

rman-08591: warning: invalid archived log deletion policy 

然後又改回去: 

rman> configure archivelog deletion policy to shipped to all standby; 

sql> show parameter log_archive 

name                                 type        value 

------------------------------------ ----------- ------------------------------ 

log_archive_config                   string      dg_config=(omsdb,omsstd) 

log_archive_dest                     string 

log_archive_dest_1                   string      location=use_db_recovery_file_ 

                                                 dest 

log_archive_dest_10                  string 

log_archive_dest_11                  string 

log_archive_dest_12                  string 

log_archive_dest_13                  string 

log_archive_dest_14                  string 

log_archive_dest_15                  string 

log_archive_dest_16                  string 

log_archive_dest_17                  string 

log_archive_dest_18                  string 

log_archive_dest_19                  string 

log_archive_dest_2                   string      service=cnsz02_omsdb_01 lgwr a 

                                                 sync noaffirm reopen=60 db_uni 

                                                 que_name=omsdb 

這是因為有一個dg名為omsstd的沒有了,不存在了,all stantdby就會報錯,說還在用,日志不能删 

這個log_archive_config 參數一旦設定了,就一定要所有的dg都同樣設定。 

應該是可以線上修改的,alter system set log_archive_config='',scope=both; 

主備庫都需要修改。