oracle中adg主库通过rman无法删除归档怎么办

73次阅读
没有评论

共计 4124 个字符,预计需要花费 11 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 oracle 中 adg 主库通过 rman 无法删除归档怎么办,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

oracle 11.2.0.4 ADG 环境

主库 os 空间紧张,发现归档日志占用很大的一个比例!但是我们的备份脚本中每天都执行

CROSSCHECK ARCHIVELOG ALL;

DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE SYSDATE-31

也就是保留了 31 天的,那么 31 天的怎么会这么大呢?

SQL archive log list;

Database log mode   Archive Mode

Automatic archival   Enabled

Archive destination  
/data/oradata/ctidb/arch/

Oldest online log sequence  1319

Next log sequence to archive  1321

Current log sequence   1321

SQL exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@BJ-CTI-17 ctidb]$
cd /data/oradata/ctidb/arch/

[oracle@BJ-CTI-17 arch]$ ll -rt 

-rw-r—– 1 oracle oinstall 369649664 Nov  8  2017 1_303_950667461.dbf

-rw-r—– 1 oracle oinstall  56832 Nov  8  2017 1_304_950667461.dbf

-rw-r—– 1 oracle oinstall  1024 Nov  8  2017 1_305_950667461.dbf

-rw-r—– 1 oracle oinstall 377382400 Nov  9  2017 1_306_950667461.dbf

-rw-r—– 1 oracle oinstall  55808 Nov  9  2017 1_307_950667461.dbf

-rw-r—– 1 oracle oinstall  1024 Nov  9  2017 1_308_950667461.dbf

-rw-r—– 1 oracle oinstall 305280000 Aug 10  2017 1_30_950667461.dbf

-rw-r—– 1 oracle oinstall 373349376 Nov 10  2017 1_309_950667461.dbf

-rw-r—– 1 oracle oinstall  141824 Nov 10  2017 1_310_950667461.dbf

-rw-r—– 1 oracle oinstall  1024 Nov 10  2017 1_311_950667461.dbf

发现居然还有一年之前的归档日志文件,那就奇怪了?

1)查看控制文件中记录的归档的文件信息

SQL select name ,SEQUENCE# from v$archeved_log;

name  SEQUENCE#

—————————————————————————————

accdbdg  1268

  1268

accdbdg  1269

/caadb/oradata/arch/accdb/1_1269_943625125.dbf  1269

accdbdg  1270

/caadb/oradata/arch/accdb/1_1270_943625125.dbf  1270

accdbdg  1271

2)rman 中查看 31 天前的归档,显示为空。说明控制文件没有记录相关的信息

RMAN   list archivelog all completed before sysdate-31

3)rman 中查看 30 天前的归档,就有了!说明记录了倒数 31 天的信息

RMAN   list archivelog all completed before sysdate-30

List of Archived Log Copies for database with db_unique_name ACCDB

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

Key  Thrd Seq  S Low Time

——- —- ——- – ———

2536  1  1269  A 05-JUL-18

  Name: /caadb/oradata/arch/accdb/1_1269_943625125.dbf

2538  1  1270  A 06-JUL-18

  Name: /caadb/oradata/arch/accdb/1_1270_943625125.dbf

2540  1  1271  A 06-JUL-18

  Name: /caadb/oradata/arch/accdb/1_1271_943625125.dbf

再次查看归档目录中的归档文件,发现确实是保留了最近 31 天的归档,原来是在归档 SEQUENCE# 为 1268 开始有了 adg, 这之前包括 1268 的归档主库的控制文件都不记录了!因此执行下列命令是没办法删除;

CROSSCHECK ARCHIVELOG ALL;

DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE SYSDATE-31

解决办法是通过 find 命令从 os 层面删除归档!

[oracle@BJ-CTI-17 arch]$ find /data/oradata/ctidb/arch  -name *.dbf -mtime +30 -exec rm -f {} \;

一:关于 adg 的主库归档删除策略:

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

该策略对应三个值:

1)NONE:设置为该值时,则不启用归档文件的删除策略。默认情况下就是 NONE。 

2)APPLIED ON STANDBY: 

设置为该值时,会强制检查待删除的 log 是否已经在备库 apply,只有 apply 后的 log 才能删除。 

当通过附加的 DELETE INPUT 子句删除 Standby 数据库仍需要的日志时,会提示 RMAN-08137 错误而无法删除。不过仍然可以手动地通过 DELETE ARCHIVELOG 方式删除。

3) SHIPPED TO ALL STANDBY:  

RMAN CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

using target database control file instead of recovery catalog

new RMAN configuration parameters:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

new RMAN configuration parameters are successfully stored

注意:如果设置 APPLIED ON STANDBY,当归档已经正常传给了 standby,那么是可以手工地通过 DELETE ARCHIVELOG 方式删除,但是由于网络问题导致没有传给 standby,这样你 DELETE ARCHIVELOG 就无法删除了!

二:删除归档的方法:

1. 删除 os 目录上不存在的归档,也就是删除控制文件中记录的信息

RMAN crosscheck archivelog all;

RMAN delete expired archivelog all;

2. 删除超过恢复策略的归档

RMAN delete noprompt obsolete;  #不仅仅删除过期的备份,相关的归档也会删除!

RMAN 脚本中使用“delete noprompt obsolete;”删除超出保存策略的备份。

以前我的备份脚本中处理归档日志时都是“plus archivelog delete all input”,备份完 archivelog 后马上删除,总以为“delete noprompt obsolete;”只删除备份集不删归档。

在做 DataGuard 时候,Primary 需要保存最近的 archivelog,以便 standby 出现 archivelog gap 时过来取。

实验中发现它也会将 obsolete backupset 相关的 archivelog 一并删掉。

所有 dataguard 不能用 delete noprompt obsolete; 这个命令删除。

那需要用什么命令删除呢?

delete archivelog until time sysdate-7 删除截止到前 7 天的所有 archivelog

3. 删除 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

4. 通过 os 命令删除 30 天前的归档

[oracle@BJ-CTI-17 arch]$ find /data/oradata/ctidb/arch  -name *.dbf -mtime +30 -exec rm -f {} \;

关于“oracle 中 adg 主库通过 rman 无法删除归档怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计4124字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)