oracle清理归档日志

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

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

1. 进入rman

2. connect target /

3. crosscheck archivelog all;

4. delete expired archivelog all;

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

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

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子项上做很多操作,实现更复杂的功能

oracle清理归档日志

时间: 2024-10-29 05:20:06

oracle清理归档日志的相关文章

oracle清理归档日志脚本

创建脚本文件 vim /home/oracle/script/rmanclear.sh #!/bin/bash DATE=`date "+%Y-%m-%d"` /u01/app/oracle/product/db/bin/rman   target sys/oracle  << EOF crosscheck archivelog all; delete noprompt expired archivelog all; delete noprompt archivelog u

oracle修改归档日志路径

一:先查询数据库是否开启归档模式: SQL> archive log list;                                                                    ----已经开启归档模式Database log mode        Archive ModeAutomatic archival        EnabledArchive destination        USE_DB_RECOVERY_FILE_DEST----修改此归

oracle 删除归档日志的正确方式

在使用plsql使用游标的%rowcount时,导致了一个死循环,手动终止后数据库无法连接,服务重启后依然不行.windows日志管理器报归档日志相关的错误,最终手动启动到mount状态,禁用归档日志后,数据库正常.由于是本机的实验数据库,所以希望把归档日志删掉: 以下摘自这里ORACLE正确删除归档并回收空间的方法 一个ORACLE归档日志经常满,表现为/oraarchive 这个文件空间占用100%大家一定抱怨ORACLE为何没有归档维护工具,很多人直接删除了事,错了,ORACLE有,而且很

oracle 11g归档日志研究_1

oracle的数据库操作都会被记录在redo log中,用来进行undo(回滚)或在数据库异常的时候redo(重做).redo log又分为online(在线日志)和archive(归档日志)两部分. oracle默认有3个在线日志文件,通常它们是按顺序写满一个再写下一个,而写满的在线日志文件会被整理为归档日志.在每个在线日志内部,可能按顺序或随机填写数据. 在线日志和归档日志一样,都是由很多块组成,文件第1块作为文件头,包含块大小.块总数等信息,第2块作为数据库头,包含数据库信息(如版本号.数

oracle之归档日志是个什么鬼?

我们的oracle数据库默认采用的是非归档模式,假如说一共有三个重做日志组,当三个日志组全部写满之后将从第一个日志组开始循环记录,并且第一个日志组中的内容将被彻底覆盖,这样,如果数据库崩溃了,想要恢复很早之前的数据,那就坑比了. 怎么办? 你问我啊,我告诉你.切换数据库日志模式为归档模式就OK了,这样写入日志循环的时候,会先把日志组中的数据写入到归档日志中,然后才会被覆盖.你看,问题解决了吧? 有人可能会问:哎,那究竟什么时候应该采用归档模式呢? 这要看数据库对应的应用系统是什么样的要求了,如果

oracle 11g归档日志研究_2

从第3块开始,块里面存储着oracle的所有操作记录.块结构很简单,只有块头和块体: typedef struct bk { Redo_bh blockhead; uint8_t buf[496]; }Redo_bk; Redo_bk 块头与上一篇介绍过的一致: typedef struct bh { uint32_t signature; //签名 uint32_t blocknum; //块号 uint32_t sequence; //顺序号 uint16_t offset; //最高位1需

oracle 11g归档日志研究_3

记录头(record head)格式: typedef struct rh0 { uint32_t recordlen; uint8_t VLD; //直接决定整个record head大小 uint8_t unknown0; uint16_t rhscnwrapper; uint32_t rhscnbase; uint16_t subscn; }Redo_rh0; typedef struct rh1 { uint8_t unknown1[10]; }Redo_rh24; //VLD = 0x

Oracle 清理归档脚本

$ vi clean.sh #!/bin/sh export BACK_DATE=`date +%Y%m%d` export BACKUP_PATH=/home/oracle/dbbak echo `mkdir -p ${BACKUP_PATH}/archivelog/${BACK_DATE}` rman msglog=$BACKUP_PATH/archivelog/${BACK_DATE}/arch_0_$BACK_DATE.log << EOF connect target /; dele

oracle 查询 归档日志最大值和平均值

select max(ss.size_GB), avg(ss.size_GB)  from (select s.*, rownum rn2          from (select a.*                  from (select t1.*, rownum rn                          from (SELECT TRUNC(FIRST_TIME) time,                                       SUM(BLOC