一次redolog丢失的处理

机器断电,数据库启动的时候,报错如下:

ERROR at line 1:
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/oradata/xxx/redo02.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3


SQL>

 

接到电话,登录机器,看看情况。

SQL> set lines 120
SQL> col MEMBER format a60
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                                       IS_
---------- ------- ------- ------------------------------------------------------------ ---
         3         ONLINE  /oradata/xxxxxxx/redo03.log                                  NO
         2         ONLINE  /oradata/xxxxxxx/redo02.log                                  NO
         1         ONLINE  /oradata/xxxxxxx/redo01.log                                  NO

SQL>

结果三个文件一个都没有了,而且是“No Archive Mode”。

 

参考网上的处理方案,用“_allow_resetlogs_corruption=true”,原址如下:

http://space.itpub.net/7177886/viewspace-251670

 

1. 用当前的spfile,生成pfile。

2. 修改pfile, 加入一行:_allow_resetlogs_corruption=true
3. shutdown

4. startup mount pfile='/tmp/a.ora';

5. recover database until cancel;

6. alter database open resetlogs;

 

==== log of step 5:

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/oradata/xxxxxxx/system01.dbf'

==== log of step 6:

SQL> alter database open resetlogs;

alter database open resetlogs
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel


SQL>

 

到目前,还是启动不了,不过redo文件已经重新生成了。

重新尝试,还可以看到错误:

SQL> startup pfile='/home/oracle/OraHome1/dbs/xxxxx.ora';
ORACLE instance started.

Total System Global Area 1241513984 bytes
Fixed Size                  1267212 bytes
Variable Size             704645620 bytes
Database Buffers          520093696 bytes
Redo Buffers               15507456 bytes
Database mounted.
ORA-00603: ORACLE server session terminated by fatal error


SQL>

 

现在的问题,是undo segment不对了。那就重建,参考了两个url:

http://bbs.chinaunix.net/thread-854395-1-1.html

http://yangdong.blog.51cto.com/2959198/799515

 

1. 修改pfile, 将其中的一行改成manual。

*.undo_management='manual'
2. 用这个pfile启动,成功

startup pfile='/tmp/a.ora';

3. 新建undo tablespce

create undo tablespace UNDOTBS3 datafile '/oradata/xxxxxxx/undotbs03.dbf' size 512m;
4. 把pfile再改回去,而且多改一行,指定新增的tablespace

*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS3'
5.shutdown

6. 用改好的pfile启动, OK

startup pfile='/tmp/a.ora';

 

====== log of step 6.

SQL> startup pfile='/tmp/a.ora';
ORACLE instance started.

Total System Global Area 1241513984 bytes
Fixed Size                  1267212 bytes
Variable Size             704645620 bytes
Database Buffers          520093696 bytes
Redo Buffers               15507456 bytes
Database mounted.
Database opened.
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS3
SQL>

 

=======

 

后续操作,就不用列了。

 

 

 

 

 

 

 

 

 

 

 

### Redo Log与Undo Log在数据库事务管理中的区别 #### 定义与功能 Redo log 和 Undo log 是数据库管理系统 (DBMS) 中两种重要的日志机制,它们分别承担不同的职责来维护数据的一致性和持久性。 - **Redo Log**: 主要用于记录所有已提交事务的操作细节。当数据库发生崩溃或其他异常情况时,可以通过重放 redo 日志将数据库恢复到最近一次正常状态下的全部已提交事务的结果[^3]。 - **Undo Log**: 则主要用于保存事务执行过程中的旧版本数据。它允许系统在必要时撤销未完成或失败的事务,从而保持数据库内部数据的一致性。 #### 存储位置 - **Redo Log** 的信息通常被写入独立的物理文件或者特定区域中,并且这些文件可以配置为循环使用的模式以便节省磁盘空间。此外,在某些实现里还会有在线redo logs以及归档redo logs之分用来满足不同场景下对于高可用性的需求[^1]。 - 对于 **Undo Log**, 大多数情况下它是存放在专门分配给它的表空间之内(即所谓的undo tablespace),不过也有例外比如Oracle早期版本可能会将其嵌套进datafile之中。 #### 使用时机 - 当某个事务成功结束并标记为 COMMIT 后, 数据库引擎会立即将此事件连同相关变更描述一起追加至当前活跃的 REDO LOG BUFFER 并最终刷盘形成永久记录; 这样做的好处在于即便之后遭遇意外停机也能依靠这部分历史资料重建丢失的信息[^2]. - 而 UNDO RECORDS 则是在每次修改之前先复制原始副本出来再加以处理, 整个流程贯穿整个交易周期直至最后确认完毕才会释放关联资源[ ^3 ]. #### 性能影响因素分析 由于两者工作原理上的差异决定了各自对整体性能表现会产生不一样的效果: - 频繁的小规模更新操作会使REDO GENERATION速率加快进而加大I/O负担; - 如果存在长时间运行的大批量DML语句则可能导致TEMPORARY SEGMENTS膨胀甚至引发SPACE CONTENTION现象同时也增加了UNDO RETENTION压力使得清理变得困难起来. ```sql -- Example SQL demonstrating how to check undo and redo settings in Oracle. SELECT value AS undo_retention_seconds FROM v$parameter WHERE name='undo_retention'; SELECT GROUP#, STATUS, BYTES/1024/1024 MB_SIZE FROM V$LOG ORDER BY 1; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值