1. 程式人生 > >[RMAN]使用RMAN備份將資料庫不完全恢復到指定時間點

[RMAN]使用RMAN備份將資料庫不完全恢復到指定時間點

RMAN作為Oracle強大的備份恢復工具,可以協助我們恢復資料庫到指定時間點,這便是Oracle不完全恢復的一種體現,通過這種方法可以找回我們曾經丟失的資料。這裡以找回誤TRUNCATE表資料為例給大家演示一下RMAN的不完全恢復功能。


1.調整資料庫為歸檔模式
[email protected] /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Oct 19 22:10:38 2011

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




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

[email protected]> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     73
Current log sequence           77


[email protected]> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[email protected]> startup mount;
ORACLE instance started.

Total System Global Area  536870912 bytes
Fixed Size                  1220460 bytes

Variable Size             318767252 bytes
Database Buffers          209715200 bytes
Redo Buffers                7168000 bytes
Database mounted.
[email protected]> alter database archivelog;

Database altered.

[email protected]> alter database open;

Database altered.

2.使用RMAN對資料庫進行備份
1)備份資料庫
[email protected] /home/oracle$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Oct 19 22:16:17 2011

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

connected to target database: ORA10G (DBID=4067278754)

RMAN> backup database;

Starting backup at 20111019 22:16:35
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=214 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00010 name=/oracle/ora10gR2/oradata/ora10g/tbs_perf_01.dbf
input datafile fno=00003 name=/oracle/ora10gR2/oradata/ora10g/sysaux01.dbf
input datafile fno=00001 name=/oracle/ora10gR2/oradata/ora10g/system01.dbf
input datafile fno=00002 name=/oracle/ora10gR2/oradata/ora10g/undotbs01.dbf
input datafile fno=00005 name=/home/oracle/tbs_sec_d_01.dbf
input datafile fno=00004 name=/oracle/ora10gR2/oradata/ora10g/tbs_local_01.dbf
input datafile fno=00008 name=/oracle/ora10gR2/oradata/ora10g/tbs01.dbf
input datafile fno=00009 name=/oracle/ora10gR2/oradata/ora10g/tbs_secooler_01.dbf
input datafile fno=00016 name=/u01/app/oracle/oradata/PROD/disk1/INDX_01.dbf
input datafile fno=00017 name=/u01/app/oracle/oradata/PROD/disk1/TOOLS_01.dbf
input datafile fno=00007 name=/oracle/ora10gR2/oradata/ora10g/undotbs_guarantee.dbf
input datafile fno=00006 name=/oracle/ora10gR2/oradata/ora10g/users.dbf
channel ORA_DISK_1: starting piece 1 at 20111019 22:16:36
channel ORA_DISK_1: finished piece 1 at 20111019 22:17:41
piece handle=/oracle/ora10gR2/flash_recovery_area/ORA10G/backupset/2011_10_19/o1_mf_nnndf_TAG20111019T221636_79xpy532_.bkp tag=TAG20111019T221636 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:05
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00011 name=/u01/app/oracle/oradata/PROD/disk1/DATA01_01.dbf
input datafile fno=00012 name=/u01/app/oracle/oradata/PROD/disk2/DATA01_02.dbf
input datafile fno=00013 name=/u01/app/oracle/oradata/PROD/disk3/DATA01_03.dbf
input datafile fno=00014 name=/u01/app/oracle/oradata/PROD/disk4/DATA01_04.dbf
input datafile fno=00015 name=/u01/app/oracle/oradata/PROD/disk5/DATA01_05.dbf
channel ORA_DISK_1: starting piece 1 at 20111019 22:17:42
channel ORA_DISK_1: finished piece 1 at 20111019 22:17:45
piece handle=/oracle/ora10gR2/flash_recovery_area/ORA10G/backupset/2011_10_19/o1_mf_nnndf_TAG20111019T221636_79xq067w_.bkp tag=TAG20111019T221636 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 20111019 22:17:45

Starting Control File and SPFILE Autobackup at 20111019 22:17:45
piece handle=/db_backup/rman_backup/c-4067278754-20111019-00 comment=NONE
Finished Control File and SPFILE Autobackup at 20111019 22:17:48


2)檢視備份資訊
RMAN> list backup;


List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
48      Full    1.10G      DISK        00:00:57     20111019 22:17:33
        BP Key: 47   Status: AVAILABLE  Compressed: NO  Tag: TAG20111019T221636
        Piece Name: /oracle/ora10gR2/flash_recovery_area/ORA10G/backupset/2011_10_19/o1_mf_nnndf_TAG20111019T221636_79xpy532_.bkp
  List of Datafiles in backup set 48
  File LV Type Ckp SCN    Ckp Time          Name
  ---- -- ---- ---------- ----------------- ----
  1       Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/system01.dbf
  2       Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/undotbs01.dbf
  3       Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/sysaux01.dbf
  4       Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/tbs_local_01.dbf
  5       Full 6494715    20111019 22:16:36 /home/oracle/tbs_sec_d_01.dbf
  6       Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/users.dbf
  7       Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/undotbs_guarantee.dbf
  8       Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/tbs01.dbf
  9       Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/tbs_secooler_01.dbf
  10      Full 6494715    20111019 22:16:36 /oracle/ora10gR2/oradata/ora10g/tbs_perf_01.dbf
  16      Full 6494715    20111019 22:16:36 /u01/app/oracle/oradata/PROD/disk1/INDX_01.dbf
  17      Full 6494715    20111019 22:16:36 /u01/app/oracle/oradata/PROD/disk1/TOOLS_01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
49      Full    1.02M      DISK        00:00:01     20111019 22:17:43
        BP Key: 48   Status: AVAILABLE  Compressed: NO  Tag: TAG20111019T221636
        Piece Name: /oracle/ora10gR2/flash_recovery_area/ORA10G/backupset/2011_10_19/o1_mf_nnndf_TAG20111019T221636_79xq067w_.bkp
  List of Datafiles in backup set 49
  File LV Type Ckp SCN    Ckp Time          Name
  ---- -- ---- ---------- ----------------- ----
  11      Full 6494738    20111019 22:17:42 /u01/app/oracle/oradata/PROD/disk1/DATA01_01.dbf
  12      Full 6494738    20111019 22:17:42 /u01/app/oracle/oradata/PROD/disk2/DATA01_02.dbf
  13      Full 6494738    20111019 22:17:42 /u01/app/oracle/oradata/PROD/disk3/DATA01_03.dbf
  14      Full 6494738    20111019 22:17:42 /u01/app/oracle/oradata/PROD/disk4/DATA01_04.dbf
  15      Full 6494738    20111019 22:17:42 /u01/app/oracle/oradata/PROD/disk5/DATA01_05.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -----------------
50      Full    6.83M      DISK        00:00:00     20111019 22:17:45
        BP Key: 49   Status: AVAILABLE  Compressed: NO  Tag: TAG20111019T221745
        Piece Name: /db_backup/rman_backup/c-4067278754-20111019-00
  Control File Included: Ckp SCN: 6494743      Ckp time: 20111019 22:17:45
  SPFILE Included: Modification time: 20111019 22:11:53


3.模擬資料庫故障——表的誤TRUNCATE
1)連線到資料庫的sec使用者
[email protected] /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Oct 19 22:20:57 2011

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


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

[email protected]> conn sec/oracle_1
Connected.

2)檢視T表中的資料行數
[email protected]> select count(*) from t;

  COUNT(*)
----------
      1000

此時T表中包含1000條資料。

3)檢視當前時間,以便後續使用RMAN進行恢復
[email protected]> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

[email protected]> select sysdate from dual;

SYSDATE
-------------------
2011-10-19 22:21:38

4)這裡模擬對T表的誤刪除(DDL型別的TRUNCATE方法)
[email protected]> truncate table t;

Table truncated.

[email protected]> select sysdate from dual;

SYSDATE
-------------------
2011-10-19 22:22:05

[email protected]> select count(*) from t;

  COUNT(*)
----------
         0

4.使用RMAN恢復到故障發生之前的時間點
我們這裡恢復的時間點的目標是T表被刪除之前的2011-10-19 22:21:38時刻。
【重要提醒】在使用RMAN完成基於時間點的不完全恢復之前,最好對現場做一個備份,我們這裡只需要備份資料庫的控制檔案和日誌檔案即可。當恢復結束後不滿足我們要求時,可以恢復控制檔案和日誌檔案後重新進行恢復。
1)將資料庫啟動到mount狀態
[email protected]> conn / as sysdba
Connected.
[email protected]> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[email protected]> startup mount;
ORACLE instance started.

Total System Global Area  536870912 bytes
Fixed Size                  1220460 bytes
Variable Size             318767252 bytes
Database Buffers          209715200 bytes
Redo Buffers                7168000 bytes
Database mounted.

2)使用RMAN指令碼恢復資料庫到指定時間點
(1)恢復指令碼如下
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
set until time = '2011-10-19 22:21:38';
restore database;
recover database;
alter database open resetlogs;}

(2)恢復過程記錄
RMAN> run {
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
5> set until time = '2011-10-19 22:21:38';
6> restore database;
7> recover database;
8> alter database open resetlogs;}

using target database control file instead of recovery catalog
allocated channel: c1
channel c1: sid=211 devtype=DISK

allocated channel: c2
channel c2: sid=210 devtype=DISK

sql statement: alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"

executing command: SET until clause

Starting restore at 20111019 22:31:04

channel c1: starting datafile backupset restore
channel c1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /oracle/ora10gR2/oradata/ora10g/system01.dbf
restoring datafile 00002 to /oracle/ora10gR2/oradata/ora10g/undotbs01.dbf
restoring datafile 00003 to /oracle/ora10gR2/oradata/ora10g/sysaux01.dbf
restoring datafile 00004 to /oracle/ora10gR2/oradata/ora10g/tbs_local_01.dbf
restoring datafile 00005 to /home/oracle/tbs_sec_d_01.dbf
restoring datafile 00006 to /oracle/ora10gR2/oradata/ora10g/users.dbf
restoring datafile 00007 to /oracle/ora10gR2/oradata/ora10g/undotbs_guarantee.dbf
restoring datafile 00008 to /oracle/ora10gR2/oradata/ora10g/tbs01.dbf
restoring datafile 00009 to /oracle/ora10gR2/oradata/ora10g/tbs_secooler_01.dbf
restoring datafile 00010 to /oracle/ora10gR2/oradata/ora10g/tbs_perf_01.dbf
restoring datafile 00016 to /u01/app/oracle/oradata/PROD/disk1/INDX_01.dbf
restoring datafile 00017 to /u01/app/oracle/oradata/PROD/disk1/TOOLS_01.dbf
channel c1: reading from backup piece /oracle/ora10gR2/flash_recovery_area/ORA10G/backupset/2011_10_19/o1_mf_nnndf_TAG20111019T221636_79xpy532_.bkp
channel c2: starting datafile backupset restore
channel c2: specifying datafile(s) to restore from backup set
restoring datafile 00011 to /u01/app/oracle/oradata/PROD/disk1/DATA01_01.dbf
restoring datafile 00012 to /u01/app/oracle/oradata/PROD/disk2/DATA01_02.dbf
restoring datafile 00013 to /u01/app/oracle/oradata/PROD/disk3/DATA01_03.dbf
restoring datafile 00014 to /u01/app/oracle/oradata/PROD/disk4/DATA01_04.dbf
restoring datafile 00015 to /u01/app/oracle/oradata/PROD/disk5/DATA01_05.dbf
channel c2: reading from backup piece /oracle/ora10gR2/flash_recovery_area/ORA10G/backupset/2011_10_19/o1_mf_nnndf_TAG20111019T221636_79xq067w_.bkp
channel c2: restored backup piece 1
piece handle=/oracle/ora10gR2/flash_recovery_area/ORA10G/backupset/2011_10_19/o1_mf_nnndf_TAG20111019T221636_79xq067w_.bkp tag=TAG20111019T221636
channel c2: restore complete, elapsed time: 00:00:08
channel c1: restored backup piece 1
piece handle=/oracle/ora10gR2/flash_recovery_area/ORA10G/backupset/2011_10_19/o1_mf_nnndf_TAG20111019T221636_79xpy532_.bkp tag=TAG20111019T221636
channel c1: restore complete, elapsed time: 00:00:53
Finished restore at 20111019 22:31:58

Starting recover at 20111019 22:31:58

starting media recovery
media recovery complete, elapsed time: 00:00:01

Finished recover at 20111019 22:32:00

database opened
released channel: c1
released channel: c2


5.驗證恢復成果
[email protected] /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Oct 19 22:35:37 2011

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


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

[email protected]>
[email protected]>
[email protected]> conn sec/oracle_1
Connected.
[email protected]> select count(*) from t;

  COUNT(*)
----------
      1000

至此,曾經因TRUNCATE導致T表資料丟失的故障已被成功恢復。

6.小結
  Oracle的RMAN工具非常強大,這裡只是給出了不完全恢復的一個常見用法。在日常定製Oracle資料庫備份恢復策略的時候RMAN是我們不可或缺的好幫手。

  是否採取RMAN做不完全恢復需要仔細斟酌,結合新版本的閃回功能,不完全恢復的場景不是很多,即便是使用也建議在測試環境中輔助完成。 如果是在海量資料的環境中,往往RMAN的作用更是微弱,畢竟恢復時間和成本非常的高。因此選用適合的備份恢復策略尤為重要。

相關推薦

[RMAN]使用RMAN備份資料庫完全恢復指定時間

RMAN作為Oracle強大的備份恢復工具,可以協助我們恢復資料庫到指定時間點,這便是Oracle不完全恢復的一種體現,通過這種方法可以找回我們曾經丟失的資料。這裡以找回誤TRUNCATE表資料為例給大家演示一下RMAN的不完全恢復功能。 1.調整資料庫為歸檔模式[emai

ARCHIVELOG模式下使用者管理的完全恢復—基於時間完全恢復

基於時間點的恢復主要使用於以下情況:誤刪除表、誤截斷表、提交了錯誤的資料。(從oracle 10g利用閃回更easy!)   首先關閉資料庫執行一個冷全備份(冷備份的時候使用者u1的t表中是有3條記錄的。) [sql] view plai

RMAN備份恢復完全恢復

ORACLE不完全恢復 基於時間的不完全恢復 恢復要求:a、資料庫開啟歸檔切要有最近的有效rman全備。b、要有需要恢復到的準確時間點。 1、 做一個rman全備 RMAN>backup database; 2、 構建幾個狀態 在資料庫裡建立scott.t1並插入資料記錄狀態為a,記錄時間t1。 在資料

RMAN完全恢復方法(恢復資料庫某一時間

RMAN不完全恢復方法 試驗目的:利用RMAN完成對資料庫的不完全恢復(將資料庫恢復到某個時間點) 試驗步驟:         1.RMAN備份資料庫:backup database;   2. 記錄當前時間: SQL> select to_c

RMAN備份恢復之基於時間完全恢復

一 不完全恢復講解         在上一篇文章(RMAN備份與恢復之UNDO表空間丟失)中,我們講到UNDO表空間丟失怎麼處理。UNDO表空間是不可離線的,同樣,SYSTEM表空間也是不可離線的,所以SYSTEM表空間丟失的處理辦法和UNDO表空間丟失的處理辦法類似,在

Oracle 基於 RMAN完全恢復(incomplete recovery by RMAN)

引用自:https://blog.csdn.net/leshami/article/details/9253867 Oracle 資料庫可以實現資料庫不完全恢復與完全恢復。完全恢復是將資料庫恢復到最新時刻,也就是無損恢復,保證資料庫無丟失的恢復。而不完全恢復則是根據需要特意將資料庫恢復到某個過去

恢復到特定時間、scn、日誌序列號),rman完全恢復

將資料庫、表空間、資料檔案等恢復至恢復備份集儲存時間中的任何一個時間點/SCN/日誌序列(一般是日誌挖掘找到誤操作點),但須謹慎,操作前一定需要做好備份,具備條件的情況下最好先恢復到異機,避免業務停機時間。 前提:已經有資料庫備份 (作者已經提前準備了備份,這裡不進行備

RMAN全庫【完全恢復/完全恢復】brief版

一 完全恢復 1.資料庫全庫【完全恢復】 $ rman target / 登入rman工具,如果使用了catalog,則登陸方法rman target sys/[email protected

基於時間完全恢復rman

SQL> select sysdate from dual; SYSDATE ------------------- 2013-07-31 22:36:51 run{ sql 'alter session nls_date_format="yyyy-mm-dd hh

20121225_完全恢復記錄(rman)

restore controlfile from '/orabak/AutoCtl_SGERP5_20121222_c-3580899532-20121222-00'; oracle:srvctl add database -d sgerp5 -o /u01/app/pro

實現多次完全恢復(RAC環境需要另一節點關閉)

chang hang startup 節點 lec star med immediate 關閉 #查看以resetlogs打開的歷史SQL> SELECT a.INCARNATION#,a.RESETLOGS_CHANGE#,to_char(a.RESETLOGS_T

ARCHIVELOG模式下使用者管理的完全恢復—基於備份控制檔案的完全恢復

基於備份控制檔案的恢復只要適用於以下情況:表空間被意外刪除;所有控制檔案全部損壞。   先關閉資料庫,執行一次全庫冷備份。 [sql] view plain copy print ?

mysql 開發進階篇系列 43 邏輯備份恢復(基於時間和位置的完全恢復)

一. 概述          在上篇講到了邏輯備份,使用mysqldump工具來備份一個庫,並使用完全恢復還原了資料庫。在結尾也講到了誤操作是不能用完全恢復的。解決辦法是:我們需要恢復到誤操作之前的狀態,然後跳過誤操作語句。再恢復後面執行的語句,完成我們的恢復,這種恢復叫“不完全恢復”。在mysql 中,不完

(2.7)備份與還原--在完全恢復模式下事務日誌的角色

ges 需要 很多 對數 for 事情 mage .com .html 簡介 生產環境下的數據是如果可以寫在資產負債表上的話,我想這個資產所占的數額一定不會小。而墨菲定律(事情如果有變壞的可能,無論這種可能性有多小,它總會發生)仿佛是給DBA量身定做的。在上篇文章介

oracle 歸檔模式下刪除current日誌完全恢復

com variable file end mounted 啟動數據庫 lte status archive 歸檔模式 SYS@orcl> archive log list Database log mode Archive Mode Automat

在異機實現 Oracle 完全恢復

otg art set med resetlogs 和數 to_date 數據庫 over 1、將數據庫完全備份集和歸檔日誌備份集傳到執行恢復的 Oracle 服務器# 傳到中轉服務器 scp -P 2222 database.20181030.5* 218.17.56.5

ARCHIVELOG模式下使用者管理的完全恢復—基於SCN的完全恢復

當用戶執行不完全恢復時,如果能夠確定恢復點所對應的SCN值,那麼可以使用這種方法恢復!   首先關閉資料庫執行一個冷全備份 [sql] view plain copy print ?

ARCHIVELOG模式下使用者管理的完全恢復—基於取消的完全恢復

 基於取消的恢復只要適用於以下情況: 歸檔日誌丟失導致完全恢復失敗; 丟失了資料檔案和未歸檔的重做日誌(聯機重做日誌);   先關閉資料庫,執行一次全庫冷備份。 [sql] view plain copy pri

異機環境完全恢復

1.已備份的介質 [[email protected] bak_dir]# tree . ├── 2016_12_28 --控制檔案 spfile檔案 │

node 使用 sequelize 操作資料庫完全指北

開始步驟 npm init -y 安裝依賴 npm i sequelize mysql2 standard --save 連線資料庫 建立連線 新建一個 db.js