16.2 准备 TSPITR

16.2.1 确定 TSPITR 需求

1. 检查恢复集表空间是否为自包含

当执行 TSPITR 时,要求恢复集所包括的表空间必须是自包含的。自包含表空间集是指具有相关联的表空间集合。

违反自包含表空间集合的常见情况如下:

  • 表空间集合包含有SYS 方案对象。
  • 表空间集合包含了索引所在的表空间,但没有包含索引基表所在的表空间。
  • 表空间集合没有包含分区表的所有分区。
  • 表空间集合包含了表所在的表空间,但没有包含其LOB 列所在的表空间。

SQL> execute sys.dbms_tts.transport_set_check('TBS03',TRUE);

PL/SQL 过程已成功完成。

SQL> select * from sys.transport_set_violations;

未选定行

2. 检查是否存在恢复集表空间的数据文件备份

SQL> select file_name from dba_data_files where tablespace_name='TBS03';

FILE_NAME
----------------------------------------------------------------------------

D:/ORCL/TBS03.DBF

3. 检查是否存在辅助集的数据文件和控制文件备份

SQL> select file_name from dba_data_files where tablespace_name in ('SYSTEM','UNDOTBS1')
  2  union
  3  select max(name) from v$controlfile;

FILE_NAME
--------------------------------------------------------------------------------

D:/ORCL/CONTROL01.CTL
D:/ORCL/SYSTEM01.DBF
D:/ORCL/UNDOTBS01.DBF

4. 检查 TSPITR 之后丢失的对象

SQL> select owner,name from sys.ts_pitr_objects_to_be_dropped
  2  where tablespace_name='TBS03' AND creation_time>to_date('2009-01-10 10:01:0
1','yyyy-mm-dd hh24:mi:ss');

未选定行

16.2.2 准备主数据库

(1) 准备TBS03 表空间、TBS04 表空间及示例表。

SQL> conn system/orcl@orcl
已连接。
SQL> create tablespace tbs03 datafile 'd:/orcl/tbs03.dbf' size 1M autoextend on
next 1M;

表空间已创建。

SQL> create tablespace tbs04 datafile 'd:/orcl/tbs04.dbf' size 1M autoextend on
next 1M;

表空间已创建。

SQL> create table scott.customers
  2  (cust_id int,cust_name varchar2(10)) tablespace tbs03;

表已创建。

SQL> create table scott.sales
  2  (id int,cust_name varchar2(10),sales_amount number(8,2)) tablespace tbs04;

表已创建。

(2) 备份主数据库的所有数据文件和控制文件。

使用用户管理的表空间时间点恢复:

SQL> select name from v$datafile;

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

D:/ORCL/SYSTEM01.DBF
D:/ORCL/UNDOTBS01.DBF
D:/ORCL/SYSAUX01.DBF
D:/ORCL/USERS01.DBF
D:/ORCL/TBS03.DBF
D:/ORCL/TBS04.DBF

已选择6行。

SQL> alter database begin backup;

数据库已更改。

SQL> host copy D:/ORCL/SYSTEM01.DBF d:/orcl/bak
已复制         1 个文件。

SQL> host copy D:/ORCL/undotbs01.DBF d:/orcl/bak
已复制         1 个文件。

SQL> host copy D:/ORCL/sysaux01.DBF d:/orcl/bak
已复制         1 个文件。

SQL> host copy D:/ORCL/users01.DBF d:/orcl/bak
已复制         1 个文件。

SQL> host copy D:/ORCL/tbs03.DBF d:/orcl/bak
已复制         1 个文件。

SQL> host copy D:/ORCL/tbs04.DBF d:/orcl/bak
已复制         1 个文件。

SQL> alter database end backup;

数据库已更改。

SQL> alter database backup controlfile to 'd:/orcl/bak/orcl.ctl' reuse;

数据库已更改。

SQL> alter system archive log current;

系统已更改。

使用RMAN 管理的表空间时间点恢复:

RMAN> run {
2> backup database format='d:/orcl/bak/%d_%s_%p.bak';
3> sql 'alter system archive log current';
4> }

启动 backup 于 10-1月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=140 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=D:/ORCL/SYSTEM01.DBF
输入数据文件 fno=00003 name=D:/ORCL/SYSAUX01.DBF
输入数据文件 fno=00002 name=D:/ORCL/UNDOTBS01.DBF
输入数据文件 fno=00004 name=D:/ORCL/USERS01.DBF
输入数据文件 fno=00005 name=D:/ORCL/TBS03.DBF
输入数据文件 fno=00006 name=D:/ORCL/TBS04.DBF
通道 ORA_DISK_1: 正在启动段 1 于 10-1月 -09
通道 ORA_DISK_1: 已完成段 1 于 10-1月 -09
段句柄=D:/ORCL/BAK/ORCL_1_1.BAK 标记=TAG20090110T110614 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:03:19
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 10-1月 -09
通道 ORA_DISK_1: 已完成段 1 于 10-1月 -09
段句柄=D:/ORCL/BAK/ORCL_2_1.BAK 标记=TAG20090110T110614 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 10-1月 -09

sql 语句: alter system archive log current

(3). 在主数据库上执行DML 操作。

SQL> insert into scott.customers values(1,'SCOTT');

已创建 1 行。

SQL> insert into scott.customers values(2,'SMITH');

已创建 1 行。

SQL> insert into scott.sales values(1,'SCOTT',8000);

已创建 1 行。

SQL> insert into scott.sales values(2,'SMITH',10000);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> alter system switch logfile;

系统已更改。

SQL> alter system switch logfile;

系统已更改。

(4) 模拟用户误操作及其他正常操作。

SQL> host date
当前日期: 2009-01-10 星期六
输入新日期: (年月日)

SQL> host time
当前时间: 11:36:45.56
输入新时间:

SQL> truncate table scott.customers;

表被截断。

SQL> insert into scott.sales values(3,'SCOTT',6000);

已创建 1 行。

SQL> insert into scott.sales values(4,'BLAKE',67000);

已创建 1 行。

SQL> commit;

提交完成。

SQL> create table scott.employee(id int,name varchar2(10)) tablespace tbs03;

表已创建。

你可能感兴趣的:(16.2 准备 TSPITR)