首页 > 数据库 >Oracle RMAN无法删除部分归档日志问题

Oracle RMAN无法删除部分归档日志问题

时间:2024-09-25 08:52:34浏览次数:8  
标签:dbf oracle 91233774 归档 Oracle RMAN 日志

前言

当Oracle 归档日志满了后,将无法正常登入oracle,需要删除一部分归档日志才能正常登入ORACLE。

最近在工作中遇到一个问题,Oracle 11g数据库使用RMAN没办法删除旧的归档,导致磁盘使用率很高。

oracle@hfzsd:[/u01/app/oracle/oradata/orcl/] ls -ltr |more

total 3059881082

-rw-r----- 1 oracle oinstall 725320704 May 20 2016 1_1_91233774.dbf

-rw-rw---- 1 oracle oinstall 1756937216 Jun 7 2016 1_2_91233774.dbf

-rw-rw---- 1 oracle oinstall 1756731392 Jun 21 2016 1_3_91233774.dbf

-rw-rw---- 1 oracle oinstall 1758001152 Jul 3 2016 1_4_91233774.dbf

-rw-rw---- 1 oracle oinstall 1756729344 Jul 15 2016 1_5_91233774.dbf

-rw-rw---- 1 oracle oinstall 1765750784 Jul 26 22:00 1_6_91233774.dbf

-rw-rw---- 1 oracle oinstall 1760346112 Aug 6 14:04 1_7_91233774.dbf

......

 

使用RMAN list archivelog all;查看日志也没有显示旧归档日志的记录

RMAN> list archivelog all;

using target database control file instead of recovery catalog

List of Archived Log Copies for database with db_unique_name DBS

=====================================================================

Key Thrd Seq S Low Time

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

1206 1 1206 A 14-JAN-17

Name: /u01/app/oracle/oradata/orcl/1_1206_91233774.dbf

1207 1 1207 A 14-JAN-17

Name: /u01/app/oracle/oradata/orcl/1_1207_91233774.dbf

1208 1 1208 A 14-JAN-17

Name: /u01/app/oracle/oradata/orcl/1_1208_91233774.dbf

......

 

使用crosscheck检查也没有查到旧归档日志记录

RMAN> crosscheck archivelog all;

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=16 device type=DISK

validation succeeded for archived log

archived log file name=/u01/app/oracle/oradata/orcl/1_1206_91233774.dbf RECID=1206 STAMP=933244655

validation succeeded for archived log

archived log file name=/u01/app/oracle/oradata/orcl/1_1207_91233774.dbf RECID=1207 STAMP=933249510

validation succeeded for archived log

archived log file name=/u01/app/oracle/oradata/orcl/1_1208_91233774.dbf RECID=1208 STAMP=933254500

validation succeeded for archived log

archived log file name=/u01/app/oracle/oradata/orcl/1_1209_91233774.dbf RECID=1209 STAMP=933259445

validation succeeded for archived log

 

查看v$archived_log视图也没有旧归档日志记录

解决过程

于是在网上找到一篇文章,大体意思是MAN删除归档日志的依据是controlfile中记录的归档日志,而不是你磁盘上实际存在的归档日志,如果你的归档日志已经不在controlfile中就无法被RMAN识别到,也就无法被删除。而致于归档信息何时在控制文件中被覆盖,这由一个参数control_file_record_keep_time来控制。

查看数据库中的参数是默认的7天

SYS@db> show parameter CONTROL_FILE_RECORD_KEEP_TIME

NAME TYPE VALUE

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

control_file_record_keep_time integer 7

 

难道是在控制文件中归档日志的记录条数只能保留7天的么?于是到MOS去找相关文档找到一篇Why Are Controlfile Entries For Archived Logs Not Overwritten After CONTROL_FILE_RECORD_KEEP_TIME? (文档 ID 1056085.1),文档介绍CONTROL_FILE_RECORD_KEEP_TIME参数并不是强制在控制文件中保留多少天的归档日志条目,而是由V$CONTROLFILE_RECORD_SECTION视图中的ARCHIVED LOG条目去控制的,当RECORDS_TOTAL=RECORDS_USED时旧的归档日志就会被覆盖掉。

于是查数据库中的V$CONTROLFILE_RECORD_SECTION视图,看到ARCHIVED LOG行的records_total=560意味着控制文件中只能保留560条归档日志文件信息。

SYS@dbs> select * from v$controlfile_record_section where type='ARCHIVED LOG';

TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID

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

ARCHIVED LOG 584 560 560 88 87 1235

 

查询v$archived_log视图,总数为560条

SYS@dbs> select count(*) from v$archived_log;

COUNT(*)

----------

560

这时应该可以推断出由于控制文件中只能保留560条归档日志数据,所以以前的归档信息已经被控制文件刷出,RMAN无法识别到这些归档文件,所以就无法删除这些归档日志。

那么现在如果使用RMAN删除这些旧的归档日志呢?我想到使用catalog start with 命令重新注册这些文件到控制文件中

RMAN> catalog start with '/u01/app/oracle/oradata/orcl';

......

File Name: /u01/app/oracle/oradata/orcl/1_2354_91233774.dbf

File Name: /u01/app/oracle/oradata/orcl/1_2355_91233774.dbf

File Name: /u01/app/oracle/oradata/orcl/1_2356_91233774.dbf

Do you really want to catalog the above files (enter YES or NO)? yes

cataloging files...

cataloging done

......

RMAN> list archivelog all;

.....

1236 1 301 A 22-OCT-16

Name: /u01/app/oracle/oradata/orcl/1_301_91233774.dbf

1237 1 302 A 22-OCT-16

Name: /u01/app/oracle/oradata/orcl/1_302_91233774.dbf

......

 

旧的归档日志文件已经注册到控制文件中了,再使用RMAN进行删除就可以了

delete archivelog until logseq 2356;

 

再次查询v$controlfile_record_section视图,records_total也被“撑”大了

SYS@db> select * from v$controlfile_record_section where type='ARCHIVED LOG';

TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID

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

ARCHIVED LOG 584 896 742 807 652 1800

 

至此问题结束。

备注:

其实还有一种办法,在归档日志目录下用该命令直接删除归档日志 find ./ -mtime +730 -type f -name "*.dbf" -exec rm -rf {} \;

但这样做仍然会在 RMAN 里留下未管理的归档文件,它的作用还是相当于直接用操作系统命令将归档日志文件直接删除,而 Oracle 控制文件并不知道,因此仍需要在 RMAN 里执行下面两条命令:

RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;

 

标签:dbf,oracle,91233774,归档,Oracle,RMAN,日志
From: https://www.cnblogs.com/shujuyr/p/18430497

相关文章

  • Oracle 正确删除归档日志的方法
    1、进入rman[root@db1~]#su-oracle[oracle@db1~]$/u01/app/oracle/product/10.2.0/db/bin/rman一般都设置了环境变量,所以可以直接执行rman命令,如下:[oracle@db1~]$rmanRecoveryManager:Release11.2.0.1.0-ProductiononFriSep2516:18:032020Copyright......
  • 删除归档日志和过期备份
    删除归档日志删除某个Sequence之前(包含该Sequence)的归档日志RMAN>deletearchiveloguntilsequencexxx;RMAN>deletearchivelogfromsequencexxxuntilsequencexxx; 删除系统时间1天以前的归档日志,不会删除闪回区有效的归档日志(可以指定删除多久日志)RMAN>delet......
  • 基于父模型归档的 Pydantic 联合判别器
    我有这样的模型:classFoo(BaseModel):protocol:strprotocol_params:Union[ProtocolOneParam,ProtocolTwoParam]ProtocolOneParam和ProtocolTwoParam没有具有可区分值的相同字段,因此我可以将它们用作Discriminator,而我可以理解哪个模......
  • 考前须知:Oracle OCP考试流程和准备
    考前须知:OracleOCP考试流程和准备OCP(OracleCertifiedProfessional),是甲骨文数据库认证中很常见的一个,但却有着很重要的作用,对于从事大型数据库相关行业的人来说,几乎是必考的一种,OCP证书含金量较高,考试也有一定的难度,所以考前要对OCP考试有一些了解。​一.OCP认证考试流程:......
  • 统信UOS安装Oracle 11g的客户端
    统信UOS安装Oracle11g的客户端一个积分的下载地址https://download.csdn.net/download/u011189649/89791511解压客户端压缩文件到/db/#首先执行xhost+xhost+#上传linux.x64_11gR2_client.zip文件至/db/目录;#如果上传不了就在局域网搭个http服务,然后用wget下载#wget......
  • Oracle 19c OCP 认证考试 082 题库(第24题)- 2024年修正版
    【优技教育】Oracle19cOCP082题库(Q24题)-2024年修正版考试科目:1Z0-082考试题量:90通过分数:60%考试时间:150min本文为(CUUG原创)整理并解析,转发请注明出处,禁止抄袭及未经注明出处的转载。原文地址:http://www.cuug.com/index.php?s=/home/article/detail/id/3410.html第......
  • oracle 11g 存储IO性能压测方式
    oracle11g存储IO性能压测方式 Oracle11g提供了IO压测工具DBMS_RESOURCE_MANAGER.CALIBRATE_IOPL/SQL存储过程,可以用于测试存储IO性能(IOPS、IO延迟、IO吞吐量)  存储过程参数如下:DBMS_RESOURCE_MANAGER.CALIBRATE_IO(num_physical_disksINPLS_......
  • Oracle数据库中创建用户并对用户授予特定的视图访问权限。
    1.创建用户名和密码---创建用户名密码createuseruseridentifiedbypassword;--userpassword分别为用户名及密码登录用户使用defaulttablespacetsp_ehis_indextemporarytablespacetsp_ehis_tempprofiledefault;2.对用户进行相对应的授权增加用户的......
  • PARTIV-Oracle数据库存储结构-逻辑存储结构
    12.逻辑存储结构12.1.逻辑存储结构简介12.1.1.逻辑存储层次结构12.1.2.逻辑空间管理12.1.2.1.本地管理表空间12.1.2.2.字典管理表空间12.2.数据块概述12.2.1.数据块和操作系统块12.2.2.数据块格式12.2.3.数据块压缩12.2.4.数据块上是空间管理12.3.区概述12......
  • Oracle中数据类型number(m,n)
    Oracle中数据类型number(m,n)中m表示的是所有有效数字的位数,n表示的是小数位的位数。m的范围是1-38,即最大38位。   1>.NUMBER类型细讲:Oracle  number  datatype  语法:NUMBER[(precision  [,scale])]简称:precision  -->  p          scale  ......