Oracle 10g : rman恢复时候数据文件的自动创建
select name,status from v$datafile;
select * from v$recover_file;
drop tablespace test including contents and datafiles;
drop user test cascade;
create tablespace test datafile 'F:ORACLEPRODUCT10.1.0ORADATATESTtest.dbf' size 10m;
create user test identified by test default tablespace test;
grant dba to test;
conn test/test
create table t1 (n1 number);
insert into t1 values(1);
commit;
alter system switch logfile;
前言
本文通过实验简要介绍Oracle10g中rman对丢失文件的自动处理,避免了以前版本在恢复时手工创建丢失数据文件的麻烦。
假设对以下场景中丢失的数据文件进行恢复:
第1,2种恢复均使用以下的测试数据,其中2使用了恢复目录.
A. 数据库创建后用rman备份整个数据库
RMAN> connect target
连接到目标数据库: TEST (DBID=1838111476)
RMAN> backup database;
启动 backup 于 19-10月-04
正在使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=135 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=F:ORACLEPRODUCT10.1.0ORADATATESTSYSTEM01.DBF
输入数据文件 fno=00003 name=F:ORACLEPRODUCT10.1.0ORADATATESTSYSAUX01.DBF
输入数据文件 fno=00002 name=F:ORACLEPRODUCT10.1.0ORADATATESTUNDOTBS01.DBF
输入数据文件 fno=00004 name=F:ORACLEPRODUCT10.1.0ORADATATESTUSERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 19-10月-04
通道 ORA_DISK_1: 已完成段 1 于 19-10月-04
段 handle=D:RMANBACKUPTEST1G2UFR8_1_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:15
完成 backup 于 19-10月-04
启动 Control File and SPFILE Autobackup 于 19-10月-04
段 handle=D:RMANBACKUPTESTC-1838111476-20041019-01 comment=NONE
完成 Control File and SPFILE Autobackup 于 19-10月-04
RMAN>
B. 创建新的表空间,并在新的表空间中加入测试数据,归档当前日志
> conn sys/manager@test10g as sysdba
已连接。
> create tablespace test datafile 'F:ORACLEPRODUCT10.1.0ORADATATESTtest.dbf' size 10m;
表空间已创建。
>
> create user test identified by test default tablespace test;
用户已创建
> grant dba to test;
授权成功。
> @conn test/test@test10g
已连接。
test@GZSERVER> create table t1 (n1 number);
表已创建。
test@GZSERVER> insert into t1 values(1);
已创建 1 行。
test@GZSERVER> commit;
提交完成。
test@GZSERVER>
test@GZSERVER> alter system switch logfile;
系统已更改。
test@GZSERVER> alter system switch logfile;
系统已更改。
C. 删除新表空间的数据文件
对第1种情况执行:
test@GZSERVER> alter tablespace test offline immediate;
表空间已更改。
test@GZSERVER>
-- 手工删除数据文件
查询select name,status from v$datafile;看到该数据文件状态为RECOVER
F:ORACLEPRODUCT10.1.0ORADATATESTTEST.DBF RECOVER
对第2种情况:
-- 关闭数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
-- 删除数据文件,删除控制文件
-- 启动数据库
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145488364 bytes
Database Buffers 25165824 bytes
Redo Buffers 524288 bytes
ORA-00205: error in identifying controlfile, check alert log for more info
SQL> shutdown immedidate;
SP2-0717: illegal SHUTDOWN option
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145488364 bytes
Database Buffers 25165824 bytes
Redo Buffers 524288 bytes
SQL>
1. 控制文件没有丢失
控制文件保存有最新的数据库信息。
重启数据库:
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145488364 bytes
Database Buffers 25165824 bytes
Redo Buffers 524288 bytes
Database mounted.
Database opened.
-- 用rman进行恢复
RMAN> restore tablespace "TEST";
启动 restore 于 19-10月-04
使用通道 ORA_DISK_1
创建数据文件 fno = 5 名称 = F:ORACLEPRODUCT10.1.0ORADATATESTTEST.DBF
没有完成恢复; 所有文件均为只读或脱机文件或者已经恢复
完成 restore 于 19-10月-04
RMAN> recover tablespace "TEST";
启动 recover 于 19-10月-04
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 7 已作为文件 E:ARCHIVETESTTEST_7_1_539965048.ARC 存在于磁
盘上
存档日志线程 1 序列 8 已作为文件 E:ARCHIVETESTTEST_8_1_539965048.ARC 存在于磁
盘上
存档日志线程 1 序列 9 已作为文件 E:ARCHIVETESTTEST_9_1_539965048.ARC 存在于磁
盘上
存档日志文件名 =E:ARCHIVETESTTEST_7_1_539965048.ARC 线程 =1 序列 =7
完成介质的恢复
完成 recover 于 19-10月-04
RMAN>
RMAN> sql 'alter tablespace test online';
sql 语句: alter tablespace test online
RMAN>
-- sqlplus
test@GZSERVER> select *from t1;
N1
----------
1
test@GZSERVER>
成功进行恢复.
2. 当前控制文件丢失
如果没有在监听器中配置数据库服务会出现如下错误:
RMAN> connect target sys/manager@test10g
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
ORA-12528: TNS: 监听程序: 所有适用的例程都不允许建立新的连接
如果没有手工配置监听器中的数据库服务,连接的时候会出现如下错误:
D:oracleproduct10.1.0BIN>rman target sys/manager@test10g catalog imis10g
恢复管理器: 版本10.1.0.2.0 - Production
Copyright (c) 1995, 2004, Oracle. All rights reserved.
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-12528: TNS: 监听程序: 所有适用的例程都不允许建立新的连接
原因可以从下面信息中获得:
服务 "test" 包含 1 个例程。
例程 "test", 状态 BLOCKED, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
命令执行成功
手工配置监听重启监听器后:
服务 "test" 包含 2 个例程。
例程 "test", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:1 已被拒绝:0
LOCAL SERVER
例程 "test", 状态 BLOCKED, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
命令执行成功
用rman可以登录到目标数据库中:
D:oracleproduct10.1.0BIN>rman target sys/manager@test10g catalog imis10g
恢复管理器: 版本10.1.0.2.0 - Production
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21595/,如需转载,请注明出处,否则将追究法律责任。