posts - 495,comments - 227,trackbacks - 0
          http://maincoolbo.javaeye.com/blog/568519

          我們都都知道在controlfile中記錄著每一個archivelog的相關信息,當然們在OS下把這些物理文件delete掉后,在我們的

          controlfile中仍然記錄著這些archivelog的信息,在oracle的OEM管理器中有可視化的日志展現出,當我們手工清除 archive目錄下的文件后,這些記錄并沒有被我們從controlfile中清除掉,也就是oracle并不知道這些文件已經不存在了!這時候我們要 做手工的清除的話,下面我經過實驗,可以嘗試這種方法:

          1. 進入rman 

          2. connect target /

          3. crosscheck archivelog all;

          4. delete expired archivelog all;

          這時候我們再去OEM中看就一定看不到,如果你的從來沒有做過這個動作的話,我們可以比較從這個動作前的controlfile后動作后的 controlfile的大小!

          ORACLE正確刪除歸檔并回收空間的方法

          ORACLE正確刪除歸檔并回收空間的方法

          一個ORACLE歸檔日志經常滿,表現為/oraarchive 這個文件空間占用100%大家一定抱怨ORACLE為何沒有歸檔維護工具,很多人直接刪除了事,錯了,ORACLE有,而且很智能,可以正確的刪除歸檔和 FLASHBACK,不過切記,ORACLE歸檔日志對于ORACLE的數據恢復和備份非常重要,不到萬不得已不要刪除歸檔日志。

          刪除歸檔日志的過程

          以ORACLE用戶身份登錄到數據庫服務器主機或通過網絡連接

          進入ORACLE數據備份工具

          rman target/

          或rman target/@orcl

          在命令窗口里面執行

          DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

          說明

          SYSDATA-7,表明當前的系統時間7天前,before關鍵字表示在7天前的歸檔日志,如果使用了閃回功能,也會刪除閃回的數據。

          同樣道理,也可以刪除從7天前到現在的全部日志,不過這個命令要考慮清楚,做完這個刪除,最好馬上進行全備份數據庫

          DELETE ARCHIVELOG FROM TIME 'SYSDATE-7';



          UNIX/LINUX下也可以通過FIND找到7天前的歸檔數據,使用EXEC子操作刪除



          find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ;

          這樣做仍然會在RMAN里留下未管理的歸檔文件

          仍需要在RMAN里執行下面2條命令

          crosscheck archivelog all;

          delete expired archivelog all;

          所以還不如上面的方法好用,不過用FIND的好處就是,可以在條件上,和EXEC子項上做很多操作,實現更復雜的功能

          3.簡要介紹一下report obsolete命令



          使用report obsolete命令報告過期備份

          RMAN> report obsolete;

          RMAN retention policy will be applied to the command

          RMAN retention policy is set to redundancy 1

          Report of obsolete backups and copies

          Type                 Key    Completion Time    Filename/Handle

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

          Backup Set           125    01-NOV-04

          Backup Piece       125    01-NOV-04          /data1/oracle/orabak/full_1_541045804

          Backup Set           131    04-NOV-04

          Backup Piece       131    04-NOV-04          /data1/oracle/orabak/full_AVATAR2_20041104_131

          ....

          Backup Set           173    06-DEC-04

          Backup Piece       173    06-DEC-04          /data1/oracle/orabak/full_AVATAR2_20041206_173

          Backup Set           179    11-DEC-04

          Backup Piece       179    11-DEC-04          /data1/oracle/orabak/arch544588206.arc

          .....

          Backup Piece       189    17-DEC-04          /data1/oracle/orabak/arch545106606.arc

          Backup Set           190    17-DEC-04

          Backup Piece       190    17-DEC-04          /data1/oracle/orabak/arch545106665.arc

          Backup Set           191    20-DEC-04

          Backup Piece       191    20-DEC-04          /data1/oracle/orabak/arch_AVATAR2_20041220_194

          Archive Log          2973   20-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2985.dbf

          Archive Log          2971   20-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2984.dbf

          .....

          Archive Log          2705   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2717.dbf

          Archive Log          2704   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

          Archive Log          2703   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

          Archive Log          2702   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf



          4.使用delete obsolete命令刪除過期備份:



          RMAN> delete obsolete;



          RMAN retention policy will be applied to the command

          RMAN retention policy is set to redundancy 1

          using channel ORA_DISK_1

          Deleting the following obsolete backups and copies:

          Type                 Key    Completion Time    Filename/Handle

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

          Backup Set           125    01-NOV-04

          Backup Piece       125    01-NOV-04          /data1/oracle/orabak/full_1_541045804

          ....

          Archive Log          2704   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

          Archive Log          2703   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

          Archive Log          2702   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf



          Do you really want to delete the above objects (enter YES or NO)? yes

          deleted backup piece

          backup piece handle=/data1/oracle/orabak/full_AVATAR2_20041206_173 recid=173 stamp=544156241

          .....

          deleted archive log

          archive log filename=/opt/oracle/oradata/avatar2/archive/1_2715.dbf recid=2703 stamp=545108268

          deleted archive log

          archive log filename=/opt/oracle/oradata/avatar2/archive/1_2714.dbf recid=2702 stamp=545107659

          Deleted 286 objects





          RMAN> crosscheck archivelog all;



          released channel: ORA_DISK_1

          allocated channel: ORA_DISK_1

          channel ORA_DISK_1: sid=19 devtype=DISK

          specification does not match any archive log in the recovery catalog





          5 在rman中用crosscheck檢查歸檔日志,2個歸檔日志都是失敗的:

          RMAN> crosscheck archivelog all;



          釋放的通道: ORA_DISK_1

          分配的通道: ORA_DISK_1

          通道 ORA_DISK_1: sid=14 devtype=DISK

          對歸檔日志的驗證失敗

          存檔日志文件名 =D:ORACLEORADATATESTARCHIVE1_47.DBF 記錄 ID=1 時間戳 =572866

          683

          對歸檔日志的驗證失敗

          存檔日志文件名 =D:ORACLEORADATATESTARCHIVE11_48.DBF 記錄 ID=2 時間戳 =57286

          6931

          已交叉檢驗的 2 對象



          6 試著同步一下,看行不行,結果不行,crosscheck還是失敗:

          RMAN> resync catalog;



          正在啟動全部恢復目錄的 resync

          完成全部 resync



          RMAN> crosscheck archivelog all;



          釋放的通道: ORA_DISK_1

          分配的通道: ORA_DISK_1

          通道 ORA_DISK_1: sid=14 devtype=DISK

          對歸檔日志的驗證失敗

          存檔日志文件名 =D:ORACLEORADATATESTARCHIVE1_47.DBF 記錄 ID=1 時間戳 =572866

          683

          對歸檔日志的驗證失敗

          存檔日志文件名 =D:ORACLEORADATATESTARCHIVE11_48.DBF 記錄 ID=2 時間戳 =57286

          6931

          已交叉檢驗的 2 對象



          7 用list expired看看是否有失效的archive log,證明沒有失效的archive log:

          RMAN> list expired archivelog all;



          說明與恢復目錄中的任何存檔日志均不匹配



          8 更改語言環境試試,結果再次crosscheck,2個archive log 都成功了:

          RMAN> exit





          恢復管理器完成。



          C:>set nls_lang=american_america.zhs16gbk



          C:>rman catalogrman/rman@safetarget /



          Recovery Manager: Release 9.2.0.1.0 - Production



          Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.



          connected to target database: TEST (DBID=1870953724)

          connected to recovery catalog database



          RMAN> crosscheck archivelog all;



          allocated channel: ORA_DISK_1

          channel ORA_DISK_1: sid=9 devtype=DISK

          validation succeeded for archived log

          archive log filename=D:ORACLEORADATATESTARCHIVE1_47.DBF recid=1 stamp=57286

          6683

          validation succeeded for archived log

          archive log filename=D:ORACLEORADATATESTARCHIVE11_48.DBF recid=2 stamp=5728

          66931

          Crosschecked 2 objects


          ====================================
          oracle隱藏參數字典 x$ksppi x$ksppstvl 
          oracle的隱藏參數字典是 x$ksppi,x$ksppstvl基表中,有關隱含參數說明,可以查詢這個基表

          SQL> desc x$ksppi
          名稱 是否為空? 類型
          ------    -----
          ADDR      RAW(4)
          INDX      NUMBER
          INST_ID   NUMBER
          KSPPINM   VARCHAR2(64)
          KSPPITY   NUMBER
          KSPPDESC  VARCHAR2(64)
          KSPPIFLG  NUMBER

          SQL>

          SQL> desc x$ksppcv
          名稱 是否為空? 類型
          ----------------------------------------- -------- ----------------------------

          ADDR RAW(4)
          INDX NUMBER
          INST_ID NUMBER
          KSPPSTVL VARCHAR2(512)
          KSPPSTDF VARCHAR2(9)
          KSPPSTVF NUMBER
          KSPPSTCMNT VARCHAR2(255)

          SQL>

          比如我現在要查詢隱含參數
          _allow_resetlogs_corruption /// 這個參數說明允許數據庫在不一致的條件下,進行數據庫打開


          查看隱含參數的值,方式是


          SQL> col ksppinm format a30
          SQL> col ksppstvl format a30
          SQL> select ksppinm,ksppstvl from x$ksppcv cv,x$ksppi pi where cv.indx=pi.indx a
          nd pi.ksppinm like '_allow%';

          KSPPINM KSPPSTVL
          ------------------------------ ------------------------------
          _allow_error_simulation FALSE
          _allow_resetlogs_corruption FALSE
          _allow_terminal_recovery_corru FALSE
          ption

          _allow_read_only_corruption FALSE

          SQL>

          這個參數一般在數據庫正常無法恢復了,可以用它來強行打開數據庫,把數據文件先備份出來,這是
          一個比較好的辦法。
          posted on 2010-04-21 15:14 SIMONE 閱讀(5013) 評論(0)  編輯  收藏 所屬分類: oracle
          主站蜘蛛池模板: 兰溪市| 灵台县| 托克逊县| 苏尼特右旗| 玉溪市| 井研县| 龙井市| 温泉县| 尤溪县| 玉门市| 义乌市| 拉萨市| 青河县| 页游| 南投县| 神木县| 名山县| 平定县| 武川县| 蓝田县| 南丰县| 井陉县| 墨竹工卡县| 志丹县| 东至县| 河北省| 上思县| 宁乡县| 大城县| 安岳县| 阜城县| 林州市| 科尔| 镇赉县| 桃江县| 马边| 乐陵市| 茶陵县| 琼海市| 南澳县| 临高县|