Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  302 随笔 :: 26 文章 :: 82 评论 :: 0 Trackbacks
数据库的恢复
 
 
 
一、恢复类型:
 
    使用RMAN做的备份只能通过RMAN进行恢复,恢复分为两种:数据库修复(Restore)数据库恢复(Recover)
    Restore:指用备份文件来替换已损坏的数据库文件。操作时会利用恢复目录来获取备份信息(如果没有恢复目录则使用数据库的控制文件)
    Recover:利用重做日志或增量备份来重建丢失的数据。
 
 
二、恢复数据库:
 
    恢复数据库必须使数据库处于加载状态:
    RMAN> Shutdown immediate;
    RMAN> Startup mount;
 
    RMAN> Restore database;
    RMAN> Recover database delete archivelogs skip tablespace temp;
 
    RMAN> Alter database open;
 
    注意:
    1、skip指跳过某文件类型
    2、若数据库是非归档模式,则必须使用RMAN> Alter database open resetlogs
 
 
三、恢复表空间:
 
    RMAN> Shutdown immediate;
    RMAN> Startup mount;
    RMAN> SQL 'Alter tablespace users offline immediate';
 
    RMAN> Restore tablespace users;
    RMAN> Recover tablespace users;
 
    RMAN> SQL 'Alter tablespace users online' ;
    RMAN> Alter database open;
 
 
四、恢复数据文件:
 
    RMAN> Shutdown immediate;
    RMAN> Startup mount;
    RMAN> SQL 'Alter tablespace datafile 7 offline';
 
    RMAN> Restore datafile 7;
    RMAN> Recover datafile 7;
 
    RMAN> SQL 'Alter tablespace datafile 7 online' ;
    RMAN> Alter database open;
 
    附:文件号查询SQL
    select ts.tablespace_name, df.file_name, df.file_id, tf.file_name
    from dba_tablespaces ts, dba_data_files df, dba_temp_files tf
    where ts.tablespace_name = df.tablespace_name(+)
    and ts.tablespace_name = tf.tablespace_name(+)
 
五、恢复控制文件:
 
    RMAN> Shutdown immediate;
    RMAN> Startup nomount;
 
    RMAN> Restore controlfile to 'xxxxxxxxxx'; --恢复控制文件
 
    RMAN> Alter database mount;
 
    RMAN> Restore database;
    RMAN> Recover database;
 
    RMAN> Alter database open;
 
 
六、不完全恢复:
 
    1、基于时间:
 
    RMAN> Run {
          Allocate channel ch1 type disk;
          Set until time ' 06-OCT-08 10:00:00 ';
          Restore database;
          Recover database;
          SQL 'alter database open resetlogs';}
 
    2、基于日志序列号:
 
    RMAN> Run {
          Allocate channel ch1 type disk;
          Set until logseq=2 thread=4;  --日志序号;文件线程号
          Restore database;
          Recover database;
          SQL 'alter database open resetlogs';}
 
    3、基于更改:
 
    RMAN> Run {
          Allocate channel ch1 type disk;
          Set until scn n;  --事务号
          Restore database;
          Recover database;
          SQL 'alter database open resetlogs';}
 
 
七、示例,直接copy来的
 

C:\Documents and Settings\Administrator>sqlplus /nolog

 

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 7 18 10:17:44 2007

 

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

 

SQL> conn jss/jss

已连接。

SQL> create table tmp3(col varchar2(50));

###### 创建一个临时表并插入一些数据

表已创建。

 

SQL> insert into tmp3 values ('test1');

 

已创建 1 行。

 

SQL> insert into tmp3 values ('test2');

 

已创建 1 行。

 

SQL> insert into tmp3 values ('test3');

 

已创建 1 行。

 

SQL> select *from tmp3;

 

COL

--------------------------------------------------

test1

test2

test3

 

SQL> commit;

 

提交完成。

 

SQL> conn / as sysdba    #### dba 用户连接并关闭数据库

已连接。

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

 

SQL> host del F:\OraHome1\oradata\jssweb\jweb.ora

###### 手动删除数据文件

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  143727516 bytes

Fixed Size                   453532 bytes

Variable Size             109051904 bytes

Database Buffers           33554432 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

ORA-01157: 无法标识 / 锁定数据文件 10 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 10: 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA'

 

####### 看看,启动报错了吧

SQL> select instance_name,status from v$instance;

####### 看看当前数据库状态,应该是处于 mount

INSTANCE_NAME    STATUS

---------------- ------------

jssweb           MOUNTED

 

OK, 下面该 RMAN 出马了。

SQL>exit

C:\Documents and Settings\Administrator>set oracle_sid=jssweb

 

C:\Documents and Settings\Administrator>rman target /

 

恢复管理器 : 版本 9.2.0 .1.0 - Production

 

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

 

连接到目标数据库 : JSSWEB (DBID=3391142503)

 

RMAN> restore datafile 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA';

#### 首先修复数据文件。 是不是有疑问,为什么不像上面第三节讲的那样先将该数据文件置为脱机,笨啊你,数据库都没打开,脱什么机啊,整个数据库现在都是脱机的。

启动 restore 18-7 -07

 

正在使用目标数据库控制文件替代恢复目录

分配的通道 : ORA_DISK_1

通道 ORA_DISK_1: sid=11 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集

通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件

正将数据文件 00010 恢复到 F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA

通道 ORA_DISK_1: 已恢复备份段 1

handle=D:\BACKUP\1AIN4JU5_1_1 tag=TAG20070718T092837 params=NULL

通道 ORA_DISK_1: 恢复完成

完成 restore 18-7 -07

 

RMAN> recover datafile 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA';

######## 恢复数据文件

启动 recover 18-7 -07

使用通道 ORA_DISK_1

 

正在开始介质的恢复

完成介质的恢复

 

完成 recover 18-7 -07

 

RMAN> alter database open;   ######## 看起来很顺利,打开数据库看看

 

数据库已打开

 

RMAN> host;

 

Microsoft Windows [ 版本 5.2.3790]

(C) 版权所有 1985-2003 Microsoft Corp.

 

C:\Documents and Settings\Administrator>sqlplus jss/jss  #### 连到该用户

 

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 7 18 10:33:50 2007

 

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

 

连接到 :

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

 

SQL> select *from tmp3;     ######查询我们备份后创建的表

 

COL

--------------------------------------------------

test1

test2

test3

#######yeah, 成功恢复,没有数据丢失。

SQL>





-The End-

posted on 2008-09-15 16:33 decode360-3 阅读(194) 评论(0)  编辑  收藏 所属分类: Oracle

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问