当ORACLE归档日志满后如何正确删除归档日志

摘要:
当ORACLE归档日志满了后,将无法正常登入ORACLE,需要删除一部分归档日志才能正常登入ORACLE。我们利用RMAN进行删除操作,操作步骤如下:1.指定数据库实例C:/DocumentsandSettings/Administrator˃SETORACLE_SID=orcl2.连接数据库C:/DocumentsandSettings/Administrator˃RMANTARGETSYS/sysadmin@orcl3.查看归档日志的状态RMAN˃listarchivelogall;4.手工删除归档日志文件RMAN˃DELETEARCHIVELOGALLCOMPLETEDBEFORE'SYSDATE-7';说明:SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。

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

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

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

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

1.指定数据库实例

C:/DocumentsandSettings/Administrator>SETORACLE_SID =orcl

2.连接数据库

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

5.退出rman

RMAN> exit

附带说明:RMAN 是Oracle数据库软件自带的备份恢复工具,一种是类似于DOS,通过键盘操作的 命令行方式。

通过RMAN连接本地数据库非常简单,以 W indows 平台为例,进入到命令提示符界面:

C:/DocumentsandSettings/junsansi> SETORACLE_SID =jssbook

C:/DocumentsandSettings/junsansi> RMANTARGET/

RecoveryManager:Release10.2.0.1.0-ProductiononTueMar1721:12:172009

Copyright(c)1982,2005,Oracle.Allrightsreserved.

connectedtotargetdatabase:JSSBOOK(DBID=1415261003)

    RMAN>

如上所示,使用RMAN连接本地数据库之前必须首先设置操作系统环境变量:ORACLE_SID,并指定该值等于目标数据库的实例名。如果本地库只有一个实例并已经设置了ORACLE_SID环境变量,则不需要再指定ORACLE_SID。RMAN会自动连接到默认实例。

当然,你也可以先启动RMAN,然后再通过CONNECT命令来连接目标数据库,如下所示:

C:/DocumentsandSettings/junsansi> RMAN

RecoveryManager:Release10.2.0.1.0-ProductiononTueMar1721:12:362009

Copyright(c)1982,2005,Oracle.Allrightsreserved.

RMAN>connecttarget/

    connectedtotargetdatabase:JSSBOOK(DBID=1415261003)

本地连接允许使用操作系统验证,因此上述示例都不需要输入用户名和密码,不过如果本地没有启用操作系统身份验证的话,就必须指定具有相应权限的用户名和密码。

需要注意,Linux/UNIX 环境下设置操作系统环境变量应使用 export 命令,另外ORACLE_SID必须为大写。例如:

[oracle@yans1 ~ ]$ export ORACLE_SID=test08

[oracle@yans1 ~ ]$ rmantarget/

RecoveryManager:Release10.2.0.3.0-ProductiononTueMar1716:08:322009

Copyright(c)1982,2005,Oracle.Allrightsreserved.

connectedtotargetdatabase:TEST08(DBID=3812548755)

    RMAN>

连接远程数据库

如果要连接的目标数据库是一个远程数据库,那么必须在建立连接时指定一个有效的网络服务名(NetServiceName),本地的tnsname.ora文件中必须已经建立了该网络服务名的正确配置。连接示例如下:

C:/DocumentsandSettings/junsansi> RMANTARGETSYS/CHANGE_ON_INSTALL@TESTDB

RecoveryManager:Release10.2.0.1.0-ProductiononTueMar1716:12:322009

Copyright(c)1982,2005,Oracle.Allrightsreserved.

connectedtotargetdatabase:TESTDB(DBID=2220262593)

    RMAN>

免责声明:文章转载自《当ORACLE归档日志满后如何正确删除归档日志》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇URule规则引擎使用指南汇总js-定时器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle 内置函数(二)字符函数

主要函数: 大小写转换函数 获取子字符串函数(字符串截取) 获取字符串长度函数 字符串连接函数 去除子字符串函数 字符替换函数 字符串出现次数 字符串按照特定符号拆分多行 一、大小写转换 1、upper:转大写 2、lower:转小写  3、initcap:首字母大写 二、获取子字符串函数(字符串截取) substr(str,beginIndex,...

expdp/impdp数据泵方式备份还原数据库

1、用sysdba账号登入数据库,然后查询到要更改的用户信息:   SELECT user#,name FROM user$ where user#=110; 2、更改用户名并提交: UPDATE USER$ SET NAME='C##DALIAN' WHERE user#=110; COMMIT; 3、强制刷新: AL...

使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)

前言: 一个框架中没有数据库操作是万万不能的,本框架暂时先引入gorm,后续如果gorm使用不顺手的话,就需要考虑基于Golang数据库驱动自己造轮子了 引入gorm // 在 go.mod 中加入 require github.com/jinzhu/gorm v1.9.12 在引入gorm的时候可能会遇到crypto 这个资源被墙了,拉取不到,这时...

[转]如何将高版本的SQL Server数据库备份到低版本的SQL Server

本文转自:https://blog.csdn.net/wang465745776/article/details/54969676 前提条件备份SQL Server服务器版本为:12.0.2000.8(SQL Server2014) 具体信息为: Microsoft SQL Server Management Studio 12.0.2000.8 Micr...

如何同步两个SQLServer数据库的内容 dodo

如何同步两个SQLServer数据库的内容? 程序代码可以有版本管理CVS进行同步管理,可是数据库同步就非常麻烦,只能自己改了一个后再去改另一个,如果忘记了更改另一个经常造成两个数据库的结构或内容上不一致. 分发与复制 用强制   订阅实现数据库同步操作  大量和批量的数据可以用数据库的同步机制处理: // 说明: 为方便操作,所有操作均在发布服...

分库分表带来的问题

垂直分表:垂直分表在日常开发和设计中比较常见,通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。通常情况,某个表中的字段比较多,可以新建立一张“扩展表”,将不经常使用或者长度较大的字段拆分出去放到“扩展表”中。 ps:在字段很多的情况下,拆分开确实更便于开发和维护(曾见过某个遗留系统中,一个大表中包含100多列的)。某种意义上也...