歡迎光臨
每天分享高質量文章

備份有困難?Oracle DBA詳述RMAN備份

本文介紹Oracle使用RMAN的備份理論和基本語法。

 

備份概念


 

執行備份或還原的資料庫稱為標的。在一些環境下,有許多資料庫,因此有許多RMAN標的。應一次連接每個資料庫。標的的每個備份都有一些屬性:

  • 打開或關閉
  • 完整或部分
  • 完整或增量
  • 到磁盤還是磁帶上
  • 副本或備份集

 

這些屬性可以隨意組合,但根據環境和配置,可能只能使用這些屬性的一個子集。在所有情況下,備份由Oracle服務器行程完成,啟動該行程是為了響應RMAN可執行程式用戶行程中發出的命令。

 

1. RMAN體系結構

 

RMAN可執行程式是一個用戶行程,與其他用戶行程一樣。它在本地使用行程間通信(IPC),或者遠程使用TCP和資料庫偵聽器,登錄到一個Oracle資料庫上。連接後,用戶就可以發出命令,執行備份和還原操作。這些操作由根據需要啟動的其他Oracle服務器行程(稱為通道)來完成。通道是一個服務器行程,與其他服務器行程一樣,但其基本功能僅限於複製檔案。

 

RMAN的一個主要功能是使用庫。RMAN庫由與備份相關的元資料組成。這包括已備份的內容、備份檔案和位置、存在哪些歸檔日誌檔案、已有的永久配置設置,以及RMAN理解資料庫和備份,以完全自動執行還原和恢復操作所需的所有細節。該庫存在於一個或兩個位置。庫的一個副本總是儲存在標的資料庫的控制檔案中。僅依賴它可能會帶來連個問題。第一,信息僅儲存有限的時間。具體而言,就是CONTROL_FILE_RECORD_KEEP_TIME實體引數指定的天數,預設為7天。如果僅適用基於控制檔案的庫,就可能希望調整它,讓RMAN把信息保留更長的時間。命令如下:

SYS@ prod >sho parameter keep_timeNAME                                TYPE        VALUE-- ---------------------------------- ----------- ------------------------------control_file_record_keep_time        integer 7 SYS@ prod > alter system set control_file_record_keep_time = 30;System altered.SYS@ prod>

 

RMAN還可以用Oracle資料庫的形式給庫使用第二個儲存位置。這需要在資料中創建一個樣式,稱為RMAN目錄。該目錄應在資料庫中創建,僅用於這個目的。該目錄可以記錄許多標的的元資料,用作所有備份信息的中心庫。使用目錄時,備份信息可以儲存的時間段是沒有限制的。使用目錄還可以啟用一些更高級的RMAN功能。

 

RMAN可以創建兩類備份:映像副本和備份集。映像副本備份會生成一個輸出檔案,其中的每個位元組都與輸入檔案相同。備份集是一種比較智慧的結構。它可以把幾個輸入檔案合併到一個輸出檔案中,不包含從來沒有使用的輸入檔案塊,可以壓縮和加密,可以分解為多個塊。這些塊是構成備份集的物理檔案。

 

2. 在一個頁面中備份

 

打開備份(也稱為熱備份或不一致備份)在資料庫使用過程中進行。只有資料庫在歸檔日誌樣式下,才能進行打開備份。這是因為可打開檔案的任何備份都是不一致的。讀取檔案和寫入副本要花相當長的時間,在這個過程中,檔案可能已更新。因此,副本吧聽不是檔案的一個穩定版本。在歸檔日誌樣式下,這就不是什麼問題,因為重做日誌流會以變更矢量的形式記錄應用於檔案的所有變更,在備份的過程中,這些變更會應用於Oracle 塊。如果需要從備份中還原檔案,就可以應用這些變更,使用重做流中的信息,是不一致的備份可用。如果資料庫沒有處於歸檔日誌樣式,進行備份時執行的重做就不可用。

 

關閉備份(也稱為冷備份或抑製備份)在資料庫處於裝載樣式時進行。控制檔案必須裝載,RMAN才能訪問其庫。關閉備份是一致的;資料檔案是穩定的,關閉備份時資料庫處於非歸檔日誌樣式下時唯一可用的備份型別。

 

完整備份時備份所有資料檔案和控制檔案。區域性備份是備份資料庫的一個子集。完整備份是非歸檔日誌樣式下唯一可用的備份型別。這是由於要打開資料庫,因此所有的資料檔案必須有相同的系統變更號(SCN)。如果備份包含幾個區域性備份,每個區域性備份就有不同的SCN。之後還原時,就需要重做資料,使所有的備份具有相同的SCN。這些重做資料不能在非歸檔日誌樣式下使用。

 

完整備份包含每個檔案中每個使用過的塊。增量備份只有自上一次備份以前改變的塊。增量備份策略必須從一個完整備份開始,之後可以有隨意多次增量備份,但還原總是需要先還原完整備份(稱為0級備份),再應用增量備份,使檔案保持最新。只有進行了新的0級備份,才能丟棄以前的備份。

 

RMAN基本語法


 

RMAN可執行程式在操作系統提示行上的命令:

 

rman target /rman target sys/oraclerman target sys/oracle@orclz

 

所有3個命令都以具備SYSDBA權限的用戶身份登錄到標的資料庫上。在第一個命令中,標的是一個運行在同一臺機器上的本地資料庫實體,該機器用ORACLE_SID環境變數標識,用戶用其操作系統賬戶進行身份驗證。第二個例子也連接一個本地資料庫實體,但使用資料庫密碼檔案來驗證身份。第三個例子使用tnsnames服務名,通過網絡連接一個遠程資料庫,它也使用密碼檔案來驗證身份。

 

1. 在非歸檔日誌樣式下備份

 

使用RMAN進行關閉的完整備份

[oracle@linuxidc ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on 鏄熸湡涓€ 4鏈?8 20:26:52 2019
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: PROD (DBID=292420020)
RMAN> shutdown immediate;
using target database control file instead of recovery catalogdatabase closeddatabase dismountedOracle instance shut down
RMAN> startup mount
connected to target database (not started)Oracle instance starteddatabase mounted
Total System Global Area     523108352 bytes
Fixed Size                     1337632 bytesVariable Size                394266336 bytesDatabase Buffers             121634816 bytesRedo Buffers                   5869568 bytes
RMAN> backup database;
Starting backup at 2019-04-08 20:28:01allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=18 device type=DISKchannel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00001 name=/u01/oradata/prod/system01.dbfinput datafile file number=00002 name=/u01/oradata/prod/sysaux01.dbfinput datafile file number=00003 name=/u01/oradata/prod/undotbs01.dbfinput datafile file number=00005 name=/u01/oradata/prod/example01.dbfinput datafile file number=00004 name=/u01/oradata/prod/users01.dbfchannel ORA_DISK_1: starting piece 1 at 2019-04-08 20:28:03channel ORA_DISK_1: finished piece 1 at 2019-04-08 20:29:08piece handle=/u01/flash_recovery_area/PROD/backupset/2019_04_08/o1_mf_nnndf_TAG20190408T202802_gbphlm1z_.bkp tag=TAG20190408T202802 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:01:05channel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setincluding current control file in backup setincluding current SPFILE in backup setchannel ORA_DISK_1: starting piece 1 at 2019-04-08 20:29:09channel ORA_DISK_1: finished piece 1 at 2019-04-08 20:29:10piece handle=/u01/flash_recovery_area/PROD/backupset/2019_04_08/o1_mf_ncsnf_TAG20190408T202802_gbphnor0_.bkp tag=TAG20190408T202802 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:00:01Finished backup at 2019-04-08 20:29:10
RMAN> alter database open;
database opened
RMAN> exit
Recovery Manager complete.[oracle@linuxidc ~]$

 

2. 歸檔日誌樣式下的備份可能性

 

下麵是一些簡單的備份命令:

BACKUP DATAFILE 1,2;BACKUP TABLESPACE USERS,EXAMPLE;BACKUP CURRENT CONTROLFILE;BACKUP DATABASE;BACKUP ARCHIVELOG ALL;

 

通常,單行命令是不夠的。要把幾個命令鏈接起來,必須把它們組合到一個塊中。塊用RUN作為前綴,並括在{}中。一個打開的完成備份,包括歸檔日誌檔案的備份呵呵刪除,示例:

 

RMAN> run {allocate channel d1 type disk;2> allocate channel d2 type disk;3> backup as compressed backupset database format '/home/oracle/db_%U.bset';4> backup as compressed backupset archivelog all format '/home/oracle/arch_%U.bset' delete all input;}
allocated channel: d1channel d1: SID=35 device type=DISK
allocated channel: d2channel d2: SID=1 device type=DISK
Starting backup at 2019-04-08 20:46:57channel d1: starting compressed full datafile backup setchannel d1: specifying datafile(s) in backup setinput datafile file number=00001 name=/u01/oradata/prod/system01.dbfinput datafile file number=00005 name=/u01/oradata/prod/example01.dbfchannel d1: starting piece 1 at 2019-04-08 20:46:58channel d2: starting compressed full datafile backup setchannel d2: specifying datafile(s) in backup setinput datafile file number=00002 name=/u01/oradata/prod/sysaux01.dbfinput datafile file number=00003 name=/u01/oradata/prod/undotbs01.dbfinput datafile file number=00004 name=/u01/oradata/prod/users01.dbfchannel d2: starting piece 1 at 2019-04-08 20:46:58

 

 

在run塊中,前兩個命令ALLOCATE CHANNEL,分配一個通道,會啟動一個服務器行程。每個通道都需要名稱(只是一個隨意的字串,本例是d1和d2),必須指定是使用磁帶還是磁盤作為備份標的。啟動多個通道,會啟用備份的並行性。RMAN會把工作負載分佈到通道上。第三行指定完整的資料庫備份,使用FORMAT指定輸出塊的名稱。第四行指定所有的歸檔日誌檔案都應備份和刪除。FORMAT規範包含%U。這是一個變數,會擴展為一個名稱,該名稱包含8字符的任意字串,以確保塊運行多次時,總是生成不同的塊名。備份的型別是COMPRESSED BACKUPSET。壓縮通常不僅會減少備份塊的大小,還會提高操作的速度。

 

預設的備份型別是備份集。另一個型別是映像副本。要撞見副本,可以使用如下命令:

 

BACKUP AS COPY DATAFILE '/u01/oradata/orcl/system1.dbf' FORMAT '/U02/backup/orcl/system01.dbf';BACKUP AS COPY DATABASE;

 

第一個命令把一個資料檔案複製到指定的標的。第二個命令把整個資料庫複製到預設的標的,即快速恢復區。

 

永久RMAN設置


 

1. 設置和清理預設值

 

使用SHOW ALL命令查看預設值

RMAN> show all;
RMAN configuration parameters for database with db_unique_name PROD are:CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # defaultCONFIGURE BACKUP OPTIMIZATION OFF; # defaultCONFIGURE DEFAULT DEVICE TYPE TO DISK; # defaultCONFIGURE CONTROLFILE AUTOBACKUP OFF; # defaultCONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # defaultCONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # defaultCONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # defaultCONFIGURE MAXSETSIZE TO UNLIMITED; # defaultCONFIGURE ENCRYPTION FOR DATABASE OFF; # defaultCONFIGURE ENCRYPTION ALGORITHM 'AES128'; # defaultCONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # defaultCONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # defaultCONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/oracle/dbs/snapcf_prod.f'; # default
RMAN>

 

  • RETENTION POLICY 指定RMAN應創建什麼備份,合適可以刪除它們。預設值是每個檔案的一個副本。
  • OPTIMIZATION 確定,即使已有足夠的備份,RMAN是否仍要根據請求備份檔案。預設值是總是備份它們。
  • DEFAULT DEVICE TYPE TO DISK 表示除非明確指出,否則RMAN就僅啟動磁盤通道,不寫入磁帶。
  • CONTROLFILE AUTOBACKUP OFF 禁止RMAN自動備份控制檔案,作為其他備份操作的一部分。
  • AUTOBACKUP FORMAT 為控制檔案的自動備份生成名稱和位置。
  • DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET 表示,在預設情況下,備份到磁盤時,只啟動一個通道,該備份是一個未壓縮的備份集。
  • BACKUP COPIES 指定在備份資料檔案和歸檔日誌檔案時,應生成備份集的多少副本。
  • MAXSETSIZE 可以限制每個備份集的大小。如果達到了這個數字,就關閉該備份集塊,繼續備份到一個新的備份集中。
  • ENCRYPTION 預設禁用備份集的加密。
  • COMPRESSION 如果請求壓縮,就使用BASIC演算法,它是免費的。
  • ARCHIVELOG DELETION POLICY 允許RMAN根據各種條件,自動刪除不再需要的歸檔日誌。
  • SNAPSHOT CONTROLFILE 為控制檔案的臨時副本指定名稱和位置,這些臨時副本創建為控制檔案備份機制的一部分。

 

需求示例:總是可以把資料庫還原到前兩周的任意時刻;創建達到該標的所需的備份,備份寫入磁盤,使用4個通道的並行程度;控制檔案必須總是包含在任何備份中;備份是壓縮過的備份集,儲存在c:\db_backups目錄中;備份集塊根據庫名、備份日期和唯一字串來命名;歸檔日誌在備份到磁盤上兩次後刪除。要配置這個需求,應運行如下命令:

 

configure retention policy to recovery window of 14days;configurebackup optimization on;configure controlfile autobackupon;configure device typedisk parallelism 4 backup type tocompressed backupset;configure channel device typedisk format ' c:\db_backups\%d_%T_%u ';configure archivelog deletion policyto backup 2 times to disk ;

 

在使用命令就能滿足上述需求:

 

backup database;backup archivelog all delete input;

 

永久配置設置是為每個標的資料庫配置的,儲存在RMAN庫中,要傳回預設值,可以連接標的,執行CLEAR命令:

 

configure retention policy clear;configurebackupoptimization clear;configure controlfile autobackup clear;configure device typediskclear;configure channel device typediskclear;configure archivelog deletion policy clear;

 

2. 使用保留策略

 

使用恢復視窗或冗餘,就可以自動保留和管理備份。使用恢復視窗,RMAN會分局需要保留許多備份,知道資料庫傳回恢復視窗的任意時間點位置。例如,在7天的恢復視窗中,RMAN會維護足夠多的映像副本、增量備份和歸檔重做日誌,確保資料庫可以還原和恢復前7天內的任意時間點。如果使用快速恢復區,且新備份需要磁盤空間,則不需要支持這個恢復視窗的任何備份都標記為OBSOLETE,並由RMAN自動刪除。

 

相反,冗餘策略告訴RMAN保留特定數量的備份。超過冗餘策略中的指定的數字的任何額外副本或備份都標記為OBSOLETE。與恢復視窗一樣,如果需要磁盤空間,使用了快速恢復區,則過時的備份會自動刪除。否則,可以使用DELETE OBSOLETE命令手工刪除備份檔案,更新目錄。

 

如果保留策略設置為NONE,任何備份或副本就都不會過時,DBA必須手工刪除目錄和磁盤中不需要的備份。預設情況下,保留策略是一個副本(保留策略設置為1)。使用下麵的RMAN命令,可以把保留策略設置為兩個副本:

configure retention policy to redundancy 2;

 

下麵的命令把保留策略設置為4天的恢復視窗:

configure retention policy to recovery window of 4 days;

 

Oracle最佳實踐建議,使用恢復視窗,在發現錯誤之前執行時間點恢復。

 

當RMAN外部的備份系統把磁盤備份儲存到磁帶中,並刪除了它們時,禁用保留策略是有用的。

configure retention policy to none;

 

3. 格式指定符

 

為了生成名稱,需要配置永久格式指定符,使用字面量(如目錄名)和變數組合。變數如下:

 

 

%d 資料庫名

%e 歸檔日誌序列號

%f 絕對檔案號

%F 組合資料庫識別符號(DBID)、日期、月份、年份和序列號,用短橫線隔開

%c 雙重備份中多個副本的副本號

%I DBID

%N 表空間名,占8個字符

%t 備份集時間戳

%p 備份集中的塊號

%s 備份集號

%u 實際上,是8個隨機字符,派生與備份集號和時間

%U 系統生成的唯一檔案名(預設)。對於備份集,它等價於%u_%p_%c;對於資料檔案影響副本,它是data-D-%d_id-%I_TS-%N_FNO-%f_%u;對於歸檔日誌映像副本,它是

赞(0)

分享創造快樂