oracle tspitr

murkey發表於2014-04-29

Oracle TSPITR

TSPITR介紹
   TSPITR(表空間時間點恢復)用於將一個或多個表空間恢復到過去某個時間點的狀態,而其他表空間仍然保持現有狀態。
   (1) TSPITR(Tablespace Point-In-Time Recovery),只適用於ARCHIVELOG模式。
   (2) TSPITR實現方法,建議使用RMAN實現表空間時間點恢復。
   (3) DBPITR(Database Point-In-TIme Recovery),資料庫時間點恢復;表示將資料庫的所有表空間恢復到過去時間顛倒俄狀態,只適用於ARCHIVELOG模式。
   (4) 主資料庫(Primary Database),用於存放應用系統資料的Oracle資料庫。當執行TSPITR時,主資料庫是指包含有被恢復表空間的資料庫。
   (5) 恢復集(Recovery Set),是指在主資料庫上需要執行TSPITR的表空間集合。注意,當在恢復集的表空間上執行TSPITR時,要求這些表空間必須是自包含的。
   (6) 輔助資料庫(Auxiliary Database),是主資料庫的一個副本資料庫。當執行TSPITR時,輔助資料庫用於將恢復集表空間恢復到過去時間點。注意,輔助資料庫的所有物理檔案都是從主資料庫備份中取得,並且輔助資料庫必須包含SYSTEM表空間、UNDO表空間、恢復集表空間的備份檔案。
   (7) 輔助集(Auxiliary Set),是指輔助資料庫所需要的、除了恢復集表空間檔案之外地餓其他檔案集合。當執行TSPITR時,輔助資料庫除了需要恢復表空間的備份檔案之外,還需要備份控制檔案、SYSTEM表空間的備份檔案、UNDO表空間的備份檔案。
注意:恢復集表空間必須為自包含;
       違反自包含表空間集合的常見情況如下:
       1> 表空間集合包含有SYS方案物件
       2> 表空間集合包含了索引所在的表空間,但沒有包含索引基表所在的表空間
       3> 表空間集合沒有包含分割槽表的所有分割槽
       4> 表空間集合包含了表所在的表空間,但沒有包含其LOB列所在的表空間
檢查自包含方式:
    SQL> connect sys/oracle@demo as sysdba
    SQL> execute dbms_tts.transport_set_check('user01',true);
    SQL> Select * From transport_set_violations;
測試
環境 10.2.0.1 + WinXp
--建立表空間
CREATE TABLESPACE "DATACNT_TEST"
  LOGGING
  DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATACNT_TEST.ora' SIZE 50M
  EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
-- create table
create table ttest (i_id integer, c_name varchar2(10)) tablespace datacnt_test;
create index itest on ttest(i_id) tablespace DATACNT_TEST;
insert into ttest(i_id,c_name) values (1, '1');
insert into ttest(i_id,c_name) values (2, '2');
insert into ttest(i_id,c_name) values (3, '3');
insert into ttest(i_id,c_name) values (4, '4');
insert into ttest(i_id,c_name) values (5, '5');
insert into ttest(i_id,c_name) values (6, '6');
insert into ttest(i_id,c_name) values (7, '7');
insert into ttest(i_id,c_name) values (8, '8');
insert into ttest(i_id,c_name) values (8, '9');
insert into ttest(i_id,c_name) values (10, '10');
insert into ttest(i_id,c_name) values (11, '11');
select * from ttest;
--check
SELECT *
  FROM SYS.TS_PITR_CHECK
WHERE (
        TS1_NAME IN ('DATACNT_TEST')
        AND TS2_NAME NOT IN ('DATACNT_TEST')  
       )
    OR (     
        TS1_NAME NOT IN ('DATACNT_TEST') 
        AND TS2_NAME IN ('DATACNT_TEST')    
       );
--記住時間點
select sysdate from dual;
--執行rman備份
run{
  allocate channel d1 type disk;
  backup tag ts_test
  format 'C:\temp\TS_t%t_s%s.bkp'
  tablespace DATACNT_TEST,UNDOTBS1,SYSTEM;
  backup current controlfile;
  release channel d1;
}
--模擬操作 修改ttest的表
delete from ttest where c_name like '%1%';
commit;
RMAN> run {
2>   recover tablespace DATACNT_TEST until time "to_date('2010-3-18 13:31:48','yyyy-mm-dd hh24:mi:ss')" auxiliary destination 'C:\auxiliary';
3> }
啟動 recover 於 18-3月 -10
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=148 devtype=DISK
RMAN-05026: 警告: 假定以下表空間集適用於指定的時間點
表空間列表要求具有 UNDO 段
表空間 SYSTEM
表空間 UNDOTBS1
使用 SID='yaxj' 建立自動例項
供自動例項使用的初始化引數:
db_name=ORCL
compatible=10.2.0.1.0
db_block_size=8192
db_files=200
db_unique_name=tspitr_ORCL_yaxj
large_pool_size=1M
shared_pool_size=110M
#No auxiliary parameter file used
db_create_file_dest=C:\auxiliary
control_files=C:\auxiliary/cntrl_tspitr_ORCL_yaxj.f
啟動自動例項 ORCL
Oracle 例項已啟動
系統全域性區域總計     201326592 位元組
Fixed Size                     1248092 位元組
Variable Size                146801828 位元組
Database Buffers              50331648 位元組
Redo Buffers                   2945024 位元組
自動例項已建立
記憶體指令碼的內容:
{
# set the until clause
set until  time "to_date('2010-3-18 13:31:48','yyyy-mm-dd hh24:mi:ss')";
# 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 於 18-3月 -10
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=37 devtype=DISK
通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_AUX_DISK_1: 正在復原控制檔案
通道 ORA_AUX_DISK_1: 正在讀取備份段 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA
\ORCL\AUTOBACKUP\2010_03_18\O1_MF_S_713971810_5T3GM4G6_.BKP
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2010_03_18
\O1_MF_S_713971810_5T3GM4G6_.BKP 標記 = TAG20100318T133010
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:00:03
輸出檔名=C:\AUXILIARY\CNTRL_TSPITR_ORCL_YAXJ.F
完成 restore 於 18-3月 -10
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  time "to_date('2010-3-18 13:31:48','yyyy-mm-dd hh24:mi:ss')";
plsql <<declare
  sqlstatement       varchar2(512);
  offline_not_needed exception;
  pragma exception_init(offline_not_needed, -01539);
begin
  sqlstatement := 'alter tablespace '||  'DATACNT_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  20 to
"C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATACNT_TEST.ORA";
# rename all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set plus the auxilliary tablespaces
restore clone datafile  1, 2, 20;
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  20 online";
# make the controlfile point at the restored datafiles, then recover them
recover clone database tablespace  "DATACNT_TEST", "SYSTEM", "UNDOTBS1" delete a
rchivelog;
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 DATACNT_TEST offline for recover
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
正在執行命令: SET NEWNAME
臨時檔案 1 在控制檔案中已重新命名為 C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_TEMP_%U_.
TMP
啟動 restore 於 18-3月 -10
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=39 devtype=DISK
通道 ORA_AUX_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_AUX_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00001恢復到C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_SYSTEM_%U_.DBF
正將資料檔案00002恢復到C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_%U_.DBF
正將資料檔案00020恢復到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATACNT_TEST.ORA
通道 ORA_AUX_DISK_1: 正在讀取備份段 C:\TEMP\TS_T713971680_S14.BKP
通道 ORA_AUX_DISK_1: 已恢復備份段 1
段控制程式碼 = C:\TEMP\TS_T713971680_S14.BKP 標記 = TS_LEVEL0
通道 ORA_AUX_DISK_1: 恢復完成, 用時: 00:02:05
完成 restore 於 18-3月 -10
資料檔案 1 已轉換成資料檔案副本
輸入資料檔案副本 recid=5 stamp=713972344 檔名=C:\AUXILIARY\TSPITR_O\DATAFILE\O
1_MF_SYSTEM_5T3GZTN2_.DBF
資料檔案 2 已轉換成資料檔案副本
輸入資料檔案副本 recid=6 stamp=713972344 檔名=C:\AUXILIARY\TSPITR_O\DATAFILE\O
1_MF_UNDOTBS1_5T3GZTSX_.DBF
sql 語句: alter database datafile  1 online
sql 語句: alter database datafile  2 online
sql 語句: alter database datafile  20 online
啟動 recover 於 18-3月 -10
使用通道 ORA_AUX_DISK_1
正在開始介質的恢復
存檔日誌執行緒 1 序列 51 已作為檔案 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\O
RCL\ARCHIVELOG\2010_03_18\O1_MF_1_51_5T3GZN5F_.ARC 存在於磁碟上
存檔日誌檔名 =C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\201
0_03_18\O1_MF_1_51_5T3GZN5F_.ARC 執行緒 =1 序列 =51
介質恢復完成, 用時: 00:00:01
完成 recover 於 18-3月 -10
資料庫已開啟
記憶體指令碼的內容:
{
# export the tablespaces in the recovery set
host 'exp userid =\"/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0
=oracleyaxj)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'
ORACLE_SID=yaxj^'))(CONNECT_DATA=(SID=yaxj))) as sysdba\" point_in_time_recover=
y tablespaces=
DATACNT_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  DATACNT_TEST online";
sql "alter tablespace  DATACNT_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 星期四 3月 18 13:39:34 2010
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 字符集
注: 將不匯出表資料 (行)
即將匯出表空間時間點恢復物件...
對於表空間 DATACNT_TEST...
. 正在匯出簇定義
. 正在匯出表定義
. . 正在匯出表                           TTEST
. 正在匯出引用完整性約束條件
. 正在匯出觸發器
. 終止時間點恢復
成功終止匯出, 沒有出現警告。
主機命令完成
資料庫已關閉
資料庫已解除安裝
Oracle 例項已關閉
Import: Release 10.2.0.1.0 - Production on 星期四 3月 18 13:39:58 2010
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
. 正在將 CUSTOMER21 的物件匯入到 CUSTOMER21
. . 正在匯入表                         "TTEST"
. 正在將 SYS 的物件匯入到 SYS
成功終止匯入, 沒有出現警告。
主機命令完成
sql 語句: alter tablespace  DATACNT_TEST online
sql 語句: alter tablespace  DATACNT_TEST offline
sql 語句: begin dbms_backup_restore.AutoBackupFlag(TRUE); end;
刪除自動例項
自動例項已刪除
已刪除輔助例項檔案 C:\AUXILIARY\CNTRL_TSPITR_ORCL_YAXJ.F
已刪除輔助例項檔案 C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_SYSTEM_5T3GZTN2_.DBF
已刪除輔助例項檔案 C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_5T3GZTSX_.DBF
已刪除輔助例項檔案 C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_TEMP_5T3H49K4_.TMP
已刪除輔助例項檔案 C:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_1_5T3H3XNK_.LOG
已刪除輔助例項檔案 C:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_2_5T3H3ZYB_.LOG
已刪除輔助例項檔案 C:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_3_5T3H423H_.LOG
完成 recover 於 18-3月 -10
還原成功;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/500314/viewspace-1151832/,如需轉載,請註明出處,否則將追究法律責任。

相關文章