rac下归档日志删除(rman)



【问题】:查询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子项上做很多操作,实现更复杂的功能。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM