本系列宗旨:真正掌握OCP考試中所考察的技能,堅決不做Paper OCP!
實驗環境:RHEL 6.4 + Oracle 11.2.0.4
OCP考點實戰演練01-備份恢復篇
- 1.數據庫開啟歸檔
- 2.配置數據庫的可恢復性
- 3.RMAN恢復目錄
- 4.創建RMAN備份
- 5.使用RMAN備份進行恢復
- 6.用戶管理的備份和恢復
- 7.其他RMAN功能
- 8.監視和調整RMAN
- 9.配置和使用閃回
- Reference
1.數據庫開啟歸檔
``` #正常關閉數據庫之后,啟動數據庫到mount狀態,開啟數據庫歸檔 SQL> shutdown immediate SQL> startup mount SQL> alter database archivelog; SQL> alter database open; SQL> archive log list ```2.配置數據庫的可恢復性
## 2.1 閃回恢復區 ## ``` #查詢閃回恢復區的整體使用情況 SQL> select * from v$recovery_file_dest;查詢閃回恢復區的詳細使用情況
SQL> select * from v$flash_recovery_area_usage;
## 2.2 配置多個歸檔日志文件目標 ##
11g推薦使用log_archive_dest_n來配置多個歸檔日志文件目標:
設定兩個本地歸檔文件目標
SQL> alter system set log_archive_dest_1 = 'LOCATION=/u01/oradb_arch1';
SQL> alter system set log_archive_dest_2 = 'LOCATION=/u01/oradb_arch2';
問題:定義了log_archive_dest_1 就不再使用閃回恢復區了?
實驗證明:定義了log_archive_dest_1后,就不會再使用閃回恢復區存放歸檔日志。
問題:多個歸檔目標是否需要都成功?
實驗證明:有一個定義歸檔最小成功路徑數量,LOG_ARCHIVE_MIN_SUCCEED_DEST參數。需要注意,如果某個歸檔目標是MANDATORY的,那么該歸檔目標必須歸檔成功。
alter system set log_archive_min_succeed_dest=2;
## 2.3 保留策略 ##
保留策略設定為2份冗余
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
保留策略設定為4天恢復窗口
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
<h1 id="3">3.RMAN恢復目錄</h1>
參考:
- [RMAN Catalog創建、配置和管理](http://www.cnblogs.com/jyzhao/p/4864694.html)
<h1 id="4">4.創建RMAN備份</h1>
完整備份,完全備份,增量備份[0級備份|1級差異(默認)|1級累積(cumulative)]
## 4.1 FORMAT子句中的替代變量 ##
format 'rman_%d_%T_%s_%p.backupset'
這樣的備份集名稱最易識別,生成文件名示例:rman_ORADB_20151030_27_1.backupset
如果多重備份,加一個%c
即: %d_%T_%s_%p_%c
## 4.2 完全備份 ##
備份users表空間(備份集)
RMAN> backup as backupset format '/u01/oradb_bak/rman_%d_%T_%s_%p.backupset' tablespace users;
不顯示指定as backupset, 默認也是備份集形式備份
RMAN> backup format '/u01/oradb_bak/rman_%d_%T_%s_%p.backupset' tablespace users;
可以備份為壓縮的備份集,節省空間,但同時備份和恢復時會消耗CPU資源壓縮和解壓。
RMAN> backup as compressed backupset tablespace system;
## 4.3 增量備份 ##
0級備份
RMAN> backup incremental level 0 tablespace users;
1級差異備份
RMAN> backup incremental level 1 tablespace users;
1級累積備份
RMAN> backup incremental level 1 cumulative tablespace users;
0級copy
RMAN> backup incremental level 0 as copy tablespace system;
**塊更改跟蹤文件**
開啟塊更改跟蹤
SQL> alter database enable block change tracking;
查看塊更改跟蹤文件
SQL> select filename from v$block_change_tracking;
關閉塊更改跟蹤
SQL> alter database disable block change tracking;
## 4.4 多重備份 ##
備份為2份副本
RMAN> backup as compressed backupset copies 2 tablespace users format '/u01/oradb_bak/rman_bak01_%d_%T_%s_%p.backupset', '/u01/oradb_bak/rman_bak02_%d_%T_%s_%p.backupset';
RMAN> backup as compressed backupset tablespace users format '/u01/oradb_bak/rman_bak01_%d_%T_%s_%p_%c.backupset', '/u01/oradb_bak/rman_bak02_%d_%T_%s_%p_%c.backupset';
**配置磁盤通道的默認路徑**
RMAN> configure channel device type disk format '/u01/oradb_bak/rman01_%U.backupset', '/u01/oradb_bak/rman02_%U.backupset';
## 4.5 備份集的備份 ##
RMAN> backup device type disk backupset all;
保存時間超過2周的備份集都會備份在磁帶上,並且從磁盤上刪除它們。
RMAN> backup device type sbt backupset completed before 'sysdate-14' delete input;
**只讀表空間備份**
如果優化選項沒有開啟,默認是備份只讀表空間的,但可以強制RMAN忽略只讀表空間的備份,指定`SKIP READONLY`選項。
## 4.6 創建長期保留的歸檔備份 ##
11g版本的新特性:
保存1年的
RMAN> backup as compressed backupset database format '/u01/oradb_bak/archbak_%d_%T_%p_%s_%c' tag save1year keep until time 'sysdate+365';
備份輸出信息可以清楚看到backup will be obsolete on date 2016-11-01 10:28:48
類似這樣的提示信息。也就是一年后才被標記為obsolete。
保存永久的
RMAN> backup as compressed backupset database format '/u01/oradb_bak/archbak_%d_%T_%p_%s_%c' tag saveforever keep forever;
同樣,備份輸出信息可以看到backup will never be obsolete
這樣的提示信息。也就是永遠都不會被標記為obsolete。
修改歸檔備份的保留期限
RMAN> change backup tag 'SAVEFOREVER' nokeep;
RMAN> change backup tag 'SAVEFOREVER' keep forever;
change其他用法,例如歸檔日志路徑變更
RMAN> HOST '/bin/mv $ORACLE_HOME/dbs/*.arc /disk2/archlog/';
RMAN> CHANGE ARCHIVELOG ALL UNCATALOG;
RMAN> CATALOG START WITH '/disk2/archlog' NOPROMPT;
特別注意:不可以使用閃回恢復區來存儲歸檔備份。
## 4.7 創建多段、壓縮和加密備份 ##
**11g新特性:多段備份**
適用於大文件表空間的備份
RMAN> backup tablespace users section size 1M;
注:同時可以分配多個磁盤和磁帶通道,以並行方式備份每段數據文件。
驗證備份也可以指定`section size`
RMAN> validate tablespace users;
RMAN> validate tablespace users section size 1M;
相關數據字典視圖
目標數據庫
v$backup_set
v$backup_datafile
恢復目錄
rc_backup_set
rc_backup_datafile
**壓縮備份**
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
**加密備份**
分為三種:透明加密、密碼加密、雙模式加密。
主要介紹下透明加密:
a) 配置sqlnet.ora文件
ENCRYPTION_WALLET_LOCATION = (SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY =
/etc/ORACLE/WALLETS/oracle)))
b) 創建wallet
mkdir -p /etc/ORACLE/WALLETS/oracle
chown -R oracle:oinstall /etc/ORACLE
--創建wallet
--第一種方法:orapki wallet create -wallet wallet_location [-pwd password]
--第二種方法:orapki wallet create -wallet wallet_location -auto_login [-pwd password]
$ orapki wallet create -wallet /etc/ORACLE/WALLETS/oracle -pwd MyWalletPWD1
c) 打開/關閉wallet,Set Master Key
--打開wallet
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "MyWalletPWD1";
--關閉wallet
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "MyWalletPWD1";
--Master key
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "MyWalletPWD1";
d) RMAN透明加密備份
-- 打開加密功能
RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
//RMAN> set encryption identified by "MyWalletPWD1";
-- 加密備份users表空間
RMAN> backup as compressed backupset tablespace users;
-- 關閉加密功能
RMAN> CONFIGURE ENCRYPTION FOR DATABASE OFF;
## 4.8 備份報告和維護 ##
-- list
list backup summary;
list backup;
list script names;
-- report
report need backup;
report schema;
-- delete
delete obsolete;
delete backup;
delete backupset XXXXXXX;
-- crosscheck & delete
crosscheck backup;
delete expired;
<h1 id="5">5.使用RMAN備份進行恢復</h1>
參考:
- [Oracle Recovery 01 - 常規恢復之完全恢復](http://www.cnblogs.com/jyzhao/p/4710227.html)
- [Oracle Recovery 02 - 常規恢復之不完全恢復](http://www.cnblogs.com/jyzhao/p/4723994.html)
其他腳本、相關視圖、命令關鍵字:
-- run塊腳本示例
run {
recover copy of database
with tag 'inc_upd';
backup incremental level 1
for recover of copy
with tag 'inc_upd'
database;
}
-- 恢復常用視圖
v$datafile
v$datafile_header
v$recover_file
v$tablespace
-- 恢復相關命令關鍵字
offline
online
switch
restore
recover
resetlogs
<h1 id="6">6.用戶管理的備份和恢復</h1>
## 6.1 丟失臨時文件 ##
如果不停機,那么增加新的臨時文件,刪除舊的臨時文件。
select file#, name from v$tempfile;
alter tablespace temp add tempfile '/u01/oradata/ORADB/datafile/temp01.dbf' size 30M;
alter tablespace temp drop tempfile '/u01/oradata/ORADB/datafile/o1_mf_temp_c2v10px4_.tmp';
select file#, name from v$tempfile;
如果停機,那么重啟庫時會自動創建臨時文件(前提是存放臨時文件的目錄還可用且有讀寫權限)。
當然,丟失臨時文件是沒有必要停機恢復的,完全可以在線來做。
## 6.2 丟失重做日志組(重點) ##
參考:
- [Oracle丟失重做日志的幾種場景恢復](http://www.cnblogs.com/jyzhao/p/4935592.html)
## 6.3 丟失口令文件 ##
orapwd命令重建口令文件
$ orapwd
Usage: orapwd file=
where
file - name of password file (required),
password - password for SYS will be prompted if not specified at command line,
entries - maximum number of distinct DBA (optional),
force - whether to overwrite existing file (optional),
ignorecase - passwords are case-insensitive (optional),
nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).
There must be no spaces around the equal-to (=) character.
## 6.4 查看恢復相關視圖 ##
**6.4.1 需要恢復的文件**
set linesize 1000
select file#, d.name d_name, t.name t_name, status, error
from v$recover_file r
join v$datafile d using(file#)
join v$tablespace t using(ts#);
結果示例:
FILE# D_NAME T_NAME STATUS ERROR
5 /u01/oradata/ORADB/datafile/o1_mf_tbs_test_c3mdft5o_.dbf TBS_TEST ONLINE FILE NOT FOUND
**6.4.2 查看恢復文件需要的歸檔日志**
SQL> select archive_name from v$recovery_log;
## 6.5 備份users表空間 ##
alter tablespace users begin backup;
!cp /xxxx/users01.dbf /xxxx/users01.dbf.bak
alter tablespace users end backup;
<h1 id="7">7.其他RMAN功能</h1>
## 7.1 使用RMAN創建復制數據庫 ##
參考:
- [使用RMAN創建復制數據庫](http://www.cnblogs.com/jyzhao/p/4939901.html)
## 7.2 表空間基於時間點的恢復(TSPITR) ##
參考:
- [表空間基於時間點的恢復(TSPITR)](http://www.cnblogs.com/jyzhao/p/4956220.html)
<h1 id="8">8.監視和調整RMAN</h1>
## 8.1 監視RMAN會話和作業 ##
--v$session和v$process
select sid, spid, client_info
from v$process p join v$session s on (p.addr = s.paddr)
where client_info like '%rman%';
--run 塊中可以指定command id ,便於區分。
run {
set command id to 'backup tbs users';
backup tablespace users;
}
--v$session_longops
select sid, serial#, opname, context, sofar, totalwork
from v$session_longops
where opname like 'RMAN%'
and sofar <> totalwork;
## 8.2 RMAN會話的調試 ##
示例:rman debug trace進入RMAN,只在備份表空間dbs_d_test時,開啟debug,生成跟蹤文件rman_debug.txt。
rman target / debug trace rman_debug.txt
run {
debug off;
backup tablespace dbs_d_jingyu;
debug on;
backup tablespace dbs_d_test;
}
執行過程輸出:
$ rman target / debug trace rman_debug.txt
Recovery Manager: Release 11.2.0.4.0 - Production on Thu Nov 12 16:53:36 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
RMAN-06005: connected to target database: ORADB (DBID=2647366668)
RMAN> run {
2> debug off;
3> backup tablespace dbs_d_jingyu;
4> debug on;
5> backup tablespace dbs_d_test;
6> }
Debugging turned off
Starting backup at 2015-11-12 16:54:33
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=47 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=00005 name=/u01/oradata/ORADB/datafile/o1_mf_dbs_d_ji_c45slpl1_.dbf
channel ORA_DISK_1: starting piece 1 at 2015-11-12 16:54:34
channel ORA_DISK_1: finished piece 1 at 2015-11-12 16:54:35
piece handle=/u01/oradb_bak/rman_ORADB_20151112_184_1_1.backupset tag=TAG20151112T165434 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2015-11-12 16:54:36
Starting Control File and SPFILE Autobackup at 2015-11-12 16:54:36
piece handle=/u01/app/oracle/fast_recovery_area/ORADB/autobackup/2015_11_12/o1_mf_s_895596876_c48nyd6l_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2015-11-12 16:54:37
RMAN-03036: Debugging set to level=9, types=ALL
RMAN-03090: Starting backup at 2015-11-12 16:54:37
RMAN-12016: using channel ORA_DISK_1
RMAN-08008: channel ORA_DISK_1: starting full datafile backup set
RMAN-08010: channel ORA_DISK_1: specifying datafile(s) in backup set
RMAN-08522: input datafile file number=00007 name=/u01/oradata/ORADB/datafile/o1_mf_dbs_d_te_c45ssxmd_.dbf
RMAN-08038: channel ORA_DISK_1: starting piece 1 at 2015-11-12 16:54:37
RMAN-08044: channel ORA_DISK_1: finished piece 1 at 2015-11-12 16:54:38
RMAN-08530: piece handle=/u01/oradb_bak/rman_ORADB_20151112_186_1_1.backupset tag=TAG20151112T165437 comment=NONE
RMAN-08540: channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
RMAN-03091: Finished backup at 2015-11-12 16:54:38
RMAN-03090: Starting Control File and SPFILE Autobackup at 2015-11-12 16:54:38
RMAN-08503: piece handle=/u01/app/oracle/fast_recovery_area/ORADB/autobackup/2015_1
RMAN> exit
Recovery Manager complete.
[oracle@JY-DB01 ~]$ pwd
/home/oracle
[oracle@JY-DB01 ~]$ ls -lh rman*
-rw-r--r--. 1 oracle oinstall 178K Nov 12 16:54 rman_debug.txt
## 8.3 調整RMAN ##
**確定備份和還原的步驟**
RMAN備份在通道中執行任務時,經歷3個主要階段:
- 讀階段:通道將數據塊讀入輸入緩沖區。
- 復制階段:通道將塊從輸入緩沖區復制到輸出緩沖區,並根據需要執行其他處理(驗證、壓縮、加密都在此階段)。
- 寫階段:通道將輸出緩沖區中的塊寫入到磁盤或磁帶。
每天或或每小時創建一次映像副本會增加備份時間,但卻可以極大的減少恢復時間。
**並行執行備份集**
分配多個通道,分配的通道數量不得超過物理設備的數量。還可以給每個數據文件分配特定通道。
run {
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
backup incremental level 0
(datafile 1,2,9 channel c1)
(datafile 3,8,7 channel c2)
(datafile 4,5,6 channel c3)
as compressed backupset;
}
最多為每個RMAN會話分配225個通道,每個通道最多可以並行讀取64個數據文件。
**RMAN多路復用操作**
主要通過FILESPERSET和MAXOPENFILES控制多路復用。
可用公式min(MAXOPENFILES,min(FILESPERSET,files_per_channel))
注:不能多路復用映像副本。
**調整RMAN通道**
使用MAXPIECESIZE,RATE和MAXOPENFILES參數調整RMAN通道。
**調整BACKUP命令**
使用MAXPIECESIZE,FILESPERSET,MAXOPENFILES和BACKUP DURATION參數調整BACKUP命令。
可以將BACKUP參數BACKUP DURATION設置為MINIMIZE TIME以便盡量加快備份速度,也可以將此參數設置為MINIMIZE LOAD以減少數據庫的I/O請求。
**配置LARGE_POOL_SIZE**
可以配置初始化參數LARGE_POOL_SIZE降低RMAN備份對共享池的爭用。
## 8.4 為異步I/O配置RMAN ##
**了解異步I/O和同步I/O**
同步I/O必須等到完成一個I/O請求后才能啟動另一個I/O請求。異步備份操作無需等待。
將初始化參數BACKUP_TAPE_IO_SLAVES設置為TURE,以便為異步操作配置磁帶備份。
初始化參數DBWR_IO_SLAVES設置時,會模擬異步I/O操作。
**監視異步I/O**
v$backup_async_io
LONG_WAITS與IO_COUNT的比率越低越好;
SHORT_WAIT_TIME_TOTAL或LONG_WAIT_TIME_TOTAL正常值應為0。
**監視同步I/O**
v$backup_sync_io
DISCRETE_BYTES_PER_SECOND列與磁帶輸出設備的最大比率做對比,以便確定調整時機。
<h1 id="9">9.配置和使用閃回</h1>
參考:
- [Oracle配置和使用閃回](http://www.cnblogs.com/jyzhao/p/4968804.html)
<h1 id="10">Reference</h1>
- OCP 認證考試指南 (1Z0-053)[M]. 清華大學出版社, 2010.