oracle不完全恢复类型,Oracle——不完全恢復

不完全恢復分為用戶不完全恢復和RMAN不完全恢復。若聯機重做日志文件或者歸檔日志文件有丟失,則只能進行不完全恢復。

一.不完全恢復的分類

1.time recover選項,指定恢復到某個時間點,常用。

2.cancel recover選項,停止在某個日志切換序列號處,通常只在歸檔日志文件受損或丟失的情況下使用,從而無法進一步恢復。

3.change-base recover選項,指定到某個SCN號。

4.在所有情況下都將恢復到恰好在請求的停止點之前的變更向量,比如將不會應用到指定的SCN。

二.執行不完全恢復的步驟

1.關閉和備份數據庫或者某些數據文件;

2.加載數據庫。

3.還原數據文件(必要時還原控制文件);

4.將數據庫恢復到某個時間點;

5.使用重置日志(resetlog)打開數據庫。

三.基於時間的恢復

指定到某個時間點,但是要注意其時間的格式是不允許改變的,無論在SQL*PLUS會話中如何設置它的NLS_DATE_FORMAT ,日期必須是yyyy-mm-dd:hh24:mi:ss。

1.在用戶Dave下創建個表sunny,插入數據,

SQL> create table sunny  (id int,name char(10))  tablespace  app1;

Table created.

SQL> insert into sunny values(0,'baby');

1 row created.

SQL> commit;

Commit complete.

手動發生檢查點,

SQL> alter system checkpoint;

System altered.

這樣數據寫進了數據文件app1_01.dbf。

2.關閉數據庫,對app1_01.dbf數據文件做個備份,插入新的數據

備份數據文件,

[oracle@oracle11g wilson]$ cp   app1_01.dbf     /u01/ubackup/cold

打開數據庫,插入新數據

SQL> insert into sunny values(1,'Jasper');

1 row created.

SQL> commit;

Commit complete.

查看當前時間,

SQL> select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS')  from dual;

TO_CHAR(SYSDATE,'DD-MON-YYYYH

-----------------------------

04-SEP-2013 12:52:34

3.刪除表,再恢復回來,

SQL> drop table sunny;

Table dropped.

關閉數據庫,刪除數據文件,再還原備份的數據文件(這個文件中不含有新的數據),

[oracle@oracle11g wilson]$ rm -f app1_01.dbf

還原數據文件,

[oracle@oracle11g backup]$ cp   /u01/backup/app1_01.dbf  /u01/oradata/wilson/

4.將數據庫置於mount狀態,恢復表

SQL> recover database until time '2013-09-04:12:52:22';

Media recovery complete.

指定時間點,打開數據庫,

SQL> alter database  open resetlogs;

即可。

四.基於cancel的恢復

ed2a651d92b49affb8531a4ebeaf84f8.jpe

1.關閉數據庫,備份數據庫,命令如下,

[root@oracle11g wilson]# cp /u01/oradata/wilson/*  /u01/ubackup/cold/

2.打開數據庫,在表Dave.sunny中插入數據,

SQL> insert into sunny values(3,'memory');

1 row created.

SQL> commit;——————數據存於聯機重做日志中

Commit complete.

SQL> alter system checkpoint;——————數據存於數據文件中

System altered.

SQL> alter system  archive log current;——————數據存於歸檔日志中

System altered.

可以看到記錄(3,‘memory’)存於數據文件,聯機重做日志文件和歸檔日志文件中。

3.插入新數據,不放在歸檔日志中

SQL> insert into sunny values(4,'king');

1 row created.

SQL> commit;——————數據存於聯機重做日志中

Commit complete.

SQL> alter system checkpoint;——————數據存於數據文件中

System altered.

4.先備份控制文件

SQL> alter database backup controlfile to trace as '/tmp/wilson.sql';

Database altered.

然后除了歸檔日志文件,把其它文件都刪除了,關閉數據庫,把備份的數據文件還原(沒有控制文件和聯機重做日志文件),

[root@oracle11g wilson]# cp   /u01/ubackup/cold/*.dbf   /u01/oradata/wilson/

5.修改備份的控制文件腳本

如果不用腳本創建,可以復制個二進制的控制文件,復制過去即可;

在腳本中有兩組恢復方法:a.在聯機重做日志正常的情況下,

b.在聯機重做日志不正常的情況下,

a方法在用戶管理的恢復(三)中使用了,請參照:Oracle—用戶管理的完全恢復(三)

這里使用b方法,打開腳本修改一下,

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "WILSON" RESETLOGS  ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/u01/oradata/wilson/redo01.log'  SIZE 50M BLOCKSIZE 512,

GROUP 2 '/u01/oradata/wilson/redo02.log'  SIZE 50M BLOCKSIZE 512,

GROUP 3 '/u01/oradata/wilson/redo03.log'  SIZE 50M BLOCKSIZE 512

DATAFILE

'/u01/oradata/wilson/system01.dbf',

'/u01/oradata/wilson/sysaux01.dbf',

'/u01/oradata/wilson/undotbs01.dbf',

'/u01/oradata/wilson/users01.dbf',

'/u01/oradata/wilson/example01.dbf',

'/u01/oradata/wilson/app1_01.dbf',

'/u01/oradata/wilson/smallundo1.dbf'

CHARACTER SET AL32UTF8

;

注意上面語句之間能有空格行,

中間略..........

下面語句是腳本中的,也刪除了,可以手工執行,

RECOVER DATABASE USING BACKUP CONTROLFILE

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/wilson/temp01.dbf'

SIZE 30408704  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

ALTER TABLESPACE MYTEMP ADD TEMPFILE '/u01/oradata/wilson/mytemp01.dbf'

SIZE 104857600  REUSE AUTOEXTEND OFF;

執行腳本,

SQL> @/tmp/wilson.sql

執行下面語句,因為聯機重做日志丟失,所以恢復到某個日志切換序列號處,

SQL> recover database using backup controlfile until  cancel;

提示,輸入cancel

打開數據庫,

SQL> alter database open resetlogs;

然后執行恢復臨時表空間,

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/wilson/temp01.dbf'

SIZE 30408704  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

ALTER TABLESPACE MYTEMP ADD TEMPFILE '/u01/oradata/wilson/mytemp01.dbf'

SIZE 104857600  REUSE AUTOEXTEND OFF;

是腳本中的語句。

為什么刪除腳本最后的四條語句?   因為沒有了聯機重做日志文件,所以腳本中RECOVER DATABASE USING BACKUP CONTROLFILE命令會出錯,必須要使用until cancel進行人工干預。

6.查看表Dave.sunny

SQL> select * from sunny;

ID NAME

---------- ----------

3 memory

0 baby

1 Jasper

可以看到沒有了記錄(4,’king’),這是因為記錄(3,’memory’)被存放到了歸檔日志文件中,而記錄4沒有,所以只能是不完全的恢復。

五.基於系統更改號的恢復

找到需要指定恢復的SCN號,然后使用命令recover database until change號即可;

方法和上面說明的差不多。

六.RMAN的不完全恢復

它和用戶管理的不完全恢復差不多,只是是使用RMAN來進行的,下面來舉個例子來說明一下,

1.在Dave用戶下,創建表和插入數據,

SQL> create table test (id int,name char(10));

Table created.

SQL> insert  into test values(0,'heihei');

1 row created.

SQL> commit;

寫到數據文件中

SQL> alter system  checkpoint;

System altered.

2.RMAN連接上數據庫,備份數據文件

RMAN> backup   database  format    '/u01/backup/rman_hot_%U';

3.記錄時間和刪除表

SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2013-09-06:00:53:43

SQL> drop  table test;

Table dropped.

現在怎么恢復表? 在10g版本引用了閃回技術,可以使不完全恢復更方便。

4.在這里數據庫進入mount狀態,RMAN連接數據執行腳本

RMAN> run{

2> allocate channel c1 type disk;

3> allocate channel c2 type disk;

4> allocate channel c3 type disk;

5> set until time  “2013-09-06:00:53:43';

6> restore  database;

7> recover  database;

8> alter database open resetlogs;}

即可。

RMAN的不完全恢復還可以指定日志文件的sequence號,命令如下,

Set  until sequence 120  thread 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值