Table of Contents
- 一、RMAN
- 常用命令
- 使用RMAN客戶端登錄數(shù)據(jù)庫
- 查看RMAN配置
- 使用RMAN啟停數(shù)據(jù)庫
- 運行操作系統(tǒng)命令
- 批處理模式
- Skip
- List 命令
- Report 命令
- Crosscheck 命令
- 備份
- 恢復(fù)
- 腳本
- 二、數(shù)據(jù)泵
一、RMAN
常用命令
使用RMAN客戶端登錄數(shù)據(jù)庫
rman target / rman target / nocatalog
查看RMAN配置
RMAN> show all;
使用RMAN啟停數(shù)據(jù)庫
RMAN> shutdown immediate; RMAN> startup;
運行操作系統(tǒng)命令
run {host "ls -l /backup";}
批處理模式
# 靜默執(zhí)行腳本里的備份rman語句,結(jié)果輸出到log文件中
cat >> /tmp/rman_show.sql <<!
show all;
report schema;
!
rman target / cmdfile=/tmp/rman_show.sql log=/tmp/rman_show.log append
Skip
跳過offline的數(shù)據(jù)文件
backup database skip offline;
跳過不能訪問的數(shù)據(jù)文件
backup database skip inaccessible;
跳過只讀表空間
backup database skip readonly;
跳過多種文件
backup database skip offline skip readonly skip inaccessible;
List 命令
概述可用的備份
RMAN> list backup summary;
按備份類型列出備份
RMAN>list backup by file;
列出詳細(xì)備份
RMAN>list backup;
列出過期備份
RMAN> list expired backup;
列出表空間和數(shù)據(jù)文件備份
RMAN> list backup of tablespace system;
RMAN> list backup of datafile 3;
列出歸檔日志備份
RMAN> list archivelog all; 簡要信息
RMAN> list backup of archivelog all; 詳細(xì)信息
RMAN> list backup of archivelog from time=’sysdate-2’;
列出控制文件和服務(wù)器參數(shù)文件
RMAN>list backup of controlfile;
RMAN>list backup of spfile;
Report 命令
報告數(shù)據(jù)庫模式
RMAN> report schema;
報告丟棄的備份。如果使用了保存策略,備份會標(biāo)記為丟棄狀態(tài)
RMAN> report obsolete;
刪除丟棄狀態(tài)備份
RMAN> delete noprompt obsolete;
報告最近沒有被備份的數(shù)據(jù)文件
RMAN> report need backup days=1;
報告?zhèn)浞萑哂嗷蚧謴?fù)窗口
RMAN> report need backup redundancy 2;
RMAN> report need backup recovery window of 2 days;
報告數(shù)據(jù)文件的不可恢復(fù)操作
RMAN> report unrecoverable;
Crosscheck 命令
概述
- 備份集有兩種狀態(tài):
A (Available,RMAN認(rèn)為該項存在于備份介質(zhì)上)
X (Expired,備份存在于控制文件或恢復(fù)目錄中,但是并沒有物理存在于備份介質(zhì)上) - crosscheck 的目的是檢查RMAN的目錄以及物理文件:
如果物理文件不存在于介質(zhì)上,將標(biāo)記為Expired。
如果物理文件存在,將維持Available。
如果原先標(biāo)記為Expired的備份集再次存在于備份介質(zhì)上(如恢復(fù)了損壞的磁盤驅(qū)動器后),crosscheck將把狀態(tài)重新從Expired標(biāo)記回Available。 - crosscheck 輸出分兩部分
第一部分列出確定存在于備份介質(zhì)上的所有備份集片
第二部分列出不存在于備份介質(zhì)上的備份集片,并將其標(biāo)記為Expired
核對所有備份集
RMAN> crosscheck backup;
核對所有數(shù)據(jù)文件的備份集
RMAN> crosscheck backup of database;
核對特定表空間的備份集
RMAN> crosscheck backup of tablespace users;
核對特定數(shù)據(jù)文件的備份集
RMAN> crosscheck backup of datafile 4;
核對控制文件的備份集
RMAN> crosscheck backup of controlfile;
核對SPFILE的備份集
RMAN> crosscheck backup of spfile;
核對歸檔日志的備份集
RMAN> crosscheck backup of archivelog;
核對所有映像副本
RMAN> crosscheck copy;
核對所有數(shù)據(jù)文件的映像副本
RMAN> crosscheck copy of database;
核對特定表空間的映像副本
RMAN> crosscheck copy of tablespace users;
核對特定數(shù)據(jù)文件的映像副本
RMAN> crosscheck copy of datafile 6;
核對歸檔日志的映像副本
RMAN> crosscheck copy of archivelog sequence 4;
核對控制文件的映像副本
RMAN> crosscheck copy of controlfile;
備份
完全備份
run{
# 刪除丟棄狀態(tài)備份
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
# 設(shè)置兩個備份通道, 每個備份片最大100M
allocate channel c1 type disk maxpiecesize=100m;
allocate channel c2 type disk maxpiecesize=100m;
# 完全備份, 每個文件的備份片不超過4個
backup database filesperset 4 format '/backup/oracle/ora_L0_%d_%T_%s_%p';
# 備份歸檔
alter system archive log current;
alter system archive log current;
alter system archive log current;
backup archivelog all format '/backup/oracle/arch_L0_%d_%T_%s_%p' delete input;
# 備份控制文件
backup current controlfile format '/backup/oracle/ctl_L0_%d_%T_%s_%p';
# 核對所有備份集
crosscheck backup;
# 核對所有歸檔日志備份集
crosscheck archivelog all;
}
增量備份
0級備份
像完整備份一樣復(fù)制所有的數(shù)據(jù)庫
run{
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
allocate channel c1 type disk maxpiecesize=100m;
allocate channel c2 type disk maxpiecesize=100m;
backup incremental level=0 database format '/backup/oracle/ora_L0_%d_%T_%s_%p' filesperset 4;
alter system archive log current;
alter system archive log current;
alter system archive log current;
crosscheck archivelog all;
backup archivelog all format '/backup/oracle/arch_%d_%T_%s_%p' delete all input;
backup current controlfile format='/backup/oracle/ctl_%d_%T_%s_%p';
backup spfile format='/backup/oracle/spfile_%d_%T_%s_%p';
crosscheck backup;
crosscheck archivelog all;
release channel c1;
release channel c2;
}
1級備份
首先有一個基本的級別為0的備份,然后在0級備份的基礎(chǔ)上備份更新的數(shù)據(jù)塊
run{
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
allocate channel c1 type disk maxpiecesize=100m;
allocate channel c2 type disk maxpiecesize=100m;
backup incremental level=1 database format '/backup/oracle/ora_L1_%d_%T_%s_%p' filesperset 4;
alter system archive log current;
alter system archive log current;
alter system archive log current;
crosscheck archivelog all;
backup archivelog all format '/backup/oracle/arch_%d_%T_%s_%p' delete all input;
backup current controlfile format='/backup/oracle/ctl_%d_%T_%s_%p';
backup spfile format='/backup/oracle/spfile_%d_%T_%s_%p';
crosscheck backup;
crosscheck archivelog all;
release channel c1;
release channel c2; }
差異增量備份:備份最近級別為1或級別為0的增量備份后更改的所有塊
累計增量備份:備份最近級別為0的增量備份后更改的所有塊
恢復(fù)
所有數(shù)據(jù)文件丟失
- 查看數(shù)據(jù)文件位置
select file_name,tablespace_name from dba_data_files; - 啟動數(shù)據(jù)庫到nomount狀態(tài)
shutdown abort
startup nomount; - 查找控制文件備份及恢復(fù)
rman target /
restore controlfile from ‘/backup/oracle/ctl_L0_ORACLE_20220929_16_1’; - 啟動數(shù)據(jù)庫到mount狀態(tài)
alter database mount; - 找到最新的歸檔集并注冊
list backup of archivelog all;
catalog backuppiece ‘/backup/oracle/arch_ORACLE_20220929_22_1’;
catalog backuppiece ‘/backup/oracle/arch_ORACLE_20220929_23_1’;
catalog backuppiece ‘/backup/oracle/arch_ORACLE_20220929_24_1’; - 恢復(fù)數(shù)據(jù)
restore database; - 恢復(fù)歸檔
recover database; - 重置redo
alter database open resetlogs;
spfile 丟失
- 查看spfile備份文件
list backup of spfile; - 恢復(fù)spfile
RMAN> restore spfile from ‘spfile_ORACLE_20220929_26_1’;
單個數(shù)據(jù)文件丟失
-
根據(jù)報錯確定丟失的數(shù)據(jù)文件

-
關(guān)閉數(shù)據(jù)庫
shutdown abort -
進入rman
rman target / -
啟動數(shù)據(jù)庫到mount
startup mount -
恢復(fù)數(shù)據(jù)文件
RMAN> restore datafile 7;
RMAN> recover datafile 7; -
啟動數(shù)據(jù)庫
RMAN> alter database open;
數(shù)據(jù)文件和日志文件丟失, 控制文件和spfile文件存在
- 控制文件還在啟動到mount狀態(tài)
RMAN> startup mount; - 恢復(fù)數(shù)據(jù)
RMAN> restore database; - 恢復(fù)歸檔日志
RMAN> recover database; - 啟動數(shù)據(jù)庫
RMAN> alter database open;
腳本
rman備份腳本:腳本
運行命令:./backup_dbname_ora.sh dbname
運行條件:系統(tǒng)掛載有nfs網(wǎng)絡(luò)磁盤于/backup文件夾
二、數(shù)據(jù)泵
導(dǎo)出
1.創(chuàng)建導(dǎo)出文件夾
CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';
create directory dump_dir as '/u01/app/dump';
# 查看:
select * from all_directories;
2.給相應(yīng)用戶賦權(quán)
GRANT READ,WRITE ON DIRECTORY dump_dir TO scott;
3.導(dǎo)出
表
expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp logfile=tab.log
方案
expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=system,scott
表空間
expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=users.dmp TABLESPACES=users
數(shù)據(jù)庫
# 管理員用戶
expdp system/Oracle123 DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=Y
導(dǎo)入
1. 創(chuàng)建設(shè)置dump_dir,傳輸dum文件
創(chuàng)建
mkdir /u01/app/dump chown -R oracle:oinstall /u01/app/dump
sqlplus設(shè)置
create directory dump_dir as '/u01/app/dump';
CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';
# 查看:
select * from all_directories;
2. 設(shè)置用戶權(quán)限
GRANT READ,WRITE ON DIRECTORY dump_dir TO scott;
3. 導(dǎo)入
impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=table.dmp TABLES=dept,emp,im impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp TABLESPACE=user




