oracle redo日志恢复Oracle备份恢复中,redo的恢复相对来说还是比较简单的,只要保证每组的成员不止一个,出现问题的几率就相当小,即使出了问题我们也可按照不同的方法将他们恢复,所以如果碰到日志文件损坏,完全不必紧张!按照下面的方法来做,基本上都能搞定!
试验一:用命令清空日志组方法
1、 查看原来表中数据
SQL> conn test/test
Connected.
SQL> select * from test;
TEL
----------
1
2
3
2、插入新数据
SQL> insert into test values(4);
1 row created.
SQL> commit;
Commit complete.
SQL>
3、 正常关闭数据库
4、 利用os command删除所有redo文件
5、 启动数据库
SQL> startup
ORACLE instance started.
Total System Global Area 353862792 bytes
Fixed Size 730248 bytes
Variable Size 285212672 bytes
Database Buffers 67108864 bytes
Redo Buffers 811008 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'
6、 查看当前日志状态
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ----------
1 1 2 104857600 1 YES INACTIVE
487837 01-9月 -05
2 1 4 104857600 1 NO CURRENT
487955 01-9月 -05
3 1 3 104857600 1 YES INACTIVE
487839 01-9月 -05
看来redo01.log不是当前日志,对于这类非当前日志可以直接clear,系统会重新自动生成一个redo文件
7、SQL> alter database clear logfile group 1;
Database altered.
7、 继续启动db
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/T3/ORACLE/oradata/ORA9/redo02.log'
8、 看来redo也得恢复,但是redo02是当前redo,直接clear是不行的
SQL> alter database clear logfile group 2;
alter database clear logfile group 2
*
ERROR at line 1:
ORA-00350: log 2 of thread 1 needs to be archived
ORA-00312: online log 2 thread 1: '/T3/ORACLE/oradata/ORA9/redo02.log'
9、 按照oracle的某些做法也是不行的
SQL> alter database clear unarchived logfile group 2 unrecoverable datafile;
alter database clear unarchived logfile group 2 unrecoverable datafile
*
ERROR at line 1:
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/T3/ORACLE/oradata/ORA9/redo02.log'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3
10、 尝试从其他冷被分cp过来一个,再作clear,还是不行
SQL> host cp /T3/ORACLE/oradata2/ORA9/redo02.log /T3/ORACLE/oradata/ORA9/
SQL> alter database clear unarchived logfile group 2 unrecoverable datafile;
alter database clear unarchived logfile group 2 unrecoverable datafile
*
ERROR at line 1:
ORA-00322: log 2 of thread 1 is not current copy
ORA-00312: online log 2 thread 1: '/T3/ORACLE/oradata/ORA9/redo02.log'
SQL>
11、 但是对于非当前日志就都可以,下面看看redo03
SQL> alter database clear logfile group 3;
Database altered.
结论:
如果数据库是正常shutdown,非当前日志都可以直接clear来重新生成,而且不丢失数据,因为正常关闭db,数据已经写入dbf文件了。唯独当前日志不可以,当前日志必须用其他方法恢复,不管是不是正常关闭,
方法二:用cancel模式恢复数据库
前面的出错提示,步骤都一样,唯独恢复的方法不一样
SQL> startup
ORACLE instance started.
Total System Global Area 353862792 bytes
Fixed Size 730248 bytes
Variable Size 285212672 bytes
Database Buffers 67108864 bytes
Redo Buffers 811008 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'
看看丢失了哪些redo
SQL> host ls /T3/ORACLE/oradarta/ORA9/redo*
/T3/ORACLE/oradarta/ORA9/redo*: No such file or directory
看来redo都丢了
直接recover
SQL> recover database until cancel;
Media recovery complete.
这个时候redo还没有生成
SQL> host ls /T3/ORACLE/oradata/ORA9/redo*
/T3/ORACLE/oradata/ORA9/redo*: No such file or directory
启动数据库
SQL> alter database open ;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
Database altered.
(注意,这里必须用resetlogs,否则会错误的
SQL> alter database open noresetlogs;
alter database open noresetlogs
*
ERROR at line 1:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'
SQL>
Resetlogs其实就是根据控制文件让系统自动重新生成redo,如果noresetlog的话,就不会重新生成redo,缺少了文件,db自然无法启动)
SQL> host ls /T3/ORACLE/oradata/ORA9/redo*
/T3/ORACLE/oradata/ORA9/redo01.log /T3/ORACLE/oradata/ORA9/redo02.log /T3/ORACLE/oradata/ORA9/redo03.log
SQL>
检验
SQL> select * from test.test;
TEL
----------
1
2
3
4
SQL>
数据一点儿都没有丢失
结论:
如果数据库是正常关闭的,用recover database until cancel可以轻松恢复或者说重新建立所有的redo,不再区分是否是当前日志,而且由于正常关闭,不会丢失任何数据,唯一可能丢失的情况就是如果日志还没有归档
这种恢复方法由于要resetlogs,所以在恢复完成后,日志清零,以前的备份不再起作用,所以建议立即备份
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /T3/ORACLE/arch
Oldest online log sequence 0
Next log sequence to archive 1
Current log sequence 1
SQL>
实验三:通过重新生成控制文件来恢复redo
前面的都一样,只是处理方法不一样
SQL> startup
ORACLE instance started.
Total System Global Area 353862792 bytes
Fixed Size 730248 bytes
Variable Size 285212672 bytes
Database Buffers 67108864 bytes
Redo Buffers 811008 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'
SQL> alter database backup controlfile to trace;
Database altered.
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL>
2、 修改一下刚才生成的那个文件
CREATE CONTROLFILE REUSE DATABASE "ORA9" RESETLOGS ARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 '/T3/ORACLE/oradata/ORA9/redo01.log' SIZE 100M,
GROUP 2 '/T3/ORACLE/oradata/ORA9/redo02.log' SIZE 100M,
GROUP 3 '/T3/ORACLE/oradata/ORA9/redo03.log' SIZE 100M
-- STANDBY LOGFILE
DATAFILE
'/T3/ORACLE/oradata/ORA9/system01.dbf',
'/T3/ORACLE/oradata/ORA9/undotbs01.dbf',
'/T3/ORACLE/oradata/ORA9/cwmlite01.dbf',
'/T3/ORACLE/oradata/ORA9/drsys01.dbf',
'/T3/ORACLE/oradata/ORA9/example01.dbf',
'/T3/ORACLE/oradata/ORA9/indx01.dbf',
'/T3/ORACLE/oradata/ORA9/odm01.dbf',
'/T3/ORACLE/oradata/ORA9/tools01.dbf',
'/T3/ORACLE/oradata/ORA9/users01.dbf',
'/T3/ORACLE/oradata/ORA9/xdb01.dbf',
'/T3/ORACLE/oradata/ORA9/test01.dbf'
CHARACTER SET ZHS16GBK
;
另存为一个脚本,运行他
SQL> @clone.sql
Control file created.
SQL> alter database open resetlogs;
Database altered.
SQL>
搞定……………
结论:这种方法的关键是重新创建控制文件,后面的步骤和前面的道理一样的
前面的三种方法都是假设db是正常关闭的,数据已经写入数据库文件中,所以不会由数据存在redo种,所以clear的话也不会有数据丢失
分享到:
相关推荐
这种机制确保了在系统崩溃或突然断电的情况下,可以通过redo日志文件恢复未完成的事务,从而保证数据库的一致性和完整性。 ### 二、修改redo日志文件大小的方法 #### 方法一:添加新的redo日志文件组 如果现有的...
2. **增加日志组数量**:增加redo log group的数量,可以在一组日志文件写满时无缝切换到下一组,这样可以分散I/O负载并提高系统并发处理能力。每个日志组应保持相同大小,以确保均衡使用。 在给出的部分内容中,...
- 当Oracle实例崩溃后重启时,数据库将自动执行实例恢复过程,通过使用当前在线Redo Log文件和联机重做日志文件中的未提交更改来恢复未完成的事务。 - 实例恢复过程包括两个主要阶段:分析阶段(Analysis Phase)和...
从Oracle 9i版本开始,DDL语句也被包括在redo日志中。 Oracle redo log的写入方式是循环写入,每个Oracle实例至少拥有两组重做日志组,每组可以有一个或多个日志成员。Oracle会自动进行日志切换,这通常发生在LGWR...
Oracle Redo日志是数据库系统中的重要组成部分,用于记录事务对数据块的修改,确保数据在系统崩溃或异常情况下的可恢复性。当Redo日志异常暴增时,这通常意味着数据库活动增加,或者存在某些问题导致了不必要的日志...
在Oracle数据库系统中,redo日志(也称为重做日志)是至关重要的组件,它记录了所有对数据库所做的事务性更改。理解并维护redo日志对于确保数据完整性和能够进行有效的故障恢复至关重要。以下是对redo日志及其维护的...
Redo日志是数据库恢复和事务持久化的关键组成部分,它记录了所有对数据库进行修改的操作,确保在系统故障后能够恢复到一致状态。 Redo日志条目首先在用户进程的PGA(程序全局区)中生成,随后被复制到SGA(系统全局...
### Oracle日志丢失数据库恢复技巧 #### 背景与问题描述 在Oracle数据库管理过程中,日志文件丢失是一个常见的问题。例如,在某次事件中,测试部门反馈了一个关于内部网络上的Oracle数据库(版本1.105)无法正常...
3. 当事务提交时,Oracle 数据库会将 redo 日志文件写入磁盘,以便在故障时恢复事务。 undo 机制 undo 机制是 Oracle 数据库中的一种机制,用于记录事务的所有操作,以便在撤销事务时恢复数据。undo 机制可以保证...
ORACLE数据库的归档日志设置是一种重要的机制,旨在保障数据库的安全性和灾难恢复能力。通过设置数据库的日志模式和自动归档模式,可以确保数据库的可靠性和可恢复性。 数据库日志模式的设置是ORACLE数据库的核心...
Oracle数据库的重做日志(Redo Log)是记录所有事务对数据进行修改的历史记录,用于在系统崩溃或介质故障时恢复数据。重做日志的管理是数据库维护中的重要环节,因为它直接影响到数据库的可用性和性能。以下是关于...
在Oracle中,日志文件发挥着关键作用,其中Undo日志和Redo日志是最核心的两种日志类型。 Undo日志,也称为撤销日志,主要用于事务处理中。它的主要作用是记录事务执行之前的数据库状态,即数据块在被修改之前的所有...
- 非归档模式:若未启用归档,数据库只能依赖于控制文件和在线redo日志进行恢复,可能需要更复杂的操作,例如完全恢复或不完全恢复。 再者,脏块有无写入数据文件也会影响恢复策略: - 脏块已写入:数据库通常可以...
REDO日志是Oracle数据库中用于记录所有事务更改的重要组成部分,它在数据库恢复过程中扮演着关键角色。当REDO文件block发生损坏时,通常是由于硬件故障(如磁盘错误)、软件bug、操作系统异常或不当的数据库操作等...
Oracle 归档日志是 Oracle 数据库中的一种日志机制,用于记录数据库的所有变化,以便在出现问题时进行恢复。归档日志可分为在线重做日志和归档重做日志两大类。 在线重做日志(Online Redo Log) 在线重做日志是 ...
Oracle 日志文件是 Oracle 数据库管理员 (DBA) 实现数据库恢复和追踪用户操作的重要工具。通过分析 Oracle 日志文件,可以追踪用户的恶意操作、恢复误删除的数据、执行事后审计等。Oracle 公司提供的 LogMiner 是一...
手动切换当前redo日志的命令是`ALTER SYSTEM ARCHIVE LOG CURRENT`,这有助于确保数据库在发生故障时能够恢复到特定时间点。 接下来,查询归档日志的时间范围至关重要,因为我们需要确定要分析的具体日志文件。可以...
Oracle数据库采用重做日志(Redo Log)来记录对数据库的所有更改。这些日志文件通常被组织成一组,并且每组包含一个或多个文件。当数据库发生故障时,可以通过重做日志文件恢复未提交的事务,从而确保数据的一致性和...
- 而在归档模式下,当一个重做日志文件组被写满后,Oracle会将这些重做日志文件归档到磁盘上的指定位置,这样即便发生介质故障,也能通过归档的重做日志文件恢复到更早的时间点。 - **重做日志文件的配置**: - ...