手動實現表空間基於時間點的恢復

實驗說明:

      (1)先創建2個表空間。

create tablespace user01
  datafile '/opt/oracle/oradata/ocp/user01.dbf' size 1M;
create tablespace user02
 datafile '/opt/oracle/oradata/ocp/user02.dbf' size 1M;


 (2)在每個表空間上各創建一張表。
create table scott.customers
 (cust_id int,cust_name varchar2(10)) tablespace user01;
create table scott.sales
 (id int,cust_name varchar2(10),sales_amount number(8,2)) tablespace user02;

 

(3)對數據庫進行熱備

alter database begin backup;
select 'cp '||name || ' /home/oracle/backup/' from v$datafile;

alter database end backup;
alter database backup controlfiles to '/home/oracle/backup/demo.ctl' reuse;

(4)在每個表中插入2條記錄,提交。檢查當前的時間點,待會表空間user01要恢復到當前時間點。

insert into scott.customers values(1,'SOCTT');
insert into scott.customers values(2,'SMITH');
insert into scott.sales values(1,'SCOTT',8000);
insert into scott.sales values(1,'SMITH',10000);

COMMIT;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;

date
2010年 03月 11日 星期四 21:44:52 CST

(5) truncate 表1,往表2中插入2條記錄。在表空間1中再創建一個表。

truncate table scott.customers;
insert into scott.sales values(3,'SCOTT',6000);
insert into scott.sales values(4,'BLAKE',6700);
commit;

create table scott.employee(id int,name varchar2(10)) tablespace user01;

 

從現在開始進行表空間基於時間點的恢復

(6) 創建輔助庫的密碼文件,從現在的主庫創建輔助庫的參數文件,修改參數文件

orapwd file=/opt/oracle/product/10g/dbs/orapwauxi password=uplooking entries=10 force=y

create pfile='?/dbs/initauxi.ora' from spfile;

vim $ORACLE_HOME/dbs/initauxi.ora
 DB_UNIQUE_NAME=auxi
 CONTROL_FILES=/opt/oracle/oradata/auxi/demo.ctl
 DB_FILE_NAME_CONVERT=('/opt/oracle/oradata/ocp','/opt/oracle/oradata/auxi')
 LOG_FILE_NAME_CONVERT=('/opt/oracle/oradata/ocp','/opt/oracle/oradata/auxi')

 

(7) 拷貝對應幾個數據文件和控制文件到輔助庫的對應位置

cp /home/oracle/backup/system01.dbf /opt/oracle/oradata/auxi/
cp /home/oracle/backup/undotbs01.dbf /opt/oracle/oradata/auxi/
cp /home/oracle/backup/user01.dbf /opt/oracle/oradata/auxi/
cp /home/oracle/backup/demo.ctl /opt/oracle/oradata/auxi/

 

(8) 用步驟6中建立的參數文件啓動輔助實例

export ORACLE_SID=auxi
sql / as sysdba
startup nomount pfile='?/dbs/initauxi.ora';

 

(9) 啓動數據庫到mount狀態

alter database mount clone database;

 

(10) 將數據文件聯機

alter database datafile '/opt/oracle/oradata/auxi/system01.dbf' online;
alter database datafile '/opt/oracle/oradata/auxi/undotbs01.dbf' online;
alter database datafile '/opt/oracle/oradata/auxi/user01.dbf' online;

 

(11) 恢復數據庫
recover database until time '2010-03-11 23:42:30' using backup controlfile;

 

(12)開啓數據庫,查詢user01表空間是否恢復到指定時間點

alter database open resetlogs;

select * from scott.customers;

 

(13) 添加臨時文件,exp中可能用到

alter tablespace temp add tempfile '/opt/oracle/oradata/ocp/temp.dbf' size 5M;

 

(14) exp 輔助數據庫中的user01表空間

export ORACLE_SID=auxi

exp point_in_time_recover=y tablespace=user01 file=/home/oracle/backup/user01.dmp

用戶名:sys as sysdba

密碼:****

(15) 關閉輔助庫

export ORACLE_SID=auxi

shutdown immediate

 

(16)將主庫的user01表空間offline

alter tablespace user01 offline;

 

(17)覆蓋主庫的user01表空間數據文件

cp /opt/oracle/oradata/auxi/user01.dbf /opt/oracle/oradata/ocp/user01.dbf

 

(18) 將剛剛dump出來的文件導入到主庫中

imp point_in_time_recover=y file=/home/oracle/backup/user01.dmp

用戶名:sys as sysdba

密碼:****

 

(19) 主庫中user01 表空間online

alter tablespace user01 online;

 

select * from scott.customers; --判斷是否恢復到指定時間

select * from scott.sales; --判斷別的表空間是否不受影響

 

(20) 刪除輔助庫相關的文件。

 

至此,手動執行表空間基於時間點的恢復完成。如果看過“RMAN TSPITR 使用rman進行表空間基於時間點的恢復”這篇文章的話,其實發現和那篇文章的步驟差不多,只是那裏用rman,rman自動爲我們完成了很多工作。

發佈了44 篇原創文章 · 獲贊 2 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章