真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Oracle11g備份恢復(fù)新特性有哪些

小編給大家分享一下Oracle11g備份恢復(fù)新特性有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)公司主營黃石網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),黃石h5微信小程序定制開發(fā)搭建,黃石網(wǎng)站營銷推廣歡迎黃石等地區(qū)企業(yè)咨詢

閃回日志急救

還記得 Oracle Database 10g 中引入的閃回日志記錄嗎?如果數(shù)據(jù)庫中已啟用了閃回功能,閃回日志會將更改塊的以前映像的優(yōu)化版本記錄到在閃回恢復(fù)區(qū)生成的閃回日志中。這些日志可以幫助您將數(shù)據(jù)庫閃回到過去的一個時間點,而不必從備份中執(zhí)行時間點恢復(fù)。

那么,既然這些閃回日志包含塊的以前的映像,為什么不將它們也用于恢復(fù)呢?Oracle Database 11g 正是這么做的。當您恢復(fù)特定的塊時,Oracle 會在閃回日志(而不是數(shù)據(jù)文件)中查找該塊的以前映像的良好副本,然后應(yīng)用存檔日志以使其向前滾動。由于無需借助備份,該方法可以節(jié)省很多時間,尤其是當備份在磁帶上時。

ZLIB 壓縮

RMAN 在 Oracle Database 10g 中提供了備份段壓縮功能以節(jié)省網(wǎng)絡(luò)帶寬,但是許多人都不輕易使用它。為什么?因為第三方壓縮工具提供的方法比 RMAN 自身的更快。但是,RMAN 10g 壓縮具備一些第三方壓縮工具所沒有的好用功能。例如,當 RMAN 10g 還原數(shù)據(jù)文件時,不需要先解壓縮這些文件(如果以前被壓縮過)。該方法在還原期間可以顯著節(jié)省帶寬。

在 Oracle Database 11g 中,RMAN 提供了另一種算法 ZLIB,以前使用的是 BZIP2。ZLIB 算法要快得多,但是不能壓縮太多內(nèi)容。另一方面,它也很節(jié)省 CPU。因此,如果您的 CPU 不多,最好使用 ZLIB 壓縮。(注意,版本 11.1 中的默認選件是 BZIP2;您需要購買一個新選件 Advanced Compression Option 才能使用 ZLIB。)

要使用 ZLIB 壓縮,只需將 RMAN 配置參數(shù)設(shè)置為:

RMAN> configure compression algorithm 'ZLIB' ;


如果您以前更改過該參數(shù),需要發(fā)出上述命令。要將其更改為 BZIP2,發(fā)出以下命令:

RMAN> configure compression algorithm 'bzip2';


現(xiàn)在,所有壓縮備份都將使用新算法。

同一數(shù)據(jù)文件的并行備份

您或許已經(jīng)知道您可以并行備份,方法是,聲明多個通道使每個通道成為一個 RMAN 會話。但是,很少有人意識到每個通道一次只能備份一個數(shù)據(jù)文件。因此,即使有多個通道,但是每個數(shù)據(jù)文件只通過一個通道進行備份,這與備份真正并行的概念有些相反。

在 Oracle Database 11g RMAN 中,通道可以將數(shù)據(jù)文件拆分為塊,這些塊被稱為“段”。您可以指定每個段的大小。下面就是一個例子:

RMAN> run {
2>      allocate channel c1 type disk format '/backup1/%U';
3>      allocate channel c2 type disk format '/backup2/%U';
4>      backup 
5>      section size 500m 
6>      datafile 6;
7> }


該 RMAN 命令分配兩個通道并在兩個通道上并行備份用戶的表空間。每個通道占用數(shù)據(jù)文件的一個 500MB 的段并以并行方式備份該文件。這加快了大型文件的備份速度。


以這種方式備份時,備份的內(nèi)容也顯示為段。

RMAN> list backup of datafile 6;
... 

... 
    List of Backup Pieces for backup set 901 Copy #1
    BP Key  Pc# Status      Piece Name
    -------    ---  -----------      ----------
    2007    1   AVAILABLE   /backup1/9dhk7os1_1_1
    2008    2   AVAILABLE   /backup2/9dhk7os1_1_1
    2009    3   AVAILABLE   /backup1/9dhk7os1_1_3
    2009    3   AVAILABLE   /backup2/9dhk7os1_1_4

注意,備份段是如何顯示為文件段的。由于每個段去往不同的通道,因此您可以將它們定義為不同的掛載點(如 /backup1 和 /backup2),您還可以并行方式將它們備份到磁帶。


但是,如果 6 號大型文件只位于一個磁盤上,使用并行備份就沒有優(yōu)勢了。如果您對該文件進行分段,磁頭需要不斷移動來處理該文件的不同段,其缺點勝過分段的優(yōu)點。

撤銷提交的備份?為什么?

您已經(jīng)知道撤銷數(shù)據(jù)的用途。當事務(wù)更改某個塊時,該塊以前的映像將被保存在撤銷段中。即使事務(wù)已提交,數(shù)據(jù)仍然保存在那里,因為在該塊被更改之前啟動的某個運行時間較長的查詢可能會請求已更改和提交的塊。該查詢應(yīng)該獲取該塊以前的映像,即之前提交的映像而不是當前的映像。因此,即使在提交之后,撤銷數(shù)據(jù)仍然保存在撤銷段中。隨著時間的推移,該數(shù)據(jù)會被沖刷出撤銷段以便為新插入的撤銷數(shù)據(jù)騰出空間。

當 RMAN 備份運行時,它會備份撤銷表空間中的所有數(shù)據(jù)。在恢復(fù)期間,與提交的事務(wù)相關(guān)的撤銷數(shù)據(jù)將不再需要,因為它們已經(jīng)在重做日志流中,或者仍然在數(shù)據(jù)文件中(如果已從緩沖區(qū)清除已使用的塊并將其寫入磁盤),可以從那里進行恢復(fù)。那么,為什么還要備份提交的撤銷數(shù)據(jù)呢?

在 Oracle Database 11g 中,RMAN 很智能:它不備份恢復(fù)所不需要的已提交撤銷數(shù)據(jù)。而對恢復(fù)至關(guān)重要的未提交撤銷數(shù)據(jù)照常備份。這減少了備份(以及恢復(fù))的大小和時間。

在許多數(shù)據(jù)庫中,尤其是在事務(wù)提交更加頻繁,撤銷數(shù)據(jù)在撤銷段中的存留時間更長的 OLTP 數(shù)據(jù)庫中,大多數(shù)撤銷數(shù)據(jù)實際上已被提交。因此,RMAN 只需備份撤銷表空間中的幾個塊。

最好的是,您不需要做任何事即可實現(xiàn)該優(yōu)化,Oracle 會自行操作。

虛擬專用目錄

您可能會使用一個目錄數(shù)據(jù)庫作為 RMAN 信息庫。如果沒有,您應(yīng)該認真地考慮使用一個目錄數(shù)據(jù)庫。這有很多優(yōu)點,例如報告、控制文件受損時簡化恢復(fù),等等。

現(xiàn)在,又出現(xiàn)了一個問題:多少個目錄合適?通常,只創(chuàng)建一個目錄數(shù)據(jù)庫作為所有數(shù)據(jù)庫的信息庫是合理的。但是,要考慮到安全性,這可能不是一個好方法。目錄擁有者將能夠查看所有數(shù)據(jù)庫的所有信息庫。由于每個要備份的數(shù)據(jù)庫可能都有一個單獨的 DBA,因此不應(yīng)該讓該目錄可見。

那么,還有什么別的方法嗎?當然,您可以為每個目標數(shù)據(jù)庫都創(chuàng)建一個單獨的目錄數(shù)據(jù)庫,可是考慮到成本,這或許不太實際。另一種方法是仍然只創(chuàng)建一個目錄數(shù)據(jù)庫,但是為每個目標數(shù)據(jù)庫都創(chuàng)建一個虛擬目錄。虛擬目錄是 Oracle Database 11g 中的新增功能。我們來看看如何創(chuàng)建虛擬目錄。

首先,您需要創(chuàng)建一個包含所有目標數(shù)據(jù)庫的基目錄。假設(shè)擁有者為“RMAN”。從目標數(shù)據(jù)庫,以基用戶身份連接到目錄數(shù)據(jù)庫并創(chuàng)建目錄。

$ rman target=/ rcvcat rman/rman@catdb 
Recovery Manager: Release 11.1.0.6.0 - Production on Sun Sep 9 21:04:14 2007 Copyright (c) 1982, 2007, Oracle. All rights reserved. 

connected to target database: ODEL11 (DBID=2836429497) 
connected to recovery catalog database 
RMAN> create catalog; 
recovery catalog created 
RMAN> register database; 
database registered in recovery catalog 

starting full resync of recovery catalog 
full resync complete 

這稱為基目錄,歸用戶“RMAN”所有?,F(xiàn)在,我們再創(chuàng)建兩個將擁有各自的虛擬目錄的用戶。為簡單起見,我們讓這兩個用戶的名稱與目標數(shù)據(jù)庫相同。仍然以基目錄擁有者 (RMAN) 的身份保持連接,同時發(fā)出以下語句:

RMAN> grant catalog for database odel11 to odel11;
 
Grant succeeded.


現(xiàn)在,使用虛擬目錄擁有者 (odel11) 的身份連接,并發(fā)出 create virtual catalog 語句:

$ rman target=/ rcvcat odel11/odel11@catdb

RMAN> create virtual catalog;
 
found eligible base catalog owned by RMAN
created virtual catalog against base catalog owned by RMAN


現(xiàn)在,在同一 RMAN 信息庫中注冊另一個數(shù)據(jù)庫 (PRONE3),并為其同名數(shù)據(jù)庫創(chuàng)建一個虛擬目錄擁有者“prone3”。

RMAN> grant catalog for database prone3 to prone3;
 
Grant succeeded.

$ rman target=/ rcvcat prone3/prone3@catdb

RMAN> create virtual catalog;
 
found eligible base catalog owned by RMAN
created virtual catalog against base catalog owned by RMAN


現(xiàn)在,如果您希望查看已注冊的數(shù)據(jù)庫,以基目錄擁有者 (RMAN) 的身份連接,您將看到:

$ rman target=/ rcvcat=rman/rman@catdb

RMAN> list db_unique_name all;
 
List of Databases
DB Key  DB Name  DB ID            Database Role    Db_unique_name
-------    -------     -----------------        ---------------         ------------------
285     PRONE3   1596130080       PRIMARY          PRONE3              
1       ODEL11   2836429497       PRIMARY          ODEL11


和預(yù)料的一樣,它顯示了兩個注冊的數(shù)據(jù)庫?,F(xiàn)在,以 ODEL11 的身份連接并發(fā)出同一命令:

$ rman target=/ rcvcat odel11/odel11@catdb
 
RMAN> list db_unique_name all;
 
 
List of Databases
DB Key  DB Name  DB ID            Database Role    Db_unique_name
-------    -------     -----------------        ---------------         ------------------
1       ODEL11   2836429497       PRIMARY          ODEL11


注意如何只列出一個數(shù)據(jù)庫,而不是兩個全列出。該用戶 (odel11) 只允許查看一個數(shù)據(jù)庫 (ODEL11),即上面顯示的數(shù)據(jù)庫。您可以通過以另一個擁有者 PRONE3 的身份連接到目錄對此進行驗證: 

$ rman target=/ rcvcat prone3/prone3@catdb
 
RMAN> list db_unique_name all;
 
 
List of Databases
DB Key  DB Name  DB ID            Database Role    Db_unique_name
-------    ------- -   ----------------         ---------------         ------------------
285     PRONE3   1596130080       PRIMARY          PRONE3


利用虛擬目錄,您可以僅為 RMAN 信息庫目錄維護一個數(shù)據(jù)庫,但要建立安全邊界以使各個數(shù)據(jù)庫擁有者管理其自己的虛擬信息庫。一個通用的目錄數(shù)據(jù)庫可以簡化管理、降低成本以及在提高數(shù)據(jù)庫可用性的同時降低成本。

合并目錄

仍然是多個目錄這個主題,讓我們來考慮另外一個問題。既然您已經(jīng)了解如何在相同的基目錄上創(chuàng)建虛擬目錄,您可能看到了將所有這些獨立的信息庫整合到一個信息庫中的必要性。

一個選擇是在各自的目錄中取消目標數(shù)據(jù)庫的注冊,然后將它們重新注冊到新的中央目錄。但是,這樣做意味著會丟失存儲在這些信息庫中的所有有價值的信息。當然,您可以同步控制文件,然后再重新同步到目錄,但是這樣會使控制文件變得很大,而且不實際。

Oracle Database 11g 提供了一個新特性:合并目錄。實際上,該功能是將目錄從一個數(shù)據(jù)庫導(dǎo)入另一個數(shù)據(jù)庫,或者換句話說,就是“移動”目錄。

讓我們看一下它的工作原理。假設(shè)您希望將目錄從數(shù)據(jù)庫 CATDB1 移到另一個名為 CATDB2 的數(shù)據(jù)庫中。首先,連接到目錄數(shù)據(jù)庫 CATDB2(目標):

$ rman target=/ rcvcat rman/rman@catdb2
 
Recovery Manager: Release 11.1.0.6.0 - Production on Sun Sep 9 23:12:07 2007
 
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
 
connected to target database: ODEL11 (DBID=2836429497)
connected to recovery catalog database


如果該數(shù)據(jù)庫已經(jīng)有一個用戶“RMAN”擁有的目錄,那么轉(zhuǎn)至下一導(dǎo)入步驟;否則,您將需要創(chuàng)建該目錄:

RMAN> create catalog;
 
recovery catalog created


現(xiàn)在,從遠程目錄 (catdb1) 導(dǎo)入:

RMAN> import catalog rman/rman@catdb1;
 
Starting import catalog at 09-SEP-07
connected to source recovery catalog database
import validation complete
database unregistered from the source recovery catalog
Finished import catalog at 09-SEP-07
starting full resync of recovery catalog
full resync complete


上面的輸出中有一些重要信息。注意,目標數(shù)據(jù)庫如何取消了在其原始目錄數(shù)據(jù)庫中的注冊?,F(xiàn)在,如果您檢查這個新目錄中的數(shù)據(jù)庫名稱:

RMAN> list db_unique_name all;
 
 
List of Databases
DB Key  DB Name  DB ID            Database Role    Db_unique_name
-------    -------     -----------------        ---------------         ------------------
286     PRONE3   1596130080       PRIMARY          PRONE3              
2       ODEL11   2836429497       PRIMARY          ODEL11


您將注意到 DB Key 已更改。ODEL11 以前為 1,現(xiàn)在為 2。


上面的操作會將所有已注冊的目標數(shù)據(jù)庫的目錄導(dǎo)入目錄數(shù)據(jù)庫。有時,您可能不希望這樣,而只希望導(dǎo)入一個或兩個數(shù)據(jù)庫。要進行以上操作,可以發(fā)出以下命令:

RMAN> import catalog rman/rman@catdb3 db_name = odel11;


這會再次更改 DB Key。


如果您不希望在導(dǎo)入期間取消導(dǎo)入數(shù)據(jù)庫在源數(shù)據(jù)庫中的注冊,該如何操作呢?換句話說,您希望讓數(shù)據(jù)庫在兩個目錄數(shù)據(jù)庫中都有注冊。您將需要使用“no unregister”子句:

RMAN> import catalog rman/rman@catdb1 db_name = odel11 no unregister;


這將確保數(shù)據(jù)庫 ODEL11 不會在目錄數(shù)據(jù)庫 catdb1 中取消注冊,同時又在新的目錄中進行了注冊。

從備份中復(fù)制數(shù)據(jù)庫(僅限第 2 版)

您由于各種原因需要復(fù)制數(shù)據(jù)庫,例如搭建 Data Guard 環(huán)境、根據(jù)生產(chǎn)數(shù)據(jù)庫建立臨時數(shù)據(jù)庫或 QA 數(shù)據(jù)庫,或?qū)?shù)據(jù)庫移到新平臺中。RMAN 中的 DUPLICATE 命令極大地簡化了該活動。但是,RMAN 從哪里復(fù)制數(shù)據(jù)庫呢?

最顯而易見的選擇就是從主數(shù)據(jù)庫本身進行復(fù)制。主數(shù)據(jù)庫是最新的版本,具有復(fù)制數(shù)據(jù)庫所需的全部信息。但是,雖然該方法很方便,它還是會給主數(shù)據(jù)庫帶來一些壓力。此外,該方法需要一個到主數(shù)據(jù)庫的專用連接,而這并不總是能實現(xiàn)。

生產(chǎn)數(shù)據(jù)庫的另一個源是數(shù)據(jù)庫備份。這不會影響生產(chǎn)數(shù)據(jù)庫,因為我們將單獨進行備份。雖然從 Oracle9i Database 開始,就可以從數(shù)據(jù)庫的備份中復(fù)制數(shù)據(jù)庫了,但使用中仍有些困難:盡管復(fù)制的源是備份,但此過程仍需要一個到主數(shù)據(jù)庫的連接。因此,存在以下問題:如果主數(shù)據(jù)庫因進行維護性關(guān)閉而不可用,該怎么辦呢?或者您從其他服務(wù)器復(fù)制數(shù)據(jù)庫,而該服務(wù)器由于某些安全性或其他邏輯原因無法連接到主數(shù)據(jù)庫,又該怎么辦呢?

Oracle Database 11g 第 2 版解決了這一問題。在該版本中,無需連接到主數(shù)據(jù)庫即可執(zhí)行復(fù)制數(shù)據(jù)庫任務(wù)。您只需備份文件。我們通過示例了看一下如何復(fù)制數(shù)據(jù)庫。

首先,為了說明概念,我們需要從主數(shù)據(jù)庫執(zhí)行一次備份。我們從啟動 RMAN 作業(yè)開始。

# $ORACLE_HOME/bin/rman target=/ rcvcat=rman_d112d1/rman_d112d1@d112d2

 
Recovery Manager: Release 11.2.0.1.0 - Production on Sun Aug 8 10:55:05 2010 Copyright (c) 1982, 2009, 
Oracle and/or its affiliates.  All rights reserved. connected to target database: D112D1 (DBID=1718629572)

雖然到目錄數(shù)據(jù)庫的連接使該操作更簡單,但不是絕對必要的。首先要向您顯示使用目錄連接的步驟。

RMAN> backup database plus archivelog format '/u01/oraback/%U.rmb';

Starting backup at 08/08/10 12:08:29 current log archived
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=58 device type=DISK
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=631 RECID=344 STAMP=726057709
input archived log thread=1 sequence=632 RECID=345 STAMP=726058637

… output truncated …


還需要控制文件備份。如果您配置了控制文件自動備份,則備份也包含控制文件。如果您希望確保備份控制文件,或者尚未配置控制文件自動備份,則可以顯式備份控制文件。

RMAN> backup current controlfile format '/u01/oraback/%U.rmb';


上述命令將在目錄 /u01/oraback 中創(chuàng)建備份文件。當然,如果您在某個位置中有了備份,則不需要執(zhí)行此步驟。將這些備份文件復(fù)制到要在其上創(chuàng)建重復(fù)副本的服務(wù)器。

# scp *.rmb oradba2:`pwd`


在繼續(xù)操作之前,您需要知道一條信息,那就是源數(shù)據(jù)庫的 DBID。您可以通過以下三種方式之一獲取該信息:

  • 從數(shù)據(jù)字典中獲取

    SQL> select dbid from v$database; 

    DBID 
    ---------- 
    1718629572

  •  

  • 從 RMAN 信息庫(目錄或控制文件)中獲取

    RMAN> list db_unique_name all; 

    List of Databases
    DB Key  DB Name  DB ID            Database Role    Db_unique_name 
    -------    -------     -----------------        ---------------         ------------------ 
    2       D112D1   1718629572       PRIMARY          D112D1             

  • 通過查詢目錄數(shù)據(jù)庫上的恢復(fù)目錄表獲取。


在本案例中,DBID 為 1718629572;請記下該值。(操作中并非絕對需要 DBID,但您稍后將看到它為什么如此重要。)

您還需要知道另一個非常重要的事實:備份的完成時間。您可以通過多個來源獲取該時間,最常用的一個來源是 RMAN 日志文件。否則,只需查詢 RMAN 信息庫(目錄或控制文件)。下面是操作步驟:

# $ORACLE_HOME/bin/rman target=/ rcvcat=rman_d112d1/rman_d112d1@d112d2

Recovery Manager: Release 11.2.0.1.0 - Production on Mon Aug 9 12:25:36 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: D112D1 (DBID=1718629572)

connected to recovery catalog database

RMAN> list backup of database; 

List of Backup Sets

===================  

BS Key  Type LV Size       Device Type Elapsed Time Completion Time 

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

716     Full    2.44G      DISK        00:03:58     08/09/10 10:44:52

        BP Key: 720   Status: AVAILABLE  Compressed: NO  Tag: TAG20100809T104053

        Piece Name: /u01/oraback/22lktatm_1_1.rmb

  List of Datafiles in backup set 716

  File LV Type Ckp SCN    Ckp Time          Name

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

  1       Full 13584379   08/09/10 10:40:55 +DATA/d112d1/datafile/system.256.696458617

… output truncated …


需要設(shè)置 NLS 變量,因為我們需要知道具體時間,而不只是日期。從輸出中,我們知道備份的執(zhí)行時間為 8 月 9 日上午 10:44:53。

其余步驟在目標主機上執(zhí)行。此處,主數(shù)據(jù)庫名為 D112D1,副本數(shù)據(jù)庫名為 STG。

在文件 /etc/oratab 中添加一行以反映要復(fù)制的數(shù)據(jù)庫實例:

STG:/opt/oracle/product/11.2.0/db1:N


現(xiàn)在,將 Oracle SID 設(shè)置為已復(fù)制數(shù)據(jù)庫的 SID:

# . oraenv 
ORACLE_SID = [STG] ? 
The Oracle base for ORACLE_HOME=/opt/oracle/product/11.2.0/db1 is /opt/oracle


從主數(shù)據(jù)庫中復(fù)制初始化參數(shù)文件。編輯該文件以反映可能適當?shù)男挛恢?,例如審計轉(zhuǎn)儲目標、數(shù)據(jù)文件位置等。還要創(chuàng)建口令文件。

# orapwd file=orapwSTG password=oracle entries=20


當 pfile 文件和口令文件準備就緒后,使用 nomount 選項啟動實例。只啟動實例,這很重要,因為復(fù)制過程將創(chuàng)建并掛載控制文件。

SQL> startup nomount
ORACLE instance started. 
Total System Global Area  744910848 bytes 
Fixed Size                  1339120 bytes 
Variable Size             444596496 bytes 
Database Buffers          293601280 bytes 
Redo Buffers                5373952 bytes


雖然并不重要,但將命令放入腳本中并從 RMAN 命令行執(zhí)行腳本,而不是逐行輸入每個命令,會更加輕松。下面是腳本文件的內(nèi)容:

connect auxiliary sys/oracle 
connect catalog rman_d112d1/rman_d112d1@d112d2
duplicate database 'D112D1' DBID 1718629572 to 'STG' 
until time "to_date('08/09/10 10:44:53','mm/dd/yy hh34:mi:ss')" 
   db_file_name_convert = ("+DATA/D112D1","/u01/oradata/stg") 
backup location '/u01/oraback' ;


該腳本是代碼式自說明的。前兩行代碼說明到輔助實例(我們要作為主數(shù)據(jù)庫副本創(chuàng)建的數(shù)據(jù)庫)的連接和目錄連接。第三行說明我們要將數(shù)據(jù)庫 D112D1 復(fù)制到 STG。此處還顯示了數(shù)據(jù)庫應(yīng)該恢復(fù)到的時間的時間戳。由于主機之間的數(shù)據(jù)庫文件位置不同,因此用第五行加以說明。在主數(shù)據(jù)庫上,數(shù)據(jù)文件位于 ASM 磁盤組 DATA 上,而臨時數(shù)據(jù)庫將在目錄 /u01/oradata 中創(chuàng)建。這意味著我們必須執(zhí)行命名約定更改。主數(shù)據(jù)庫 +DATA/somefile.dbf 上的數(shù)據(jù)文件名為 /u01/oradata/somefile.dbf。最后,我們提供了備份文件的位置。

在此,我們使用了時間戳 8 月 9 日 10:44:53,僅比備份完成時間晚一秒鐘。當然,只要存檔日志可用,我們在此可以使用任何其他時間。您還可以提供 SCN 號,而不是時間戳。

讓我們將該腳本文件命名為 duplicate.rman。創(chuàng)建之后,直接從 RMAN 調(diào)用該腳本:

#$ORACLE_HOME/bin/rman @duplicate.rman


此處為結(jié)果輸出。如果您的操作進展不太順利,將該輸出與您的情況進行比較,可能會為您提供有價值的線索。

就是這樣;臨時數(shù)據(jù)庫 STG 現(xiàn)在已啟動并正在運行?,F(xiàn)在,您可以連接到該數(shù)據(jù)庫并選擇表。在此過程中,您都不必連接到主數(shù)據(jù)庫。只需幾個命令即可。

總之,正如您在輸出中所見,該命令執(zhí)行以下步驟:

  • 創(chuàng)建 SPFILE

  • 關(guān)閉實例并使用新 spfile 重新啟動它

  • 從備份中還原控制文件

  • 掛載數(shù)據(jù)庫

  • 執(zhí)行數(shù)據(jù)文件還原。在此階段,它將用轉(zhuǎn)換后的名稱創(chuàng)建文件。

  • 將數(shù)據(jù)文件恢復(fù)到指定的時間并打開數(shù)據(jù)庫

如果您想查看剛創(chuàng)建的數(shù)據(jù)庫的 DBID,執(zhí)行以下命令:

SQL> select dbid from v$database; DBID ---------- 844813198


該 DBID 與主數(shù)據(jù)庫的 DBID 不同,因此也可使用相同目錄單獨對其進行備份。說到 DBID,還記得我們在復(fù)制過程中使用過它嗎(即使不是絕對必要的)?這是因為兩個數(shù)據(jù)庫可能具有相同的名稱,但在恢復(fù)目錄中,可能存在兩個名為 D111D1 的數(shù)據(jù)庫(源)。復(fù)制過程如何知道要復(fù)制哪個數(shù)據(jù)庫呢?于是,使用 DBID 加以明確區(qū)別。

類似地,如果您具有多個備份,RMAN 將根據(jù) UNTIL TIME 子句自動選擇從哪個備份中復(fù)制。最后,我們在此使用了目錄數(shù)據(jù)庫;但是,該數(shù)據(jù)庫不是必需的。如果您沒有指定目錄,則必須使用“until time”子句,而不是“until SCN”。

取消刪除表空間(僅限第 2 版)

比如說您要清理數(shù)據(jù)庫中的垃圾,于是希望刪除可能早已不存在的用戶創(chuàng)建的所有小型和大型表空間。刪除這些表空間時,您不經(jīng)意地刪除了一個非常關(guān)鍵的表空間。該怎么辦?

在以前代碼版本中,可選方案是減少表空間總數(shù)。下面是執(zhí)行步驟:

  • 創(chuàng)建另一個名為 TEMPDB 的實例

  • 還原已刪除表空間和其他必需表空間(如 SYSTEM、SYSAUX 和 UNDO)的數(shù)據(jù)文件

  • 將其恢復(fù)到正好發(fā)生故障的時刻,務(wù)必小心,確保不會錯誤地將其向前滾動到發(fā)生刪除之前的時刻

  • 從 TEMPDB 傳輸表空間并將其插入到主數(shù)據(jù)庫中

  • 刪除 TEMPDB 實例

毋庸置疑,這些步驟對于任何人來說都是復(fù)雜的,除非是習慣于經(jīng)常刪除表空間的經(jīng)驗豐富的 DBA。您不希望具有類似于取消刪除表(閃回表)功能的簡單的“取消刪除表空間”功能嗎?

在 Oracle Database 11g 第 2 版中,您將如愿以償。我們來看一下它的工作原理。為了進行說明,我們需要一個表空間并將一個或兩個表放入其中,以便觀察“取消刪除”的效果:

SQL> create tablespace testts

  2  datafile '/u01/oradata/testts_01.dbf' size 1M;

Tablespace created.

SQL> conn arup/arup

Connected.

SQL> create table test_tab1 (col1 number) tablespace testts

  2  /

Table created.

SQL> insert into test_tab1 values (1);

1 row created.

SQL> commit;

Commit complete.


進行備份之后,我們在該表空間中創(chuàng)建另一個表

SQL> create table testtab2 tablespace testts as select * from testtab; 

Table created.


在實際刪除表空間之前,讓我向您介紹視圖 TS_PITR_OBJECTS_TO_BE_DROPPED,該視圖顯示表空間中將隨表空間一起刪除的對象:

SQL> desc TS_PITR_OBJECTS_TO_BE_DROPPED

 Name                                      Null?    Type

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

 OWNER                                     NOT NULL VARCHAR2(30)

 NAME                                      NOT NULL VARCHAR2(30)

 CREATION_TIME                             NOT NULL DATE

 TABLESPACE_NAME                                    VARCHAR2(30)

                                   VARCHAR2(30)


查看該視圖:

select owner, name, tablespace_name,

       to_char(creation_time, 'yyyy-mm-dd:hh34:mi:ss')

from ts_pitr_objects_to_be_dropped

where creation_time > sysdate -1

order by creation_time

/

OWNER                          NAME

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

TABLESPACE_NAME                TO_CHAR(CREATION_TI

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

ARUP                           TEST_TAB1

TESTTS                         2010-08-03:15:31:16

ARUP                           TEST_TAB2

TESTTS                         2010-08-03:15:33:09


該視圖顯示了我們之前創(chuàng)建的兩個表?,F(xiàn)在,使用 including contents 子句刪除表空間,這也將刪除其中的表。

SQL> drop tablespace testts including contents; 

Tablespace dropped.


如果您要查看上述視圖,執(zhí)行以下命令:

sql> select owner, name, tablespace_name,
  2         to_char(creation_time, 'yyyy-mm-dd:hh34:mi:ss')
  3         from ts_pitr_objects_to_be_dropped
  4  where creation_time > sysdate -1
  5* order by creation_time


兩個表將不存在。

現(xiàn)在,您需要取消刪除表空間。要實現(xiàn)這一目的,您必須知道刪除表空間的時間。一種簡單的方法是查看警報日志。下面是警報日志的節(jié)選:

Tue Aug 03 15:35:54 2010 
drop tablespace testts 
ORA-1549 signalled during: drop tablespace testts... 
drop tablespace testts including contents 
Completed: drop tablespace testts including contents


為將表空間恢復(fù)回數(shù)據(jù)庫中,我們將使用該時間戳,恰好是執(zhí)行 drop tablespace 命令的時間。

RMAN> recover tablespace testts 
2> until time "to_date('08/03/2010 15:35:53','mm/dd/yyyy hh34:mi:ss')" 
3> auxiliary destination '/u01/oraux';


其中的 auxiliary destination 是將創(chuàng)建的新數(shù)據(jù)庫文件的所在位置。在此,您可以使用任何空間,甚至包括計劃用于其他內(nèi)容的氣泡空間,因為只是臨時需要該空間。(此處為該 RMAN 命令的輸出。)

就是這樣;現(xiàn)在,表空間再次可用。讓我們看一下該命令實際執(zhí)行的操作:

  • 創(chuàng)建一個名為 Dvlf 的數(shù)據(jù)庫實例。特意采用這種方式拼寫實例名稱,是為了盡量避免與現(xiàn)有實例名稱沖突。

  • 識別所有包含撤銷段的表空間

  • 還原必需的表空間(包括刪除的表空間、SYSTEM、SYSAUX 以及 UNDO 表空間)

  • 傳輸表空間 testts(刪除的表空間)

  • 將 testts 表空間插入回主數(shù)據(jù)庫中

當 testts 表空間可用時,它處于脫機模式。您必須使其聯(lián)機。

SQL> alter tablespace testts online; 

Tablespace altered.


讓我們確保同時獲取正確的數(shù)據(jù):

SQL> conn arup/arup 
Connected. 
SQL> select count(1) from test_tab1;   

COUNT(1) 
---------- 
1


按照預(yù)期恢復(fù)了表 TEST_TAB1;但 TEST_TAB2 怎么樣了呢?

SQL> select count(1) from test_tab2;   

COUNT(1) 
---------- 
1


它也得以恢復(fù)。它是如何恢復(fù)的?該表是備份之后創(chuàng)建的?;謴?fù)時應(yīng)該不包括它?。?/p>

并非如此。表空間恢復(fù)會恢復(fù)到最后一個可用的重做條目。還原表空間備份并應(yīng)用存檔日志(以及重做日志),以便與發(fā)生故障之前的時刻完全保持一致,因為這是 recovery 子句無法實現(xiàn)的。

現(xiàn)在,如果您要查看上述視圖,執(zhí)行以下命令:

select owner, name, tablespace_name, 
       to_char(creation_time, 'yyyy-mm-dd:hh34:mi:ss') 
from ts_pitr_objects_to_be_dropped 
where creation_time > sysdate -1 
order by creation_time 


OWNER           NAME 
------------------------------ ------------------------------ 
TABLESPACE_NAME TO_CHAR(CREATION_TI 
------------------------------ ------------------- 
ARUP            TEST_TAB1 
TESTTS          2010-08-03:15:31:16 

ARUP            TEST_TAB2 
TESTTS          2010-08-03:15:33:09


就是這樣;現(xiàn)在,表空間已“取消刪除”,并且所有數(shù)據(jù)均可用。您只需幾行 RMAN 命令即可完成該操作,而不必制定復(fù)雜的活動計劃。

該方法的另一個好處是不必非將表空間還原到這個特定的時刻。假設(shè)您要將表空間還原到過去某個特定的時間點。可以通過在 until 子句中使用不同的時間來執(zhí)行該操作;稍后,您可以再將其恢復(fù)到另一個時間點。如果需要,這可以重復(fù)任意多次。在以前代碼版本中,一旦將表空間恢復(fù)到某個時間點,便無法將其恢復(fù)到早于該時間點的另一個時間點。

記得在以前的代碼版本中,執(zhí)行表空間時間點恢復(fù)時,必須針對數(shù)據(jù)文件使用 AUXNAME 參數(shù)。這可以讓您恢復(fù)表空間,但數(shù)據(jù)文件名稱不同;因此,必須將表空間插入數(shù)據(jù)庫中。現(xiàn)在的過程不需要 AUXNAME 參數(shù)。但請注意,AUXNAME 并不總是必需的。當數(shù)據(jù)文件名稱與備份相同時(通常在映像副本的情況下),需要該參數(shù)。

Set NEWNAME 命令的靈活性(僅限第 2 版)

假設(shè)您從同一服務(wù)器或不同服務(wù)器(如臨時服務(wù)器)的備份中還原數(shù)據(jù)文件。如果文件系統(tǒng)(或磁盤組)名稱相同,則不必進行任何更改。但很少存在這種情況。在臨時服務(wù)器中,文件系統(tǒng)可能不同,或者您將生產(chǎn)數(shù)據(jù)庫還原到的 ASM 磁盤組并非最初創(chuàng)建數(shù)據(jù)庫時所用的磁盤組。在這種情況下,您必須讓 RMAN 知道數(shù)據(jù)文件的新名稱。實現(xiàn)此操作的方法是使用 SET NEWNAME 命令。下面是一個示例,其中已還原的文件位于 /u02 中而不是 /u01 中,/u01 中是以前的代碼版本。

run 
{
   set newname for datafile 1 to ‘/u02/oradata/system_01.dbf’;
   set newname for datafile 2 to ‘/u02/oradata/sysaux_01.dbf’;

   restore database;      … 
}


這里只有兩個數(shù)據(jù)文件,但是,如果有成百上千數(shù)據(jù)文件怎么辦呢?輸入所有信息不僅是一項艱巨的任務(wù),而且還容易出錯?,F(xiàn)在,您可以針對表空間使用一個 set newname 子句,而不是按名稱輸入每個數(shù)據(jù)文件。下面是實現(xiàn)該操作的代碼:

run 
{
 set newname for tablespace examples to '/u02/examples%b.dbf';
 … 
 … rest of the commands come here … 
}


如果表空間包含多個數(shù)據(jù)文件,則所有數(shù)據(jù)文件均單獨創(chuàng)建。您也可以針對整個數(shù)據(jù)庫使用該子句:

run 
{   
   set newname for database to '/u02/oradata/%b'; 
}


%b 項指定不帶路徑的基文件名,例如,/u01/oradata/file1.dbf 在 %b 中將作為 file1.dbf 進行重新代碼發(fā)送。當您要將文件移到其他目錄時,這非常有用。您還可以使用該子句創(chuàng)建映像副本,其中您將使用與父文件相同的名稱在其他位置創(chuàng)建備份,這將便于識別。

警告:Oracle 托管文件沒有特定的基名;因此,該項無法用于這些文件。下面是其他一些占位符示例。

%f 是絕對文件號
%U 是系統(tǒng)生成的唯一名稱,類似于備份格式中的 %U
%I 是數(shù)據(jù)庫 ID
%N 是表空間名稱
            
使用這些占位符,您可以針對整個數(shù)據(jù)庫僅使用一個 SET NEWNAME 命令,這樣不僅過程簡單,而且命令更加準確。

自動塊修復(fù)(僅限第 2 版)

當數(shù)據(jù)庫中的數(shù)據(jù)塊受損時,您有哪些選擇呢?Oracle9i 代碼的唯一選擇是還原整個數(shù)據(jù)文件。在 Oracle9i 中,我們也可以使用塊介質(zhì)恢復(fù)特性從備份中修復(fù)特定塊,而不是整個數(shù)據(jù)文件,從而節(jié)省大量時間。

Data Recovery Advisor 可以非常清晰地顯示可能受損的塊。但在第 2 版之前,仍需要從備份修復(fù)塊。如果備份位于某個較慢的驅(qū)動器中,而這通常是因為您可能不希望將備份與數(shù)據(jù)庫本身放在同一類型的昂貴磁盤中所致,應(yīng)該怎么辦呢?如果您具有物理備用數(shù)據(jù)庫(它是數(shù)據(jù)文件的一個精確副本),并且最可能位于速度較快的存儲中。如果您可以從該數(shù)據(jù)庫中修復(fù)塊,速度將會快得多。

現(xiàn)在,您可以從物理備用數(shù)據(jù)庫修復(fù)塊了。如果您有多個物理備用數(shù)據(jù)庫,如何知道要從哪些備用數(shù)據(jù)庫中獲取塊呢?顯然,應(yīng)該選擇具有最新更新的備用數(shù)據(jù)庫。RMAN 可通過檢查所有物理備用數(shù)據(jù)庫來自動建議最適合目標的代碼。當然,在這種情況下,必須打開數(shù)據(jù)庫以便查詢,這意味著您必須有 Active Data Guard 選件。

TO DESTINATION 子句(僅限第 2 版)

您是否熟悉 Oracle 托管文件 (OMF)?它們是由 Oracle 管理的無需您干預(yù)的數(shù)據(jù)文件、日志文件和控制文件。這些文件按名稱整齊地組織在各自的文件夾中,其名稱對于您來說可能并不意味著什么,但對 Oracle 數(shù)據(jù)庫來說意味著一切。您要么喜歡 OMF,要么討厭它;但不可能介于兩者之間。您有足夠的理由喜歡它 — 不必擔心文件名、位置和相關(guān)問題,如名稱沖突。由于位置是通過代碼定義的,例如,對數(shù)據(jù)文件使用 DATAFILES,對重做日志文件使用 ONLINELOGS 等,因此便于其他工具使用。如果您使用 ASM,則使用 OMF — 您可能對其不甚了解。

您可能希望將同一結(jié)構(gòu)擴展到 RMAN 備份,您只需在其中定義一個位置,將文件放入其中,一切就會組織得整整齊齊。在 Oracle Database 11g 第 2 版中,您可以在 BACKUP 命令中使用一個新子句來指定位置。下面是其使用方法:

RMAN> backup tablespace abcd_data to destination '/u01/oraback';


注意,上述命令中沒有 %U 之類的格式字符串,不同于我們以前使用的備份命令。輸出如下:

Starting backup at 08/09/10 16:42:15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set 
input datafile file number=00006 name=+DATA/d112d1/datafile/abcd_data.272.697114011 
channel ORA_DISK_1: starting piece 1 at 08/09/10 16:42:17 
channel ORA_DISK_1: finished piece 1 at 08/09/10 16:44:22 
piece 
handle=/u01/oraback/D112D1/backupset/2010_08_09/o1_mf_nnndf_TAG20100809T164216_660t194b_.
bkp tag=TAG20100809T164216 comment=NONE 
channel ORA_DISK_1: 
backup set complete, elapsed time: 00:02:05 
Finished backup at 08/09/10 16:44:22


該子句以有組織的方式創(chuàng)建備份文件。上述命令創(chuàng)建了目錄 D112D1(實例的名稱),在該目錄下創(chuàng)建了一個名為 backupset 的目錄,在 backupset 目錄下又創(chuàng)建另一個以文件創(chuàng)建日期作為名稱的目錄。最后,使用系統(tǒng)生成的標記創(chuàng)建備份內(nèi)容。當您使用該命令備份存檔日志時,備份內(nèi)容位于子目錄 archivelogs 下,依此類推。

您還可以在 ALLOCATE CHANNEL 命令中使用該子句:

RMAN> run { 
2> allocate channel c1 type disk to destination '/u01/oraback'; 
3> }


更多代碼壓縮選擇(僅限第 2 版)

RMAN 中的代碼壓縮并不是什么新東西;它已經(jīng)應(yīng)用一段時間了。下面顯示了如何創(chuàng)建表空間 ABCD_DATA 的代碼壓縮備份集。

RMAN> backup as comcodessed backupset
2> format '/u01/oraback/%U.rmb' 
3> tablespace abcd_data 
4> ;


在 Oracle Database 11g 第 1 版中,我們看到引入了一種名為 ZLIB 的新加密算法,該算法速度很快(占用更少的 CPU),但代碼壓縮率卻降低了。在 Oracle Database 11g 第 2 版中,提供了幾個代碼壓縮選項。

默認的代碼壓縮為基本配置,它不需要任何額外開銷來購買選件。使用 comcodession 的高級選項,您現(xiàn)在能夠指定不同類型的代碼壓縮級別:LOW、MEDIUM 和 HIGH — 代碼壓縮率從最低到最高,CPU 占用(RMAN 吞吐量相反)從最低到最高。下面是將 comcodession 選項配置為 high 的命令:

rman> configure comcodession algorithm 'high';


在測試中,我使用 HIGH 級別獲取代碼壓縮的備份集,代碼壓縮后的字節(jié)數(shù)為 118947840,與未進行代碼壓縮的字節(jié)數(shù) 1048952832 相比,空間約為原來的 1/9。當然,壓縮比例視數(shù)據(jù)庫而不同。

comcodession 選項的設(shè)置越高,創(chuàng)建的備份集就越小,這對于速度較慢的網(wǎng)絡(luò)很有意義,但占用 CPU 周期。

備份到云(僅限第 2 版)

在本文的結(jié)尾,我們將討論 RMAN 目標中一個最令人興奮的高級特性。在當今的云計算時代,有一種超群的功能,那就是備份,因此各企業(yè)都轉(zhuǎn)向基于云的服務(wù)提供商而不是在它們自己的硬件方面進行投資。正如其本身所定義的那樣,備份應(yīng)該是異地備份;而云是最好不過的選擇。Amazon 提供了 Simple Storage Service (S3),它實質(zhì)上是一個大型存儲氣泡,可以存儲任意多內(nèi)容。作為客戶,您只需按實際使用付費。Amazon 負責存儲的可靠性。

Oracle Database 11g 第 2 版附帶了各種工具(庫和軟件),可以使用專門開發(fā)的介質(zhì)管理庫 (MML) 通過 RMAN 將 Oracle 數(shù)據(jù)庫備份到 Amazon S3。我在此并不介紹這項服務(wù),而是希望您將注意力轉(zhuǎn)向該服務(wù)的分步指南http://download.oracle.com/docs/cd/E11882_01/backup.112/e10643/web_services001.htm#RCMRF90490

該指南寫的非常好,并且包含代碼,在此再介紹該指南是完全多余的。

以上是“Oracle11g備份恢復(fù)新特性有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


標題名稱:Oracle11g備份恢復(fù)新特性有哪些
文章鏈接:http://weahome.cn/article/ieiohd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部