oracle日志文件
oracle redo详解
oracle redo详解标题,深入理解Oracle Redo日志。
Oracle数据库中的Redo日志是一个非常重要的概念,它对于数据库的持久性和恢复能力起着至关重要的作用。
在本文中,我们将深入探讨Oracle Redo日志的概念、作用以及相关的重要知识点。
Redo日志是Oracle数据库引擎中的一种重要的日志文件,它记录了数据库中发生的所有变更操作,如INSERT、UPDATE、DELETE 等。
它的作用主要有两个方面:1. 数据持久性,当数据库执行一条更新操作时,首先将变更记录到Redo日志中,然后再将变更应用到对应的数据文件中。
这样即使在数据库发生故障的情况下,可以通过Redo日志将丢失的数据重新应用到数据库中,从而保证数据的持久性。
2. 数据恢复,Redo日志还可以用于数据库的恢复操作。
当数据库发生故障需要进行恢复时,可以通过Redo日志中的记录来重新执行数据库中的变更操作,从而将数据库恢复到故障发生前的状态。
Redo日志的组成包括以下几个重要的组件:1. Redo日志文件,这是Redo日志的物理存储文件,通常位于数据库的数据目录中。
Redo日志文件的大小和数量可以通过数据库参数进行配置。
2. Redo日志缓冲区,这是一个内存区域,用于暂时存储待写入Redo日志文件的变更记录。
当数据库执行更新操作时,相关的变更记录首先被写入Redo日志缓冲区,然后由后台进程将其刷新到Redo日志文件中。
3. 日志切换,当Redo日志文件已满或者达到一定的时间间隔时,Oracle数据库会自动进行日志切换操作,即将当前正在写入的Redo日志文件切换为下一个可用的Redo日志文件。
这样可以保证Redo日志文件的循环使用,避免Redo日志文件无限增长导致存储空间不足。
总结来说,Oracle Redo日志是数据库中非常重要的一个组成部分,它对于数据库的持久性和恢复能力起着至关重要的作用。
通过深入理解Redo日志的概念、作用以及相关的重要知识点,可以更好地理解Oracle数据库引擎的工作原理,从而更好地管理和维护数据库系统。
深入分析Oracle数据库日志文件
作为Oracle DBA,我们有时候需要追踪数据误删除或用户的恶意操作情况,此时我们不仅需要查出执行这些操作的数据库账号,还需要知道操作是由哪台客户端(IP地址等)发出的。
针对这些问题,一个最有效实用而又低成本的方法就是分析Oracle数据库的日志文件。
本文将就Oracle日志分析技术做深入探讨。
一、如何分析即LogMiner解释从目前来看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner来进行,Oracle数据库的所有更改都记录在日志中,但是原始的日志信息我们根本无法看懂,而LogMiner就是让我们看懂日志信息的工具。
从这一点上看,它和tkprof差不多,一个是用来分析日志信息,一个则是格式化跟踪文件。
通过对日志的分析我们可以实现下面的目的:1、查明数据库的逻辑更改;2、侦察并更正用户的误操作;3、执行事后审计;4、执行变化分析。
不仅如此,日志中记录的信息还包括:数据库的更改历史、更改类型(INSERT、UPDATE、DELETE、DDL等)、更改对应的SCN号、以及执行这些操作的用户信息等,LogMiner在分析日志时,将重构等价的SQL语句和UNDO语句(分别记录在V$LOGMNR_CONTENTS视图的SQL_REDO和SQL_UNDO中)。
这里需要注意的是等价语句,而并非原始SQL语句,例如:我们最初执行的是“delete a where c1 <>'cyx';”,而LogMiner重构的是等价的6条DELETE语句。
所以我们应该意识到V$LOGMNR_CONTENTS视图中显示的并非是原版的现实,从数据库角度来讲这是很容易理解的,它记录的是元操作,因为同样是“delete a where c1 <>'cyx';”语句,在不同的环境中,实际删除的记录数可能各不相同,因此记录这样的语句实际上并没有什么实际意义,LogMiner重构的是在实际情况下转化成元操作的多个单条语句。
oracle 归档日志文件路径设置
oracle 归档日志文件路径设置2012-05-23 15:37:42| 分类:oracle | 标签:oracle log_archive_dest |举报|字号订阅1:首先查看是否是归档模式运行archive log list 命令(必须以sys身份运行)运行结果如下;2:通过上面的信息可以看出已经是归档模式了(如果是非归档模式参考博主的另一篇文章有关“归档日志与非归档日志切换”), 查看归档日志文件存放在哪个位置运行show parameter log_archive_dest 命令运行结果如下;3: 在上面的信息中可以看到,log_archive_dest 的路径为空,我们可以设置这个路径来存放归档日志文件,运行alter systemset log_archive_dest='d:/xxx/xxx' scope=spfile;(xxx代表存放路径,最好指定scope=spfile 否则的话重启db,则配置不会生效); 运行结果会出现在如下错误:第1 行出现错误:ORA-02097: 无法修改参数, 因为指定的值无效ORA-16018: 无法将LOG_ARCHIVE_DEST 与LOG_ARCHIVE_DEST_n或DB_RECOVERY_FILE_DEST 一起使用出现错误的原因是db_recovery_file_dest的参数已经被设置了,去查询一下看看,果真如此。
4: 查看db_recovery_file_dest 参数设置,运行showparameter db_recovery_file_dest 命令运行结果如下;可以看到已经默认设置了归档的路径。
5:db_recovery_file_dest是缺省的归档位置,下面把它设置为"空",然后设置log_archive_dest参数,指定另外一个非缺省的参数重启db 如下图运行shutdown immediate;运行startup mount;运行alter database open;运行show parameter db_recovery_file_dest 查看是否已经设置为空运行结果如下图可以看到已经设置为空下面接着使用alter system set log_archive_dest='xxxxxx' scope = spfile 设置归档日志文件路径运行结果如下图运行show parameter log_archive_dest 命令查看归档日志文件路径是否已经设置成功运行结果如下图可以看到已经设置成功执行alter system archive log current 命令进行手动归档运行结果如下查看归档日志文件,看看是否已经进行归档运行命令select name,completion_time from v$archived_log; 结果如下可以看到在些文件夹下面生成了归档日志文件。
使用Oracle的外部表查询警告日志文件
使用Oracle的外部表查询警告日志文件从Oracle9i开始,Oracle的外部表技术(Oracle External Tables)被极大的增强,通过外部表访问外部数据增强了Oracle数据库和外部数据源进行数据交互的能力,对于数据仓库和ETL来说,这些增强极大的方便了数据访问。
对于DBA来说,最常见一个例子是可以使用外部表来访问警告日志文件或其他跟踪文件.以下一个例子用来说明外部表的用途。
首先需要创建一个Directory:[oracle@jumper oracle]$ sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.4.0 - Production on Sun Oct 15 21:42:28 2006Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.Connected to:Oracle9i Enterprise Edition Release 9.2.0.4.0 - ProductionWith the Partitioning optionJServer Release 9.2.0.4.0 - ProductionSQL> create or replace directory bdump2 as '/opt/oracle/admin/eygle/bdump';Directory created.SQL> col DIRECTORY_PATH for a30SQL> col owner for a10SQL> select * from dba_directories;OWNER DIRECTORY_NAME DIRECTORY_PATH---------- ------------------------------ ------------------------------SYS BDUMP /opt/oracle/admin/eygle/bdump然后创建一个外部表:SQL> create table alert_log ( text varchar2(400) )2 organization external (3 type oracle_loader4 default directory BDUMP5 access parameters (6 records delimited by newline7 nobadfile8 nodiscardfile9 nologfile10 )11 location('alert_eygle.log')12 )13 reject limit unlimited14 /Table created.然后我们就可以通过外部表进行查询警告日志的内容:SQL> select * from alert_log where rownum < 51;TEXT----------------------------------------------------------------------------------------- Mon Jun 26 12:00:24 2006Starting ORACLE instance (normal)Mon Jun 26 12:00:25 2006WARNING: EINVAL creating segment of size 0x0000000008c00000 fix shm parameters in /etc/system or equivalentLICENSE_MAX_SESSION = 0LICENSE_SESSIONS_WARNING = 0SCN scheme 2Using log_archive_dest parameter default valueLICENSE_MAX_USERS = 0SYS auditing is disabledStarting up ORACLE RDBMS Version: 9.2.0.4.0.System parameters with non-default values:processes = 150timed_statistics = TRUEshared_pool_size = 104857600large_pool_size = 0java_pool_size = 0control_files = /opt/oracle/oradata/eygle/control01.ctldb_block_size = 8192db_cache_size = 16777216db_cache_advice = ONcompatible = 9.2.0.0.0db_file_multiblock_read_count= 16fast_start_mttr_target = 300log_checkpoints_to_alert = TRUEundo_management = AUTOundo_tablespace = UNDOTBS1undo_retention = 10800remote_login_passwordfile= EXCLUSIVEdb_domain =instance_name = eyglejob_queue_processes = 10hash_join_enabled = TRUEbackground_dump_dest = /opt/oracle/admin/eygle/bdumpuser_dump_dest = /opt/oracle/admin/eygle/udumpcore_dump_dest = /opt/oracle/admin/eygle/cdumpsort_area_size = 524288db_name = eygleopen_cursors = 500star_transformation_enabled= FALSEquery_rewrite_enabled = FALSEpga_aggregate_target = 52428800aq_tm_processes = 0PMON started with pid=2DBW0 started with pid=3LGWR started with pid=4CKPT started with pid=5SMON started with pid=6RECO started with pid=750 rows selected.SQL>如果我们需要查看数据库中曾经出现过的ORA-错误,那么可以执行如下查询: SQL> select * from alert_log where text like 'ORA-%';TEXT----------------------------------------------------------------------------------- ORA-1652: unable to extend temp segment by 128 in tablespace TEMP ORA-1113 signalled during: alter database open...ORA-1113 signalled during: alter database datafile 3 online...ORA-09968: scumnt: unable to lock fileORA-1102 signalled during: ALTER DATABASE MOUNT...ORA-1507 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/users01.dbf'ORA-27037: unable to obtain file statusORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/users01.dbf'TEXT----------------------------------------------------------------------------------- ORA-01157: cannot identify/lock data file 4 - see DBWR trace fileORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'ORA-27037: unable to obtain file statusORA-01157: cannot identify/lock data file 4 - see DBWR trace fileORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-01157: cannot identify/lock data file 4 - see DBWR trace fileORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'ORA-27037: unable to obtain file statusORA-01157: cannot identify/lock data file 4 - see DBWR trace fileORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'TEXT----------------------------------------------------------------------------------- ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1113 signalled during: alter database open...ORA-01157: cannot identify/lock data file 4 - see DBWR trace fileORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'ORA-27037: unable to obtain file statusORA-01157: cannot identify/lock data file 4 - see DBWR trace fileORA-1113 signalled during: alter database open...ORA-1122 signalled during: alter database open...ORA-283 signalled during: ALTER DATABASE RECOVER database ...ORA-1122 signalled during: alter database open...TEXT-----------------------------------------------------------------------------------ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1113 signalled during: ALTER DATABASE OPEN...ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1122 signalled during: ALTER DATABASE OPEN...ORA-1503 signalled during: CREATE CONTROLFILE REUSE DATABASE "EYGLE" NORESETL... ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1991 signalled during: ALTER DATABASE MOUNT...ORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'ORA-01115: IO error reading block from file 4 (block # 1)ORA-27069: skgfdisp: attempt to do I/O beyond the range of the fileORA-01122: database file 1 failed verification checkTEXT-----------------------------------------------------------------------------------ORA-01110: data file 1: '/opt/oracle/oradata/eygle/system01.dbf'ORA-01207: file is more recent than controlfile - old controlfileORA-1122 signalled during: alter database open...ORA-283 signalled during: ALTER DATABASE RECOVER database using backup cont... ORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'ORA-01115: IO error reading block from file 4 (block # 1)ORA-27069: skgfdisp: attempt to do I/O beyond the range of the fileORA-01194: file 1 needs more recovery to be consistentORA-1194 signalled during: alter database open resetlogs...ORA-283 signalled during: ALTER DATABASE RECOVER datafile 1 ...TEXT-----------------------------------------------------------------------------------ORA-283 signalled during: ALTER DATABASE RECOVER database using backup cont... ORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'ORA-01115: IO error reading block from file 4 (block # 1)ORA-27069: skgfdisp: attempt to do I/O beyond the range of the fileORA-01194: file 1 needs more recovery to be consistentORA-01110: data file 1: '/opt/oracle/oradata/eygle/system01.dbf'ORA-1194 signalled during: alter database open resetlogs...ORA-283 signalled during: ALTER DATABASE RECOVER datafile 1 ...ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1589 signalled during: ALTER DATABASE OPEN...ORA-01110: data file 4: '/opt/oracle/oradata/eygle/eygle01.dbf'TEXT-----------------------------------------------------------------------------------ORA-01115: IO error reading block from file 4 (block # 1)ORA-27069: skgfdisp: attempt to do I/O beyond the range of the fileORA-01194: file 1 needs more recovery to be consistentORA-01110: data file 1: '/opt/oracle/oradata/eygle/system01.dbf'ORA-1194 signalled during: alter database open resetlogs...ORA-1109 signalled during: alter database close...ORA-1503 signalled during: CREATE CONTROLFILE REUSE DATABASE "EYGLE" NORESETL... ORA-1507 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1113 signalled during: alter database open...ORA-00202: controlfile: '/opt/oracle/oradata/eygle/control01.ctl'ORA-27037: unable to obtain file statusTEXT----------------------------------------------------------------------------------- ORA-205 signalled during: ALTER DATABASE MOUNT...ORA-1507 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-01501: CREATE DATABASE failedORA-01526: error in opening file '?/rdbms/admin/sql.bsq'ORA-07391: sftopn: fopen errorORA-01526: error in opening file ''ORA-1092 signalled during: CREATE DATABASE eygleORA-1079 signalled during: ALTER DATABASE MOUNT...ORA-1507 signalled during: alter database open...ORA-214 signalled during: alter database mount...ORA-1507 signalled during: ALTER DATABASE CLOSE NORMAL...TEXT----------------------------------------------------------------------------------- ORA-214 signalled during: ALTER DATABASE MOUNT...ORA-214 signalled during: alter database mount...ORA-1113 signalled during: ALTER DATABASE OPEN...ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/eygle02.dbf'ORA-27037: unable to obtain file statusORA-1113 signalled during: ALTER DATABASE OPEN...ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/eygle02.dbf'ORA-27037: unable to obtain file statusORA-1113 signalled during: alter database open...TEXT-----------------------------------------------------------------------------------ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/eygle02.dbf'ORA-27037: unable to obtain file statusORA-283 signalled during: ALTER DATABASE RECOVER database ...ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1100 signalled during: alter database mount...ORA-1178 signalled during: alter database create datafile '/opt/oracle/produc...ORA-1516 signalled during: alter database create datafile '/opt/oracle/oradat...ORA-1991 signalled during: ALTER DATABASE MOUNT...ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/eygle02.dbf'TEXT-----------------------------------------------------------------------------------ORA-27037: unable to obtain file statusORA-283 signalled during: ALTER DATABASE RECOVER database ...ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/eygle02.dbf'ORA-27037: unable to obtain file statusORA-283 signalled during: ALTER DATABASE RECOVER database using backup cont... ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1991 signalled during: ALTER DATABASE MOUNT...ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/users01.dbf'ORA-27037: unable to obtain file statusTEXT-----------------------------------------------------------------------------------ORA-283 signalled during: ALTER DATABASE RECOVER database ...ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/users01.dbf'ORA-27037: unable to obtain file statusORA-283 signalled during: ALTER DATABASE RECOVER database using backup cont... ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/users01.dbf'ORA-27037: unable to obtain file statusORA-283 signalled during: ALTER DATABASE RECOVER database using backup cont... ORA-279 signalled during: ALTER DATABASE RECOVER database using backup cont... ORA-308 signalled during: ALTER DATABASE RECOVER CONTINUE DEFAULT ...TEXT-----------------------------------------------------------------------------------ORA-308 signalled during: ALTER DATABASE RECOVER CONTINUE DEFAULT ...ORA-1547 signalled during: ALTER DATABASE RECOVER CANCEL ...ORA-1589 signalled during: alter database open...ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1503 signalled during: CREATE CONTROLFILE REUSE DATABASE "EYGLE" NORESETL... ORA-1178 signalled during: alter database create datafile '/opt/oracle/produc...ORA-1991 signalled during: ALTER DATABASE MOUNT...ORA-01157: cannot identify/lock data file 3 - see DBWR trace fileORA-01110: data file 3: '/opt/oracle/oradata/eygle/eygle02.dbf'ORA-27037: unable to obtain file statusORA-1157 signalled during: alter database open...TEXT-----------------------------------------------------------------------------------ORA-1113 signalled during: alter database open...ORA-1991 signalled during: ALTER DATABASE MOUNT...ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1031 signalled during: alter database open...ORA-3217 signalled during: ALTER TABLESPACE TEMP DEFAULT STORAGE (INITIAL 10M... ORA-1507 signalled during: alter database close...ORA-1507 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1507 signalled during: alter database close normal...ORA-1507 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1106 signalled during: alter database dismount...ORA-1531 signalled during: alter database open...TEXT-----------------------------------------------------------------------------------ORA-1531 signalled during: alter database open...ORA-1531 signalled during: alter database open...ORA-1531 signalled during: alter database open...ORA-1531 signalled during: alter database open...ORA-1109 signalled during: alter database close...ORA-1507 signalled during: alter database close...ORA-1507 signalled during: ALTER DATABASE CLOSE NORMAL...ORA-1185 signalled during: alter database add logfile group 6ORA-350 signalled during: alter database drop logfile group 3...163 rows selected.SQL>。
oracle redo日志详解
max_dump_file_size string UNLIMITED
shadow_core_dump string partial
user_dump_dest string /u01/app/oracle/admin/orcl/udump
由LGWR后台进程同时将日志内容写入到一个组的所有成员
LGWR的触发条件
在事务提交的时候(COMMIT)
Redo Log Buffer 三分之一满
Redo Log Buffer 多于一兆的变化记录
--=========================================
-- Oracle 联机重做日志文件(ONLINE LOG FILE)
--=========================================
转载位置: /robinson_0612/article/details/5749556
9.删除日志成员
不能删除组内的唯一一个成员
不能删除处于active 和current 状态组内的成员
删除处于active 和current 状态组内的成员,应使用日志切换使其处于INACTIVE状态后再删除
对于组内如果一个成员为NULL 值,一个为INVALID,且组处入INACTIVE,仅能删除INVALID状态成员
处于归档模式的联机日志,LSN号在归档时也被写入到归档日志之中
4.日志文件的工作方式
日志文件采用按顺序循环写的方式
当一组联机日志组写满,LGWR则将日志写入到下一组,当最后一组写满则从第一组开始写入
写入下一组的过程称为日志切换
user_dump_dest -->用户跟踪日志
Oracle特殊类型文件
Oracle 特殊类型文件Oracle 还提供了其他一些类型的文件,如参数文件、归档日志文件、跟踪和密码文件等。
本节将对这些类型的文件进行简单地介绍。
1.归档日志文件Oracle 利用重做日志文件记录对数据库所做的修改,但是重做日志文件是以循环方式使用的,在重新写入重做日志文件时,其中原来保存的信息将被覆盖。
如果能够将所有的重做记录永久地保留下,就可以完整地记录数据库的全部修改过程。
这可以通过对重做日志文件进行归档来实现。
在重做日志文件被覆盖之前,Oracle 能够将已经写满的重做日志文件通过复制操作系统文件的方式保存到指定的位置。
保存下来的重做日志文件的集合称为“归档重做日志”,复制的过程称为“归档”。
Oracle 数据库可以运行在两种模式之中,归档模式和不归档模式。
只有数据库处于归档模式下,系统才会对重做日志文件执行归档操作,归档操作是由后台进程ACRn 自动完成。
当数据库运行在归档模式下,归档重做日志文件会占用大量的硬盘空间。
也就是说,数据库在归档模式下是牺牲硬盘空间来获取数据的安全性。
2.参数文件在Oracle 数据库系统中,参数文件包含了数据库的配置信息。
数据库实例在启动之前,Oracle 数据库系统首先会读取这些参数文件中设置的参数,并根据初始化参数文件中设置的参数来配置实例的启动。
参数文件包括文本参数文件和服务器参数文件两种类型。
在Windows 平台中,服务器参数文件的名称格式为SPFILE<SID>.ora ,文本参数的名称格式为init<SID>.ora ,其中SID 为数据库实例名。
用户可以通过如下三种方法查看数据库中参数值:● 查看init<SID>.ora 文件。
该参数文件是以文本形式存储参数,用户可以直接打开该参数文件查看数据库参数。
● 查询视图V$PARAMETER 。
可利用该动态性能视图来确定参数的默认值是否修改过,以及是否可以用ALTER SYSTEM 和ALTER SESSION 命令修改。
Oracle归档日志文件
Oracle归档⽇志⽂件今天数据群有⼈反应⽹站不能正常打开,经检查Oracle数据库远程连不上,提⽰信息:ORA-00257: archiver error. Connect internal only, until freed。
可能是archivelog满了。
以前学习SQL只关注CRUD,对⽇志了解甚少,此次宕机虽然对⽣成没有造成恶劣影响,但也是因为业务不熟悉所致,特花⼀天时间学习并记录Oracle⽇志归档功能。
.以下内容针对没有使⽤Oracle ASM磁盘组情况,使⽤了Oracle ASM磁盘组的情况以后分析。
Oracle⽇志操作模式分为两种:ARCHIVELOG、NOARCHIVELOG连接Oracle终端windows系统:sqlplusLinux系统:先登录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。
oracle日志位置
audit日志:审计的信息,对应系统初始化参数文件参数audit_file_dest
对应的就是它的位置。
redo 日志:存放数据库的更改信息,select member from v$logfile;member就代表它的位置
归档日志:redo日志的历史备份,select * from v$parameter where name like 'log_archive_dest%'; 它的value的值就是位置
பைடு நூலகம்
show parameter spfile;查看当前系统加载的参数文件
因为spfile.ora文件为二进制文件,手动修改spfile.ora后,oracle无法识别,也就无法启动了。解决办法如下:
1。找到pfile文件:在10.0.2\admin\实例名\pfile\文件夹下有个init.ora.xxxxxxxxxxx 文件,该文件为带时间戳的pfile文件,将时间戳去掉,变成init.ora文件。
3。将新生成的文件spfileSID.ora拷贝到 "10.2.0\db_1\database\”,目录下覆盖原文件,如果存在initSID.ora文件请重命名。
4。在管理工具-服务中重新启动oracle系列服务,即可解决上述问题。
2。开始-运行-cmd
>sqlplus /nolog
sql>conn 用户名/密码 as sysdba
sql>startup pfile='10.0.2\admin\实例名\pfile\init.ora';
启动成功后
sql>create spfile='path/spfileSID.ora' from pfile='10.0.2\admin\实例名\pfile\init.ora';
oracle 10g 11g日志文件路径
oracle 10g 11g日志文件路径2014年5月22日10:55Oracle数据库的最常用问题定位日志是alert日志,Oracle数据库的日志文件alert_$ORACLE_SID.log记录了重作日志的转换,数据库启动和关闭,数据库结构的改变,回退段的修改,死锁,内部错误等信息。
1. 在Oracle 10g 与9i及其以前的版本中,数据库日志文件的路径是:$ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log2. 从oracle11g 开始,oracle数据库以XML与传统的文本两种格式提供Alert 日志。
新的日志位置由Automatic Diagnostic Repository (ADR) 決定。
可以通过新的初始化参数DIAGNOSTIC_DEST 控制ADR BASE 的位置。
SYS@yt>show parameter diagnostic_destNAME TYPE VALUE----------------------------------------------------------------------------diagnostic_dest string/u01如果沒有设定这个初始化参数的位置,而设置ORACLE_BASE 环境参数的话,那么,则ORACLE_HOME/log 即为DIAGNOSTIC_DEST。
11gOracle数据库的日志文件的路径是:$ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace11g Alert log XML文件位置:SYS@yt>select value from v$diag_info where name ='Diag Alert';11g Alert log 文本文件位置:SYS@yt>select value from v$diag_info where name ='Diag Trace';分区新分区1 的第1 页。
oracle 归档日志概念解释
oracle 归档日志概念解释在Oracle数据库中,归档日志(Archived Logs)是一种重要的数据库日志,用于记录数据库发生的所有变更操作,以便在系统故障或数据损坏时进行数据库恢复。
以下是有关归档日志的一些关键概念和解释:1. 日志文件:Oracle数据库通过日志文件(Redo Log)记录所有对数据库的变更操作。
这包括插入、更新和删除操作。
日志文件的作用是保留数据库的变更历史,以便在需要时进行恢复。
2. 在线日志和归档日志:日志文件分为在线日志和归档日志两种类型。
在线日志包含当前正在进行的事务的日志信息,而归档日志包含已经完成的事务的日志信息。
当在线日志满了或发生特定的切换事件时,其中的日志会被归档到归档目录中。
3. 归档目录:归档日志被存储在一个被称为归档目录(Archive Destination)的特定位置。
这可以是本地磁盘、网络位置或远程服务器。
在配置归档目录时,确保有足够的磁盘空间存储归档日志,因为这对数据库的正常运行和故障恢复至关重要。
4. 日志切换:当在线日志文件满了或发生某些事件时,数据库会执行一个日志切换(Log Switch)。
这时,当前的在线日志文件会被标记为不可用,并且一个新的在线日志文件会开始记录新的变更。
同时,旧的在线日志文件会被归档。
5. 数据库恢复:归档日志对数据库的恢复非常关键。
如果数据库发生故障,系统可以利用归档日志中的信息,从最后一个完整备份以来的任何时间点将数据库还原到一致的状态。
这种恢复过程称为“介质恢复”(Media Recovery)。
总的来说,归档日志是Oracle数据库中一项关键的功能,它确保了数据库的可靠性和一致性,同时提供了故障恢复的能力。
oracle日志查看
需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程’dbms_logmrn.start_logmnr’这个会话的生命期中存在。这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。
V$LOGMNR_CALLBACK Synonym for V_$LOGMNR_CALLBACK
V$LOGMNR_CONTENTS Synonym for V_$LOGMNR_CONTENTS
V$LOGMNR_DICTIONARY Synonym for V_$LOGMNR_DICTIONARY
PL/SQL procedure successfully completed
2、创建要分析的日志文件列表
1).创建分析列表,即所要分析的日志
SQL>execute dbms logmnr.add logfile(LogFileName => ‘/data1/oracle/oradata/akazamdb/redo01.log’,Options => dbms_logmnr.new);
GV$LOGMNR_DICTIONARY Synonym for GV_$LOGMNR_DICTIONARY
GV$LOGMNR_LOGFILE Synonym for GV_$LOGMNR_LOGFILE
GV$LOGMNR_LOGS Synonym for GV_$LOGMNR_LOGS
oracle重做日志文件和归档日志
数据库恢复的原理
当数据库发生故障时,可以利用重做 日志文件来进行恢复。Oracle会根据 重做日志文件中的记录,重新执行对 数据库所做的更改,从而将数据库恢 复到一致的状态。
04 Oracle重做日志文件和归 档日志的管理和维护
日志文件的备份与恢复
备份策略
制定定期备份和增量备份策略,确保重做日志文件和归档日志的安全。
恢复方法
在发生故障时,根据备份情况选择适当的恢复方法,如全量恢复或增量恢复。
日志文件的清理与维护
清理过期日志
定期清理过期或不再需要的日志文件 ,释放存储空间。
Oracle重做日志文件和归档日志
contents
目录
• Oracle重做日志文件 • 归档日志 • Oracle重做日志文件和归档日志的关系 • Oracle重做日志文件和归档日志的管理
和维护 • Oracle重做日志文件和归档日志的故障
处理
ቤተ መጻሕፍቲ ባይዱ
01 Oracle重做日志文件
重做日志文件的作用
数据恢复
THANKS FOR WATCHING
感谢您的观看
存储容量
需要合理规划存储空间,确保有足够的空间存储归档日志文件,避 免空间不足导致数据库故障。
归档日志的恢复
恢复方法
当数据库发生故障时,可以使用归档日志进行恢复。可以选择完全恢复或部分恢复,根据需要选择相应的归档日志文 件。
恢复过程
在恢复过程中,需要按照时间顺序应用归档日志文件,确保数据的一致性。可以使用RMAN(Oracle Recovery Manager)进行自动恢复或手动恢复。
Oracleg日志查看方法
Oracleg日志查看方法Oracle 11g的日志文件包括数据库日志(Redo Log)、归档日志(Archive Log)和警告日志(Alert Log)。
这些日志文件记录了数据库的运行状态、操作记录、错误信息等重要信息,对于数据库管理员来说非常重要。
下面将详细介绍Oracle 11g的日志查看方法。
1. 数据库日志(Redo Log):数据库日志是Oracle数据库中最重要的日志文件之一,它记录了数据库中所有修改操作的详细信息,包括插入、更新和删除操作。
数据库日志文件的默认位置是$ORACLE_HOME/oradata/<SID>/redo<file_number>.log。
查看数据库日志的方法如下:- 使用SQL*Plus登录到数据库。
-运行以下命令查看数据库日志的信息:```SELECT group#, thread#, sequence#, members, archivedFROM v$log;```这个命令将显示数据库日志的组号(group#)、线程号(thread#)、序列号(sequence#)、成员数(members)和是否已归档(archived)等信息。
-运行以下命令查看数据库日志的详细信息:```SELECT * FROM v$log;```这个命令将显示数据库日志的详细信息,包括日志组的状态、大小、成员的路径等。
2. 归档日志(Archive Log):归档日志是数据库日志的备份,它可以用于数据库的恢复和还原。
归档日志文件的默认位置是$ORACLE_HOME/dbs/arch<thread_number>_<sequence_number>.arc。
查看归档日志的方法如下:- 使用SQL*Plus登录到数据库。
-运行以下命令查看已归档的日志文件:```FROM v$archived_logWHERE status='A';```-运行以下命令查看归档日志的详细信息:```SELECT * FROM v$archived_log;```这个命令将显示归档日志的详细信息,包括日志文件的路径、大小、归档时间等。
oracle_重做日志文件--笔记
oracle_重做⽇志⽂件--笔记重做⽇志⽂件(redo log file)⽬录重做⽇志⽂件相关。
重做⽇志⽂件简介。
查询重做⽇志⽂件的信息。
⽇志切换。
管理⽇志⽂件组增删⽇志⽂件组。
增删⽇志⽂件成员。
归档与⾮归档模式。
⼀.重做⽇志⽂件相关。
Oracle引⼊重做⽇志的⽬的:数据库的恢复。
Oracle相关进程:重做⽇志写进程(LGWR)。
重做⽇志性质:联机⽇志⽂件,oracle服务器运⾏时需要管理它们。
相关数据字典:v$log ; v$logfile。
操作者权限:具有sys⽤户或system⽤户权限。
1.1重做⽇志⽂件的规划。
(于⽹络上收集)联机⽇志⽂件的规划原则如下:1:分散放开,多路复⽤。
⼀般会将同⼀组的不同⽇志成员⽂件放到不同的磁盘或不同的裸设备上。
以提⾼安全性。
2:把重做⽇志放在速度最快的硬盘上(即:⽇志所在的磁盘应当具有较⾼的I/O),⼀般会将⽇志⽂件放在裸设备上。
3:把重做⽇志⽂件设为合理⼤⼩:例如,增⼤⽇志⽂件⼤⼩可以加快⼀些⼤型的INSERT、UPDATE、DELETE操作,也能降低⽇志⽂件切换频率。
减少⼀些⽇志等待事件。
⼀般根据具体业务情况有所不同。
⼀般⽇志组⼤⼩应满⾜⾃动切换间隔⾄少15-20分钟左右业务需求4:ORACLE推荐,同⼀个重做⽇值组下的所有重做⽇志⽂件⼤⼩、成员个数⼀致.⼆.重做⽇志⽂件简介。
2.1重做⽇志重做⽇志⽂件⼜叫联机⽇志⽂件,记录了对数据库修改的信息,包括⽤户对数据修改和数据库管理员对数据库结构的修改。
2.2重做⽇志的作⽤。
它主要⽤于在oracle发⽣故障的时候和数据库备份⽂件配合恢复数据库。
⼀般来说,数据库故障丢失数据,有两种情况。
⼀是,因为停电或死机,脏块未写⼊磁盘,造成该数据丢失。
⼆是,磁盘损坏,数据全完蛋。
对应第⼀种情况,oracle会使⽤实例恢复,使⽤重做⽇志⾃动恢复数据,不需要⽤户⼲预。
没错,实例恢复,它是⾃动的。
对应第⼆种情况,便需要DBA使⽤备份,重做⽇志,归档⽇志来恢复数据了。
oracle启动日志
在安装目录oracle\admin\SID_name\bdump下的*.log文件
以system登录,show parameter background_dump_dest,可以看到日志文件所在的路径,日志文件名一般是alert什么的。日志文件需要经常维护,不然会不断地长大。
还可以show parameter dump_dest看看所有其他的跟踪文件的路径。那些trc文件应该是可以删除的,是一些跟踪信息。
我们也需要周期地截断它,方法是先停止listener记日志的工作:
$lsnrctl set log_status off
然后进行文件处理( 把原来的日志保存到备份文件夹, 使原来的listener.log置空 )
$cp $ORACLE_HOME/network/log/listener.log $ORACLE_BACKUP/network/log/listener_1.log
exec sp_cycle_errorlog
每次SQL Server数据库重新启动时,会自动分割ERRRLOG日志.
参考资料: /oracle_log.htm
回答者: charge007 - 三级 2007-3-9 10:14
$rm /tmp/oracle_temp.log
对日志文件进行截断处理。
listener的日志文件$ORACLE_HOME/network/log/listener.log记录了通过listener处理的网络请求
信息,它包含客户端请求的时间,连接方式(专用或共享),连接程序,网络协议,主机名,网络端口号等信息。
su - oracle -c "lsnrctl set log_status on"
oracle数据库归档日志使用情况
oracle数据库归档日志使用情况Oracle数据库归档日志使用情况概述:数据库归档日志是Oracle数据库中一个重要的组成部分,它用于记录数据库的所有变更操作,以便数据库在出现故障或需要恢复时能够通过日志进行数据的恢复。
本文将详细介绍Oracle数据库归档日志的使用情况,包括归档日志的作用、生成方式、存放位置以及管理方法等。
一、归档日志的作用数据库归档日志的主要作用是提供了数据的完整性和可恢复性。
当数据库发生故障,如硬件故障、数据库崩溃或意外删除数据等情况,通过归档日志可以使数据库回滚到故障前的状态或恢复数据至故障发生时的状态。
此外,归档日志还可以用于数据库的灾难恢复、数据库的克隆和备份等操作。
当数据库需要从远程站点进行恢复或克隆时,可以通过归档日志来还原数据库至远程站点的状态,实现数据的同步。
同时,归档日志还可以用于数据库的备份,确保备份是最新的,并且能够完全恢复数据库。
二、归档日志的生成方式Oracle数据库归档日志有两种生成模式,一种是归档模式,另一种是非归档模式。
1. 归档模式数据库处于归档模式时,它会自动将日志文件复制到指定的目录中,以便进行数据的归档和恢复。
在归档模式下,数据库的归档日志会自动生成,并且只有归档日志被才会被复制到指定的归档目录中。
归档模式是默认的数据库模式,它可以通过以下命令进行启用:ALTER DATABASE ARCHIVELOG;2. 非归档模式与归档模式相反,非归档模式下数据库不会自动进行归档操作,也就是说不会生成归档日志。
这种模式适用于对数据的可恢复性要求不高的情况,或者是为了降低数据库的I/O负载,减少磁盘空间的占用。
非归档模式可以通过以下命令进行启用:ALTER DATABASE NOARCHIVELOG;需要注意的是,一旦数据库启用了归档模式,就不能再切换到非归档模式。
因此,在启用归档模式前需要谨慎考虑数据库的需求和成本效益。
三、归档日志的存放位置归档日志的存放位置由参数log_archive_dest_n(n为1-10的整数)指定。
Oracle 指定分析的日志文件
Oracle 指定分析的日志文件在使用LogMiner进行日志分析之前,必须指定它将对哪些重做日志文件进行分析。
LogMiner可以一次对多个重做日志文件进行分析。
执行DBMS_LOGMNR.ADD_LOGFILE过程可以指定要分析的重做日志文件。
利用这个过程可以依次添加多个重做日志文件,或删除已经添加的重做日志文件。
下面是指定重做日志文件列表的具体操作步骤:(1)确保数据库实例已经启动(STARTUP)。
(2)创建重做日志文件列表。
通过指定DBMS_LOGMNR.ADD_LOGFILE过程的NEW选项来创建重做日志文件的列表。
例如,利用下面的语句建立一个重做日志文件列表,并向其中添加一个重做日志文件:SQL> executedbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo01a.log',options=>dbms_logmnr.new);(3)根据需要,使用ADDFILE选项继续向列表中添加其他的重作日志文件。
比如,利用下面的语句向列表中添加重做日志文件:execute dbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo02a.log',options=>dbms_logmnr.addfile);(4)如果需要,还可以通过指定DBMS_LOGMNR.ADD_LOGFILE过程的REMOVEFILE选项来删除重做日志文件。
例如,利用下面的语句可以将重做日志文件REDO02A.LOG从日志文件列表中删除:execute dbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo02a.log',options=>dbms_logmnr.removefile);DBMS_LOGMNR.ADD_LOGFILE过程的OPTIONS各选项表示如下:●NEW 表示创建一个新的日志文件列表●ADDFILE 表示向列表中添加日志文件●REMOVEFILE 与ADDFILE相反,在列表中删除日志文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分类:Oracle 体系结构2010-07-20 14:11 2259人阅读评论(5) 收藏举报--=========================================-- Oracle 联机重做日志文件(ONLINE LOG FILE)--=========================================一、Oracle中的几类日志文件Redo log files -->联机重做日志Archive log files -->归档日志Alert log files -->告警日志Trace files -->跟踪日志user_dump_dest -->用户跟踪日志backupground_dump_dest -->进程跟踪日志--查看后台进程相关目录SQL> show parameter dumpNAME TYPE VALUE------------------------------------ -----------------------------------------background_core_dump string partialbackground_dump_dest string/u01/app/oracle/admin/orcl/bdumpcore_dump_dest string/u01/app/oracle/admin/orcl/cdumpmax_dump_file_size string UNLIMITEDshadow_core_dump string partialuser_dump_dest string/u01/app/oracle/admin/orcl/udump关于Oracle 常用目录及路径请参考:Oracle 常用目录结构(10g)关于Oracle 体系结构请参考:Oracle实例和Oracle数据库(Oracle体系结构)二、联机重做日志的规划管理1.联机重做日志记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等)提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复)可以被分组管理2.联机重做日志组由一个或多个相同的联机日志文件组成一个联机重做日志组至少两个日志组,每组一个成员(建议每组两个成员,分散放开到不同的磁盘)由LGWR后台进程同时将日志内容写入到一个组的所有成员LGWR的触发条件在事务提交的时候(COMMIT)Redo Log Buffer 三分之一满Redo Log Buffer 多于一兆的变化记录在DBWn写入数据文件之前3.联机重做日志成员重做日志组内的每一个联机日志文件称为一个成员一个组内的每一个成员具有相同的日志序列号(log sequence number),且成员的大小相同每次日志切换时,Oracle服务器分配一个新的LSN号给即将写入日志的日志文件组LSN号用于唯一区分每一个联机日志组和归档日志处于归档模式的联机日志,LSN号在归档时也被写入到归档日志之中4.日志文件的工作方式日志文件采用按顺序循环写的方式当一组联机日志组写满,LGWR则将日志写入到下一组,当最后一组写满则从第一组开始写入写入下一组的过程称为日志切换切换时发生检查点过程检查点的信息同时写入到控制文件5.联机日志文件的规划总原则分散放开,多路复用日志所在的磁盘应当具有较高的I/O一般日志组大小应满足自动切换间隔至少15-20分钟左右业务需求建议使用rdo结尾的日志文件名,避免误删日志文件。
如redo1.rdo,redo2.rdo 规划样例Redo Log Group1 Redo Log Group2 Redo Log Group3Member1 Member1 Member1-->Physical Disk 1Member2 Member2 Member2-->Physical Disk 2Member3 Member3 Member3-->Physical Disk 36.日志切换和检查点切换ALTER SYSTEM SWITCH LOGFILE;--强制手动切换ALTER SYSTEM CHECKPOINT;强制设置检查点间隔ALTER SYSTEM SET FAST_START_MTTR_TARGET = n7.添加日志文件组ALTER DATABASE ADD LOGFILE [GROUP n]('$ORACLE_BASE/oradata/u01/logn1.rdo','$ORACLE_BASE/oradata/u01/logn2.rdo')SIZE mM;8.添加日志成员ALTER DATABASE ADD LOGFILE MEMBER'$ORACLE_BASE/oradata/u01/logn1.rdo'TO GROUP 1,'$ORACLE_BASE/oradata/u01/logn2.rdo'TO GROUP 2;9.删除日志成员不能删除组内的唯一一个成员不能删除处于active 和current 状态组内的成员删除处于active 和current 状态组内的成员,应使用日志切换使其处于INACTIVE状态后再删除对于组内如果一个成员为NULL 值,一个为INVALID,且组处入INACTIVE,仅能删除INVALID状态成员删除日志成员,物理文件并没有真正删除,需要手动删除删除日志文件后,控制文件被更新对于处于归档模式下的数据库,删除成员时确保日志已被归档,查看v$log视图获得归档信息ALTER DATABASE DROP LOGFILE MEMBER '$ORACLE_BASE/oradata/u01/logn1.rdo'10.删除日志组一个实例至少需要两个联机日志文件组活动或当前的日志组不能被删除组内成员状态有NULL 值或INVALID状态并存,组不可删除日志组被删除后,物理文件需要手动删除(对于非OMF)ALTER DATABASE DROP LOGFILE GROUP n11.日志的重定位及重命名所需权限ALTER DATABASE系统权限复制文件到目的位置操作系统权限(写权限)CURRENT状态组内的成员不能被重命名建议该行为之前备份数据库重命名或重定位之后建议立即备份控制文件重定位及重命名的两种方法添加一个新成员到日志组,然后删除一个旧的成员使用ALTER DATABASE RENAME FILE命令(不区分归档与非归档模式)复制联机日志文件到新路径:ho cp <oldfile> <newfile>执行ALTER DATABASE RENAME FILE'<oldfile>'TO'<newfile>'对于处于CURRENT状态的需要改名且不切换的情况下办法是切换到MOUNT状态下再执行上述操作12.清空日志文件组ALTER DATABASE CLEAR LOGIFLE GROUP nALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n --使用unarchived 避免归档13.日志周期循环及切换分析Group 1 Group 2 Group 3Current Inactive Inactive---------- Log Switch -------------Active Current Inactive---------- Log Switch -------------Active Active Current---------- Log Switch -------------Current Inactive Inactive--Active 和Current 称之为在一个循环周期之内(按顺序写日志)--Inactive 称为一个周期之外(一个新的循环)--新一轮循环开始如在归档状态则先归档再清空,否则直接清空日志--数据库启动时Active 和Current 状态的日志不能丢失,否则出错14.日志的监视查看日志视图中的物理日志文件是否存在、位置、大小等SELECT'ho cp '||member FROM v$logfile;查看日志文件所处的磁盘空间是否足够SQL> ho df -h查看组内是否存在多个成员,如为单一成员应考虑增加日志成员日志切换的间隔时间,应满足15-20分钟业务需求,如果切换间隔很短,应当增加日志文件的大小增加方法,先删除日志组,再重建该组(对于current和active的需要切换再做处理)--查看切换时间间隔(下面的示例中为手工切换的时间,不作考虑)SQL>SELECT TO_CHAR(first_time,'yyyy-mm-dd hh24:mi:ss'),group# FROM v$log;TO_CHAR(FIRST_TIME, GROUP#------------------- ----------2010-07-20 09:43:18 12010-07-19 22:44:30 22010-07-19 22:44:32 315.日志的异常处理(参照演示中9小节)不一致的情况(启动时)ALTER DATABASE CLEAR LOGFILE GROUP nALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n三、与日志有关的动态性能视图V$LOGV$LOGFILEV$LOG中STATUS的状态值UNUSED:从未对该联机日志写入任何内容,一般为新增加联机日志文件或是使用resetlog后的状态CURRENT:当前重做日志文件,表示该重做日志文件为活动状态,能够被打开和关闭ACTIVE:处于活动状态,不属于当前日志,崩溃恢复需要该状态,可用于块恢复,可能归档,也可能未归档CLEARING:表示在执行alter database clear logfile命令后正将该日志重建为一个空日志,重建后状态变为unusedCLEARING_CURRENT:当前日志处于关闭线程的清除状态。
如日志某些故障或写入新日志标头时发生I/O错误INACTIVE:实例恢复不在需要联机重做文件日志组,可能归档也可能未归档V$LOGFILE中STATUS的状态值INVALID :表明该文件不可访问STALE :表明文件内容不完全DELETED :表明该文件不再使用NULL :表明文件正在使用四、演示--1.查看当前数据库的日志SQL>SELECT*FROM v$log;GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------1 1 5 52428800 1 NO CURRENT2758062 19-JUL-102 13 52428800 2 YES INACTIVE 2695010 16-JUL-103 14 104857600 2 YES INACTIVE 2716552 18-JUL-10SQL>SELECT*FROM v$logfile ORDER BY group#;GROUP# STATUS TYPE MEMBER IS_---------- ------- -------------------------------------------------------------- ---1 ONLINE /u01/app/oracle/oradata/orcl/redo01.logNO2 STALE ONLINE /u01/app/oracle/oradata/orcl/redo02.logNO2 STALE ONLINE /u01/app/oracle/oradata/orcl/redo2.logNO3 STALE ONLINE /u01/app/oracle/oradata/orcl/redo03.logNO3 STALE ONLINE /u01/app/oracle/oradata/orcl/redo3.logNO--2.添加日志组SQL>SELECT*FROM v$logfile;GROUP# STATUS TYPE MEMBER IS_---------- ------- -------------------------------------------------------------- ---2 STALE ONLINE /u01/app/oracle/oradata/orcl/redo2.logNO2 STALE ONLINE /u01/app/oracle/oradata/orcl/redo02.logNO1 ONLINE /u01/app/oracle/oradata/orcl/redo01.logNO3 STALE ONLINE /u01/app/oracle/oradata/orcl/redo3.logNO3 STALE ONLINE /u01/app/oracle/oradata/orcl/redo03.logNO4 ONLINE /u01/app/oracle/oradata/orcl/redo4.logNO4 ONLINE /u01/app/oracle/oradata/orcl/redo04.logNO--3.添加日志成员SQL>ALTER DATABASE ADD LOGFILE MEMBER'/u01/app/oracle/oradata/orcl/redo1.log'TO GROUP 1;Database altered.SQL>SELECT*FROM v$logfile WHERE group# = 1 ;GROUP# STATUS TYPE MEMBER IS_---------- ------- -------------------------------------------------------------- ---1 ONLINE /u01/app/oracle/oradata/orcl/redo01.logNO1 INVALID ONLINE /u01/app/oracle/oradata/orcl/redo1.logNO--4.删除日志成员SQL>ALTER DATABASE DROP LOGFILE MEMBER'/u01/app/oracle/oradata/orcl/redo01.log';ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo01.log'*ERROR at line 1:--redo01.log处于NULL状态且该日志组为current状态不能删除ORA-00362: member is required to form a valid logfile in group 1ORA-01517:log member:'/u01/app/oracle/oradata/orcl/redo01.log'SQL>ALTER DATABASE DROP LOGFILE MEMBER'/u01/app/oracle/oradata/orcl/redo04.log';Database altered.SQL>ALTER DATABASE DROP LOGFILE MEMBER'/u01/app/oracle/oradata/orcl/redo4.log';ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo4.log'*ERROR at line 1:--最后一个日志成员不能被删除ORA-00361: cannot remove last log member/u01/app/oracle/oradata/orcl/redo4.log for group 4--5.日志切换SQL>SELECT*FROM v$log;--当前的日志组处于CURRENT状态GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------1 1 5 524288002 NO CURRENT2758062 19-JUL-102 13 52428800 2 YES INACTIVE 2695010 16-JUL-103 14 104857600 2 YES INACTIVE 2716552 18-JUL-104 1 0 31457280 1 YES UNUSED 0SQL>ALTER SYSTEM SWITCH LOGFILE;--进行日志切换System altered.SQL>SELECT*FROM v$log;--原来的日志组4的unused状态变为current状态GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------1 1 5 524288002 YES ACTIVE 2758062 19-JUL-102 13 52428800 2 YES INACTIVE 2695010 16-JUL-103 14 104857600 2 YES INACTIVE 2716552 18-JUL-102759277 19-JUL-10SQL>ALTER SYSTEM SWITCH LOGFILE;--再次进行日志切换System altered.SQL>SELECT*FROM v$log;--日志组1变为current且组4变为active 状态GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------1 1 5 524288002 YES ACTIVE 2758062 19-JUL-102 1 7 52428800 2 NO CURRENT2759293 19-JUL-103 14 104857600 2 YES INACTIVE 2716552 18-JUL-104 1 6 31457280 1 YES ACTIVE 2759277 19-JUL-10由上可得知,在日志切换时对于unused组将优先作为下一组切换对象--再次删除redo01.log还是收到错误提示SQL>ALTER DATABASE DROP LOGFILE MEMBER'/u01/app/oracle/oradata/orcl/redo01.log';ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/orcl/redo01.log'*ERROR at line 1:ORA-00362: member is required to form a valid logfile in group 1ORA-01517:log member:'/u01/app/oracle/oradata/orcl/redo01.log'SQL>ALTER SYSTEM SWITCH LOGFILE;--再次进行日志切换System altered.SQL>SELECT*FROM v$log;--group1变为inactiveGROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------2758062 19-JUL-102 1 7 52428800 2 YES ACTIVE 2759293 19-JUL-103 1 8 104857600 2 NO CURRENT2759420 19-JUL-104 1 6 31457280 1 YES INACTIVE 2759277 19-JUL-10--反复多切几次日志之后redo01.log被成功删除SQL>ALTER DATABASE DROP LOGFILE MEMBER'/u01/app/oracle/oradata/orcl/redo01.log';Database altered.--6.删除日志组(CURRENT和ACTIVE状态的不能被删除)SQL>SELECT*FROM v$log;GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------1 1 9 52428800 1 YES ACTIVE 2759487 19-JUL-102 1 11 52428800 2 NO CURRENT2759502 19-JUL-103 1 8 104857600 2 YES ACTIVE 2759420 19-JUL-104 1 10 31457280 1 YES ACTIVE 2759499 19-JUL-10SQL>ALTER DATABASE DROP LOGFILE GROUP 4;ALTER DATABASE DROP LOGFILE GROUP 4*ERROR at line 1:--处于活动状态的group4 用于灾难恢复,不能被删除ORA-01624:log 4 needed for crash recovery of instance orcl (thread 1)ORA-00312: online log 4 thread 1:'/u01/app/oracle/oradata/orcl/redo4.log'SQL>ALTER SYSTEM SWITCH LOGFILE;--进行日志切换System altered.SQL>/System altered.SQL>SELECT*FROM v$log;--group 4的状态变为inactvieGROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------1 1 13 52428800 1 NO CURRENT2759720 19-JUL-102 1 11 52428800 2 YES ACTIVE 2759502 19-JUL-103 1 12 104857600 2 YES ACTIVE 2759718 19-JUL-104 1 10 31457280 1 YES INACTIVE 2759499 19-JUL-10SQL>ALTER DATABASE DROP LOGFILE GROUP 4;--成功删除group 4Database altered.SQL> ho ls /u01/app/oracle/oradata/orcl/redo*/u01/app/oracle/oradata/orcl/redo01.log/u01/app/oracle/oradata/orcl/redo1.log/u01/app/oracle/oradata/orcl/redo02.log/u01/app/oracle/oradata/orcl/redo2.log/u01/app/oracle/oradata/orcl/redo03.log/u01/app/oracle/oradata/orcl/redo3.log/u01/app/oracle/oradata/orcl/redo04.log/u01/app/oracle/oradata/orcl/redo4.logSQL> ho rm /u01/app/oracle/oradata/orcl/redo04.log--删除物理文件SQL> ho rm /u01/app/oracle/oradata/orcl/redo4.log--删除物理文件--7.日志的重定位及重命名(仅演示ALTER DATABASE RENAME FILE 命令)SQL>SELECT name,log_mode FROM v$database;NAME LOG_MODE--------- ------------ORCL ARCHIVELOGSQL>SELECT*FROM v$logfile ORDER BY group#;GROUP# STATUS TYPE MEMBER IS_---------- ------- -------------------------------------------------------------- ---1 ONLINE /u01/app/oracle/oradata/orcl/redo01.logNO2 ONLINE /u01/app/oracle/oradata/orcl/redo02.logNO2 ONLINE /u01/app/oracle/oradata/orcl/redo2.logNO3 STALE ONLINE /u01/app/oracle/oradata/orcl/redo03.logNO3 STALE ONLINE /u01/app/oracle/oradata/orcl/redo3.logNOSQL> ho cp /u01/app/oracle/oradata/orcl/redo01.log/u01/app/oracle/oradata/redo01.rdoSQL>ALTER DATABASE RENAME FILE'/u01/app/oracle/oradata/orcl/redo01.log'2 TO'/u01/app/oracle/oradata/redo01.rdo';Database altered.SQL>SELECT*FROM v$logfile WHERE group# = 1;GROUP# STATUS TYPE MEMBER IS_---------- ------- -------------------------------------------------------------- ---1 ONLINE /u01/app/oracle/oradata/redo01.rdo NO--8.清空日志文件组(只有非active 和非current状态的组才能被清空)SQL>SELECT*FROM v$log;GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------1 1 13 52428800 1 YES ACTIVE 2759720 19-JUL-102 1 14 52428800 2 NO CURRENT2761383 19-JUL-103 1 12 104857600 2 YES INACTIVE 2759718 19-JUL-10SQL>ALTER DATABASE CLEAR LOGFILE GROUP 1;ALTER DATABASE CLEAR LOGFILE GROUP 1*ERROR at line 1:--active 状态不能被清空ORA-01624:log 1 needed for crash recovery of instance orcl (thread 1)ORA-00312: online log 1 thread 1:'/u01/app/oracle/oradata/redo1.rdo'SQL>ALTER DATABASE CLEAR LOGFILE GROUP 2;ALTER DATABASE CLEAR LOGFILE GROUP 2*ERROR at line 1:--current 状态不能被清空ORA-01624:log 2 needed for crash recovery of instance orcl (thread 1)ORA-00312: online log 2 thread 1:'/u01/app/oracle/oradata/orcl/redo2.log'ORA-00312: online log 2 thread 1:'/u01/app/oracle/oradata/orcl/redo02.log'SQL>ALTER DATABASE CLEAR LOGFILE GROUP 3;Database altered.SQL>SELECT*FROM v$log;--group 3被清空后状态变为unusedGROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- --- ----------------------------- ---------1 1 13 52428800 1 YES INACTIVE 2759720 19-JUL-102 1 14 52428800 2 NO CURRENT2761383 19-JUL-103 1 0 104857600 2 YES UNUSED 2759718 19-JUL-10--9.日志异常处理--启动时提示日志不一致SQL> startupORACLE instance started.Total System Global Area 251658240 bytesFixed Size 1218796 bytesVariable Size 83887892 bytesDatabase Buffers 163577856 bytesRedo Buffers 2973696 bytesDatabase mounted.ORA-00341:log 1 of thread 1,wrong log # in headerORA-00312:online log 1 thread 1:'/u01/app/oracle/oradata/orcl/redo1a.rdo'ORA-00312:online log 1 thread 1:'/u01/app/oracle/oradata/orcl/redo1b.rdo' SQL>ALTER DATABASE CLEAR LOGFILE GROUP 1;Database altered.SQL>ALTER DATABASE OPEN;Database opened.--日志文件丢失(非current状态日志组)SQL> startupORACLE instance started.Total System Global Area 251658240 bytesFixed Size 1218796 bytesVariable Size 88082196 bytesDatabase Buffers 159383552 bytesRedo Buffers 2973696 bytesDatabase mounted.ORA-00313:open failed for members of log group 1 of thread 1ORA-00312: online log 1 thread 1:'/u01/app/oracle/oradata/orcl/redo1a.rdo'ORA-00312: online log 1 thread 1:'/u01/app/oracle/oradata/orcl/redo1b.rdo'SQL>ALTER DATABASE CLEAR LOGFILE GROUP 1;Database altered.SQL>ALTER DATABASE OPEN;Database altered.--日志文件丢失(current状态日志组)SQL> startupORACLE instance started.Total System Global Area 251658240 bytesFixed Size 1218796 bytesVariable Size 83887892 bytesDatabase Buffers 163577856 bytesRedo Buffers 2973696 bytesDatabase mounted.ORA-00313:open failed for members of log group 3 of thread 1ORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3a.rdo'ORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3b.rdo'--查看告警日志SQL> ho tail -n 30 /u01/app/oracle/admin/orcl/bdump/alert_orcl.logORA-27037: unable to obtain file statusLinux Error: 2:No such file or directoryAdditional information: 3ORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3a.rdo'ORA-27037: unable to obtain file statusLinux Error: 2:No such file or directoryAdditional information: 3Tue Jul 20 10:45:58 2010Errors in file/u01/app/oracle/admin/orcl/bdump/orcl_lgwr_4112.trc:ORA-00313:open failed for members of log group 3 of thread 1ORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3b.rdo'ORA-27037: unable to obtain file statusLinux Error: 2:No such file or directoryAdditional information: 3ORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3a.rdo'ORA-27037: unable to obtain file statusLinux Error: 2:No such file or directoryAdditional information: 3Tue Jul 20 10:45:58 2010ARC0: STARTING ARCH PROCESSESTue Jul 20 10:45:58 2010ARC1: Becoming the 'no FAL' ARCHARC1: Becoming the 'no SRL' ARCHTue Jul 20 10:45:58 2010ARC2: Archival startedARC0: STARTING ARCH PROCESSES COMPLETEARC0: Becoming the heartbeat ARCHARC2 started with pid=18, OS id=4137Tue Jul 20 10:45:58 2010ORA-313 signalled during:ALTER DATABASE OPEN...--查看物理日志文件是否存在SQL> ho ls /u01/app/oracle/oradata/orcl/redo3a.rdols:/u01/app/oracle/oradata/orcl/redo3a.rdo:No such file or directorySQL> ho ls /u01/app/oracle/oradata/orcl/redo3b.rdols:/u01/app/oracle/oradata/orcl/redo3b.rdo:No such file or directory--尝试使用清空日志组命令SQL>ALTER DATABASE CLEAR LOGFILE GROUP 3;ALTER DATABASE CLEAR LOGFILE GROUP 3*ERROR at line 1:--系统处于非归档模式,且group 3状态为CURRENTORA-00350:log 3 of instance orcl (thread 1) needs to be archivedORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3a.rdo'ORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3b.rdo'--尝试使用不归档清空日志SQL>ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3*ERROR at line 1:ORA-00313:open failed for members of log group 3 of thread 1ORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3b.rdo'ORA-27037: unable to obtain file statusLinux Error: 2:No such file or directoryAdditional information: 3ORA-00312: online log 3 thread 1:'/u01/app/oracle/oradata/orcl/redo3a.rdo'ORA-27037: unable to obtain file statusLinux Error: 2:No such file or directoryAdditional information: 3--使用带控制文件的介质恢复SQL> RECOVER DATABASE USING BACKUP CONTROLFILE;ORA-00279: change 2835232 generated at 07/20/2010 10:40:23 needed forthread 1ORA-00289: suggestion :/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2010_07_20/o1_mf_1_39_%u_.arcORA-00280: change 2835232 for thread 1 is in sequence #39Specify log:{<RET>=suggested |filename|AUTO| CANCEL}ORA-00308: cannot open archived log'/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2010_07_20/o1_mf_1_39_%u_.arc'ORA-27037: unable to obtain file statusLinux Error: 2:No such file or directoryAdditional information: 3--使用resetlogs选项打开数据库SQL>ALTER DATABASE OPEN RESETLOGS;Database altered.SQL>SELECT*FROM v$log;--系统重建group 3GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIM---------- ---------- ---------- ---------- ---------- ------------------- ------------- ---------1 12 31457280 2 NO CURRENT2835234 20-JUL-102 1 1 31457280 2 YES INACTIVE 2835233 20-JUL-103 1 0 31457280 2 YES UNUSED 0SQL>SELECT*FROM v$logfile;--为group 3增加了两个成员redo3a.rdo ,redo3b.rdoGROUP# STATUS TYPE MEMBER IS_---------- ------- -------------------------------------------------------------- ---2 ONLINE /u01/app/oracle/oradata/orcl/redo2a.rdoNO2 ONLINE /u01/app/oracle/oradata/orcl/redo2b.rdoNO1 ONLINE /u01/app/oracle/oradata/orcl/redo1a.rdoNO3 ONLINE /u01/app/oracle/oradata/orcl/redo3a.rdoNO3 ONLINE /u01/app/oracle/oradata/orcl/redo3b.rdoNO1 ONLINE /u01/app/oracle/oradata/orcl/redo1b.rdoNO对于CURRENT组的也可以使用隐藏参数来解决步骤:alter system set "_allow_resetlogs_corruption" = true scope = spfile;recover database using bakcup controlfile;alter database open resetlogs;shutdown immediate;startup mount;alter database open resetlogs;alter system reset "_allow_resetlogs_corruption" scope =spfile sid ='*'对于归档模式下的日志文件丢失,同样可以按上述步骤处理五、更多Oracle 参数文件SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)Oracle 用户、对象权限、系统权限Oracle 角色、配置文件SQL 基础--> 集合运算(UNION 与UNION ALL)分享到:∙上一篇:Oracle 常见故障及日常规划∙下一篇:再读《诫子书》。