oracle手工删除过期的归档日志
- 格式:docx
- 大小:13.21 KB
- 文档页数:1
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启⽤归档⽇志⼀、开启归档1、查看归档信息SQL> archive log listDatabase log mode No Archive ModeAutomatic archival DisabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 244Current log sequence 246当前数据库未开启归档2、设置归档⽬录oracle默认使⽤闪回恢复区DB_RECOVERY_FILE_DEST作为归档路径SQL> show parameter DB_RECOVERY_FILE_DESTNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string /u01/app/oracle/flash_recovery_areadb_recovery_file_dest_size big integer 3882M闪回恢复区在安装过程中有限制其⼤⼩,如果闪回恢复区满了,归档⽇志会⽆法写⼊⽽导致数据库hang住,解决办法可以增加闪回区⼤⼩或者修改归档路径3、修改归档路径修改log_archive_dest_1参数可修改归档⽇志路径(pfile/spfile中参数db_recovery_file_dest指定的⽬录将⽆效)实际上从Oracle 10g开始,可以⽣成多份⼀样的⽇志,保存多个位置,以防不测。
多个位置通过设置不同的log_archive_dest_n 参数实现,archive log list输出中的Archive destination路径只显⽰最新修改的路径。
SQL> show parameter log_archive_dest_1NAME TYPE VALUE------------------------------------ ----------- ------------------------------log_archive_dest_1 stringlog_archive_dest_10 stringlog_archive_dest_11 stringlog_archive_dest_12 stringlog_archive_dest_13 stringlog_archive_dest_14 stringlog_archive_dest_15 stringlog_archive_dest_16 stringlog_archive_dest_17 stringlog_archive_dest_18 stringlog_archive_dest_19 string修改归档路径为/u01/app/oracle/archive_logSQL>alter system set log_archive_dest_1='location=/u01/app/oracle/archive_log' scope=spfile;System altered.重启⽣效4、修改归档⽇志格式SQL>alter system set log_archive_format='ARC%S_%R.%T_%D.dbf' scope=spfile;System altered.重启⽣效5、开启归档需要在mount状态下开启数据库归档,重启⾄mountSQL>shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startup mountORACLE instance started.Total System Global Area 1603411968 bytesFixed Size 2213776 bytesVariable Size 989857904 bytesDatabase Buffers 603979776 bytesRedo Buffers 7360512 bytesDatabase mounted.开启数据库归档SQL>alter database archivelog;Database altered.查看归档情况SQL> archive log listDatabase log mode Archive ModeAutomatic archival EnabledArchive destination /u01/app/oracle/archive_logOldest online log sequence 244Next log sequence to archive 246Current log sequence 246ALTER DATABASE FORCE LOGGING;开启强制归档打开数据库SQL>alter database open;Database altered.6、确认数据库为归档模式SQL>select log_mode from v$database;LOG_MODE------------ARCHIVELOGSQL>select archiver from v$instance;ARCHIVE-------STARTED7、强制⽇志切换先查看当前归档⽇志视图和归档⽇志路径:SQL>select name from v$archived_log;no rows selected[oracle@zml-rhel6 archive_log]$ lltotal 0没有归档⽇志,下⾯执⾏强制⽇志切换SQL>alter system switch logfile;System altered.再次查看视图SQL>select name from v$archived_log;NAME--------------------------------------------------------------------------------/u01/app/oracle/archive_log/ARC0000000246_0963417259.0001_6833bc69.dbf 有归档⽇志产⽣,验证成功关闭数据库归档在mount状态下关闭:alter database noarchivelog⼆、归档⽇志清理1、⼿动物理删除归档⽇志该⽅式利⽤linux的命令find查找N天以前的⽇志,直接删除[oracle@localhost archive_log]$ find . -type f -mtime +2.4-print|xargs ls -rlt-rw-r----- 1 oracle oinstall 16092672 6⽉ 4 20:45 ./ARC0000000606_0977259429.0001_fb0ffee2.dbf-rw-r----- 1 oracle oinstall 38390272 6⽉ 4 22:00 ./ARC0000000607_0977259429.0001_fb0ffee2.dbf-rw-r----- 1 oracle oinstall 32950272 6⽉ 4 22:02 ./ARC0000000608_0977259429.0001_fb0ffee2.dbf该例⼦中查询到2.4天前⽇志列表。
oracle 清理审计日志Oracle数据库是一种强大且广泛使用的关系型数据库管理系统,它提供了审计功能,可以记录数据库中发生的各种操作和事件,包括用户登录、表的增删改查、系统权限变更等。
这些审计日志对于数据库管理员来说非常重要,可以用于跟踪和监控数据库的安全性和稳定性。
然而,随着时间的推移,审计日志的数量可能会不断增加,占用大量的存储空间,甚至影响数据库的性能。
因此,定期清理审计日志是数据库管理员的一项重要任务。
清理审计日志的目的是释放存储空间并提高数据库的性能。
下面将介绍几种清理审计日志的方法。
方法一:使用Oracle自带的工具Oracle提供了一些内置的工具和命令,可以帮助管理员清理审计日志。
其中一个常用的工具是DBMS_AUDIT_MGMT包,可以使用该包中的子程序来管理审计日志。
例如,可以使用PURGE_AUDIT_TRAIL过程来清理指定时间范围内的审计日志。
管理员可以根据需要设定时间范围,将旧的日志删除,从而释放存储空间。
方法二:手动删除审计日志文件除了使用Oracle提供的工具外,管理员还可以手动删除审计日志文件。
首先,管理员需要找到存储审计日志文件的目录。
在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空间很快就满了。
数据库归档1、查看、更改归档路径在ORACLE10G中,默认的归档路径为$ORACLE_BASE/flash_recovery_area。
对于这个路径,ORACLE有一个限制,就是默认只能有2G的空间给归档日志使用,可以使用下面两个SQL语句去查看它的限制select * from v$recovery_file_dest;show parameter db_recovery_file_dest(这个更友好直观一些)当归档日志数量大于2G时,那么就会由于没有更多的空间去容纳更多的归档日志会报无法继续归档的错误。
如:RA-19809: limit exceeded for recovery filesORA-19804: cannot reclaim 10017792 bytes disk space from 2147483648 limitARC0: Error 19809 Creating archive log file to'/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2007_04_30/o1_mf_1_220_ 0_.arc'这时我们可以修改它的默认限制,比如说将它增加到5G或更多,也可以将归档路径重新置到别的路径,就不会有这个限制了。
更改限制语句如下:alter system set db_recovery_file_dest_size=5368709102;或者直接修改归档的路径即可alter system set log_archive_dest_1='location=/u01/archivelog' scope =both;2、修改归档模式sql> archive log list;sql> shutdown immediate;sql> startup mount;sql> alter database archivelog;alter database noarchivelogsql> alter database open;sql> archive log list;3、确认归档是否生效alter system switch logfile;看对应的归档位置时候有archivelog产生。
笔者单位配备了1套Exadata X5-2的数据库一体机,为应用提供后端数据管理,Exadata 是Oracle 软硬件整合一体化产品,主要用于解决超大型数据库所存在的普遍性性能瓶颈,也就是磁盘存储系统向数据库服务器传输大量的数据。
Exadata 相当于Oracle 通过硬件和软件的组合优化有效的解决了存储层和数据库层之间的传输瓶颈。
Exadata 数据库一体机软件层面的安全配置相比其他Oracle 数据库平台也更高。
此次故障也是由于我们对这方面的特性了解不够深入,因普通的Oracle Linux 用户密码过期引发了信息系统的故障,并在处理过程中大费周折。
故障突发用户无法登录应用系统运维的同事突然接到用端数据库。
在检查监测平台上数据库实时运行数据时,才猛然发现两台DB(数据库)节点的会话数都是0,平时都是在1000左右,根据以往巡检历史数据的经验,即使在晚上也是400左右。
再次查看近24小时会话数曲线图,确认从昨晚凌晨0点45分会话数开始异常,持续到现在。
在确定了引发故障的具体区域范围后,立刻联系公司高级DBA 进行远程协助诊断。
通过SQLPlus 能正常连接到数据库实例,确认Oracle 数据库也是open 状态,只是用select 语句进行数据表检索时无法返回结果,再结合数据库的alert 告警日志分析如图1,有经验的DBA 很快意识到是归档日志空间满了导致数据库被hang 住。
由于归档日志是Oracle 数据库在线日志文件的备份,用于恢复到任意时间点系统密码过期引发的故障■ 四川 赖文书编者按: 近期笔者单位遇到Exadata 数据库未及时更改密码导致定时任务无法正常运行,就此引发归档日志空间占满,最终导致数据库被挂起应用系统无法登录。
户反馈,应用系统无法登录,经确认系统的Web 登录页面能正常打开,就是输入用户名密码后报错。
对应用服务器的操作系统、中间件和部署的应用进行检查,均没有发现任何问题,结合登录报错信息,对后端数据进行检查,能正常ping 通数据库IP 地址,也能正常Telnet 应用连接Oracle 的1521端口。
OracleRMAN操作详解RMAN(Recovery Manager):恢复管理器RMAN概念:RMAN: Recovery Manager,是备份和恢复数据库的管理⼯具建⽴备份和恢复的server process,在oracle server上做备份和恢复具有如下特点:1 )功能类似物理备份,但⽐物理备份强⼤ N 倍,从下⾯的特点可以看到;2 )可以压缩空块;3 )可以在块⽔平上实现增量;4 )可以把备份的输出打包成备份集,也可以按固定⼤⼩分割备份集;5 )备份与恢复的过程可以⾃动管理;6 )可以使⽤脚本(存在 Recovery catalog 中);RMAN的组成概念:RMAM client (RMAN客户端)⽤来操作备份与恢复的客户端应⽤,可以通过⽹络连接到⽬标数据库;target database(⽬标数据库)RMAN备份和恢复的数据库,就是⽬标库;你的备份和恢复的⽬标,就叫做⽬标库auxiliary database(辅助数据库)主库的副本,⼀般⽤于测试,主库与辅助库的DBID不同,DB_NAME可以不同Catalog database(恢复⽬录数据库)存放RMAN备份的元数据信息,默认存放在控制⽂件中,由于控制⽂件中分为循坏重⽤记录与⾮循环重⽤记录,备份信息属于循环重⽤记录,会不断被覆盖重⽤,默认会保留7天,保存时间有限,可以使⽤恢复⽬录数据库实现RMAN备份元数据信息的长久保存。
media manager(介质管理器)如果想要把备份⽂件存放到其他设备(例如带库)就需要介质管理器。
fast recovery area(闪回恢复区)默认情况下,RMAN会将备份存放在闪回恢复区中。
db_recovery_file_destdb_recovery_file_dest_size视图:v$recovery_file_destv$recovery_area_usagechannel(通道):RMAN⼯具到存储设备的数据流叫通道。
oracle判断归档日志失效的原理Oracle数据库中的归档日志是保证数据持久性和恢复能力的关键组成部分。
归档日志的失效可能会导致数据库无法正常运行或无法恢复到最新的状态。
本文将从Oracle判断归档日志失效的原理进行阐述。
在Oracle数据库中,归档日志是一种记录数据库操作的二进制文件。
当数据库发生变更时,比如插入、更新或删除数据,Oracle会将这些操作写入归档日志中。
归档日志的作用是保证数据的持久性,即使数据库发生故障,也能通过归档日志将数据恢复到最新的状态。
归档日志失效可能会导致数据丢失或无法恢复。
因此,Oracle会通过一些机制来判断归档日志是否失效。
其中包括以下几个方面:1. 归档日志的序列号:每个归档日志都有一个唯一的序列号。
Oracle通过比较归档日志的序列号来判断其是否失效。
如果某个归档日志的序列号小于当前正在使用的归档日志的序列号,那么该归档日志就被认为是失效的。
2. 归档日志的完整性:Oracle在写入归档日志时会计算并存储每个归档日志的校验和。
在判断归档日志是否失效时,Oracle会重新计算归档日志的校验和,并与存储的校验和进行比较。
如果两者不一致,那么说明归档日志已经损坏或被篡改,被认为是失效的。
3. 归档日志的可访问性:Oracle会检查归档日志的物理文件是否存在、是否可读。
如果归档日志的物理文件不存在或无法读取,那么该归档日志就被认为是失效的。
4. 归档日志的使用情况:Oracle会记录当前正在使用的归档日志的序列号,以及已经归档的归档日志的序列号。
通过比较这两个序列号,Oracle可以确定哪些归档日志已经被使用。
如果某个归档日志的序列号小于已经归档的归档日志的序列号,那么该归档日志就被认为是失效的。
通过以上几个方面的判断,Oracle可以准确地判断归档日志是否失效。
一旦判断出归档日志失效,Oracle会采取相应的措施来处理失效的归档日志,比如删除、归档或重新生成。
ORACLE⼿⼯删除数据库很多⼈习惯⽤ORACLE的DBCA⼯具创建、删除数据库,这⾥总结⼀下⼿⼯删除数据库实验的步骤,⽂中⼤量参考了乐沙弥的这篇博客的内容,当然还有Oracle官⽅相关⽂档。
此处实验环境为Oracle Linux Server release 5.7,数据库版本为10.2.0.5.0Step 1: .获得控制⽂件、数据⽂件,⽇志⽂件等相关信息获取这些信息,⼀⽅⾯是为了后⾯的建库做参考,另外⼀个是为了验证后⾯⼀些操作,如果这些都没有必要,其实是可以可以跳过这⼀步的。
SQL> select status ,name from v$controlfile;SQL> select * from v$dbfile;SQL> select * from v$logfile;SQL>archive log list;Step 2: 停⽌监听服务和OEM$lsnrctl stop 或 lsnrctl stop listener_name[oracle@DB-Server ~]$ emctl stop dbconsoleTZ set to HongkongOracle Enterprise Manager 10g Database Control Release 10.2.0.5.0Copyright (c) 1996, 2010 Oracle Corporation. All rights reserved.:1158/em/console/aboutApplicationStopping Oracle Enterprise Manager 10g Database Control ...Cannot determine Oracle Enterprise Manager 10g Database Control process. /u01/app/oracle/product/10.2.0/db_1/xxxxx_xxx/emctl.pid does not exist.Step 3: 关闭数据库实例SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.Step 4:启动到数据库实例到mount状态使⽤exclusive restart或普通模式都可以SQL> startup mount exclusive restrict;或SQL> startup mount;Step 5: 修改参数为允许受限的会话模式这⼀步骤是必须的,否则在drop database时会报ORA-01586: database must be mounted EXCLUSIVE and not open for this operationSQL> alter system enable restricted session;Step 6:使⽤drop database命令来清除数据库SQL> drop database;drop database 命令会删除控制⽂件和在控制⽂件中所列的数据⽂件,如果数据库正在使⽤spfile⽂件,则⼀并删除。
ORACLE 11G 数据库归档日志清理规程
说明:切记!!!ORACLE归档日志对于ORACLE的数据恢复和备份非常重要,不到万不得已不要删除归档日志,除非没有配置自动备份任务,且数据库的归档目录或闪回恢复区将满时,才会删除归档日志。
1、远程连接到数据库服务器,输入CMD命令,进入DOS命令窗口,通过SQLPLUS连接ORACLE数据库,
如下图
2、输入命令: show parameter db_recovery;如下图
当db_recovery_file_dest 中TYPE值为string,VALUE值为空时,表示未打开恢复区,这时只需要在服务器上手工删除归档日志文件即可;
否则当db_recovery_file_dest 中VALUE值非空时,还需要使用RMAN命令删除;当然也可以不考虑此参数,先手工删除归档日志后,再RMAN命令清除。
3、新建一个DOS窗口,输入命令:rman target /,回车后打开RMAN窗口,进入到RMAN命令行
4、输入命令:list archivelog all;如下图,显示归档日志所在磁盘目录和文件名
根据上面提示可知,数据库归档日志文件路径为:X:\TGMESYG\ARCHIVELOG,每天的归档日志文件存放在以当天日期命名的文件夹下,具体见下图:
5、手工在磁盘上删除归档日志文件。
6、然后在上面打开的RMAN运行窗口中,输入命令:crosscheck archivelog all;
如下图
7、最后输入命令:delete expired archivelog all
确认是否要删除失效的对象,确定删除的话,输入YES,回车。
Oracle归档模式及归档日志的操作1归档模式及归档日志基本概念:1.1为什么要给Oracle做归档操作:Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。
当ORACLE数据库运行在ARCHIVELOG(归档模式)模式时,所有的事务重做日志都将保存.这意味着对数据库进行的所有事务都留有一个备份,尽管重做日志以循环方式工作,但在一个重做日志被覆盖前均将为其建立一个副本.在重做日志文件复制完成之前,ORACLE数据库将停止一切新的操作,在旧的事务记录完成之前ORACLE不对其进行覆盖.有了所有事务的副本,数据库就可以从所有类型的失败中恢复,包括用户错误或磁盘崩溃.这是一种最安全的数据库工作方式。
在实际开发中,归档模式是符合开发的,归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,数据库使用归档方式运行时才可以进行灾难性恢复。
1.2归档模式和非归档模式的区别:非归档模式只能做冷备份,并且恢复时只能做完全备份.最近一次完全备份到系统出错期间的数据不能恢复.归档模式可以做热备份,并且可以做增量备份,可以做部分恢复.1.3什么是归档日志:归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中.当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库。
2Linux系统开启归档模式:使用ssh登录到Linux系统:2.1切换到oracle用户,然后使用sqlplus /nolog登录到oracle数据上:su -oraclesqlplus /nolog2.2使用oracle系统管理员sysdba登录到数据库:conn /as sysdba2.3查看当前oracle的模式:select log_mode from v$database;如果当前模式为NOARCHIVELOG,就说明没有开启归档模式2.4关闭数据库,启动到mount状态:shutdown immediate;startup mount;2.5修改数据库为归档模式alter database archivelog; (此处的分号不可以省略)(如果是归档模式改为非归档,则执行:alter database noarchivelog;)2.6启动数据库:alter database open;2.7再次验证:执行select log_mode from v$database;可查看到oracle已经修改为归档模式了3Windows开启归档模式:3.1打开sqlplus工具:sqlplus工具路径:F:\Oracle\product\11.2.0\dbhome_1\BIN中的sqlplus.exe双击打开即可。
建议先在备库上删除已被应用的归档日志,然后在到 primary 库上删除这个日志,写Shell脚本之前,几个地方需要注意下:1 如何判断备机上哪些日志已经被应用到备库上?可以通过查询 v$archived_log的字段 applied 字段来判断,同时加上REGISTRAR 和 name的限制条件, REGISTRAR='RFS' 表示是 Remote File Server process 进程,别外加上name isnot null 是因为,通过rman crosscheck 并删除 expired的 archivelog 后 name 字段会被置空,--sql 如下SELECT name, SEQUENCE#, FIRST_TIME, REGISTRAR, APPLIED, NEXT_TIME, statusFROM V$ARCHIVED_LOGwhere applied = 'YES'and REGISTRAR = 'RFS'and name is not nullORDER BY SEQUENCE#;2 在备机删除了已归档的archivelog后,如何在远端 primary 库同时删除这个日志? 这个问题在网上查了些资料,可以通过配置公钥和私钥,配置之后,scp 文件,ssh 到远程主机执行命令都可以不用输入密码,具体原理可以到网上查查,这两点克服后,就可以写脚本了。
-------- 脚本 clear_arch_orasid.sh------- 功能:删除备机被 applied 的归档日志,同时也到主库上删除这个归档日志。
#!/bin/bash#Author Francs.tan#Date 2010-12-20#################################################Set Result Flag#0-Successful#1-No Archived log that have been applied by standby database#2-ERROR:Excute file clear_primary.sh#3-ERROR: File clear_primary.sh delete error#initialize variableRESULT_FLAG=0file_num='0'export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1export PATH=${ORACLE_HOME}/bin:${PATH}export ORACLE_SID=orasidexport script_dir=/home/oracle/script/clear_archexport log_dir=/home/oracle/script/clear_arch/logDATE=`date +%Y%m%d`## Select the earliest archived log file that have been applied by standby databasesqlplus -s "/as sysdba"<<EOFset echo offset head offset linesize 200set feedback off;col name format a50;col REGISTRAR format a10;col APPLIED format a10;spool ${script_dir}/archivelog_list.txtselect 'file_num=' || name from (SELECT nvl(name, '0') as name FROM V\$ARCHIVED_LOG where applied = 'YES' and REGISTRAR = 'RFS' and name is not null ORDER BY SEQUENCE#) where rownum = 1;spool off;exitEOF##Delete earliest archived log file that applied by standby database control_file=${script_dir}/archivelog_list.txt. ${control_file}if [ ${file_num} == '0' ]thenecho "WARNING: No Archived log that have been applied by standby database !" | tee -a ${log_file}RESULT_FLAG=1echo "Result Flag:${RESULT_FLAG}" | tee -a ${log_file}exit ${RESULT_FLAG}filog_file=${log_dir}/clear_log_${DATE}.logecho "************ begin rm archivelog file = ${file_num} ************* " | tee -a ${log_file}rm -f ${file_num}##Crosscheck archivelogecho "************* begin Crosscheck archivelog ************* " | tee -a ${log_file}. ${script_dir}/check_arc.sh >> ${log_file}## Delete primary archived logecho "************* Delete primary archived log ************* " | tee -a ${log_file}echo "rm -f ${file_num}" > ${script_dir}/clear_primary.shscp ${script_dir}/clear_primary.sh **************.xxx.xx:${script_dir} ssh **************.xxx.xx chmod u+x ${script_dir}/clear_primary.sh ssh **************.xxx.xx ${script_dir}/clear_primary.shif [ $? -ne 0 ] ####如果前一条命令执行成功,则返回非0,否则为0thenecho "***********************************************************"| tee -a ${log_file}echo "ERROR:Excute file clear_primary.sh ,please check it! " | tee -a ${log_file}echo "***********************************************************" | tee -a ${log_file}RESULT_FLAG=2echo "Result Flag:${RESULT_FLAG}" | tee -a ${log_file}exit ${RESULT_FLAG}fi##rm temp filesecho "************* Remove temp files ************* " | tee -a ${log_file}rm -f ${control_file}rm -f ${script_dir}/clear_primary.shssh **************.xxx.xx rm -f ${script_dir}/clear_primary.shif [ $? -ne 0 ] ####如果前一条命令执行成功,则返回非0,否则为0thenecho "***********************************************************" | tee -a ${log_file}echo "ERROR: File clear_primary.sh delete error ,please check it! " | tee -a ${log_file}echo "***********************************************************" | tee -a ${log_file}RESULT_FLAG=3echo "Result Flag:${RESULT_FLAG}" | tee -a ${log_file}exit ${RESULT_FLAG}fiecho "****** Remove archivelog of Primary and Standby database successfully ! *****" | tee -a ${log_file}exit#end---- check_arch.sh---- 功能:在备库上较验归档日志,并删除过期的归档日志。
ora-00257 归档程序错误。
在释放之前仅限于内部链接此问题属于归档日志满了。
这里采用删除归档日志的方法。
过程概述:先手工删除D:\oracle\product\10.2.0\flash_recovery_area里面的日志,然后用户用rman进入把归档日志删除1)#rman target/2)rman>crosscheck archivelog all;3)rman>delete expired archivelog all;4)rman>exit一、详细过程介绍查看归档状态、归档位置$sqlplus /as sysdbasqlplus system/manager@实例名 as sysdbaSQL*Plus: Release10.2.0.1.0 - Production on Mon Jan 17 10:00:24 2011Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to:Oracle Database10gRelease10.2.0.1.0 - 64bit Production2.查看正在归档的状态SQL>select * from v$log;发现ARC状态为NO,表示系统没法自动做归档。
3.查看归档日志所在位置SQL>show parameter recover;SQL> exit到具体的位置把归档文件删除二、查看使用率SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES ------------ ------------------ ------------------------- --------------- CONTROLFILE 0 0 0ONLINELOG 0 0 0ARCHIVELOG 99.9 0 255BACKUPPIECE 0 0 0IMAGECOPY 0 0 0FLASHBACKLOG 0 0 0注:可以看出,ARCHIVELOG日志已经达到99.9%了。
清理原则:在文件系统使用率较高的目录中,使用如下命令,找出大文件或文件夹。
根据文件类型选择清理策略。
查看磁盘及文件目录大小:df –hdu –sh ./*1. 清理adump目录清理参数audit_file_dest指定的目录,清理的文件为“*.aud”SQL> show parameter audit_file_dest查看aud文件[oracle@localhost orcl]$ find /home/app/oracle/admin/orcl/adump -mtime +7 -name "*.aud" |more删除七天前aud文件[oracle@localhost orcl]$ find /home/app/oracle/admin/orcl/adump -mtime +7 -name "*.aud" | xargs rm -f2. 清理trace文件清理参数background_dump_dest指定的目录,清理的文件为.trSQL> show parameter background_dump_dest查看trc、trm文件[oracle@localhost orcl]$ find /home/app/oracle/diag/rdbms/orcl/orcl/trace -mtime +7 -name "*.trc" | more[oracle@localhost orcl]$ find /home/app/oracle/diag/rdbms/orcl/orcl/trace -mtime +7 -name "*.trm" | more删除七天前的trc、trm文件[oracle@localhost orcl]$ find /home/app/oracle/diag/rdbms/orcl/orcl/trace -mtime +7 -name "*.trc" | xargs rm –f[oracle@localhost orcl]$ find /home/app/oracle/diag/rdbms/orcl/orcl/trace -mtime +7 -name "*.trm" | xargs rm -f3. 清理xml日志清理路径为:$ORACLE_BASE/diag/rdbms/$DB_UNIQUE_NAME/ORACLE_SID/alert,清理文件为log_*.xml查看xml日志文件:[oracle@localhost orcl]$ find /home/app/oracle/diag/rdbms/orcl/orcl/alert -mtime +7 -name "log_*.xml" | more删除七天前的xml文件:[oracle@localhost orcl]$ find /home/app/oracle/diag/rdbms/orcl/orcl/alert -mtime +7 -name "log_*.xml" | xargs rm -f4. 清理监听日志清理路径为:$GRID_BASE/diag/tnslsnr/NODE_NAME/listener/alert,清理文件为log_*.xml[oracle@localhost trace]$ find /home/app/oracle/diag/tnslsnr/localhost/listener/alert -mtime +7 -name "log_*.xml" | more[oracle@localhost trace]$ find /home/app/oracle/diag/tnslsnr/localhost/listener/alert -mtime +7 -name "log_*.xml" | xargs rm -f。