ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (恢复-rman基于控制文件的恢复)

oracle实验记录 (恢复-rman基于控制文件的恢复)

原创 Linux操作系统 作者:fufuh2o 时间:2009-09-15 12:02:27 0 删除 编辑

当前控制文件中没 test tablespace的信息了~应该用备份控制文件恢复or重新建立控制文件

(下面先使用current controlfile)

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已选择6行。

SQL> create  tablespace test datafile 'd:\test.dbf'  reuse;

表空间已创建。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已选择7行。

RMAN> backup database;

启动 backup 于 2009-09-14 17:49:16

完成 backup 于 2009-09-14 17:50:17


RMAN> list backup of tablespace 'TEST';


备份集列表
===================

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ -------------------
90      Full    644.78M    DISK        00:00:51     2009-09-14 17:50:07
        BP 关键字: 150   状态: AVAILABLE  已压缩: NO  标记: TAG20090914T174916
段名:E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_14\O1_MF_N
NNDF_TAG20090914T174916_5BW4DXN0_.BKP
  备份集 90 中的数据文件列表
  文件 LV 类型 Ckp SCN    Ckp 时间            名称
  ---- -- ---- ---------- ------------------- ----
  6       Full 1628096    2009-09-14 17:49:17 D:\TEST.DBF

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1628151

SQL> drop tablespace test including contents and datafiles;

表空间已删除。
RMAN> list backup of tablespace 'TEST';

RMAN-03002: list 命令 (在 09/14/2009 17:52:14 上) 失败
RMAN-20202: 在恢复目录中未找到表空间
RMAN-06019: 无法转换表空间名称"TEST"~~~~~~~~~~~~~~~~~~~~~~~~~~~~因为使用的controlfile当恢复目录 所以 没有TEST TABLESPACE的信息了

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已选择6行。
RMAN> run{startup force mount;
2> set until scn=1628151;
3> restore database;
4> }

Oracle 实例已启动
数据库已装载

系统全局区域总计     612368384 字节

Fixed Size                     1250428 字节
Variable Size                239078276 字节
Database Buffers             364904448 字节
Redo Buffers                   7135232 字节

正在执行命令: SET until clause

启动 restore 于 2009-09-14 17:56:10
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=158 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
正将数据文件00002恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
正将数据文件00003恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
正将数据文件00004恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
正将数据文件00005恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
正将数据文件00009恢复到E:\SYSDATAFILE2.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B
ACKUPSET\2009_09_14\O1_MF_NNNDF_TAG20090914T174916_5BW4DXN0_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_14\O1_
MF_NNNDF_TAG20090914T174916_5BW4DXN0_.BKP 标记 = TAG20090914T174916
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:55
完成 restore 于 2009-09-14 17:57:10

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已选择6行。
RMAN> run{set until scn=1628151;
2> recover database;
3> }

正在执行命令: SET until clause

启动 recover 于 2009-09-14 17:59:41
使用通道 ORA_DISK_1

正在开始介质的恢复
介质恢复完成, 用时: 00:00:09

完成 recover 于 2009-09-14 17:59:58

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已选择6行。

RMAN> alter database open resetlogs;

数据库已打开


SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00006~~~~~~~~~~~~~~~~~~~~~~~~~~~
E:\SYSDATAFILE2.DBF

已选择7行。
SQL> col tablespace_name format a10
SQL> col file_name format a50
SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
TEST       E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           6

EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F


TABLESPACE FILE_NAME
---------- --------------------------------------------------
SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
SYSTEM     E:\SYSDATAFILE2.DBF

已选择7行。
SQL> alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000
6' to 'd:\test.dbf';
alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00006' to
 'd:\test.dbf'
*
第 1 行出现错误:
ORA-01511: 重命名日志/数据文件时出错
ORA-01141: 重命名数据文件 6 时出错 - 未找到新文件 'd:\test.dbf'
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6: 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING00006'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

已经无法恢复
看alert.log中记载

Dictionary check beginning
Tablespace 'TEST' #7 found in data dictionary,~~~~~~~~~~~~~~~~~~~~~~~~~
but not in the controlfile. Adding to controlfile.
File #6 found in data dictionary but not in controlfile.~~~~~~~~~~~~~~~~~~~~~~~~~~~
Creating OFFLINE file 'MISSING00006' in the controlfile.
This file can no longer be recovered so it must be dropped.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~必须drop了
Dictionary check complete


~~~~~~~~~~~~~~~~~~手动实验下

SQL> create tablespace test datafile 'd:\test.dbf' size 10m;

表空间已创建。
SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
TEST       D:\TEST.DBF
SYSTEM     E:\SYSDATAFILE2.DBF

已选择7行。
SQL> select name from v$datafile;

NAME
------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSTEM01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\UNDOTBS01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSAUX01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\USERS01.DBF

NAME
------------------------------

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\EXAMPLE01.DBF

D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已选择7行。

SQL> alter database begin backup;

数据库已更改。

SQL> @d:\backup\backupscript.txt
已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

SQL> alter database end backup;

数据库已更改。
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1653723

SQL> drop tablespace test including contents and datafiles;

表空间已删除。

SQL> startup force mount;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             255855492 bytes
Database Buffers          348127232 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
SQL> @d:\restore\restoredbf.txt
已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

已复制         1 个文件。

SQL> recover database until change 1653723;
完成介质恢复。
SQL>
SQL> select name from v$datafile;

NAME
------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSTEM01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\UNDOTBS01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSAUX01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\USERS01.DBF

NAME
------------------------------

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\EXAMPLE01.DBF

E:\SYSDATAFILE2.DBF

已选择6行。

SQL> alter database open resetlogs;

数据库已更改。


SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
TEST       E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000******************
           6

TABLESPACE FILE_NAME
---------- --------------------------------------------------

SYSTEM     E:\SYSDATAFILE2.DBF

已选择7行。
SQL> alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\MISSING0000
6' to 'd:\test.dbf';

数据库已更改。

SQL> create table t1 (a int) tablespace test;
create table t1 (a int) tablespace test
*
第 1 行出现错误:
ORA-01658: 无法为表空间 TEST 中的段创建 INITIAL 区


SQL> alter database datafile 6 online;
alter database datafile 6 online
*
第 1 行出现错误:
ORA-01190: 控制文件或数据文件 6 来自最后一个 RESETLOGS 之前
ORA-01110: 数据文件 6: 'D:\TEST.DBF'

可以看到从备份用脚本restore回来后~~没有执行恢复还是备份时候的文件


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~通过一遍手动的实验 可以看到因为controlfile中没有test.dbf的信息了~~所以应用redo时候表空间虽然恢复了,但数据文件没恢复

 

 

下面用备份controlfile恢复 (RMAN)
SQL> create tablespace test datafile 'd:\test.dbf' size 10m;

表空间已创建。

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
TEST       D:\TEST.DBF
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
SYSTEM     E:\SYSDATAFILE2.DBF

已选择7行。

SQL> select name from v$datafile;

NAME
------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSTEM01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\UNDOTBS01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSAUX01.DBF

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\USERS01.DBF

NAME
------------------------------

E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\EXAMPLE01.DBF

D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已选择7行。
RMAN> backup database;
完成 backup 于 15-9月 -09

RMAN> list backup of controlfile;


备份集列表
===================

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
95      Full    7.17M      DISK        00:00:03     15-9月 -09
        BP 关键字: 155   状态: AVAILABLE  已压缩: NO  标记: TAG20090915T111041
段名:E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_15\O1_MF_N
CSNF_TAG20090915T111041_5BY1HCDP_.BKP
  包括的控制文件: Ckp SCN: 1656570      Ckp 时间: 15-9月 -09

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1656664

SQL> drop tablespace test including contents and datafiles;

RMAN> run{startup force mount;
2> set until scn=1656664;~~~~设置恢复到哪
3> restore controlfile from 'E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACK~~~~~~~~~~~~~~~~~~~~~restore备份的控制文件
UPSET\2009_09_15\O1_MF_NCSNF_TAG20090915T111041_5BY1HCDP_.BKP';
4> restore database;
5> recover database;
6> alter database open resetlogs;}
Oracle 实例已启动

系统全局区域总计     612368384 字节

Fixed Size                     1250428 字节
Variable Size                239078276 字节
Database Buffers             364904448 字节
Redo Buffers                   7135232 字节

启动 restore 于 15-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=158 devtype=DISK

通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:05
输出文件名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
输出文件名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
输出文件名=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
完成 restore 于 15-9月 -09

数据库已装载
释放的通道: ORA_DISK_1

正在执行命令: SET until clause

启动 restore 于 15-9月 -09
启动 implicit crosscheck backup 于 15-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=158 devtype=DISK
已交叉检验的 1 对象
完成 implicit crosscheck backup 于 15-9月 -09

启动 implicit crosscheck copy 于 15-9月 -09
使用通道 ORA_DISK_1
已交叉检验的 15 对象
完成 implicit crosscheck copy 于 15-9月 -09

搜索恢复区域中的所有文件
正在编制文件目录...
目录编制完毕

已列入目录的文件的列表
=======================
文件名: E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_15\O1_M
F_NCSNF_TAG20090915T111041_5BY1HCDP_.BKP

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
正将数据文件00002恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
正将数据文件00003恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
正将数据文件00004恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
正将数据文件00005恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
正将数据文件00006恢复到D:\TEST.DBF~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~RESTORE回来了
正将数据文件00009恢复到E:\SYSDATAFILE2.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B
ACKUPSET\2009_09_15\O1_MF_NNNDF_TAG20090915T111041_5BY1FLM1_.BKP
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_15\O1_
MF_NNNDF_TAG20090915T111041_5BY1FLM1_.BKP 标记 = TAG20090915T111041
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:55
完成 restore 于 15-9月 -09

启动 recover 于 15-9月 -09
使用通道 ORA_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 1 已作为文件 E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG
存在于磁盘上
存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG 线程 =1 序列 =1
介质恢复完成, 用时: 00:00:03
完成 recover 于 15-9月 -09

数据库已打开
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已选择7行。

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
TEST
D:\TEST.DBF

EXAMPLE
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF

USERS
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF


TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSAUX
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF

UNDOTBS1
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF

SYSTEM
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF


TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSTEM
E:\SYSDATAFILE2.DBF


已选择7行。

SQL> create table t1 (a int) tablespace test;

表已创建。

SQL> insert into t1 values(1);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~已经恢复ok

已创建 1 行。

 

问题2 如果只有rman备份时候且没有备份控制文件,如何恢复~~~restoRE时候不会转储回 TEST.DBF

SQL> create tablespace test datafile 'd:\test.dbf' reuse;

表空间已创建。

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- --------------------------------------------------
TEST       D:\TEST.DBF
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DB
           F

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DB
           F

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
SYSTEM     E:\SYSDATAFILE2.DBF

已选择7行。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已选择7行。

RMAN> backup database;
完成 backup 于 15-9月 -09

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    1657559

SQL> drop tablespace test including contents and datafiles;

表空间已删除。

RMAN> run{startup force mount;
2> set until scn=1657559;
3> restore database;}
RMAN> run{startup force mount;
2> set until scn=1657559;
3> restore database;}

Oracle 实例已启动
数据库已装载

系统全局区域总计     612368384 字节

Fixed Size                     1250428 字节
Variable Size                243272580 字节
Database Buffers             360710144 字节
Redo Buffers                   7135232 字节

正在执行命令: SET until clause

启动 restore 于 15-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=157 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
正将数据文件00002恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
正将数据文件00003恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
正将数据文件00004恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF~~~~~~~~~~~~~~~看到没有restore test.dbf
正将数据文件00005恢复到E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
正将数据文件00009恢复到E:\SYSDATAFILE2.DBF
通道 ORA_DISK_1: 正在读取备份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\B
ACKUPSET\2009_09_15\O1_MF_NNNDF_TAG20090915T112736_5BY2F9L2_.BKP
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:55
完成 restore 于 15-9月 -09


~~~~~~~~~~~~~~~~手工从buckup set中提取 test.dbf的备份
  1  DECLARE
  2   devtype varchar2(256);
  3   done boolean;
  4   BEGIN
  5   devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'a');
  6   sys.dbms_backup_restore.restoreSetDatafile;
  7   sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>06,toname=>'d:\test.dbf')
;
  8   sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:\ORACLE\PROD
UCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_09_15\O1_MF_NNNDF_TAG20090915T11
2736_5BY2F9L2_.BKP', params=>null);
  9   sys.dbms_backup_restore.deviceDeallocate;
 10* END;
SQL> /

PL/SQL 过程已成功完成。

SQL> select name from v$datafile;~~~~~~~~~~~~~控制文件中没记录

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
E:\SYSDATAFILE2.DBF

已选择6行。
SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~没有test tablespace
EXAMPLE
TEMP

已选择6行。

SQL> alter database backup controlfile to trace;

数据库已更改。

SQL> startup force nomount;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             243272580 bytes
Database Buffers          360710144 bytes
Redo Buffers                7135232 bytes
SQL>
~~~~~~~~~重新建立控制文件
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'  SIZE 50M,
  9    GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'  SIZE 50M,
 10    GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG'  SIZE 50M
 11  -- STANDBY LOGFILE
 12  DATAFILE
 13    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
 14    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',
 15    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
 16    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
 17    'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
 18    'E:\SYSDATAFILE2.DBF',
 19    'd:\test.dbf'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~手动加进来
 20  CHARACTER SET ZHS16GBK
 21  ;

控制文件已创建。


已选择6行。

SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
EXAMPLE
TEST

已选择6行。

 

SQL> recover database until change 1657559;
完成介质恢复。
SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
EXAMPLE
TEST

已选择6行。

 

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
D:\TEST.DBF
E:\SYSDATAFILE2.DBF

已选择7行。

SQL> alter database open resetlogs;
SQL> col tablespace_name format a10
SQL> col file_name format a40
SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE FILE_NAME
---------- ----------------------------------------
TEST       D:\TEST.DBF~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SYSTEM     E:\SYSDATAFILE2.DBF
EXAMPLE    E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EX
           AMPLE01.DBF

USERS      E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\US
           ERS01.DBF

SYSAUX     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SY
           SAUX01.DBF


TABLESPACE FILE_NAME
---------- ----------------------------------------
UNDOTBS1   E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UN
           DOTBS01.DBF

SYSTEM     E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SY
           STEM01.DBF


已选择7行。

SQL>
SQL> create table t1 (a int) tablespace test;

表已创建。

SQL> insert into t1 values(1);

已创建 1 行。

 

 

手动恢复的话 用热备份 restore回去,然后  create controlfile(加入删除的datafile信息) 恢复即可

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12020513/viewspace-614667/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    426927