博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[20150619]undo文件损坏或者丢失的恢复2
阅读量:5751 次
发布时间:2019-06-18

本文共 6913 字,大约阅读时间需要 23 分钟。

[20150619]undo文件损坏或者丢失的恢复2.txt

--昨天别人问一些undo文件损坏或者丢失的恢复,如果不正常关机,undo文件丢失,恢复与正常关机存在不同。

--因为可能有事务在回滚段没有提交,这样启动时要进行instance恢复,在恢复时要读取回滚段,由于不存在导致一些错误,m
--必须修改一些参数略过实例恢复的回滚操作。

--通过例子来说明:

1.测试建立:

SYS@test> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- ----------------------------------------------------------------
x86_64/Linux 2.4.xx            10.2.0.4.0     Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

SCOTT@test> insert into t values (15,'eee');

1 row created.

--不提交。

SCOTT@test> @ &r/xid

X
------------------------------
10.21.11527

XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBAREC UBASQN STATUS USED_UBLK USED_UREC XID              ADDR             START_DATE          C70

------ ------- ------ ------ ------ ------ ------ ------ --------- --------- ---------------- ---------------- ------------------- ----------------------------------------------------------------------
    10      21  11527      2   5471     37   5281 ACTIVE         1         2 0A001500072D0000 000000007A702768 2015-06-19 09:00:42 ALTER SYSTEM DUMP UNDO BLOCK '_SYSSMU10$' XID 10 21 11527;
                                                                                                                                   ALTER SYSTEM DUMP UNDO HEADER '_SYSSMU10$';
SCOTT@test> select us#,name from sys.undo$;
         US# NAME
------------ --------------------
           0 SYSTEM
           1 _SYSSMU1$
           2 _SYSSMU2$
           3 _SYSSMU3$
           4 _SYSSMU4$
           5 _SYSSMU5$
           6 _SYSSMU6$
           7 _SYSSMU7$
           8 _SYSSMU8$
           9 _SYSSMU9$
          10 _SYSSMU10$
          11 _SYSSMU11$
          12 _SYSSMU12$
          13 _SYSSMU13$
          14 _SYSSMU14$
          15 _SYSSMU15$
          16 _SYSSMU16$
          17 _SYSSMU17$
          18 _SYSSMU18$
          19 _SYSSMU19$
          20 _SYSSMU20$
          21 _SYSSMU21$
          22 _SYSSMU22$
          23 _SYSSMU23$
          24 _SYSSMU24$
          25 _SYSSMU25$
          26 _SYSSMU26$
          27 _SYSSMU27$
          28 _SYSSMU28$
          29 _SYSSMU29$
          30 _SYSSMU30$
          31 _SYSSMU31$
          32 _SYSSMU32$
          33 _SYSSMU33$
          34 _SYSSMU34$
          35 _SYSSMU35$
          36 _SYSSMU36$
          37 _SYSSMU37$
          38 _SYSSMU38$
          39 _SYSSMU39$
          40 _SYSSMU40$
          41 _SYSSMU41$
          42 _SYSSMU42$
          43 _SYSSMU43$
          44 _SYSSMU44$
          45 _SYSSMU45$
          46 _SYSSMU46$
          47 _SYSSMU47$
          48 _SYSSMU48$
          49 _SYSSMU49$

50 rows selected.

SCOTT@test> show parameter undo

NAME              TYPE     VALUE
----------------- -------- --------------
undo_management   string   AUTO
undo_retention    integer  900
undo_tablespace   string   UNDOTBS1

SYS@test> shutdown abort

ORACLE instance shut down.

2.做一个冷备份:
--步骤忽略

$  cd /mnt/ramdisk/test/

$  mv undotbs01.dbf undotbs01.dbf_org

3.开始测试:

SYS@test> startup
ORACLE instance started.

Total System Global Area    473956352 bytes

Fixed Size                    2084776 bytes
Variable Size               260046936 bytes
Database Buffers            201326592 bytes
Redo Buffers                 10498048 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/mnt/ramdisk/test/undotbs01.dbf'

SYS@test> select open_mode from v$database ;

OPEN_MODE
----------
MOUNTED

SYS@test> create pfile from spfile ;

File created.

--修改2行。

*.undo_management='MANUAL'
*.undo_tablespace='SYSTEM'

--再次启动:

SYS@test> startup pfile=//u01/app/oracle/product/10.2.0/db_1/dbs/inittest.ora
ORACLE instance started.
Total System Global Area    473956352 bytes
Fixed Size                    2084776 bytes
Variable Size               260046936 bytes
Database Buffers            201326592 bytes
Redo Buffers                 10498048 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/mnt/ramdisk/test/undotbs01.dbf'

SYS@test> alter database datafile 2 offline drop;

Database altered.

SYS@test> alter database open ;

alter database open
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 2 cannot be read at this time
ORA-01110: data file 2: '/mnt/ramdisk/test/undotbs01.dbf'

SYS@test> select open_mode from v$database ;

OPEN_MODE
----------
READ WRITE

--不过已经打开数据库。

--要建立新的undo表空间:

CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE

  '/mnt/ramdisk/test/undotbs02.dbf' SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
ONLINE
RETENTION NOGUARANTEE
BLOCKSIZE 8K
FLASHBACK ON;

4.修改参数undo_tablespace=UNDOTBS2.

SYS@test> shutdown immediate ;

ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 2 cannot be read at this time
ORA-01110: data file 2: '/mnt/ramdisk/test/undotbs01.dbf'
--主要由于有事务在回滚段表空间undotbs1,读取时错误。

--从alert*.log文件,可以确定这些undo segment 需要 needs recovery。
*** 2015-06-19 09:17:56.644
SMON: about to recover undo segment 1
SMON: mark undo segment 1 as needs recovery
SMON: about to recover undo segment 2
SMON: mark undo segment 2 as needs recovery
SMON: about to recover undo segment 3
SMON: mark undo segment 3 as needs recovery
SMON: about to recover undo segment 4
SMON: mark undo segment 4 as needs recovery
SMON: about to recover undo segment 5
SMON: mark undo segment 5 as needs recovery
SMON: about to recover undo segment 6
SMON: mark undo segment 6 as needs recovery
SMON: about to recover undo segment 7
SMON: mark undo segment 7 as needs recovery
SMON: about to recover undo segment 8
SMON: mark undo segment 8 as needs recovery
SMON: about to recover undo segment 9
SMON: mark undo segment 9 as needs recovery
SMON: about to recover undo segment 10
SMON: mark undo segment 10 as needs recovery

SYS@test> select SEGMENT_NAME,STATUS from dba_rollback_segs;

SEGMENT_NAME         STATUS
-------------------- ----------------
SYSTEM               ONLINE
_SYSSMU1$            NEEDS RECOVERY
_SYSSMU2$            NEEDS RECOVERY
_SYSSMU3$            NEEDS RECOVERY
_SYSSMU4$            NEEDS RECOVERY
_SYSSMU5$            NEEDS RECOVERY
_SYSSMU6$            NEEDS RECOVERY
_SYSSMU7$            NEEDS RECOVERY
_SYSSMU8$            NEEDS RECOVERY
_SYSSMU9$            NEEDS RECOVERY
_SYSSMU10$           NEEDS RECOVERY
_SYSSMU11$           OFFLINE
_SYSSMU12$           OFFLINE
_SYSSMU13$           OFFLINE
....
_SYSSMU59$           OFFLINE

60 rows selected.

SYS@test> alter system checkpoint;

System altered.

--没有办法只能abort关闭数据库。

SYS@test> shutdown abort
ORACLE instance shut down.

5.修改pfile文件:

*._corrupted_rollback_segments='_SYSSMU1$'
*._corrupted_rollback_segments='_SYSSMU2$'
*._corrupted_rollback_segments='_SYSSMU3$'
*._corrupted_rollback_segments='_SYSSMU4$'
*._corrupted_rollback_segments='_SYSSMU5$'
*._corrupted_rollback_segments='_SYSSMU6$'
*._corrupted_rollback_segments='_SYSSMU7$'
*._corrupted_rollback_segments='_SYSSMU8$'
*._corrupted_rollback_segments='_SYSSMU9$'
*._corrupted_rollback_segments='_SYSSMU10$'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS2'

SYS@test> startup mount pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/inittest.ora

ORACLE instance started.
Total System Global Area    473956352 bytes
Fixed Size                    2084776 bytes
Variable Size               260046936 bytes
Database Buffers            201326592 bytes
Redo Buffers                 10498048 bytes
Database mounted.
SYS@test>

SYS@test> show parameter undo

NAME              TYPE     VALUE
----------------- -------- ---------
undo_management   string   AUTO
undo_retention    integer  900
undo_tablespace   string   UNDOTBS2

SYS@test> alter database open ;

Database altered.

SYS@test> select open_mode from v$database ;

OPEN_MODE
----------
READ WRITE

SYS@test> select * from scott.t where id=15;
          ID NAME
------------ ----------------------------------------
          15 eee

--看到了没有提交的数据这个是由于无法访问表空间untotbs1对应的回滚段,导致恢复仅仅前滚,没有做回滚操作(我的事务没有提交),

--这种恢复会导致数据的"一致性"存在问题。

5.恢复收尾工作:

SYS@test> drop tablespace undotbs1;
Tablespace dropped.

SCOTT@test> insert into scott.t values (16,'fff');

1 row created.

SCOTT@test> commit ;

Commit complete.

转载地址:http://fqukx.baihongyu.com/

你可能感兴趣的文章
深克隆与序列化效率的比较
查看>>
lamp+nginx代理+discuz+wordpress+phpmyadmin搭建一
查看>>
nagios监控使用139邮箱报警
查看>>
Windows Phone 7 中各种Task解说(启动器与选择器)
查看>>
罗森伯格助力2011年中国智能建筑技术发展应用论坛哈尔滨站
查看>>
网络割接
查看>>
mysql主从复制及失败切换
查看>>
windows server 2016 活动目录(二)
查看>>
openstack G版 修改vm的flavor级别
查看>>
python_控制台输出带颜色的文字方法
查看>>
java泛型中特殊符号的含义
查看>>
一秒 解决 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql 问题
查看>>
Android组件化最佳实践 ARetrofit原理
查看>>
舍弃浮躁, 50条重要的C++学习建议
查看>>
同步手绘板——将View的内容映射成Bitmap转图片导出
查看>>
虚拟机安装OS_X_Lion 反复注册问题
查看>>
【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!...
查看>>
微信小程序之wx.navigateback往回携带参数
查看>>
陌陌和请吃饭之类的应用,你要是能玩转,那就厉害了
查看>>
递归的运行机制简单理解
查看>>