正确删除ORACLE归档日志文件
oracle清理30天归档日志 -回复

oracle清理30天归档日志-回复Oracle数据库是一种非常强大且广泛使用的关系型数据库管理系统。
随着时间的推移,数据库中的日志文件会逐渐增加,占用大量的存储空间。
为了确保系统正常运行并节约存储资源,定期清理归档日志文件变得至关重要。
本文将逐步介绍如何清理Oracle数据库中30天前的归档日志文件。
步骤一:确认数据库归档模式和归档日志保存期限在执行清理归档日志的操作之前,我们需要确认数据库当前的归档模式以及归档日志的保存期限。
归档模式主要有两种:归档模式(ARCHIVELOG)和非归档模式(NOARCHIVELOG)。
归档模式下,Oracle 会将已经使用的日志文件以及在线日志文件归档并保存为归档日志文件。
非归档模式下,Oracle只保留正在使用的日志文件,不会进行归档保存。
要确认数据库的归档模式,可以执行以下SQL语句:SELECT log_mode FROM vdatabase;该查询结果将显示数据库当前的归档模式。
另外,我们还需要确认数据库的归档日志保存期限。
Oracle会根据数据库的配置自动删除30天以前的归档日志文件。
如果需要更改归档日志保存期限,可以执行以下SQL语句:ALTER SYSTEM SET LOG_ARCHIVE_RETENTION_TARGET=30;该语句将设置归档日志保存期限为30天。
请注意,更改归档日志保存期限可能会有一定的风险,请谨慎操作。
步骤二:确认数据库归档日志文件的位置在执行清理归档日志的操作之前,我们还需要确认数据库归档日志文件的位置。
可以执行以下SQL语句来获取归档日志文件的存储位置:SELECT name FROM VARCHIVE_DEST WHERE status='VALID';该查询结果将显示归档日志文件存储的位置。
步骤三:清理30天前的归档日志一旦确认了数据库的归档模式、归档日志保存期限以及归档日志文件的位置,我们就可以开始清理30天前的归档日志文件了。
Linux的定时清理oracle归档日志文件及脚本

Linux的定时清理oracle归档日志文件及脚本定时crontab用root用户编辑corntab定时任务[root@gmmsrv02 ~]# crontab -l0 1 * * * su - oracle -c "/home/oracle/rmanbk/rman_del_arch.sh"0 1 * * * echo "hello backup over" > /home/oracle/stadb.txt注意,原来自己使用了oracle用户下的crontab定时任务,但是没有执行。
在root用户下能够执行。
该定时任务并能生成rman的日志文件。
该文件是清理超过5天的archivelog文件定时清理oracle数据库的archivelog文件#rman_del_arch.sh#!/bin/sh#. $HOME/.bash_profile. /home/oracle/.bash_profileecho "--------------------------------------------"echo "Begin database Delete Archivelog......"echo "Begin time:"`date`back_path="/datavg/oracle_area/rman_data_bak";back_log="/datavg/oracle_area/rman_data_bak/log";#rman_name="rman"#rman_pw="rman";#rman_log_name="racdb";#rman_log_pass="racdb";#rman_sid="gmmdb";rman_bin=/opt/app/oracle/product/10.2.0/db_1/bin/rmanrman target / nocatalog log=$back_log/del_arch_`date +%Y-%m-%d`.log << !EOF run {allocate channel ch_rac11 device type disk maxpiecesize 2G connect'sys/oracle@gmmdb' ;delete noprompt archivelog until time 'sysdate-5';release channel ch_rac11 ;}crosscheck backup;delete noprompt expired backup;delete noprompt obsolete;。
oralce归档日志的手动删除

oralce归档日志的手动删除
当oracle 数据库开启归档模式后,会在归档模式下生成归档文件,如果不及时清理归档日志最终将会导致数据库无法访问,下面说一下如何正确的手动清理归档日志。
1、找到归档日志所在目录。
不确定归档日志的目录?没关系,查询一下就OK了
进入到sqlplus 下:执行archive log list 命令就可以看到存档终点 E:\arc2
2、删除要删除的归档日志
3、清除控制文件中的记录
虽然人为的把物理文件给删了,但是oracle 的控制文件里面是有存在归档文件的记录的,接下来就是清除记录的步骤。
3.1进入ORACLE数据备份工具(RMAN)
CMD--->RAMN
3.2以ORACLE用户身份登录到数据库服务器主机或通过网络连接
connect target / (此处就不讲解ramn 命令了,target / 表示只有一个实例且设置了环境变量,执行这个命令会自动进入数据库)
3.3crosscheck archivelog all;
3.4delete expired archivelog all;
OK 搞定! 有不明白的地方*****************。
Oracle程序员面试分类模拟33

Oracle程序员面试分类模拟33简答题1. 如何清除V$ARCHIVED_LOG视图中的过期信息?正确答案:在使用RMAN命令(DELETE ARCHIVELOG ALL;)删除归档信息后V$A(江南博哥)RCHIVED_LOG视图中的NAME列为空,但是依然可以查询到这些删除了的归档信息,出现这样的现象是因为使用RMAN命令在删除归档日志的时候不会清除控制文件中的内容,导致V$ARCHIVED_LOG留下的过期的不完整信息。
使用如下的命令可以清除控制文件中关于V$ARCHIVED_LOG的信息:2. 备库数据文件异常,物理DG如何恢复?正确答案:有的时候由于备库空间不足,在主库添加了数据文件后,导致备库数据文件的缺失,可能很久之后才发现,但是由于归档的缺失等其他原因而导致备库不能正常应用Redo日志。
还有其他情况可能导致备库的数据文件不能正常ONLNE,在这种情况下,可以在主库上利用CONVERT命令备份一个数据文件然后复制到备库即可。
若是备库归档文件比较全,则可以直接在备库创建数据文件后应用Redo日志即可,而不需要从主库复制数据文件。
恢复过程中的一些关键性的命令如下:3. 什么是热块?正确答案:当一个会话需要访问一个数据块,而这个数据块正在被另一个用户从磁盘读取到内存中或者这个数据块正在被另一个会话修改时,当前的会话就需要等待,就会产生一个buffer busy waits等待,也伴随着Latch争用。
如果太多的会话去访问相同的数据块,那么会导致长时间的buffer busy waits等待,通常表现形式为CPU使用率很高,但吞吐量很低。
造成热块的原因可能是数据库设置或者重复执行的SQL语句频繁访问一些相同的数据块。
热块产生的原因不尽相同,按照数据块的类型,可以分成表数据块、索引数据块、索引根数据块、文件头数据块和数据块自身的争用,不同热块类型处理的方式是不同的。
下面给出找到热块的SQL语句:4. RESETLOGS和NORESETLOGS的区别是什么?正确答案:RESETLOGS和NORESETLOGS主要用在两个地方,第一是在创建控制文件的时候,第二是在打开数据库的时候。
ORACLE数据库归档日志满后造成系统宕机的处理方法

第一次宕机时,初始以为是系统内存溢出,于是重启应用服务器,发现应用服务器在启动时报错,错误为无法连接到数据库。
于是连接数据库服务器,打开EM后发现系统报错如图:提示归档日志写入失败,检查服务器发现磁盘空间满了,于是清理磁盘空间后,重启数据库问题解决。
随后把服务器磁盘空间扩容,直接给了oracle数据所在盘1TB的磁盘空间。
第二次又出现此问题,经过仔细检查,并与同事确认后,发现是由于ORACLE数据库的归档日志被启用了,而我们系统默认是没有启用ORACLE数据库归档日志这个功能的。
使用sql命令查看:Sql>sqlplus / as nolog;---------------------启动sql*PlusSql> connect sys/password@orcl as sysdba;Sql> archive log list;数据库日志模式存档模式自动存档启用存档终点USE_DB_RECOVERY_FILE_DEST最早的联机日志序列4888下一个存档日志序列4890当前日志序列4890Sql> show parameter db_recovery_file_dest;NAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string D:\oracle\product\10.2.0/flash_recovery_area db_recovery_file_dest_size big integer 20G发现默认的归档路径为D:\oracle\product\10.2.0/flash_recovery_area。
而且限制使用空间为20G。
由于每天产生的oracle归档日志差不多就占用2个G的磁盘空间,而且oracle自身并不会自动清理也没有相关设置自动清理归档日志的功能,一段时间不进行清理,20G空间很快就满了。
查询oracle归档日志是否开启,Oracle开启归档日志以及关闭归档日志

查询oracle归档⽇志是否开启,Oracle开启归档⽇志以及关闭归档⽇志racle数据库可以运⾏在2种模式下:归档模式(archivelog)和⾮归档模式(noarchivelog)归档模式可以提⾼Oracle数据库的可恢复性,⽣产数据库都应该运⾏在此模式下,归档模式应该和相应的备份策略相结合,只有归档模式没有相应的备份策略只会带来⿇烦。
本⽂简单介绍如何启⽤和关闭数据库的归档模式。
1.归档⽇志开启准备⼯作:1.进⼊dos窗⼝—>>> 菜单键+R,进⼊ 运⾏ 界⾯,输⼊cmd2.登录 sqlplus,—>> ⽅法: sqlplus/nolog,切忌:不要输⼊sqlplus/noarchivelog; 加上 分隔符 ;,这样进⼊的sqlplus的命令参数帮助3.登⼊管理员—>> ⽅法: conn/as sysdba;4.开启归档⽇志4.1 shutdown immediate; –关闭数据库4.2 startup mount; – 打开数据库4.3 alter database archivelog;—开启归档⽇志4.4 alter database open;–开启数据库4.5 archive log list; – 查看归档⽇志是否开启开启状态:数据库⽇志模式 存档模式⾃动存档 启⽤存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机⽇志序列 49下⼀个存档⽇志序列 51当前⽇志序列 515.关闭归档⽇志5.1 shutdown immediate;5.2 startup mount;5.3 alter database noarchivelog;5.4 alter database open;5.5 archive log list ;–查看归档⽇志是否关闭数据库⽇志模式 ⾮存档模式⾃动存档 禁⽤存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机⽇志序列 49当前⽇志序列 51归档⽇志开启语句:Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation。
Oracle归档日志文件
Oracle归档⽇志⽂件今天数据群有⼈反应⽹站不能正常打开,经检查Oracle数据库远程连不上,提⽰信息:ORA-00257: archiver error. Connect internal only, until freed。
可能是archivelog满了。
以前学习SQL只关注CRUD,对⽇志了解甚少,此次宕机虽然对⽣成没有造成恶劣影响,但也是因为业务不熟悉所致,特花⼀天时间学习并记录Oracle⽇志归档功能。
.以下内容针对没有使⽤Oracle ASM磁盘组情况,使⽤了Oracle ASM磁盘组的情况以后分析。
Oracle⽇志操作模式分为两种:ARCHIVELOG、NOARCHIVELOG连接Oracle终端windows系统:sqlplusLinux系统:先登录ssh,切换到oracle⽤户,再启动sqlplus登录oracle查看当前⽇志操作模式通⽤⽅法:SELECT log_mode from v$database;sys⽤户:开启⽇志归档启⽤归档⽇志前要先停⽌数据库shutdown immediate;数据库以mount⽅式启动startup mount;改变⽇志模式启⽤数据库归档alter database archivelog;关闭归档alter database noarchivelog;打开数据库alter database open;查看归档⽇志信息archive log list;查看默认闪回归档存储路径show parameter db_recovery_file_dest;Oracle11g版本,ORACLE默认的⽇志归档路径为闪回恢复区($ORACLE_BASE/fast_recovery_area)。
对于这个路径,Oracle有⼀个限制,就是默认只有4G的空间,⽽且不只是归档⽇志的默认路径,也是备份⽂件和闪回⽇志的默认地址,这样的话归档⽇志锁使⽤的空间就达不到4G。
如何清理oracle安装目录里的一些日志
如何清理oracle安装目录里的一些日志
这个问题的起因是我这两天发现我们的一个开发环境oracle所在的安装目录容量增长的很迅速,我想找到增长的原因。
如下是我处理该问题的步骤:
1、先查看一下上述环境oracle安装目录(/u01)下一天之内改过的且大小在10M以上的文件:
find /u01 -ctime 1 -size +20000 –print
2、从1中的结果可以看到listener.log和http-web-access.log非常大。
3、先处理listener.log,步骤如下:
1)lsnrctl set log_status off
2)rm listener.log
3)lsnrctl set log_status on
4、再处理http-web-access.log,步骤如下:
1)更改dbconsole的配置文件
($ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_HOST__<hostname>_<SID>/config下的文件http-web-site.xml),将其中的<access-log path="../log/http-web-access.log" />更改为<access-log path="../log/http-web-access.log" split="day"/>
2)重启dbconsole
3) rm http-web-access.log。
如何正确地删除Archivelog
如何正确地删除Archivelog:Archivelog并不能直接得从OS层直接物理删除,因为archivelog的相关信息是记录在controlfile中的,当物理删除后不会改变controlfile的设置。
并且在查询相关的动态视图(例如v$archived_log)时,该部分日志仍然标注为存在。
也就是说Oracle并不认为这些日志被删除了,所以在删除archivelog的时候,需要我们在其他地方做一些设置。
使用oracle用户登录服务器,进入RMAN维护:[root@user~]# su – oraclerman target sys/pass (oracle)一、使用RMAN清楚物理删除后的记录(现在我用这个方法)可以使用RMAN来删除archivelog,具体可以按以下步骤操作:1、物理删除archivelog文件(/home/arch下的dbf文件)2、进入RMAN3、crosscheck archivelog all;4、delete expired archivelog all;这样就在一些Oracle的记录中查不到相应的archivelog记录了。
二、直接使用RMAN删除archivelog其实在RMAN中是可以使用命令直接将ARCHIVELOG删除的,命令如下:RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';表示删除7天以前的所有archivelog,但是这个命令的缺点是无法对archivelog进行细致的划分。
三、使用RMAN备份achivelog后删除这是一种最为稳妥的方法了,使用RMAN备份archivelog,备份后全部删除backup format '/u01/arch_%T_%s_%U' archivelog all delete input;或者backup database plus archivelog;注:我在库上设置了Streams后,使用RMAN删除archivelog会导致报错RMAN-08137: WARNING:archive log not deleted as it is still needed. 不知道该如何解决,据说是10.2的一个bug,如果真是bug的话,那只能在OS层设置删除,或用RMAN进行强制删除了。
归档日志满处理过程
ASMCMD> cd archivelog
ASMCMD> ls
2011_10_05/
2011_10_06/
ASMCMD> cd 2011_10_05
ASMCMD> ls -lrt----该命令按时间升序显示文件
ASMCMD>rm filename --filename为要删除的文件名
SQL> alter system setdb_recovery_file_dest_size=4G;
系统已更改。
SQL> show parameter db_recovery_file_dest_size
NAMETYPEVALUE
------------------------------------ ----------- ------------------------------
当数据库运行在归档模式时,如果没有做好备份策略或归档文件和备份文件放到同一个逻辑区,则偶尔会遇到归档日志满导致系统挂起事故。在这样情况下,重启数据库不仅没有用而且将问题更复杂化(记得重启后在HA模式下的共享存储也不见了,进行了手工mount后进行手工删除部分归档日志)。
根据实际环境有不同处理方法,如下是比较通用的处理过程:
2、查看用于归档日志或备份的磁盘空间
在Linux或Unix下可以通过查看空间使用情况:$df -h
如果使用Oracle ASM存储技术,则通过如下命令查看:
$export ORACLE_SID=+ASM1
$asmcmd
ASMCMD> lsdg
3、删除归档日志物理文件,归档日志一般都是位于归档目录下
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正确删除ORACLE归档日志文件们都都知道在controlfile中记录着每一个archivelog的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了!这时候我们要做手工的清除的话,下面我经过实验,可以尝试这种方法:1. 进入rman2. 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在命令窗口里面执行DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDA TE-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子项上做很多操作,实现更复杂的功能3.简要介绍一下report obsolete命令使用report obsolete命令报告过期备份RMAN> report obsolete;RMAN retention policy will be applied to the commandRMAN retention policy is set to redundancy 1Report of obsolete backups and copiesType Key Completion Time Filename/Handle-------------------- ------ ------------------ --------------------Backup Set 125 01-NOV-04Backup Piece 125 01-NOV-04 /data1/oracle/orabak/full_1_541045804Backup Set 131 04-NOV-04Backup Piece 131 04-NOV-04 /data1/oracle/orabak/full_A VATAR2_20041104_131....Backup Set 173 06-DEC-04Backup Piece 173 06-DEC-04 /data1/oracle/orabak/full_A V ATAR2_20041206_173Backup Set 179 11-DEC-04Backup Piece 179 11-DEC-04 /data1/oracle/orabak/arch544588206.arc.....Backup Piece 189 17-DEC-04 /data1/oracle/orabak/arch545106606.arcBackup Set 190 17-DEC-04Backup Piece 190 17-DEC-04 /data1/oracle/orabak/arch545106665.arcBackup Set 191 20-DEC-04Backup Piece 191 20-DEC-04 /data1/oracle/orabak/arch_A V A TAR2_20041220_194Archive Log 2973 20-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2985.dbfArchive 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.dbfArchive Log 2704 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2716.dbfArchive Log 2703 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2715.dbfArchive Log 2702 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2714.dbf4.使用delete obsolete命令删除过期备份:RMAN> delete obsolete;RMAN retention policy will be applied to the commandRMAN retention policy is set to redundancy 1using channel ORA_DISK_1Deleting the following obsolete backups and copies:Type Key Completion Time Filename/Handle-------------------- ------ ------------------ --------------------Backup Set 125 01-NOV-04Backup Piece 125 01-NOV-04 /data1/oracle/orabak/full_1_541045804....Archive Log 2704 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2716.dbfArchive Log 2703 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2715.dbfArchive Log 2702 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2714.dbfDo you really want to delete the above objects (enter YES or NO)? yesdeleted backup piecebackup piece handle=/data1/oracle/orabak/full_A V A TAR2_20041206_173 recid=173 stamp=544156241.....deleted archive logarchive log filename=/opt/oracle/oradata/avatar2/archive/1_2715.dbf recid=2703 stamp=545108268deleted archive logarchive log filename=/opt/oracle/oradata/avatar2/archive/1_2714.dbf recid=2702 stamp=545107659Deleted 286 objectsRMAN> crosscheck archivelog all;released channel: ORA_DISK_1allocated channel: ORA_DISK_1channel ORA_DISK_1: sid=19 devtype=DISKspecification does not match any archive log in the recovery catalog5 在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 时间戳=572866683对归档日志的验证失败存档日志文件名=D:ORACLEORADATA TESTARCHIVE11_48.DBF 记录ID=2 时间戳=572866931已交叉检验的2 对象6 试着同步一下,看行不行,结果不行,crosscheck还是失败:RMAN> resync catalog;正在启动全部恢复目录的resync完成全部resyncRMAN> crosscheck archivelog all;释放的通道: ORA_DISK_1分配的通道: ORA_DISK_1通道ORA_DISK_1: sid=14 devtype=DISK对归档日志的验证失败存档日志文件名=D:ORACLEORADATATESTARCHIVE1_47.DBF 记录ID=1 时间戳=572866683对归档日志的验证失败存档日志文件名=D:ORACLEORADA TA TESTARCHIVE11_48.DBF 记录ID=2 时间戳=572866931已交叉检验的2 对象7 用list expired看看是否有失效的archive log,证明没有失效的archive log:RMAN> list expired archivelog all;说明与恢复目录中的任何存档日志均不匹配8 更改语言环境试试,结果再次crosscheck,2个archive log 都成功了:RMAN> exit恢复管理器完成。