精华内容
下载资源
问答
  • 归档日志删除脚本.txt

    2020-06-01 17:44:38
    归档日志删除脚本,仅供参考学习,适用于oracle数据库版本,个人经验总结, 个人已经尝试过,暂时没有发现问题,可以根据每个人的需求进行修改保留时间
  • 归档日志删除策略适用于所有归档位置(使用快速闪回区FRA/不使用FRA)。本文主要描述归档日志删除策略并给出了具体的演示。 1、关于归档日志删除策略 也就是哪些归档日志符合删除策略能够被删除,如前所述,归档位置...

    Oracle 11g中对于归档日志的删除,除了遵循RMAN保留策略外,也可以通过RMAN来配置归档日志的删除策略,也就是归档日志何时可以被删除。归档日志删除策略适用于所有归档位置(使用快速闪回区FRA/不使用FRA)。本文主要描述归档日志删除策略并给出了具体的演示。

     
    1、关于归档日志删除策略
          也就是哪些归档日志符合删除策略能够被删除,如前所述,归档位置适用于所有归档位置(使用快速闪回区FRA/不使用FRA)
          当启用该策略后,如归档日志存在于FRA中,则Oracle会尽可能根据保留他们,一旦FRA空间告急,则Oracle会根据归档日志删除策略自动删除
          对于不在FRA中的归档日志,需要手动使用delete obsolete或delete archivelog方式来删除日志
          无论归档日志存在于FRA内或外,都可以通过BACKUP ... DELETE INPUT or DELETE ARCHIVELOG方式来删除
          该策略不适用于使用LogMiner方式从主数据库传送到逻辑standby生成的外部归档日志文件,因为这些日志文件不能够在逻辑standy上备份或恢复
      

    2、配置归档日志删除策略
         使用下面的方式来配置归档日志删除策略
             configure archivelog deletion policy to backed up 2 times to sbt;
             configure archivelog deletion policy to backed up 1 times to device type disk;
             configure archivelog deletion policy to applied on standby;
             configure archivelog deletion policy to shipped on standby;
             configure archivelog deletion policy clear;
        对于Oracle 10g没有该特性,但有一个类似的用于配置归档日志被备份次数,如下;
             configure archivelog backup copies for device type disk to ${archiveretention};
      
      
    3、禁用归档日志删除策略
          缺省情况下,该策略被设置为none。也就是说根据RMAN备份保留策略,对于FRA中的归档日志,被备份过一次(到磁盘或磁带)即符合条件被删除
         如果Oracle不再需要当前的归档日志用于保证数据库时点恢复或数据库闪回,则RMAN备份保留策略认为当前日志为obsolete
         在SYSDATE-'DB_FLASHBACK_RETENTION_TARGET'之后创建的归档日志是需要被保留的


    4、启用归档日志删除策略
         一旦启用该策略,则指定的归档日志被备份数量达到设定值后,这些归档日志能够被删除
         BACKUP ARCHIVELOG 会在未超出指定备份数的情况下(比如设置为2)备份归档日志到指定位置,如超出2次,则RMAN会跳过这些备份过2次的归档日志
         对于上述的情形,可以为BACKUP ARCHIVELOG适用force选项来强制备份归档日志
         如果启用该策略且配置为APPLIED ON STANDBY子句,则所有强制standby位置被apply后,这些归档日志会被RMAN删除
         如果启用该策略且配置为SHIPPED ON STANDBY子句,则所有强制standby位置被成功传送后,这些归档日志会被RMAN删除
    ————————————————
    版权声明:本文为CSDN博主「这个就不用说了吧」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/fsfsdfsdw/article/details/84194044

    展开全文
  • delete archivelog all将会毫无保留的删除所有的归档日志(在控制文件中有相应记录的)1、delete archivelog all将会毫无保留的删除所有的归档日志(在控制文件中有相应记录的)2、归档日志的信息被记录在控制文件之中,...

    delete archivelog all将会毫无保留的删除所有的归档日志(在控制文件中有相应记录的)

    1、delete archivelog all将会毫无保留的删除所有的归档日志(在控制文件中有相应记录的)

    2、归档日志的信息被记录在控制文件之中,其生存期和可保留的总数也受到控制文件创建初以及参数control_file_record_keep_time限制

    3、对于那些已经在控制文件中被覆盖的归档日志,该方式不起作用,使用backup archivelog all delete input同样不起作用

    4、注意backup archivelog all时delete input与delete all input有些差异,前者删除仅仅被备份过的归档日志,而后者则对于多个归档位置下的所有归档日志全部删除。

    5、视图v$archived_log或gv$archived_log提供了归档日志的相关详细信息

    6、建议备份归档日志后再删除。注,RAC+ASM下切不可使得archivedlog文件夹为空,,否则,整个文件夹连同上级空目录会被删除

    logo.gif

    f68f2add0b68e4f9810432fce46917b7.png

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • 关于Oracle归档日志删除(前提是数据库处于归档模式 SQL>archive log list;--Automatic archival 为 Enabled),目前遇到过两种情况,一是先手动删除了归档文件(服务器直接删除),二是通过Rman删除,一方案可能会...

    关于Oracle归档日志删除(前提是数据库处于归档模式 SQL>archive log list;--Automatic archival 为 Enabled),目前遇到过两种情况,一是先手动删除了归档文件(服务器直接删除),二是通过Rman删除,一方案可能会存在数据库信息冗余,二方案可能会造成实际归档文件数量大于数据库中记录的文件数量,解决方案:

     

    一:手动删除归档文件(服务器直接删除)造成的问题解决

    场景:服务器中直接删除归档文件,造成 v$archived_log 视图中记录的日志文件会多余实际归档文件数量,

    1、首先查看归档日志目录下文件数量  ls -l | wc -l 

    2、执行SQL>select count(*) from v$archived_log;--检查数据库中记录的归档文件数量(正常情况下sql数量应该大于第一步查询的文件数量,因为已经删除了服务器归档文件)

    3、进入Rman,

    rman target /

    执行 crosscheck archivelog all; --检查控制文件和实际物理文件的差别。(此时显示的文件数量应小于上面SQL的数量,原理同第二步)

    然后执行 delete expired archivelog all;  --删除控制文件中不存在的失效的归档日志

    然后可以再次检查归档路径下文件数量与crosscheck数量是否相等,

    A、若相等,则归档文件都是可以关联到的,

    然后检查 SQL与归档文件数量是否相等,

    1.1、若相等,则表名归档文件与控制文件记录的归档信息一一对应,可以结束退出。

    1.2、若不等,即SQL查询数量大于归档文件数量,则表名数据库中记录的归档信息多余实际归档文件数量,

    执行 SQL>select dest_id,sequence#,name,blocks from v$archived_log ; 会发现有很多NAME字段为空的数据

    这种数据是通过非正常途径删除归档文件造成,可无需理会,若想让查询的数量与归档文件保持一致可采用以下方案

    a)、rman>delete archivelog all;--删除所有归档文件

    b)、rman>execute sys.dbms_backup_restore.resetCfileSection(11);--清空控制文件记录的归档信息,11代表归档

    (SQL>select rownum-1, type from v$controlfile_record_section;--可通过此SQL查询到上面的11)

    此时再次查询SQL>select count(*) from v$archived_log;会发现数量为0

    c)、然后执行:rman>catalog start with '/oradata/archive/'; --将归档日志写入到控制文件

    此时再次执行上面的查询SQL会发现归档信息已写入控制文件,数量与归档文件数量一致

    B、若不等,及归档文件数量大于控制文件中的归档记录信息,

     

    1:此时如果归档文件不多,可以采用手工找出多余的归档文件进行删除

    2:如果归档文件较多,可以通过linux的系统命令find在归档日志中找出多余crosscheck的文件并进行删除

    3然后进入rman执行:rman>catalog start with '/oradata/archive/'; --将归档日志写入到控制文件

    然后执行rman>delete noprompt archivelog until time 'sysdate-7'; --删除七天前的归档日志

    保留天数根据实际需求填写

    这里不要采用rman>delete noprompt archivelog until time 'sysdate-7';--删除七天前的归档日志

    由于catalog start with 会将归档记录信息中的归档日志完成时间改为执行命令的时间。

    若不等:

    1)、归档文件数量结果小于crosscheck数量,则说明实际文件数量小于记录信息,此时可以采用删除归档在数据库中的记录信息,然后将归档文件重新导入到数据库中记录

    具体操作 

    首先执行:SQL>select dest_id,sequence#,name,blocks from v$archived_log;--查看归档信息

    然后使用RMAN执行:delete archivelog all;

    再次执行:SQL>select dest_id,sequence#,name,blocks from v$archived_log;--会发现有name为空的数据

    然后执行:execute sys.dbms_backup_restore.resetCfileSection(11);--11代表归档

     

    再次执行:SQL>select dest_id,sequence#,name,blocks from v$archived_log;--结果为空

    然后执行:catalog start with '/oradata/archive/'; --将归档日志写入到控制文件(A)

    再次执行:SQL>select count(*) from v$archived_log;--数量与文件数量相同

    到此完成

    2)、归档文件数量结果大于crosscheck数量,则说明实际文件数量大于记录信息,若磁盘存储空间足够可以不用管, 

    若想让归档文件与归档记录信息保持一致,可以采用以下几个方案:

    一:此时如果归档文件不多,可以采用手工找出多余的归档文件进行删除

    二:如果归档文件较多,可以通过linux的系统命令find在归档日志中找出多余crosscheck的文件并进行删除

    三:采用(1)步骤

    注:采用catalog start with 后再使用RMAN删除命令时需要注意1)、delete archivelog all completed before 'SYSDATE-7';--命令意思删除7天前所有的归档日志。保留一周时间

    该命令可能会失效,无法删除七天前的归档文件,因为该命令是根据归档文件的完成时间进行删除归档文件,

    执行过catalog start with后,控制文件中记录的归档文件的完成时间会更改为执行命令的时间,可以采用2)方式删除
    2)、delete noprompt archivelog until time 'sysdate-7';--删除七天前的归档日志

    该命令是按照归档日志的创建时间进行删除

    二、通过RMAN删除

    1、进入rman

    rman target /

    首先执行 

    delete archivelog all completed before 'SYSDATE-7';--删除7天前所有的归档日志。(按照归档日志完成时间删除)

    delete noprompt archivelog until time 'sysdate-7';--删除7天前所有的归档日志。(按照归档日志创建时间删除)

    然后执行 crosscheck archivelog all;--检查控制文件与实际归档文件

    然后执行 delete expired archivelog all;  --删除控制文件中不存在的失效的归档日志

    此时归档日志清理完成

    检查 归档日志路径下的归档文件数量、与crosscheck、SQL>select count(*) from v$archived_log; 三者数量是否一致,

    若一致则表示没有冗余信息,若不一致,可采用一方案解决

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Oracle归档日志删除

    2013-12-25 14:27:28
    Oracle归档日志删除 我们都都知道在controlfile中记录着每一个archivelog的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的 controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视...

    Oracle归档日志删除

    我们都都知道在controlfile中记录着每一个archivelog的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的

    controlfile中仍然记录着这些archivelog的信息,在oracleOEM管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了!这时候我们要做手工的清除的话,下面我经过实验,可以尝试这种方法:

    [执行顺序如下:手工删除archivelog --->crosscheck--->delete expired最后可以用list copy检查]

    1. 进入rman 

    2. connect target /

    3. crosscheck archivelog all;

    crosscheck archivelog all;验证的是DB的归档日志即log_archive_dest参数指定位置的文件,当手工删除了归档日志以后,Rman备份会检测到日志缺失,从而无法进一步继续执行。所以此时需要手工执行crosscheck过程,之后Rman备份可以恢复正常。

    4. delete expired archivelog all;命令删除所有过期归档日志:

    这时候我们再去OEM中看就一定看不到,如果你的从来没有做过这个动作的话,我们可以比较从这个动作前的controlfile后动作后的controlfile的大小!

    ORACLE正确删除归档并回收空间的方法

    一个ORACLE归档日志经常满,表现为/oraarchive这个文件空间占用100%大家一定抱怨ORACLE为何没有归档维护工具,很多人直接删除了事,错了,ORACLE有,而且很智能,可以正确的删除归档和FLASHBACK,不过切记,ORACLE归档日志对于ORACLE的数据恢复和备份非常重要,不到万不得已不要删除归档日志。

    删除归档日志的过程

    ORACLE用户身份登录到数据库服务器主机或通过网络连接

    进入ORACLE数据备份工具

    rman target/

    rman target/@orcl

    在命令窗口里面执行

    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 /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ;

    这样做仍然会在RMAN里留下未管理的归档文件

    仍需要在RMAN里执行下面2条命令

    crosscheck archivelog all;

    delete expired archivelog all;

    所以还不如上面的方法好用,不过用FIND的好处就是,可以在条件上,和EXEC子项上做很多操作,实现更复杂的功能

    3.简要介绍一下report obsolete命令

    使用report obsolete命令报告过期备份

    RMAN> report obsolete;

    RMAN retention policy will be applied to the command

    RMAN retention policy is set to redundancy 1

    Report of obsolete backups and copies

    Type                 Key    Completion Time    Filename/Handle

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

    Backup Set           125    01-NOV-04

    Backup Piece       125    01-NOV-04          /data1/oracle/orabak/full_1_541045804

    Backup Set           131    04-NOV-04

    Backup Piece       131    04-NOV-04          /data1/oracle/orabak/full_AVATAR2_20041104_131

    ....

    Backup Set           173    06-DEC-04

    Backup Piece       173    06-DEC-04          /data1/oracle/orabak/full_AVATAR2_20041206_173

    Backup Set           179    11-DEC-04

    Backup Piece       179    11-DEC-04          /data1/oracle/orabak/arch544588206.arc

    .....

    Backup Piece       189    17-DEC-04          /data1/oracle/orabak/arch545106606.arc

    Backup Set           190    17-DEC-04

    Backup Piece       190    17-DEC-04          /data1/oracle/orabak/arch545106665.arc

    Backup Set           191    20-DEC-04

    Backup Piece       191    20-DEC-04          /data1/oracle/orabak/arch_AVATAR2_20041220_194

    Archive Log          2973   20-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2985.dbf

    Archive Log          2971   20-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2984.dbf

    .....

    Archive Log          2705   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2717.dbf

    Archive Log          2704   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

    Archive Log          2703   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

    Archive Log          2702   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf

    4.使用delete obsolete命令删除过期备份:

    RMAN> delete obsolete;

    RMAN retention policy will be applied to the command

    RMAN retention policy is set to redundancy 1

    using channel ORA_DISK_1

    Deleting the following obsolete backups and copies:

    Type                 Key    Completion Time    Filename/Handle

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

    Backup Set           125    01-NOV-04

    Backup Piece       125    01-NOV-04          /data1/oracle/orabak/full_1_541045804

    ....

    Archive Log          2704   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2716.dbf

    Archive Log          2703   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2715.dbf

    Archive Log          2702   17-DEC-04          /opt/oracle/oradata/avatar2/archive/1_2714.dbf

    Do you really want to delete the above objects (enter YES or NO)? yes

    deleted backup piece

    backup piece handle=/data1/oracle/orabak/full_AVATAR2_20041206_173 recid=173 stamp=544156241

    .....

    deleted archive log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2715.dbf recid=2703 stamp=545108268

    deleted archive log

    archive log filename=/opt/oracle/oradata/avatar2/archive/1_2714.dbf recid=2702 stamp=545107659

    Deleted 286 objects

    RMAN> crosscheck archivelog all;

    released channel: ORA_DISK_1

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=19 devtype=DISK

    specification does not match any archive log in the recovery catalog

    5 rman中用crosscheck检查归档日志,2个归档日志都是失败的:

    RMAN> crosscheck archivelog all;

    释放的通道: ORA_DISK_1

    分配的通道: ORA_DISK_1

    通道 ORA_DISK_1: sid=14 devtype=DISK

    对归档日志的验证失败

    存档日志文件名 =D:ORACLEORADATATESTARCHIVE1_47.DBF记录 ID=1时间戳 =572866

    683

    对归档日志的验证失败

    存档日志文件名 =D:ORACLEORADATATESTARCHIVE11_48.DBF记录 ID=2时间戳 =57286

    6931

    已交叉检验的 2对象

    6 试着同步一下,看行不行,结果不行,crosscheck还是失败:

    RMAN> resync catalog;

    正在启动全部恢复目录的 resync

    完成全部 resync

    RMAN> crosscheck archivelog all;

    释放的通道: ORA_DISK_1

    分配的通道: ORA_DISK_1

    通道 ORA_DISK_1: sid=14 devtype=DISK

    对归档日志的验证失败

    存档日志文件名 =D:ORACLEORADATATESTARCHIVE1_47.DBF记录 ID=1时间戳 =572866

    683

    对归档日志的验证失败

    存档日志文件名 =D:ORACLEORADATATESTARCHIVE11_48.DBF记录 ID=2时间戳 =57286

    6931

    已交叉检验的 2对象

    7 list expired看看是否有失效的archive log,证明没有失效的archive log:

    RMAN> list expired archivelog all;

    说明与恢复目录中的任何存档日志均不匹配

    8 更改语言环境试试,结果再次crosscheck,2archive log都成功了:

    RMAN> exit

    恢复管理器完成。

    C:>set nls_lang=american_america.zhs16gbk

    C:>rman catalogrman/rman@safetarget /

    Recovery Manager: Release 9.2.0.1.0 - Production

    Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

    connected to target database: TEST (DBID=1870953724)

    connected to recovery catalog database

    RMAN> crosscheck archivelog all;

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=9 devtype=DISK

    validation succeeded for archived log

    archive log filename=D:ORACLEORADATATESTARCHIVE1_47.DBF recid=1 stamp=57286

    6683

    validation succeeded for archived log

    archive log filename=D:ORACLEORADATATESTARCHIVE11_48.DBF recid=2 stamp=5728

    66931

    Crosschecked 2 objects

    Oracle 删除归档日志实例

    [日期:2010-08-12]

    来源:Linux社区  作者:crasshopper

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

    一、首先删除归档日志物理文件,归档日志一般都是位于archive目录下,AIX系统下文件格式为“1_17884_667758186.dbf”,建议操作前先对数据库进行备份,删除时至少保留最近几天的日志用于数据库恢复。

    二、把归档日志的物理文件删除后,我们就可以正常登入Oracle了,但是还没完全把归档日志删除干净,Oracle的controlfile中仍然记录着这些archivelog的信息,在Oracle的OEM管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,接下去我们要做的就是这个工作。

    我们利用RMAN进行删除操作,操作步骤如下:(WIN客户端系统为例)

    1.指定数据库实例

    C:\Documents and Settings\Administrator>SET Oracle_SID =orcl

    2.连接数据库

    C:\Documents and Settings\Administrator>RMAN TARGET SYS/sysadmin@orcl

    3.查看归档日志的状态

    RMAN> list archivelog all;

    4.手工删除归档日志文件

    RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

    说明:

    SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。

    同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库

    DELETE ARCHIVELOG from TIME 'SYSDATE-7'; 删除从7天前到现在的全部日志,慎用

    UNIX/LINUX下也可以通过FIND找到7天前的归档数据,使用EXEC子操作删除

    find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ;

    这样做仍然会在RMAN里留下未管理的归档文件

    仍需要在RMAN里执行下面2条命令

    crosscheck archivelog all;

    delete expired archivelog all;

    所以还不如上面的方法好用,不过用FIND的好处就是,可以在条件上,和EXEC子项上做很多操作,实现更复杂的功能

    本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2010-08/27746.htm

    展开全文
  • Linux 增加归档日志删除脚本

    千次阅读 2017-08-24 15:18:48
    一、基于Linux服务器端的 归档日志删除脚本 生产库部署环境: 1、创建detele_archivelog.sh脚本 选择存放脚本的路径 [oracle@localhost ~]$ cd /home/oracle/ --打开/home/oracle [oracle@localhost ~]$ ...
  • oracle归档日志删除

    2014-05-26 14:11:28
    Oracle删除归档日志的实现方法 Oracle归档日志满了后,就需要删除一部分归档日志,下文对Oracle删除归档日志的方法作了详尽的阐述,如果您感兴趣的话,不妨一看。 Oracle删除归档日志使我们经常会用到的操作,...
  • oracle归档日志处理方法
  • oracle日志文件相信大家都已经有一定的了解了,下面主要为您介绍oracle日志文件类型及归档日志模式,如果您感兴趣的话,不妨一看。Oralce两种日志文件类型:联机日志文件这是Oracle用来循环记录数据库改变的操作系统...
  • 归档日志删除策略

    2017-11-03 23:11:00
    CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS;...启用归档删除策略: RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK; 新的 RMAN 配置参数: CONFIGURE ARCHIVELOG DELET...
  • 测试环境一台数据库服务器归档日志满了,由于尚未上线,并没有做删除归档方面的定时任务,从而导致归档日志将文件系统撑满的问题。于是用rman删除归档,直接删掉所有归档:delete archivelog until time '...
  • Oracle归档日志删除=-转载

    千次阅读 2011-07-14 02:56:26
    Oracle归档日志删除2009-12-03 16:24:56| 分类: ORACLE | 标签: |字号大中小 订阅 我们都都知道在controlfile中记录着每一个archivelog的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的controlfil

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,720
精华内容 688
关键字:

归档日志删除