備份理論和基本語法
備份概念
執行備份或還原草的數據庫稱為目標。在一些環境下,有許多數據庫,因此有許多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_time NAME 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/oracle rman target sys/oracle@orclz
所有3個命令都以具備SYSDBA權限的用戶身份登錄到目標數據庫上。在第一個命令中,目標是一個運行在同一台機器上的本地數據庫實例,該機器用ORACLE_SID環境變量標識,用戶用其操作系統賬戶進行身份驗證。第二個例子也連接一個本地數據庫實例,但使用數據庫密碼文件來驗證身份。第三個例子使用tnsnames服務名,通過網絡連接一個遠程數據庫,它也使用密碼文件來驗證身份。
1.在非歸檔日志模式下備份
使用RMAN進行關閉的完整備份
[oracle@cuug ~]$ 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 catalog database closed database dismounted Oracle instance shut down RMAN> startup mount connected to target database (not started) Oracle instance started database mounted Total System Global Area 523108352 bytes Fixed Size 1337632 bytes Variable Size 394266336 bytes Database Buffers 121634816 bytes Redo Buffers 5869568 bytes RMAN> backup database; Starting backup at 2019-04-08 20:28:01 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=18 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=00001 name=/u01/oradata/prod/system01.dbf input datafile file number=00002 name=/u01/oradata/prod/sysaux01.dbf input datafile file number=00003 name=/u01/oradata/prod/undotbs01.dbf input datafile file number=00005 name=/u01/oradata/prod/example01.dbf input datafile file number=00004 name=/u01/oradata/prod/users01.dbf channel ORA_DISK_1: starting piece 1 at 2019-04-08 20:28:03 channel ORA_DISK_1: finished piece 1 at 2019-04-08 20:29:08 piece handle=/u01/flash_recovery_area/PROD/backupset/2019_04_08/o1_mf_nnndf_TAG20190408T202802_gbphlm1z_.bkp tag=TAG20190408T202802 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:01:05 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current control file in backup set including current SPFILE in backup set channel ORA_DISK_1: starting piece 1 at 2019-04-08 20:29:09 channel ORA_DISK_1: finished piece 1 at 2019-04-08 20:29:10 piece handle=/u01/flash_recovery_area/PROD/backupset/2019_04_08/o1_mf_ncsnf_TAG20190408T202802_gbphnor0_.bkp tag=TAG20190408T202802 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 2019-04-08 20:29:10 RMAN> alter database open; database opened RMAN> exit Recovery Manager complete. [oracle@cuug ~]$
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: d1 channel d1: SID=35 device type=DISK allocated channel: d2 channel d2: SID=1 device type=DISK Starting backup at 2019-04-08 20:46:57 channel d1: starting compressed full datafile backup set channel d1: specifying datafile(s) in backup set input datafile file number=00001 name=/u01/oradata/prod/system01.dbf input datafile file number=00005 name=/u01/oradata/prod/example01.dbf channel d1: starting piece 1 at 2019-04-08 20:46:58 channel d2: starting compressed full datafile backup set channel d2: specifying datafile(s) in backup set input datafile file number=00002 name=/u01/oradata/prod/sysaux01.dbf input datafile file number=00003 name=/u01/oradata/prod/undotbs01.dbf input datafile file number=00004 name=/u01/oradata/prod/users01.dbf channel 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; # default CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE ENCRYPTION FOR DATABASE OFF; # default CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default CONFIGURE 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 14 days; configure backup optimization on; configure controlfile autobackup on; configure device type disk parallelism 4 backup type to compressed backupset; configure channel device type disk format 'c:\db_backups\%d_%T_%u'; configure archivelog deletion policy to backup 2 times to disk;
在使用命令就能滿足上述需求:
backup database; backup archivelog all delete input;
永久配置設置是為每個目標數據庫配置的,存儲在RMAN庫中,要返回默認值,可以連接目標,執行CLEAR命令:
configure retention policy clear; configure backup optimization clear; configure controlfile autobackup clear; configure device type disk clear; configure channel device type disk clear; 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;對於歸檔日志映像副本,它是arch-D-%d_id-%I_S-%e_T-%h_A-%a_%u;對於控制文件映像副本,它是cf-D_%d-id-%I_%u