[20150619]undo文件损坏或者丢失的恢复1

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

--昨天别人问一些undo文件损坏或者丢失的恢复,实际上如果正常关机,undo文件丢失,恢复是很容易的。
--这些以前应该也做过,重复做1个记录:

1.测试环境:

SCOTT@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 (14,'ddd');
1 row created.

SCOTT@test> commit ;
Commit complete.

SCOTT@test> select * from t where id=14;
          ID NAME
------------ --------------------
          14 ddd

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

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> select open_mode from v$database ;
OPEN_MODE
----------
MOUNTED

SYS@test> alter database datafile 2 offline drop;
Database altered.

SYS@test> alter database open;
Database altered.
--OK正常启动。

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

SYS@test> insert into scott.t values (15,'eee');
insert into scott.t values (15,'eee')
                  *
ERROR at line 1:
ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'
--无法在普通表空间做dml操作。

--要建立新的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-01109: database not open

Database dismounted.
ORACLE instance shut down.
SYS@test> startup nomount
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

SYS@test> alter system set undo_tablespace=UNDOTBS2 scope=spfile;
System altered.

SYS@test> shutdown immediate ;
ORA-01507: database not mounted
ORACLE instance shut down.

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.
Database opened.

SYS@test> insert into scott.t values (15,'eee');
1 row created.

SYS@test> commit ;
Commit complete.

SYS@test> drop tablespace undotbs1;
Tablespace dropped.

--OK,这样基本恢复完成了。

时间: 2024-09-20 18:53:45

[20150619]undo文件损坏或者丢失的恢复1的相关文章

[20150619]undo文件损坏或者丢失的恢复3

[20150619]undo文件损坏或者丢失的恢复3.txt --实际上前面的测试是非常理想情况下的测试,真实的情况肯定比上面介绍的复杂. --一般情况下,数据库异常关机,最容易出现的是在线redo损坏,一般通过隐含参数_allow_resetlogs_corruption跳过. SYS@test> @ &r/hide _allow_resetlogs_corruption NAME                         DESCRIPTION                   

[HOWTO]SQL Server2000数据库文件损坏的时候如何恢复

server|恢复|数据|数据库 数据库文件损坏的时候如何恢复 欢迎大家同我交流:小白  enhydra_boy@tom.com 欢迎转载,请保留本声明,谢谢! SQL Server2000中,如果数据库文件(非系统数据库文件)遇到错误的时候,我们该怎么办.以下是笔者以前的笔记.仅适用于非master,msdb的数据库. 说明如下: 1 建一个测试数据库test(数据库类型为完全)2 建一个表,插入点记录  create table a(c1 varchar(2))  go  insert in

Oracle重做日志文件损坏或丢失后的恢复

很多网友在把某个数据库实例的REDO01~03.LOG三个重做日志删掉后,会出现无法正常登陆数据库的现象,下面的示例是具体的恢复过程,希望能为大家解决难题: 一: c:/>sqlplus /nolog 二: sql>connect /@instancename as sysdba; 三: startup mount; --启动实例,安装数据库,但不打开数据库, 可以开始操作控制文件.日志文件.数据文件等. 四: select * from v$logfile; --察看Redo文件的信息 五;

Win7无法启动提示Hal.dll损坏或丢失怎么办

  我们在使用Win7系统的时候,出现电脑无法进行启动开机,提示"<Windows root>system32hal.dll 损坏或丢失,导致Windows无法启动.那么出现这样的问题,我们要怎样进行解决呢?下面就和小编一起看看Win7系统无法启动提示Hal.dll损坏或丢失的解决方法. 一.出现Windows无法启动提示hal.dll损坏或丢的原因有: 1.GHOST系统引起,GHOST原封装的系统文件与品牌主机分区类型不一起引起(品牌电脑大多数有隐藏分区); 2.偶然的系统非正常

解决Windows无法启动提示hal.dll损坏或丢失的方法

  1.GHOST系统引起,GHOST原封装的系统文件与品牌主机分区类型不一起引起(品牌电脑大多数有隐藏分区); 2.偶然的系统非正常关机后,开机就无法启动,使用系统修复盘修复提示system32//hal.dll这个文件损坏或丢失; 3.超频也可能导致系统文件损坏,提示system32//hal.dll损坏或丢失; 4.是内存的故障,把内存条拔下来擦下金手指上的污垢,检查下是否插紧再试试,或者找一条确保正常的内存条安装上先测试下,排除到底是不是内存条的问题! 下面就为大家说说提示hal.dll

【恢复】Redo日志文件丢失的恢复

第一章 Redo日志文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对Redo日志进行多路镜像.需要注意的是,RMAN不能备份联机Redo日志文件.所以,联机Redo日志一旦出现故障,则只能进行清除日志了.清除日志文件即表明可以重用该文件. 1.1.1  数据库归档/非归档模式下inactive redo异常ORA-003

联机日志文件损坏后的恢复方法

恢复 昨天遇到一个Oracle数据库的问题,环境是:Windows2000+Oracle9i.使用windows关机重启后,oracle无法连接,当用startup启动时总是报ORA-00333错误,检查Oracle文档对此问题的描述,如下:ORA-00333 redo log read error block string count stringCause: An I/O error occurred while reading the log described in theaccompa

所有控制文件损坏的恢复--resetlogs方式

        此方式和 所有控制文件损坏的恢复--noresetlogs方式恢复时的前五个步骤是一样的. 1)先备份控制文件            SQL> alter database backup controlfile to 'f:\lib\control.ctl' reuse;数据库已更改.2)生成跟踪文件. SQL> alter database backup controlfile to trace;数据库已更改.SQL> @f:\sql\gettrace.sql---一个

数据库文件损坏的恢复方法

  说明如下:SQL Server 2000文件损坏的恢复 1.建一个测试数据库test(数据库类型为完全). 2.建一个表,插入点记录. create table a(c1 varchar(2)) go insert into a values('aa') go insert into a values('bb') go 3.作完全备份,到文件test_1.bak. 4.在作一点修改. insert into a values('cc') go create table b(c1 int) g