加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle RMAN 清除归档日志

发布时间:2020-12-12 14:15:58 所属栏目:百科 来源:网络整理
导读:在开发环境及UAT环境经常碰到需要清除归档日志的情形,对于这个问题方法有很多。可以直接使用rm方式清除归档日志,也可以使用find命令来查找符合条件的记录来清除归档日志,或者直接写个shell脚本来搞定。这样在DEV或者UAT还可以,但是在Prod环境还是建议使

在开发环境及UAT环境经常碰到需要清除归档日志的情形,对于这个问题方法有很多。可以直接使用rm方式清除归档日志,也可以使用find命令来查找符合条件的记录来清除归档日志,或者直接写个shell脚本来搞定。这样在DEV或者UAT还可以,但是在Prod环境还是建议使用RMAN提供的命令来搞定比较妥当。因为rm,find方式删除了实际的归档日志也释放了空间,但对应的存储在控制文件中的归档信息并没有彻底清除。依旧占用着一些空间未能及时清除而需要控制文件通过age out方式来释放空间。本文描述了使用RMAN方式来清除归档日志,同时也可以将其部署到shell脚本中使用。

有关阅读本文需要的相关参考
Oracle 归档日志
Oracle 控制文件(CONTROLFILE)
Oracle 联机重做日志文件(ONLINE LOG FILE)
delete archivelog all 无法彻底删除归档日志?
Linux/Unix shell 脚本中调用SQL,RMAN脚本
Linux/Unix shell 脚本清除归档日志文件

1、清除归档日志的方式

a、手动删除
使用rm 或者find方式来删除,通过该方式删除之后,在RMAN下可以通过 crosscheck archivelog all 校验归档是否失效,如下面的操作:
rm -rf arch_816906485_1_10.arc
find /u02/database/GOBO1/archive/ -ctime +0 -delete
RMAN> crosscheck archivelog all

b、使用RMAN方式清除
RMAN清除方式会自动清除磁盘上的归档日志文件,同时会释放控制文件中对应的归档日志的归档信息。
可以基于不同的条件来清除归档日志,如基于SCN,基于SEQUENCE,基于TIME等方式。
对于上述的三种方式又可以配合from,until,between .. and .. 等等子句来限定范围,方式灵活多变。
下面的命令用于校验归档日志的有效性,列出无效的归档日志,以及以何种方式清除归档日志,列出几种常用的:
crosscheck archivelog all; --->校验日志的可用性
list expired archivelog all; --->列出所有失效的归档日志
delete archivelog until sequence 16; --->删除log sequence为16及16之前的所有归档日志
delete archivelog all completed before 'sysdate-7'; --->删除系统时间7天以前的归档日志,不会删除闪回区有效的归档日志
delete archivelog all completed before 'sysdate - 1'; --->同上,1天以前的
delete archivelog from time 'sysdate-1'; --->注意这个命令,删除系统时间1天以内到现在的归档日志
delete noprompt archivelog all completed before 'sysdate'; --->该命令清除所有的归档日志
delete noprompt archivelog all; --->同上一命令

2、演练使用RMAN清除归档日志

[python] view plain copy
  1. robin@SZDB:~>exportORACLE_SID=GOBO1
  2. robin@SZDB:~>rmantarget/
  3. RecoveryManager:Release10.2.0.3.0-ProductiononThuJul1117:07:002013
  4. Copyright(c)1982,2005,Oracle.Allrightsreserved.
  5. connectedtotargetdatabase:GOBO1(DBID=733951103)
  6. RMAN>host;
  7. robin@SZDB:~>cd/u02/database/GOBO1/archive/
  8. robin@SZDB:/u02/database/GOBO1/archive>ls
  9. arch_816906485_1_10.arcarch_816906485_1_12.arc
  10. arch_816906485_1_11.arcarch_816906485_1_13.arc
  11. ............
  12. robin@SZDB:/u02/database/GOBO1/archive>rm-rfarch_816906485_1_10.arcarch_816906485_1_11.arcarch_816906485_1_12.arc
  13. robin@SZDB:/u02/database/GOBO1/archive>exit;
  14. exit
  15. hostcommandcomplete
  16. RMAN>crosscheckarchivelogall;
  17. releasedchannel:ORA_DISK_1
  18. allocatedchannel:ORA_DISK_1
  19. channelORA_DISK_1:sid=1075devtype=DISK
  20. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_9.arcrecid=2085stamp=817211151
  21. validationfailedforarchivedlog
  22. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_10.arcrecid=2086stamp=817250793
  23. ..............
  24. validationsucceededforarchivedlog
  25. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_90.arcrecid=2166stamp=820458049
  26. Crosschecked83objects
  27. RMAN>listexpiredarchivelogall;
  28. ListofArchivedLogCopies
  29. KeyThrdSeqSLowTimeName
  30. ----------------------------------------
  31. 2086110X2013060411:05:51/u02/database/GOBO1/archive/arch_816906485_1_10.arc
  32. 2087111X2013060422:06:17/u02/database/GOBO1/archive/arch_816906485_1_11.arc
  33. 2088112X2013060519:30:53/u02/database/GOBO1/archive/arch_816906485_1_12.arc
  34. RMAN>deletearchiveloguntilsequence16;
  35. ListofArchivedLogCopies
  36. KeyThrdSeqSLowTimeName
  37. ----------------------------------------
  38. 208418A2013060409:53:17/u02/database/GOBO1/archive/arch_816906485_1_8.arc
  39. .................
  40. 2092116A2013060722:03:23/u02/database/GOBO1/archive/arch_816906485_1_16.arc
  41. Doyoureallywanttodeletetheaboveobjects(enterYESorNO)?yes
  42. ...............
  43. deletedarchivelog
  44. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_16.arcrecid=2092stamp=817516861
  45. Deleted9objects
  46. RMAN>deletearchivelogallcompletedbefore'sysdate-7';
  47. releasedchannel:ORA_DISK_1
  48. allocatedchannel:ORA_DISK_1
  49. channelORA_DISK_1:sid=1075devtype=DISK
  50. 2093117A2013060800:01:00/u02/database/GOBO1/archive/arch_816906485_1_17.arc
  51. 2094118A2013060818:00:17/u02/database/GOBO1/archive/arch_816906485_1_18.arc
  52. ...........
  53. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_72.arcrecid=2148stamp=819847035
  54. Deleted56objects
  55. RMAN>listcopyofdatabasearchivelogall;
  56. 2149173A2013070323:17:13/u02/database/GOBO1/archive/arch_816906485_1_73.arc
  57. 2150174A2013070422:00:19/u02/database/GOBO1/archive/arch_816906485_1_74.arc
  58. 2151175A2013070422:04:40/u02/database/GOBO1/archive/arch_816906485_1_75.arc
  59. 2164188A2013070923:19:34/u02/database/GOBO1/archive/arch_816906485_1_88.arc
  60. 2165189A2013071013:00:34/u02/database/GOBO1/archive/arch_816906485_1_89.arc
  61. 2166190A2013071022:02:44/u02/database/GOBO1/archive/arch_816906485_1_90.arc
  62. RMAN>deletearchivelogfromtime'sysdate-1';
  63. deletedarchivelog
  64. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_89.arcrecid=2165stamp=820447373
  65. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_90.arcrecid=2166stamp=820458049
  66. Deleted2objects
  67. RMAN>deletearchivelogallcompletedbefore'sysdate-1';
  68. .......................
  69. ................
  70. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_88.arcrecid=2164stamp=820414835
  71. Deleted16objects
  72. RMAN>sql"altersystemarchivelogcurrent";
  73. sqlstatement:altersystemarchivelogcurrent
  74. RMAN>listcopyofarchivelogall;
  75. 2167191A2013071101:00:48/u02/database/GOBO1/archive/arch_816906485_1_91.arc
  76. RMAN>deletenopromptarchivelogallcompletedbefore'sysdate';
  77. 2167191A2013071101:00:48/u02/database/GOBO1/archive/arch_816906485_1_91.arc
  78. archivelogfilename=/u02/database/GOBO1/archive/arch_816906485_1_91.arcrecid=2167stamp=820517964
  79. Deleted1objects

3、清除归档日志简单的shell脚本

copy
    #对于RAC环境或者ASM需要清除archive,使用shell脚本调用RMAN是比较妥当的方式
  1. #其次,如果你的archive位于闪回区,制定合理的保留策略,也可以让Oracle自动老化无用的归档日志
  2. robin@SZDB:~/dba_scripts/custom/bin>moreclean_arch.sh
  3. #+-------------------------------------------------------+
  4. #+Cleanarchivedlogasspecifiedtime|
  5. #+Author:Robinson|
  6. #+Blog:http://blog.csdn.net/robinson_0612|
  7. #+Usage:|
  8. #+clean_arch.sh$ORACLE_SID|
  9. #
  10. #!/bin/bash
  11. #--------------------
  12. #Definevariable
  13. if[-f~/.bash_profile];then
  14. .~/.bash_profile
  15. fi
  16. if[-z"${1}"];then
  17. echo"Usage:"
  18. echo"`basename$0`ORACLE_SID"
  19. exit1
  20. ORACLE_SID=$1;exportORACLE_SID
  21. $ORACLE_HOME/bin/rmanlog=/users/robin/log/rman.log<<EOF
  22. connecttarget/
  23. run{
  24. crosscheckarchivelogall;
  25. deletenopromptexpiredarchivelogall;
  26. deletenopromptarchivelogallcompletedbefore'sysdate-1';
  27. }
  28. exit;
  29. EOF
  30. exit

4、小结 a、归档日志清除的方法最好是在RMAN方式下完成,这样子是最彻底的清除方式 b、对于生产环境应考虑在RMAN备份的时候清除归档日志,如backup archivelog all时使用delete input与delete all input清除归档日志 c、如果备份期间不清除归档日志则arch会很大,造成归档磁盘满而导致归档失败。建议还是删除或考虑存放到闪回区 d、如果清除大部分又想保留最近的,则使用delete noprompt archivelog all completed before 'sysdate - n'方式 e、详细的清除归档日志语法:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读