【問題】:查詢v$archived_log視圖會發現name列為空。
原因:在使用RMAN命令刪除歸檔后,查詢v$archived_log視圖會發現name列為空了,但其他列的信息還保留,時間長了會留下很多過期的信息,影響維護工作,需要將
過期的信息刪除。
--刪除歸檔日志之前查看v$archived_log視圖,情況正常
SQL > select dest_id,sequence #,name,blocks from v$archived_log ;
DEST_ID SEQUENCE # NAME BLOCKS
---------- ---------- --------------------------------------------- ----------
1 101 / oradata / archive / orcl_1_101_851966182 . arc 2730
1 102 / oradata / archive / orcl_1_102_851966182 . arc 95711
1 103 / oradata / archive / orcl_1_103_851966182 . arc 94813
1 104 / oradata / archive / orcl_1_104_851966182 . arc 95048
1 105 / oradata / archive / orcl_1_105_851966182 . arc 94677
1 106 / oradata / archive / orcl_1_106_851966182 . arc 97494
1 107 / oradata / archive / orcl_1_107_851966182 . arc 94300
1 108 / oradata / archive / orcl_1_108_851966182 . arc 97494
--使用RAMN命令刪除歸檔
RMAN > delete archivelog all ;
--再次查詢v$archived_log視圖,name列為空
SQL > select dest_id,sequence #,name,blocks from v$archived_log ;
DEST_ID SEQUENCE # NAME BLOCKS
---------- ---------- --------------------------------------------- ----------
1 101 2730
1 102 95711
1 103 94813
1 104 95048
1 105 94677
1 106 97494
1 107 94300
1 108 97494
出現這樣的現象是因為使用RMAN命令在刪除歸檔日志的時候不能夠清楚控制文件中的內容,導致v$archived_log留下的過期的不完整信息。下面將歸檔信息進行清除
:
--清除控制文件中關於v$archived_log的信息
SQL > execute sys . dbms_backup_restore . resetCfileSection ( 11 ) ;
PL / SQL procedure successfully completed .
--再次查詢v$archived_log,信息已經被清除
SQL > select dest_id , sequence # , name , blocks from v$archived_log ;
no rows selected
但是這樣是把所有的v$archive_log信息都清除了,包括未過期的也會不清除。下面再將未過期的歸檔文件信息注冊進來。
--我測試環境上歸檔日志都在/oradata/archive/中
RMAN > catalog start with '/oradata/archive/' ;
--再次查詢v$archived_log,未被刪除的歸檔信息可以查詢到了
SQL > select dest_id , sequence # , name , blocks from v$archived_log ;
DEST_ID SEQUENCE # NAME BLOCKS
---------- ---------- --------------------------------------------- ----------
1 110 / oradata / archive / orcl_1_110_851966182 . arc 1
1 111 / oradata / archive / orcl_1_111_851966182 . arc 2
1 109 / oradata / archive / orcl_1_109_851966182 . arc 31079
需要注意的是,對於命令 “ SYS.DBMS_BACKUP_RESTORE.RESETCFILESECTION(11) ”中的 11 代表的是歸檔文件(其實就是控制文件中的“ record type ”),
那么其它數字分別代表什么含義呢?其實,可以通過視圖 V$CONTROLFILE_RECORD_SECTION 來查看:
SYS@lhrdb> SELECT ROWNUM-1 "NUMBER" , TYPE FROM V$CONTROLFILE_RECORD_SECTION;
number TYPE
---------- --------------------------------------------------------
0 DATABASE
1 CKPT PROGRESS
2 REDO THREAD
3 REDO LOG
4 DATAFILE
5 FILENAME
6 TABLESPACE
7 TEMPORARY FILENAME
8 RMAN CONFIGURATION
9 LOG HISTORY
10 OFFLINE RANGE
11 ARCHIVED LOG
12 BACKUP SET
13 BACKUP PIECE
14 BACKUP DATAFILE
15 BACKUP REDOLOG
16 DATAFILE COPY
17 BACKUP CORRUPTION
18 COPY CORRUPTION
19 DELETED OBJECT
20 PROXY COPY
21 BACKUP SPFILE
22 DATABASE INCARNATION
23 FLASHBACK LOG
24 RECOVERY DESTINATION
25 INSTANCE SPACE RESERVATION
26 REMOVABLE RECOVERY FILES
27 RMAN STATUS
28 THREAD INSTANCE NAME MAPPING
29 MTTR
30 DATAFILE HISTORY
31 STANDBY DATABASE MATRIX
32 GUARANTEED RESTORE POINT
33 RESTORE POINT
34 DATABASE BLOCK CORRUPTION
35 ACM OPERATION
36 FOREIGN ARCHIVED LOG
37 PDB RECORD
38 AUXILIARY DATAFILE COPY
39 MULTI INSTANCE REDO APPLY
40 PDBINC RECORD
41 TABLESPACE KEY HISTORY
因此,輸入不同的數字,會對不同的視圖數據進行清理,例如:
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(11); /** CLEAR V$ARCHIVED_LOG */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(12) ; /** CLEAR V$BACKUP_SET */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(13) ; /** CLEAR V$BACKUP_PIECE */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(17); /** CLEAR V$BACKUP_CORRUPTION */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(18); /** CLEAR V$COPY_CORRUPTION */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(19); /** CLEAR V$DELETED_OBJECT */
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(28); /** CLEAR V$RMAN_STATUS */
v$archived_log記錄的數據庫所有的歸檔日志信息,在刪除歸檔日志的時候不能在操作系統下面直接刪除以為就可以了,v$archived_log里面的記錄還是不會變話的,
要想刪除歸檔日志必須使用rman來刪除,這樣oracle數據庫才知道變化,或者使用操作系統命令來刪除也是可以的,但還是要使用rman來更新一下expired的日志。
========================================================================
ORACLE_SID=lds1
$
$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Sun Jan 19 10:51:34 2020
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
idle> conn / as sysdba;
Connected.
sys@LDS> archive log list; #############
Database log mode Archive Mode
Automatic archival Enabled
Archive destination +DATA
Oldest online log sequence 3968
Next log sequence to archive 3970
Current log sequence 3970
sys@LDS>
=======================================================================
sys@LDS> show parameter dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /s01/admin/lds/adump
background_dump_dest string /s01/admin/lds/bdump
core_dump_dest string /s01/admin/lds/cdump
db_create_file_dest string +DATA
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
db_recovery_file_dest string +DATA
db_recovery_file_dest_size big integer 1000G
log_archive_dest string
log_archive_dest_1 string LOCATION=+DATA/
log_archive_dest_10 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
log_archive_dest_8 string
log_archive_dest_9 string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
log_archive_dest_state_9 string enable
log_archive_duplex_dest string
log_archive_min_succeed_dest integer 1
standby_archive_dest string ?/dbs/arch
user_dump_dest string /s01/admin/lds/udump
sys@LDS>
=======================================================================
RMAN> list backup; #################### 列出詳細備份信息:備份集(Backup Sets),鏡像備份(image copies),proxy copies的信息。
using target database control file instead of recovery catalog
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
3113 Full 15.08M DISK 00:00:00 2019/08/18 07:30:33
BP Key: 3113 Status: AVAILABLE Compressed: NO Tag: TAG20190818T073033
Piece Name: /s01/db/dbs/c-207178794-20190818-00
Control File Included: Ckp SCN: 16484873928950 Ckp time: 2019/08/18 07:30:33
SPFILE Included: Modification time: 2019/01/11 13:00:14
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
3118 Full 15.08M DISK 00:00:00 2019/08/19 07:30:34
BP Key: 3118 Status: AVAILABLE Compressed: NO Tag: TAG20190819T073033
Piece Name: /s01/db/dbs/c-207178794-20190819-00
Control File Included: Ckp SCN: 16484877774714 Ckp time: 2019/08/19 07:30:34
SPFILE Included: Modification time: 2019/01/11 13:00:14
RMAN>
=======================================================================
RMAN> list backupset;#####################################列出信息備份信息:備份集(Backup Sets),proxy copies信息。
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
3113 Full 15.08M DISK 00:00:00 2019/08/18 07:30:33
BP Key: 3113 Status: AVAILABLE Compressed: NO Tag: TAG20190818T073033
Piece Name: /s01/db/dbs/c-207178794-20190818-00
Control File Included: Ckp SCN: 16484873928950 Ckp time: 2019/08/18 07:30:33
SPFILE Included: Modification time: 2019/01/11 13:00:14
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
3118 Full 15.08M DISK 00:00:00 2019/08/19 07:30:34
BP Key: 3118 Status: AVAILABLE Compressed: NO Tag: TAG20190819T073033
Piece Name: /s01/db/dbs/c-207178794-20190819-00
Control File Included: Ckp SCN: 16484877774714 Ckp time: 2019/08/19 07:30:34
SPFILE Included: Modification time: 2019/01/11 13:00:14
RMAN>
======================================================================
RMAN> list archivelog all;
List of Archived Log Copies
Key Thrd Seq S Low Time Name
------- ---- ------- - ------------------- ----
5352 1 3843 X 2019/08/19 07:30:17 +DATA/lds/archivelog/2019_08_19/thread_1_seq_3843.37363.1016731991
5353 1 3844 X 2019/08/19 17:33:10 +DATA/lds/archivelog/2019_08_19/thread_1_seq_3844.26838.1016734681
5354 1 3845 X 2019/08/19 18:18:01 +DATA/lds/archivelog/2019_08_20/thread_1_seq_3845.33711.1016818401
5357 1 3846 X 2019/08/20 17:33:20 +DATA/lds/archivelog/2019_08_21/thread_1_seq_3846.34317.1016920827
5358 1 3847 X 2019/08/21 22:00:27 +DATA/lds/archivelog/2019_08_22/thread_1_seq_3847.37342.1017008403
5359 1 3848 A 2019/08/22 22:20:03 +DATA/lds/archivelog/2019_08_24/thread_1_seq_3848.32239.1017122415
5361 1 3849 A 2019/08/24 06:00:13 +DATA/lds/archivelog/2019_08_26/thread_1_seq_3849.24415.1017307749
5362 1 3850 A 2019/08/26 09:29:09 +DATA/lds/archivelog/2019_08_26/thread_1_seq_3850.35670.1017314227
以下摘自:https://blog.csdn.net/DBDeep/article/details/78510687
我們都知道在controlfile中記錄着每一個archivelog文件的相關信息,當然們在OS下把這些物理文件delete掉后,在我們的controlfile中仍然記錄着這些archivelog文件的相關信息,在oracle的OEM管理器中有可視化的日志展現出,當我們手工清除 archive目錄下的文件后,這些記錄並沒有被我們從controlfile中清除掉,也就是oracle並不知道這些文件已經不存在了,這時候我們要做手工的清除的話,下面我經過實驗,可以嘗試這種方法:
1. 進入rman
[oracle@dthxdb2 ~]$ /u01/app/oracle/product/10.2.0/db/bin/rman
2. connect target /
RMAN> connect target /
3. crosscheck archivelog all;crosscheck archivelog all:驗證的是DB的歸檔日志即log_archive_dest參數指定位置的文件,當手工刪除了歸檔日志以后,Rman備份會檢測到日志缺失,從而無法進一步繼續執行Rman備份,所以此時需要手工執行crosscheck過程,查看所有的歸檔日志文件是否都是正常的然后再來執行Rman備份。
4. delete expired archivelog all;
這時候我們再去OEM中就看不到這些日志文件了,如果你的從來沒有做過這個動作的話,我們可以比較這個動作前的controlfile和動作后的controlfile的文件大小
ORACLE正確刪除歸檔並回收空間的方法:
一個ORACLE歸檔日志經常滿,表現為/archivelog這個文件空間占用100%大家總是抱怨ORACLE為何沒有歸檔維護工具,很多人直接刪除了事,錯了,ORACLE有,而且很智能,可以正確的刪除歸檔和 FLASHBACK,不過切記,ORACLE歸檔日志對於ORACLE的數據恢復和備份非常重要,不到萬不得已不要刪除歸檔日志。
刪除歸檔日志的過程:
以ORACLE用戶身份登錄到數據庫服務器主機或通過網絡連接
進入ORACLE數據備份工具:
/u01/app/oracle/product/10.2.0/db/bin/rman target/
或/u01/app/oracle/product/10.2.0/db/bin/rman target/@DTHXRAC1
在命令窗口里面執行:
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 /archivelog -xdev -mtime +7 -name "*.dbf" -exec rm -f {} \;
這樣做仍然會在RMAN里留下未管理的歸檔文件,它的作用還是相當於直接用操作系統命令將歸檔日志文件直接刪除,而ORACLE控制文件並不知道,因此仍需要在RMAN里執行下面2條命令:
crosscheck archivelog all;
delete expired archivelog all;
所以還不如上面的方法好用,不過用FIND的好處就是,可以在條件上,和EXEC子項上做很多操作,實現更復雜的功能。