一、Oracle日志介绍

1、Oracle日志分类

分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 
           redo log 重做日志(记录数据库的更改)。

本文主要关注Oracle的重做日志。 
重做日志分为在线重做日志和归档重做日志。 
   online Redo log files--在线重做日志,又称联机重做日志,指Oracle以SQL脚本的形式实时记录数据库的数据更新,换句话说,实时保存已执行的SQL脚本到在线日志文件中(按特定的格式)。 
   Archive Redo log files--归档重做日志,简称归档日志,指当条件满足时,Oracle将在线重做日志以文件形式保存到硬盘(持久化)。

重做日志的简单原理:在数据更新操作commit前,将更改的SQL脚本写入重做日志。主要用于数据库的增量备份和增量恢复。

重做日志直接对应于硬盘的重做日志文件(有在线和归档二种),重做日志文件以组(Group)的形式组织,一个重做日志组包含一个或者多个日志文件。

2、关于在线重做日志(online redo log)

在线重做日志的原理: 
    
     对于在线重做日志,Oracle 11g默认对于每个数据库实例,建立3个在线日志组,每组一个日志文件,文件名称为REDO01.LOG,REDO02.LOG和REDO03.LOG。(用户可以通过视图操作添加/修改/删除日志组和日志文件来自定义在线重做日志) 
     每组内的日志文件的内容完全相同,且保存在不同的位置,用于磁盘日志镜像,以做多次备份提高安全性。默认情况这3组通常只有一组处于活动状态,不断地同步写入已操作的脚本,当日志文件写满时(达到指定的空间配额),如果当前数据库处于归档模式,则将在线日志归档到硬盘,成为归档日志;若当前数据库处于非归档模式,则不进行归档操作,而当前在线日志的内容会被下一次重新写入覆盖而无法保存。因此,通常数据库在运行时,是处于归档模式下的,以保存数据更新的日志。 
    当前归档日志组写满后,Oracle会切换到下一日志组,继续写入,就这样循环切换;当处于归档模式下,切换至原已写满的日志组,若该日志组归档完毕则覆盖写入,若没有则只能使用日志缓冲区,等待归档完毕之后才能覆盖写入。当然,处于非归档模式下是直接覆盖写入的。(关于数据库归档模式的设置,我会在另外的博文中讲到)。

Oracle提供了2个视图用于维护在线重做日志:V$LOG 和  V$LOGFILE,我们可以通过这两个视图查看和修改在线日志。

关于V$LOG视图的详细属性字段可Oracle 11g的官方文档:http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2029.htm 
关于V$LOGFILE视图的详细属性字段可Oracle 11g的官方文档: 
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/dynviews_2031.htm

官方文档还是最给力的呀,不要忽视!! 
        
通过v$logfile视图查询在线日志文件信息:  
SQL> SELECT * FROM v$logfile ORDER BY group#;

GROUP#   TATUS  TYPE     MEMBER                              IS_RECOVERY_DEST_FILE

1               ONLINE    E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG     NO 
2               ONLINE    E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG     NO 
3               ONLINE    E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG     NO

通过v$log视图查询在线日志的总体信息: 
SQL> SELECT * FROM v$log;

GROUP#    THREAD#     SEQUENCE#    BYTES   MEMBERS     ARCHIVED  STATUS    FIRST_CHANGE#   FIRST_TIME

1     1   49    52428800      1    NO    CURRENT    1466615     07-1月 -11 
2     1   47    52428800      1    YES   INACTIVE   1434125     06-1月 -11 
3     1   48    52428800      1    YES   INACTIVE   1460403     07-1月 -11

当然,还可以通过ALTER DATABASE ADD 、delete等命令增加/修改/删除在线日志或日志组,具体操作可查看http://blog.csdn.net/robinson_0612/archive/2010/07/20/5749556.aspx

3、关于归档重做日志(Archive redo log)

其实,所谓的归档,就是指将在线日志进行归档、持久化到成固定的文件到硬盘,便于以后的恢复和查询。 
    当然,前提条件是数据库要处于归档模式。 
    
Oracle 11g 默认是为归档日志设定2个归档位置,这2个归档位置的的归档日志的内容完全一致,但文件名不同。

二、Oracle 开启归档日志以及关闭归档日志

racle数据库可以运行在2种模式下:归档模式(archivelog)和非归档模式(noarchivelog) 
归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,归档模式应该和相应的备份策略相结合,只有归档模式没有相应的备份策略只会带来麻烦。

本文简单介绍如何启用和关闭数据库的归档模式。

1.归档日志开启准备工作: 
1.进入dos窗口—>>> 菜单键+R,进入 运行 界面,输入cmd 
2.登录 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 
当前日志序列 51

5.关闭归档日志 
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

  1. Microsoft Windows [版本 6.1.7601]
  2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
  3.  
  4. C:\Users\Administrator>sqlplus/nolog
  5.  
  6. SQL*Plus: Release 11.2.0.1.0 Production on 星期三 6 22 11:14:30 2016
  7.  
  8. Copyright (c) 1982, 2010, Oracle. All rights reserved.
  9.  
  10. SQL> conn/as sysdba;
  11. 已连接。
  12. SQL> **shutdown immediate;**
  13. 数据库已经关闭。
  14. 已经卸载数据库。
  15. ORACLE 例程已经关闭。
  16. SQL> startup mount;
  17. ORACLE 例程已经启动。
  18.  
  19. Total System Global Area 1071333376 bytes
  20. Fixed Size 1375792 bytes
  21. Variable Size 679477712 bytes
  22. Database Buffers 385875968 bytes
  23. Redo Buffers 4603904 bytes
  24. 数据库装载完毕。
  25. SQL> alter database archivelog;
  26.  
  27. 数据库已更改。
  28.  
  29. SQL> alter database open;
  30.  
  31. 数据库已更改。
  32.  
  33. SQL> archive log list;
  34. 数据库日志模式 存档模式
  35. 自动存档 启用
  36. 存档终点 USE_DB_RECOVERY_FILE_DEST
  37. 最早的联机日志序列 49
  38. 下一个存档日志序列 51
  39. 当前日志序列 51
  40.  
  41. ---归档日志的关闭
  42. SQL> shutdown immediate;
  43. 数据库已经关闭。
  44. 已经卸载数据库。
  45. ORACLE 例程已经关闭。
  46. SQL> startup mount;
  47. ORACLE 例程已经启动。
  48.  
  49. Total System Global Area 1071333376 bytes
  50. Fixed Size 1375792 bytes
  51. Variable Size 679477712 bytes
  52. Database Buffers 385875968 bytes
  53. Redo Buffers 4603904 bytes
  54. 数据库装载完毕。
  55. SQL> alter database noarchivelog;
  56.  
  57. 数据库已更改。
  58.  
  59. SQL> alter database open;
  60.  
  61. 数据库已更改。
  62.  
  63. SQL> archive log list;
  64. 数据库日志模式 非存档模式
  65. 自动存档 禁用
  66. 存档终点 USE_DB_RECOVERY_FILE_DEST
  67. 最早的联机日志序列 49
  68. 当前日志序列 51
  69. SQL>

问题总结:

1. 直接进入就执行 , SQL> shutdown immediate; ORA-01012: not logged on 解决方法: 先登录 管理员权限 , 语句:conn/as sysdba;

2. 执行 开启归档日志提示错误: SQL> conn/as sysdba; 已连接。 SQL> alter database archivelog; alter database archivelog * 第 1 行出现错误: ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开

解决方法: 在开启归档日志之前,先执行关闭数据库链接:shutdown immediate 或者shutdown normal (2)执行 startup mount; (3)执行 alter database archivelog

三、归档日志已满解决方案

先使用以下几个命令可以查看当前归档日志文件的使用情况:

select * from v$recovery_file_dest;
select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
select * from v$flash_recovery_area_usage;
select * from v$version;

可以看到归档日志文件目录、最大值(已经设定为50G)、当前使用值

可以看到ARCHIVED LOG的使用率是0.28%,这是因为我已经删除归档日志文件了。在没有删除归档日志之前是99.65,表明归档日志已经使用了大部分的空间,占满了空间。

接着进入rman程序删除归档日志:

rman target 用户名/密码@数据库名
crosscheck archivelog all;
delete archivelog until time 'sysdate'; --删除所有日志
delete expired archivelog all;--删除过期日志

但是以后日志文件满了还是会同样执行这个操作,所以我们也可以扩大归档日志目录:

alter system set db_recovery_file_dest_size=81474836480;--设置使用空间大小
show parameter db_recovery_file_dest;--查看归档日志路径限额

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

  1. oracle归档日志管理

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

  2. oracle之 Oracle归档日志管理

    在Oracle中,数据一般是存放在数据文件中,不过数据库与Oracle最大的区别之一就是数据库可以在数据出错的时候进行恢复.这个也就是我们常见的Oracle中的重做日志(REDO FILE)的功能了. ...

  3. Oracle归档日志与非归档日志的切换及路径设置

    --==================== -- Oracle 归档日志 --==================== Oracle可以将联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的 ...

  4. ORACLE归档日志满了之后,如何删除归档日志

    当ORACLE归档日志满后如何正确删除归档日志 版权声明:本文为博主原创文章,未经博主允许不得转载. 当ORACLE 归档日志满了后,将无法正常登入ORACLE,需要删除一部分归档日志才能正常登入OR ...

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

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

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

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

  7. oracle归档日志关闭和打开

    查询归档日志状态 方法一 SQL> archive log list; 方法二 SQL> select name,log_mode from V$database; 打开归档日志 orac ...

  8. 修改Oracle归档日志方法

    修改Oracle归档日志的方法 Oracle默认安装的归档日志只有50M,在做大量操作的时候会经常切换日志文件,造成性能问题,下面是具体操作方法 1. 下面是查看现有归档日志大小:   SQL> ...

  9. 清除oracle归档日志

    清除oracle归档日志 1. 连接oracle报如下错误 ORA-00257: archiver error. Connect internal only, until freed 产生原因:出现O ...

随机推荐

  1. 个人学习SpringMVC总结

    好记性不如烂笔头! 核心:前端控制器 处理器映射器(HandleMapping) 处理器适配器(HandleAdapter) 视图解析器 流程: 用户从浏览器发起请求,发送到服务器(Tomcat),由 ...

  2. git中working tree, index, commit

    这三个名字可以简单理解为文件在本地仓库存在的三种不同的位置. 如下,是做commit提交两段提交过程,工作区(working tree),暂存区(index)和 branch(commit). wor ...

  3. HDU - 6582 Path (最短路+最小割)

    题意:给定一个n个点m条边的有向图,每条边有个长度,可以花费等同于其长度的代价将其破坏掉,求最小的花费使得从1到n的最短路变长. 解法:先用dijkstra求出以1为源点的最短路,并建立最短路图(只保 ...

  4. 弹出框 popover.js

    弹出框 popover.js 为任意元素添加一小块浮层,就像 iPad 上一样,用于存放非主要信息. 弹出框的标题和内容的长度都是零的话将永远不会被显示出来. 插件依赖 弹出框依赖 工具提示插件 ,因 ...

  5. Python服务器开发二:Python网络基础

    Python服务器开发二:Python网络基础   网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.包括: ...

  6. buunctf@reverse2

  7. 字典树Trie--实现敏感词过滤

    序言 Trie树 资料 https://blog.csdn.net/m0_37907797/article/details/103272967?utm_source=apphttps://blog.c ...

  8. UVA 10900 So do you want to be a 2^n-aire?

    #include<bits/stdc++.h> #include<stdio.h> #include<iostream> #include<cmath> ...

  9. Jmeter -- 同步定时器

    作用: 模拟并发. 设置一个阀值(请求数量),当请求数达到这个阀值时,允许请求同时发出.例如:想测试一座桥的并发(忽略载重等其他因素,只考虑通过),那么并发的请求就是类似于多少辆车可同时通过桥,而车辆 ...

  10. 计算机网络&http学习笔记持续整理

    http不常见状态码: 204: 请求处理成功,但是没有资源可返回. 206: 只返回请求资源的某一部分(客户端只想请求某一部分),响应报文中包含由Content-Range指定范围的实体内容. 30 ...