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

備份概念linux


 

執行備份或還原的數據庫稱爲目標。在一些環境下,有許多數據庫,所以有許多RMAN目標。應一次鏈接每一個數據庫。目標的每一個備份都有一些屬性:nginx

  • 打開或關閉算法

  • 完整或部分sql

  • 完整或增量typescript

  • 到磁盤仍是磁帶上數據庫

  • 副本或備份集服務器

 

這些屬性能夠隨意組合,但根據環境和配置,可能只能使用這些屬性的一個子集。在全部狀況下,備份由Oracle服務器進程完成,啓動該進程是爲了響應RMAN可執行程序用戶進程中發出的命令。網絡

 

1. RMAN體系結構oracle

 

RMAN可執行程序是一個用戶進程,與其餘用戶進程同樣。它在本地使用進程間通訊(IPC),或者遠程使用TCP和數據庫偵聽器,登陸到一個Oracle數據庫上。鏈接後,用戶就能夠發出命令,執行備份和還原操做。這些操做由根據須要啓動的其餘Oracle服務器進程(稱爲通道)來完成。通道是一個服務器進程,與其餘服務器進程同樣,但其基本功能僅限於複製文件。ui

 

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;對於歸檔日誌映像副本,它是

 

出處:https://www.linuxidc.com/Linux/2019-04/158197.htm

相關文章
相關標籤/搜索