今天数据群有人反应网站不能正常打开,经检查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. leetcode 381.Insert Delete GetRandom

    这道题中要求使用O(1)的方法来删除和插入元素的,那么首先需要寻找到对应的元素,这个可以使用map的O(1)的查询时间的,然后是删除对应的元素的,那么可以根据 堆排序中类似的做法把最后面的元素插入到前 ...

  2. JAVA日常之一

    一.JDK安装及环境变量设置 下载jdk安装包,如jdk-8u65-windows-x64.exe,点击安装,记住安装路径如E:\Program Files\Java\jdk1.8.0_65: 打开环 ...

  3. 安装Scala开发环境

    Scala 介绍 Step 1: 安装 Java开发环境 Scala 版本与Java版本的兼容关系 从Oracle网站下载JDK URL: http://www.oracle.com/technetw ...

  4. mysql Incorrect usage of UNION and ORDER BY 错误备忘

    出现这个错误的语句是酱紫的 select xxx from aaa order by xxx union all select yyy from bbb order by yyy 错误原因居然是,如果 ...

  5. 【解决】nginx 下$_SERVER['PATH_INFO'] 无法获取到内容

    Apache是模块加载文件的,默认支持$_SERVER['PATH_INFO'] : 而对于Nginx下, 是不支持PATH INFO的, 也就是它不会默认设置PATH_INFO. 而因为Nginx默 ...

  6. Merging one UE4 project into another.

    Merging can be done by right clicking on folder in the content directory in the editor and selecting ...

  7. Cross Platform Note: STD C++ Preprocessor directives & pre-defined macros

    ref: http://www.cplusplus.com/doc/tutorial/preprocessor/ concolusion: directives: #define #undef #in ...

  8. Computer Graphics Principles And Practice (James Foley / Andries Van Dam / Morgan McGuire / David Sklar / James D. Foley 著)

    1 Introduction 2 Introduction to 2D Graphics Using WPF 3 An Ancient Renderer Made Modern 4 A 2D Grap ...

  9. docker 限制container容器使用内存大小,不限制swap

    docker update --memory 20g --memory-swap -1 96b14c546d98 参考:https://my.oschina.net/Kanonpy/blog/2209 ...

  10. tensorflow训练中出现问题Couldn't open CUDA library cupti64_80.dll

    参考链接:http://blog.csdn.net/lanchunhui/article/details/62242568 在代码中添加了tensorboard可视化代码后,原程序运行报错,以上链接方 ...