oracle日志管理

简介:
oracle 日志管理
一: Active (Current) and Inactive Redo Log File(当前活动和非活动的日志文件)
active(current):Redo log files that are required for instance recovery are called active redo log files
实例恢复需要该日志就叫活动的,或者叫当前的重做日志文件
inactive:Redo log files that are no longer required for instance recovery are called inactive redo log files
实例恢复时不需要的日志就叫inactive日志
二:Log Sequence Numbers
当发生日志切换并且lgwr后台进程开始写该日志文件,oracle数据库便给该日志文件分配一个新的日志序列号。
当数据库归档了该日志文件,则归档日志将会保有该日志序列号。
在线日志,或者归档日志被日志序列号唯一标识,当实例crash或者需要介质恢复时,数据库使用日志序列号以升序方式应用重做日志文件和必须的归档日志文件。
三:Creating Redo Log Groups
采用默认组号
ALTER DATABASE
ADD LOGFILE ('/oracle/CRM2/CRM/redo4a.log', '/oracle/CRM2/CRM/redo4b.log') SIZE 200M;
采用指定组号 (注意为了好管理不要跳跃性的指定你的组号)
ALTER DATABASE 
ADD LOGFILE GROUP 10 ('/oracle/CRM2/CRM/redo10a.log', '/oracle/CRM2/CRM/redo10b.log')
SIZE 200M;
四:Creating Redo Log Members
添加一个日志成员到日志组号2 注意事项:
必须指定日志文件名。
文件大小不需要指定,文件大小取决于已存在日志组指定的大小。
新日志成员的状态会从新添加时候的invalid到第一次使用时变为active
语句:
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/CRM2/CRM/redo2b.log' TO GROUP 2;
五:Relocating and Renaming Redo Log Members(迁移和重命名日志成员)
重命名日志成员步骤:
步骤1: Shutdown the database.
shutdown immediate
步骤2: Copy the redo log files to the new location.
The following example uses operating system commands (UNIX) to move the 
redo log members to a new location:
mv /source/log1a.rdo /ddestination/log1c.rdo
mv /source/log2a.rdo /destination/log2c.rdo
步骤3: Startup the database。
startup mount
步骤4: Rename the redo log members.
alter database
rename file  '/source/log1a.rdo', '/source/log2a.rdo' 
           to '/destination/log1c.rdo', '/destination/log2c.rdo';
步骤5:Open the database for normal operation.
The redo log alterations take effect when the database is opened.
alter database open
六:Dropping Redo Log Groups and Members
drop log group(restrictions):删除重做日志组的限制条件
限制一:instance 要求至少两个组,而不管组内成员个数
限制二:你可以丢弃一个状态为inactive状态的重做日志组,如果要丢弃当前的日志组,必须手动切换日志组
限制三:如果是归档模式,确定丢弃重做日志组之前,成员已经被归档,通过视图v$log 进行检查
select group#,archived,status from v$log;
    GROUP# ARC STATUS
---------- --- ----------------
         1 YES INACTIVE
         2 NO  CURRENT
         3 YES INACTIVE
         4 YES UNUSED
        10 YES UNUSED
语句:ALTER DATABASE DROP LOGFILE GROUP xx; 注意,该命令实际上不删除日志文件,需要用操作系统命令删除。
Dropping Redo Log Members
限制一:drop的日志成员不能是当前组或者活动组的成员
限制二:drop之前确保日志成员已经归档,如果数据库是归档模式的话
限制三:drop的成员属于活动日志组,则必须 force a log switch
语句:ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log3c.rdo';
七:Forcing Log Switches
语句:alter system switch logfile;
八: Clearing a Redo Log File
当数据库一直open时,可能会出现日志损坏,最终挂起数据库,alter database clear logfile 语句能够用于重新初始化这个日志文件。
ALTER DATABASE CLEAR LOGFILE GROUP 3;
如果该日志文件没有归档,则
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;
九:oracle是如何切换日志的?
当前日志状态如下( 注意红色部分,当前日志序列号最大是42,而日志组6中序列号最小为37
SQL> select group#,sequence#,archived,status from v$log;
    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
           1         38 YES INACTIVE
         2         40 YES INACTIVE
         3         41 YES INACTIVE
          4         42 NO  CURRENT
         5         39 YES INACTIVE
         6         37 YES INACTIVE
切换日志组:
SQL> alter system switch logfile;
System altered.
再查询日志组状态:
SQL> select group#,sequence#,archived,status from v$log;
    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1         38 YES INACTIVE
         2         40 YES INACTIVE
         3         41 YES INACTIVE
         4         42 YES ACTIVE
         5         39 YES INACTIVE
         6         43 NO  CURRENT
总结:oracle总是找日志组中sequence#字段值为最小的日志组,做为下一个当前日志组。
十:重做日志恢复(见如下例1、例2、例3)
例1:数据库处于open状态,意外丢失inactive日志组所有成员
运行如下命令,不过该命令执行后,日志文件状态处于unuse状态,需要重启数据库 日志组才能真正生效。
ALTER DATABASE CLEAR LOGFILE GROUP 3;
或者重建日志文件
SQL> alter database drop logfile group 3;
Database altered.
SQL> alter database add logfile group 3 '/oracle/CRM2/CRM/redo03.log' size 200m  reuse;
Database altered.
SQL> select group#,archived,status from v$log;
    GROUP# ARC STATUS
---------- --- ----------------
         1 YES INACTIVE
         2 NO  CURRENT
         3 YES UNUSED
例2:如果数据库关闭,再open时出现日志组所有成员丢失的情况有如下两种情景:
情景一:非活动日志组所有成员全部损毁
关闭前日志状态如下
SQL> select group#,archived,status from v$log;
    GROUP# ARC STATUS
---------- --- ----------------
         1 YES INACTIVE
         2 YES INACTIVE
          3 NO  CURRENT
当数据库关闭后,打开数据库提示
SQL> startup
ORACLE instance started.
Total System Global Area  322961408 bytes
Fixed Size                  2020480 bytes
Variable Size              92277632 bytes
Database Buffers          222298112 bytes
Redo Buffers                6365184 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/oracle/CRM2/CRM/redo01.log'

当前数据库状态
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
当前日志状态如下所示:
SQL> select group#,archived,status from v$log;
    GROUP# ARC STATUS
---------- --- ----------------
          1 YES INACTIVE
         3 NO  CURRENT
         2 YES INACTIVE
查询redo01.log所在的日志组如下所示:
SQL> select group#,member from v$logfile;
    GROUP# MEMBER
---------- ----------------------------------------
         3 /oracle/CRM2/CRM/redo03.log
         2 /oracle/CRM2/CRM/redo02.log
          1 /oracle/CRM2/CRM/redo01.log
         2 /oracle/CRM2/CRM/redo2b.log
运行alter database clear logfile group 1 重新初始化创建日志组1如下所示:
SQL> alter database clear logfile group 1;
Database altered.
重新打开数据库如下:
SQL> alter database open;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE
情景二:数据库open时当前联机日志文件丢失
SQL> startup
ORACLE instance started.
Total System Global Area  322961408 bytes
Fixed Size                  2020480 bytes
Variable Size              92277632 bytes
Database Buffers          222298112 bytes
Redo Buffers                6365184 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/oracle/CRM2/CRM/redo01.log'
查询当前数据库日志状态发现当前日志组1所有成员丢失如下所示:
SQL> select group#,archived,status from v$log;
    GROUP# ARC STATUS
---------- --- ----------------
          1 NO  CURRENT
         3 YES INACTIVE
         2 YES INACTIVE
SQL> select group#,member from v$logfile;
    GROUP# MEMBER
---------- ----------------------------------------
         3 /oracle/CRM2/CRM/redo03.log
         2 /oracle/CRM2/CRM/redo02.log
          1 /oracle/CRM2/CRM/redo01.log
         2 /oracle/CRM2/CRM/redo2b.log
此时数据库启动状态如下:   
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
此时若执行 clear unarchived logfile会报如下错误:
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/oracle/CRM2/CRM/redo01.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
由于关闭数据库之前数据文件处于一致性状态所以执行基于取消的不完全恢复。
SQL>  recover database until cancel;
Media recovery complete.
用resetlogs打开数据库时自动创建丢失的日志文件
SQL>  alter database open resetlogs;
Database altered.
SQL> select group#,member from v$logfile;
    GROUP# MEMBER
---------- ----------------------------------------
         3 /oracle/CRM2/CRM/redo03.log
         2 /oracle/CRM2/CRM/redo02.log
         1 /oracle/CRM2/CRM/redo01.log
         2 /oracle/CRM2/CRM/redo2b.log
例3:数据库处于open状态意外丢失当前联机日志
当前数据库日志状态如下:
SQL> select group#,archived,status from v$log;
    GROUP# ARC STATUS
---------- --- ----------------
         1 NO  CURRENT
         2 YES INACTIVE
         3 YES INACTIVE
删除当前日志如下
[root@oracle CRM]# rm -rf redo01.log
切换当前日志组,触发报错,错误信息位于alert文件中如下:
SQL> alter system switch logfile;
System altered.
ORA-16038: log 1 sequence# 20 cannot be archived
ORA-00312: online log 1 thread 1: '/oracle/CRM2/CRM/redo01.log'
Wed Oct 17 01:50:35 2012
SQL> alter database clear unarchived logfile group 1;   ( 注意这里,如果是非当前日志组丢失则删除日志组后直接重建即可,不需要运行此命令处理)
Database altered.
SQL> select group#,archived,status from v$Log;
    GROUP# ARC STATUS
---------- --- ----------------
         1 YES UNUSED
         2 YES INACTIVE
         3 NO  CURRENT
   
此时需要注意:
1  如果直接drop当前日志组直接重建会报如下错误
SQL> alter database drop logfile group 1;
alter database drop logfile group 1
*
ERROR at line 1:
ORA-00350: log 1 of instance CRM (thread 1) needs to be archived
ORA-00312: online log 1 thread 1: '/oracle/CRM2/CRM/redo01.log'
2  clear unarchived logfile group 1 后,日志组1数据库还不能使用,需要重新启动数据库或者重建日志组1
重建步骤如下:
SQL> alter database drop logfile group 1;
Database altered.
SQL> alter database  add logfile group 1 '/oracle/CRM2/CRM/redo01.log' size 200m reuse;
Database altered.









本文转自 zhangxuwl 51CTO博客,原文链接:http://blog.51cto.com/jiujian/1031329,如需转载请自行联系原作者
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
监控 Oracle 关系型数据库
Mysql、Oracle审计日志的开启
通过上述步骤,可以在 MySQL 和 Oracle 数据库中启用和配置审计日志。这些日志对于监控数据库操作、提高安全性和满足合规性要求非常重要。确保正确配置审计参数和策略,定期查看和分析审计日志,有助于及时发现并处理潜在的安全问题。
943 11
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
470 1
【赵渝强老师】Oracle的控制文件与归档日志文件
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
459 1
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
378 0
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
841 7
|
存储 SQL Oracle
关系型数据库Oracle归档日志备份
【7月更文挑战第19天】
812 5
|
SQL Oracle 关系型数据库
探索 Linux 命令 `db_archive`:Oracle 数据库归档日志的工具
探索 Linux 中的 `db_archive`,实际与 Oracle 数据库归档日志管理相关。在 Oracle 中,归档日志用于恢复,当在线重做日志满时自动归档。管理员可使用 SQL*Plus 查看归档模式,通过 `RMAN` 进行备份和恢复操作。管理归档日志需谨慎,避免数据丢失。了解归档管理对 Oracle 管理员至关重要,确保故障时能快速恢复数据库。
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
677 0
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL DataWorks Oracle
DataWorks产品使用合集之datax解析oracle增量log日志该如何操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
281 0

推荐镜像

更多