ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (恢复-表空间基于时间点恢复(rman))

oracle实验记录 (恢复-表空间基于时间点恢复(rman))

原创 Linux操作系统 作者:fufuh2o 时间:2009-08-28 12:04:42 0 删除 编辑

 

用rman恢复非常简单,不过原理跟手动是一样一样的
C:\>set oracle_sid=orcl

C:\>rman target '/ as sysdba'

恢复管理器: Release 10.2.0.1.0 - Production on 星期五 8月 28 11:09:23 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到目标数据库: ORCL (DBID=1223510333)

RMAN> backup database;

启动 backup 于 28-8月 -09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
输入数据文件 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
输入数据文件 fno=00006 name=D:\TEST.DBF
输入数据文件 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 28-8月 -09
通道 ORA_DISK_1: 已完成段 1 于 28-8月 -09
段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_08_28\O1_MF
_NNNDF_TAG20090828T114749_59GNV6TV_.BKP 标记=TAG20090828T114749 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:03:09
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 28-8月 -09
通道 ORA_DISK_1: 已完成段 1 于 28-8月 -09
段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_08_28\O1_MF
_NCSNF_TAG20090828T114749_59GO14MK_.BKP 标记=TAG20090828T114749 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 28-8月 -09


11:48:02 SQL> conn xh/a831115
已连接。
11:51:24 SQL> create table t1 (a int) tablespace users;

表已创建。

11:51:27 SQL> create table t2 (a int) tablespace test;

表已创建。

11:51:39 SQL> insert into  t1 values(1);

已创建 1 行。

11:51:49 SQL> insert into  t2 values(1);

已创建 1 行。

11:51:55 SQL> commit;

提交完成。

11:51:57 SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     868500

11:52:08 SQL> truncate table t2;

表被截断。

11:52:13 SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     868520

11:52:15 SQL> insert into t1 values (2);

已创建 1 行。

11:52:21 SQL> commit;

提交完成。

11:52:25 SQL>  alter system switch logfile;

系统已更改。

11:52:27 SQL> select group#,status ,first_change# from v$log;

    GROUP# STATUS           FIRST_CHANGE#
---------- ---------------- -------------
         1 ACTIVE                  867754
         2 INACTIVE                867144
         3 CURRENT                 868528

11:52:28 SQL> alter system checkpoint;

系统已更改。

11:52:29 SQL> execute sys.dbms_tts.transport_set_check('TEST',true);

PL/SQL 过程已成功完成。

11:52:35 SQL> select * from sys.transport_set_violations;

未选定行

11:52:37 SQL> create table t3 (a int) tablespace test;

表已创建。


11:53:10 SQL> select owner,name,tablespace_name from sys.ts_pitr_objects_to_be_drop
ped where tablespace_name='TEST' and creation_time>to_date('2009-08-28 11:51:55','y
yyy-mm-dd hh24:mi:ss');

OWNER
------------------------------
NAME                                               TABLESPACE_NAME
-------------------------------------------------- --------------------
XH
T3                                                 TEST~~~~~~~~~~~~~~~~~~~~~~~~~~~~这个表将在恢复后丢失exp出来先

 

11:53:16 SQL> insert into t3 values(1);

已创建 1 行。

11:54:54 SQL> commit;

提交完成。


要求是与 手动一样,恢复t2 到truncate前,加了一条test tablespace上 要丢失的imp回来


C:\>exp 'system/a831115 as sysdba' tables=xh.t3   file=e:\t5.dmp

Export: Release 10.2.0.1.0 - Production on 星期五 8月 28 11:53:52 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
当前的用户已更改为 XH
. . 正在导出表                              T3导出了           0 行
成功终止导出, 没有出现警告。

C:\>exp 'system/a831115 as sysdba' tables=xh.t3   file=e:\t3.dmp

Export: Release 10.2.0.1.0 - Production on 星期五 8月 28 11:55:02 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径...
当前的用户已更改为 XH
. . 正在导出表                              T3导出了           1 行
成功终止导出, 没有出现警告。

 

RRMAN> recover tablespace 'TEST' until scn 868500 auxiliary destination 'd:\auxiliar(以下是完整的输出 可以看到与手动过程是一样的)
y'
2> ;

启动 recover 于 28-8月 -09
使用通道 ORA_DISK_1
RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点

表空间列表要求具有 UNDO 段
表空间 SYSTEM
表空间 UNDOTBS1

使用 SID='faqm' 创建自动实例

供自动实例使用的初始化参数:
db_name=ORCL
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_ORCL_faqm
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=d:\auxiliary
control_files=d:\auxiliary/cntrl_tspitr_ORCL_faqm.f


启动自动实例 ORCL

Oracle 实例已启动

系统全局区域总计     205520896 字节

Fixed Size                     1248092 字节
Variable Size                146801828 字节
Database Buffers              50331648 字节
Redo Buffers                   7139328 字节
自动实例已创建

内存脚本的内容:
{
# set the until clause
set until  scn 868500;
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log for tspitr to a resent until time
sql 'alter system archive log current';
# avoid unnecessary autobackups for structural changes during TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
}
正在执行内存脚本

正在执行命令: SET until clause

启动 restore 于 28-8月 -09
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在复原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\OR
CL\BACKUPSET\2009_08_28\O1_MF_NCSNF_TAG20090828T114749_59GO14MK_.BKP
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_08_28\O1_
MF_NCSNF_TAG20090828T114749_59GO14MK_.BKP 标记 = TAG20090828T114749
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:02
输出文件名=D:\AUXILIARY\CNTRL_TSPITR_ORCL_FAQM.F
完成 restore 于 28-8月 -09

sql 语句: alter database mount clone database

sql 语句: alter system archive log current

sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
释放的通道: ORA_DISK_1
释放的通道: ORA_AUX_DISK_1

内存脚本的内容:
{
# generated tablespace point-in-time recovery script
# set the until clause
set until  scn 868500;
plsql <<<-- tspitr_2
declare
  sqlstatement       varchar2(512);
  offline_not_needed exception;
  pragma exception_init(offline_not_needed, -01539);
begin
  sqlstatement := 'alter tablespace '||  'TEST' ||' offline for recover';
  krmicd.writeMsg(6162, sqlstatement);
  krmicd.execSql(sqlstatement);
exception
  when offline_not_needed then
    null;
end; >>>;
# set an omf destination filename for restore
set newname for clone datafile  1 to new;
# set an omf destination filename for restore
set newname for clone datafile  2 to new;
# set an omf destination tempfile
set newname for clone tempfile  1 to new;
# set a destination filename for restore
set newname for datafile  6 to
 "D:\TEST.DBF";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile  1, 2, 6;
switch clone datafile all;
#online the datafiles restored or flipped
sql clone "alter database datafile  1 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  2 online";
#online the datafiles restored or flipped
sql clone "alter database datafile  6 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace  "TEST", "SYSTEM", "UNDOTBS1" delete archivelog;
alter clone database open resetlogs;
# PLUG HERE the creation of a temporary tablespace if export fails due to lack
# of temporary space.
# For example in Unix these two lines would do that:
#sql clone "create tablespace aux_tspitr_tmp
#           datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";
}
正在执行内存脚本

正在执行命令: SET until clause

sql 语句: alter tablespace TEST offline for recover

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 D:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_TEMP_%U_.TMP


启动 restore 于 28-8月 -09
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到D:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_SYSTEM_%U_.DBF
正将数据文件00002恢复到D:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_%U_.DBF
正将数据文件00006恢复到D:\TEST.DBF
通道 ORA_AUX_DISK_1: 正在读取备份段 E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\OR
CL\BACKUPSET\2009_08_28\O1_MF_NNNDF_TAG20090828T114749_59GNV6TV_.BKP
通道 ORA_AUX_DISK_1: 已恢复备份段 1
段句柄 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2009_08_28\O1_
MF_NNNDF_TAG20090828T114749_59GNV6TV_.BKP 标记 = TAG20090828T114749
通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:35
完成 restore 于 28-8月 -09

数据文件 1 已转换成数据文件副本
输入数据文件副本 recid=11 stamp=696081426 文件名=D:\AUXILIARY\TSPITR_O\DATAFILE\O1_
MF_SYSTEM_59GOCHB8_.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 recid=12 stamp=696081426 文件名=D:\AUXILIARY\TSPITR_O\DATAFILE\O1_
MF_UNDOTBS1_59GOCHC7_.DBF

sql 语句: alter database datafile  1 online

sql 语句: alter database datafile  2 online

sql 语句: alter database datafile  6 online

启动 recover 于 28-8月 -09
使用通道 ORA_AUX_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 11 已作为文件 E:\ARCHIVELOG\ARC00011_0695918991.001.ARC 存在于
磁盘上
存档日志文件名 =E:\ARCHIVELOG\ARC00011_0695918991.001.ARC 线程 =1 序列 =11
介质恢复完成, 用时: 00:00:02
完成 recover 于 28-8月 -09

数据库已打开

内存脚本的内容:
{
# export the tablespaces in the recovery set
host 'exp userid =\"/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0=or
aclefaqm)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'ORACLE
_SID=faqm^'))(CONNECT_DATA=(SID=faqm))) as sysdba\" point_in_time_recover=y tablesp
aces=
 TEST file=
tspitr_a.dmp';
# shutdown clone before import
shutdown clone immediate
# import the tablespaces in the recovery set
host 'imp userid =\"/@ as sysdba\" point_in_time_recover=y file=
tspitr_a.dmp';
# online/offline the tablespace imported
sql "alter tablespace  TEST online";
sql "alter tablespace  TEST offline";
# enable autobackups in case user does open resetlogs from RMAN after TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;';
}
正在执行内存脚本


Export: Release 10.2.0.1.0 - Production on 星期五 8月 28 11:57:25 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
注: 将不导出表数据 (行)

即将导出表空间时间点恢复对象...
对于表空间 TEST...
. 正在导出簇定义
. 正在导出表定义
. . 正在导出表                              T2
. 正在导出引用完整性约束条件
. 正在导出触发器
. 终止时间点恢复
成功终止导出, 没有出现警告。
主机命令完成

数据库已关闭
数据库已卸载
Oracle 实例已关闭


Import: Release 10.2.0.1.0 - Production on 星期五 8月 28 11:57:50 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V10.02.01 创建的导出文件
即将导入表空间时间点恢复对象...
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SYS 的对象导入到 SYS
. 正在将 XH 的对象导入到 XH
. . 正在导入表                            "T2"
. 正在将 SYS 的对象导入到 SYS
成功终止导入, 没有出现警告。
主机命令完成

sql 语句: alter tablespace  TEST online

sql 语句: alter tablespace  TEST offline

sql 语句: begin dbms_backup_restore.AutoBackupFlag(TRUE); end;

删除自动实例
自动实例已删除
已删除辅助实例文件 D:\AUXILIARY\CNTRL_TSPITR_ORCL_FAQM.F
已删除辅助实例文件 D:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_SYSTEM_59GOCHB8_.DBF
已删除辅助实例文件 D:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_59GOCHC7_.DBF~~~~~~~~~~~~~~自动删除
已删除辅助实例文件 D:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_TEMP_59GODZ4W_.TMP
已删除辅助实例文件 D:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_1_59GODT00_.LOG
已删除辅助实例文件 D:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_2_59GODVDP_.LOG
已删除辅助实例文件 D:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_3_59GODWGN_.LOG
完成 recover 于 28-8月 -09

 

 

11:54:56 SQL> select * from t1;

         A
----------
         1
         2

11:58:39 SQL> select * from t2;
select * from t2
              *
第 1 行出现错误:
ORA-00376: 此时无法读取文件 6
ORA-01110: 数据文件 6: 'D:\TEST.DBF'


11:58:40 SQL> alter tablespace test online;

表空间已更改。

11:58:51 SQL> select * from t2;

         A
----------
         1

11:58:52 SQL> select * from t3;
select * from t3
              *
第 1 行出现错误:
ORA-00942: 表或视图不存在

 

 

C:\>imp '/ as sysdba' tables=t3 fromuser=xh file=e:\t3.dmp

Import: Release 10.2.0.1.0 - Production on 星期五 8月 28 12:01:00 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 SYS 的对象导入到 SYS
. 正在将 XH 的对象导入到 XH
. . 正在导入表                            "T3"导入了           1 行
成功终止导入, 没有出现警告。

 

11:58:56 SQL> select * from t3;

         A
----------
         1

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

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

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    427944