今天数据群有人反应网站不能正常打开,经检查Oracle数据库远程连不上,提示信息:ORA-00257: archiver error. Connect internal only, until freed。可能是archivelog满了。以前学习SQL只关注CRUD,对日志了解甚少,此次宕机虽然对生成没有造成恶劣影响,但也是因为业务不熟悉所致,特花一天时间学习并记录Oracle日志归档功能。.

以下内容针对没有使用Oracle ASM磁盘组情况,使用了Oracle ASM磁盘组的情况以后分析。

  • Oracle日志操作模式分为两种:ARCHIVELOG、NOARCHIVELOG

连接Oracle终端

  • windows系统:sqlplus

  • Linux系统:先登录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。

测试入库100w数据,生成归档文件

  • 查看闪回空间已经占用情况
select * from V$FLASH_RECOVERY_AREA_USAGE;

  • 查看归档日志文件数量
select  * from v$recovery_file_dest;

当出现ORA-00257: archiver error. Connect internal only, until freed错误连不上数据的时候,如果数据库归档目标为USE_DB_RECOVERY_FILE_DEST且DB_RECOVERY_FILE_DEST目录为默认闪回空间目录时

  • 方法一可采取增大闪回空间大小方式:
alter system set db_recovery_file_dest_size=8G scope=both;
  • 方法二修改归档日志的路径
alter system set db_recovery_file_dest='location=C:\app\Administrator\oracle_log' scope=both;
  • 方法三修改归档日志的路径,将归档日志放到其他不受限制的路径下来解决这个问题,可通过下面的SQL来修改归档日志的存放路径
alter system set log_archive_dest_1=’location=C:\app\Administrator\oracle_log’;

查看archiv log所在位置

show parameter log_archive_dest;

archive log list;

通过切换日志,查看归档路径下是否有归档日志产生来验证归档路径设置是否正确,切换日志命令如下

alter system switch logfile;

方法二和方法三都是修改归档文件存储路径,具体区别是什么呢,要想理解具体区别就要先理解归档日志路径三个参数

  • 1、DB_RECOVERY_FILE_DEST:闪回恢复区路径
show parameter db_recovery_file_dest;

  • 2、LOG_ARCHIVE_DEST:LOG_ARCHIVE_DEST:指定归档文件存放的路径,该路径只能是本地磁盘,默认为’’。
show parameter LOG_ARCHIVE_DEST;

  • 3、LOG_ARCHIVE_DEST_n:指定归档文件存放的路径,Oracle最多支持把日志文件归档到31个地方,n从1到31。归档地址可以为本地磁盘,或者网络设备。

    三个参数区别如下

    • 1、 如果设置了DB_RECOVERY_FILE_DEST,就不能设置LOG_ARCHIVE_DEST,默认的归档日志存放于DB_RECOVERY_FILE_DEST指定的闪回恢复区中。可以设置LOG_ARCHIVE_DEST_n,如果这样,那么归档日志不再存放于DB_RECOVERY_FILE_DEST中,而是存放于LOG_ARCHIVE_DEST_n设置的目录中。如果想要归档日志继续存放在DB_RECOVERY_FILE_DEST中,可以通过如下命令:alter system set log_archive_dest_1=’location=USE_DB_RECOVERY_FILE_DEST’;
    • 2、 如果设置了LOG_ARCHIVE_DEST,就不能设置LOG_ARCHIVE_DEST_n和DB_RECOVERY_FILE_DEST。如果设置了LOG_ARCHIVE_DEST_n,就不能设置LOG_ARCHIVE_DEST。也就是说,LOG_ARCHIVE_DEST参数和DB_RECOVERY_FILE_DEST、LOG_ARCHIVE_DEST_n都不共存。而DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST_n可以共存。
    • 3、 LOG_ARCHIVE_DEST只能与LOG_ARCHIVE_DUPLEX_DEST共存。这样可以设置两个归档路径。LOG_ARCHIVE_DEST设置一个主归档路径,LOG_ARCHIVE_DUPLEX_DEST设置一个从归档路径。所有归档路径必须是本地的。
    • 4、 如果LOG_ARCHIVE_DEST_n设置的路径不正确,那么Oracle会在设置的上一级目录归档。比如设置LOG_ARCHIVE_DEST_1=’location=C:\archive1’,而OS中并没有archive1这个目录,那么Oracle会在C盘归档。

删除归档文件

  • 首先删除归档文件在物理主机磁盘中的文件
  • 物理文件删除后ORACLE的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化的日志展现出,接下来要做的就是从controlfile中清除掉多余归档日志文件记录

利用RMAN进行删除操作,操作步骤如下:

window客户端系统为例

  • 打开Rman连接数据库

  • 查看归档日志的状态
list archivelog all;
  • 执行archivelog校验命令
crosscheck archivelog all;

  • 删除校验失败的记录
delete expired archivelog all; 

  • 选择yes

  • 查看归档日志
List archivelog all;

  • 查看归档日志文件
select substr(t.NAME,1) NAME,ROUND(sum(t.BLOCKS*t.BLOCK_SIZE)/1024/1024) TOTAL_MB from v$archived_log t where t.DELETED='NO' group by substr(t.NAME,1);

完全正确,至此归档文件完全删除~!

Oracle 归档日志文件的更多相关文章

  1. Oracle 物理结构(七) 文件-归档日志文件

    Oracle 物理结构(七) 文件-归档日志文件

  2. Oracle备份归档日志文件的两种方法比较

    备份归档日志方式有两种:  1 单独备份归档日志:backup archivelog all  2 在执行备库时一起备份归档日志:backup database plus archivelog;  这 ...

  3. oracle归档日志写满错误解决方法

    最近一年,手头上负责的项目要部署到很多个地方,由于项目组里没有人对oracle比较熟悉,只能给自己增加一个DBA的角色了.由于短时间内要部署很多单位,备份策略没有设置好,结果过了一个月,用户报告程序开 ...

  4. oracle归档日志增长过快处理方法

    oracle归档日志一般由dml语句产生,所以增加太快应该是dml太频繁 首先查询以下每天的归档产生的情况: SELECT TRUNC(FIRST_TIME) "TIME", SU ...

  5. RMAN数据库恢复之恢复归档日志文件

    恢复归档日志文件如果只是为了在恢复数据文件之后应用归档文件,那并不需要手动对归档文件进行恢复,RMAN会在RECOVER时自动对适当的归档进行恢复.单独恢复归档文件一般是有特别的需求,如创建了Data ...

  6. oracle归档日志管理

    归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档 ...

  7. oracle归档日志

    前几天因为导入大的东西,弄得很久都没动静,一看最后才发现是归档满了.但是很多的命令还是很是很不熟悉,所以看了下,百度了下.整理下这个. 1.查看归档日志大小及使用情况 select * from v$ ...

  8. oracle redo日志文件损坏恢复

    参考:How to Recover from Loss Of Online Redo Log And ORA-312 And ORA-313 (Doc ID 117481.1) 在线重做日志文件丢失后 ...

  9. ORACLE归档日志比联机重做日志小很多的情况总结

    ORACLE归档日志比联机重做日志小很多的情况   前几天一网友在群里反馈他遇到归档日志比联机重做日志(redo log)小很多的情况,个人第一次遇到这种情况,非常感兴趣,于是在一番交流沟通后,终于弄 ...

随机推荐

  1. Spring4.x Jpa + hibernate的配置(废弃JpaTemplate)

    近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 ...

  2. Dictionary用法

    https://www.cgjoy.com/thread-106639-1-1.html 1.新建字典,添加元素  dictionary<string,string>dic=newdict ...

  3. 20155219付颖卓《网络攻防》Exp4 恶意代码分析

    一.基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. 可以用window7自带的schtasks ...

  4. js中substr、substring、slice的区别

    substr(start, length) substring(from, to) slice(from, to) 以上函数只传一个参数时,认为是起始位置,然后按照正方向截取 substring的参数 ...

  5. 用户控件 RadioButtonList

    public static MvcHtmlString RadioButtonList(this HtmlHelper htmlHelper, string name, string codeCate ...

  6. 顺序栈代码实现&&stack库

    #include<iostream> using namespace std; ; typedef int Elemtype; struct SqStack { Elemtype *bas ...

  7. 那些年,很多人没看懂的Python内置函数

    Python之所以特别的简单就是因为有很多的内置函数是在你的程序"运行之前"就已经帮你运行好了,所以,可以用这个的特性简化很多的步骤.这也是让Python语言变得特别的简单的原因之 ...

  8. etectMultiScale(gray, 1.2,3,CV_HAAR_SCALE_IMAGE,Size(30, 30))

    # 函数原型detectMultiScale(gray, 1.2,3,CV_HAAR_SCALE_IMAGE,Size(30, 30)) # gray需要识别的图片 # 1.03:表示每次图像尺寸减小 ...

  9. MySQL Hardware--NUMA与MySQL

    MUMA架构 在单实例的MySQL服务器上,通过会为MySQL的Buffer Pool分配50%至70%甚至更高的内存,让MySQL 服务会尽可能多地占用系统资源.在基于NUMA系统中,内存被分配到各 ...

  10. 游戏编程算法与技巧 Game Programming Algorithms and Techniques (Sanjay Madhav 著)

    http://gamealgorithms.net 第1章 游戏编程概述 (已看) 第2章 2D图形 (已看) 第3章 游戏中的线性代数 (已看) 第4章 3D图形 (已看) 第5章 游戏输入 (已看 ...