備份術語
用戶管理備份(物理備份)操作系統命令執行的備份
服務器管理備份(RMAN)RMAN能備份數據文件、控制文件、歸檔重做日誌文件、SPFILE、備份集片
RMAN不能備份口令、聯機重做日誌、PFILE、OracleNet配置文件、臨時文件
冷備份(脫機、一致性備份)數據庫處於關機狀態,用操作系統複製相關文件進行備份
非歸檔模式,RMAN處於mount模式執行的備份
熱備份(聯機、非一致性備份)數據庫處於聯機狀態,開啓歸檔模式,備份數據庫相關文件
關鍵文件構成system表空間、當前undo_tablespace、控制文件任一副本 --> 實例立即停止(崩潰)
全部備份所有數據文件、控制文件
局部備份部份表空間、數據文件,大部分情況下僅歸檔模式才能進行
完整備份所有使用的文件塊
增量備份自上一次完整備份以來更改的塊,累積增量備份、差異增量備份
完全恢復恢復到數據庫或數據文件崩潰前,不丟失任何數據
部分恢復恢復到數據庫某一時間點,丟失數據
restore將數據文件從備份位置複製到數據庫指定位置(數據文件原位置或重新指定位置)
recover用聯機重做日誌文件和歸檔重做日誌文件恢復到實例崩潰時或指定時間點
備份和恢復服務級別協議:
MTBF平均無故障時間
MTTR平均恢復時間
數據丟失程度
故障類型
語句、用戶進程失敗,實例崩潰自動回滾
網絡故障
用戶錯誤閃回、不完全恢復
介質失敗備份和恢復
用戶管理備份
冷備份和恢復(非歸檔模式)
⑴、備份非歸檔模式僅能執行冷備份,自上次備份以來的數據全部丟失
shutdown immediate |transactional | normal
!cp datafile、controlfile
或shutdown abort
!cp datafile、controlfile、重做日誌文件(必選)
⑵、恢復到原位置
shutdown abort
!cp datafile、controlfile
starup
⑶、恢復新位置
shutdown abort
!cp datafile、controlfile
startup mount
alter database rename file ‘原位置’ to ‘新位置’
alter database open
熱備份(歸檔模式)
1、備份恢復數據前提begin backup至end backup 之間的歸檔日誌應完整
alter tablesapce|database user begin
!cp 數據文件
alter tablespace|database end begin
alter system switch logfile手工切換日誌組,不一定立即開始歸檔
或alter system archive log current(推薦)歸檔當前日誌文件(先切換)
熱備份恢復
1、完全恢復控制文件、重做日誌文件未損壞,自上次備份以來的歸檔日誌文件完整
①、數據庫恢復
startup mount
!cp
recover database
alter database open
②、非關鍵數據文件
alter database tablespace|datafile xxx offline一般系統自動將故障表空間或數據文件offline
!cp
recover tablespace|datafile xxx
alter database tablespace|datafile xxx online
③、關鍵數據文件
startup mount
!cp
recover database
alter database open
2、歸檔日誌不完整、或修復用戶錯誤或業務需求--> 不完全恢復
startup mount
!cp 數據文件
recover database until time ....
alter database open resetlog
RMAN和sqlplus比較:
RMAN
until time某一時間點
until scncommit後的system change number
until sequence日誌切換序列號和線路號
SQL plus
until time某一時間點
until change=scn,commit後的system change number
until cancel提示輸入受損的歸檔日誌序列號時,輸入cancel
控制文件備份和恢復
1、控制文件備份數據庫物理結構(增刪改數據文件、日誌文件)發生變化後,應當備份控制文件
alter database backup controlfile to 'xxxx'
2、控制文件恢復備份文件、歸檔日誌、聯機重做日誌文件完整,數據庫能完整恢復?
cp controlfile.bak /u01...--> 使用以前備份的控制文件(備份到trce的用另外辦法)
startup nomount
create pfile from spfile
vi pfile--> 如果控制文件放在新位置,需在參數文件中調整
create spfile from pfile
startup mount
recover database using backup controlfile
提示聯機重做日誌文件位置,一個一個地猜
alter database open resetlog
丟失重做日誌文件組(所有成員)恢復
select * from v$log
current當前正在使用,實例恢復需要此組
active實例恢復需要此組;可能歸檔,也可能未歸檔
inactive實例恢復不需要此組;可能歸檔,也可能未歸檔;損壞不會丟失數據
unused未使用
clearing正在alter database clear logfile
clearing_currentalter database clear logfile 失敗
1、inactive損壞,oracle再次使用此組前無影響,如日誌文件組切換到此組時,實例暫停
已歸檔:alter database clear logfile group 1
未歸檔:alter database clear logfile unarchived group 1歸檔日誌文件已不完整,應立即完全備份數據庫
2、active損壞
嘗試 alter system checkpoint,如成功則參考inactive辦法恢復,如失敗則執行不完全數據庫恢復
3、current損壞
執行數據庫不完全恢復
閃回恢復區
所有與恢複相關的文件的默認位置,創建數據庫時沒有設CONTROL_FILES 、DB_CREATE_FILE_DEST、DB_CREATE_ONLINE_LOG_DEST_N自動在閃回恢復區創建。如沒有設LOG_ARCHIVE_DEST_n,啓用歸檔模式時,自動將LOG_ARCHIVE_DEST_n設爲閃回恢復區
永久文件
控制文件多路複用副本
聯機重做日誌文件多路複用副本
臨時文件
歸檔重做日誌文件
RMAN備份
RMAN副本
控制文件自動備份
閃回日誌文件(不可以指定其他位置)
set system DB_RECOVERY_FILE_DEST_SIZE=2G(須先)
set system DB_RECOVERY_FILE_DEST=’XXXX’
v$flash_recovery_area_usage
RMAN
RMAN 基礎
rman
connect target/rman客戶端本地
connect target user/pwd@orcl用rman客戶端遠程登錄
connect target user/pwd@orcl log=xxx保存日誌
connect target user/pwd@orcl log=xxx append在原日誌文件上追加
connect target user/pwd@orcl cmdfile=xxx連接rman後,執行指定腳本
connect target user/pwd@orcl log=xxx cmdfile=xxx
rman{}整體作爲一個事務執行,一起成功一起失敗
alter system set controlfile_record_keep_time=0|7默認保留7天
控制文件包括可刪除部分和不可刪除部分,可刪除部分包括歸檔日誌文件歷史記錄和RMAN元數據
不可刪除部分包括數據文件、聯機日誌文件
RMAN並行化參數
RMAN將數據文件備份到一個物理文件,物理文件叫備份片,幾個備份片的邏輯組合叫備份集。
一般地,一個通道產生一個備份集,包括一個備份片,如啓用控制文件自動備份,單獨產生一個備份集。
filesperset一個備份集包括的數據文件個數,默認64
maxpiecesize備份片大小,可能一個備份集產生多個備份片
maxopenfiles一個通道最大能打開的數據文件數,默認64
maxsetsize備份集大小
section size 10G分段備份,如單個數據文件很大,可分段並行化備份
duartion備份完成時間
備份語句如果沒有顯式設置RMAN參數,則用rman configure中的默認設定,備份文件存放位置可在通道指定,也可在backup命令後指定。
非歸檔模式RMAN備份、恢復
vi database_backup
run {(冷備份、一致性備份、關閉備份)
shutdown immediate;-- 完整乾淨關閉數據庫,normal|transactional|immediate
startup mount;-- 用RMAN須處理加載模式,因要讀控制文件中的RMAN存儲庫
allocate channel d1 type disk;-- 設置備份通道,類型 disk|sbt
backup as backupset database-- 備份集模式備份整個數據庫
format ‘xxxx’;-- 備份數據存放地
alter database open
}
rman target sys/oracle@orcl@database_backup
前提:控制文件完整
startup mount
restore database
recover database noredo-- 應用增量備份
alter database open resetlog-- 重設redolog
歸檔模式RMAN備份
RMAN> run{(熱備份、非一致性備份、打開備份)
allocate channel d1 device type disk format '/backup/d1_%U';
allocate channel d2 device type disk format '/backup/d2_%U';
backup as backupset database|datafile N |tablespace tbs format '/backup/d1_%U';
sql 'alter system archive log current';執行sql命令,手工歸檔聯機重做日誌文件
backup as backupset archivelog all delete all input; 成功備份歸檔日誌後,刪除原歸檔日誌文件
}
format 格式約定
%c:備份片的副本數
%d:數據庫名稱
%D:位於該月的第幾天
%M:位於該年的第幾個月
%n:數據庫名稱,向右填補到最大8個字符
%u:一個8個字符的名稱,代表備份集和創建時間
%p:該備份集的備份片號,從1開始到創建的文件數
%U:一個唯一的名字%u_%p_%c
%s:備份集的編號
%t:備份集的時間戳
%T:年月日格式(YYYY-MM-DD)
backup as compressed backupset....壓縮備份集
bzip2默認,壓縮率高,CPU佔用高
zlib,速度比Bzip2快,壓縮率不高,compatible級別11.1.0
backup as backupset.... tag='xxxx'爲備份集或鏡像副本加tag
backup validate database不實際備份,僅檢查數據文件壞塊
backup tablespace tbs skip readonly skip offline skip inaccessible跳過離線、丟失、只讀表空間|數據文件
image copy備份
只能在磁盤,不能增量,且open或mount模式
與手工通過操作系統的複製命令備份數據文件類似。一個數據文件生成一個鏡像副本文件,整個複製過程是rman進行的,rman一個數據塊一個數據塊的複製,rman會檢測每一個數據塊是否出現損壞,不需要將表空間設置成爲begin backup,鏡像副本中包含使用過的數據塊,也包含從未使用過的數據塊。生成鏡像副本的好處在於恢復速度相對備份集來說,更快一些
backup as copy database
backup as copy archivelog all delete all input;
啓用磁盤通道,備份歸檔日誌文件移,然後刪除
增量備份
增量備份,RMAN先掃描整個數據文件來確認哪些塊未改變
啓用塊變更跟蹤,直接訪問變更的塊。
alter database enable block change tracking using file '/xxx'
alter database disable block tracking
差異增量備份自上次增量備份以來更改的所有塊
backup incremental level=0 database|tablespace|datafile
backup incremental level=1 database|tablespace |datafile
累積增量備份自上次完整備份以來更改的所有塊
backup incremental level=0 database|tablespace|datafile
backup incremental cumulative level=1 database|tablespace|datafile
歸檔日誌文件備份
backup archivelog from time 'sysdate-1'
backup archivelog from scn 1
backup archivelog from all
RMAN備份歸檔日誌時,首先進行一次日誌切換,然後對歸檔進行備份。備份過程中如發現當前歸檔日誌損壞,會自動的切換到另外一個歸檔路徑下面(前提是存在多個歸檔路徑)查找該文件的副本
backup database |tablespace|datafile N plus archivelog
備份表空間、數據庫、數據文件時一起備份歸檔日誌文件
backup database |tablespace|datafile N plus archivelog all delete all input
備份表空間、數據庫、數據文件時一起備份歸檔日誌文件,然後刪除原歸檔日誌文件
backup database |tablespace|datafile N plus archivelog skip inaccessible
跳過不能訪問的歸檔日誌文件(絕不可接受)
backup recovery area備份閃回恢復區(當前或任意之間位置)
backup recovery files備份與恢複相關的文件(即使不位於閃回恢復區)
RMAN冗餘策略
configure retention policy to redundancey 2冗餘保留策略,RMAN保留指定數量的備份,默認爲1
configure retention policy to recovery windows of 2 days保留足夠多備份,確保可恢復到窗口的任意時間點
configure retention policy to none 備份永不過期
參數 control_file_record_keep_time 控制文件最多能保存RMAN元數據天數
歸檔備份--> 遊離冗餘策略之外的備份生存週期
backup … tag ‘years_backup’ keep until time ‘sysdate + 365’365天之後過期
backup … keep forever永不過期
change backup tag ‘years_backup’ nokeep更改後應用保留策略
超過保留策略任何備份,標記爲obsolete,如存於閃回恢復區則自動刪除
report need backup days 3
report need backup redundancy 3
backup as backupset devive type disk copies 2 database plus archive log2份備份片或鏡像副本
RMAN 加密備份
Oracle加密備份授權
磁盤上創建加密的備份Advanced Security Option
加密的備份直接寫入磁帶 Oracle Secure Backup SBT
A) Transparent Encryption of Backups
This is the default mode and uses the Oracle wallet. A wallet is a password-protected
container used to store authentication and signing credentials, including private keys,
certificates, and trusted certificates needed by SSL.
C) Password Encryption of Backups
This mode uses only password protection. You must provide a password when creating and restoring encrypted backups.
Dual Mode Encryption of Backups
Dual-mode encrypted backups can be restored either transparently or by specifying a
password. When restoring a dual-mode encrypted backup, you can use either the Oracle Encryption Wallet or a password for decryption.
RMAN備份信息
list、report、動態性能視圖僅通過RMAN元數據獲取信息,不確認備份片是否真實存在。用crosscheck覈查真實備份片信息。
RMAN>list-- 在RMAN元數據中檢索備份相關信息
RMAN> report obsolete-- 確定哪些備份集已被RMAN標記爲obsolete
RMAN> delete obsolete-- 從RMAN元數據刪除標記爲obsolete備份片記錄,一併刪除真實備份片
RMAN>crosscheck-- RMAN元數據與真實備份片比較,丟失的備份片標記爲expired
須連接目標數據據,不必連接恢復目錄
RMAN> delete expired--從RMAN元數據刪除標記爲expired備份片記錄
RMAN> report schema報告數據庫物理結構,如數據文件、文件號、歸檔模式、undo數據文件等
v$session
v$process
v$session_longopsRMAN已經完成的工作量
backup validate check logial執行數據庫驗證
restore validate
validate查看給定的備份集,驗證以確保能夠還原
list recoverable backup of database查看能夠用於還原和恢復數據庫的所有數據文件備份或副本
report unrecoverable
list incarnation
reset database to incarnation
恢復spfile、controlfile
configure controlfile autobackup on
恢復步驟:
1、spfile文件完整
startup nomount
restore controlfile from autobackup
2、spfile文件丟失
startup pfile=/$ORACLE_HOME/dbs/init.ora nomount--使用默認參數文件啓動數據庫
set DBID=''數據庫唯一標識
restore spfile from autobackup
shutown abort
startup nomount
restore controlfile from autobackup
alter database restore
alter database recover
alter database open resetlogs
3、沒有啓動autobackup, spfile、controlfile恢復
沒有啓用自動備份控制文件,每次備份1號數據文件的時候,都會強制備份控制文件和spfile,人工找到備份片,使用restore進行還原
startup pfile=/$ORACLE_HOME/dbs/init.ora nomount--使用默認參數文件啓動數據庫
set DBID=''數據庫唯一標識
restore spfile from ‘c:\backup\07qwjljsad’第一個備份片
shutown abort
startup nomount
restore controlfile from ‘c:\backup\07qwjljsad’第一個備份片
alter database restore
alter database recover
alter database open resetlogs
歸檔模式下完全恢復
前提:上一次備份後歸檔重做日誌文件,聯機重做日誌文件
1、非關鍵文件,打開狀態
RMAN> run {
sql'alter tablespace user offline'一般oracle已經將表空間置爲offline
restore database|tablespace|datafile-- 僅損壞的數據文件或表空間即可
recover
sql 'alter tablespace user online'
}
2、關鍵文件
RMAN> startup mount
run {
restore
recover
sql 'alter tablespace system online'
}
關鍵文件與非關鍵文件恢復區別:
關鍵文件崩潰導致數據庫立即停止,且恢復前無法open數據庫。啓動數據庫到mount(RMAN須在mount以上模式工作),然後開始恢復關鍵文件,最後open數據庫。
非關鍵文件崩潰或許不會導致數據庫立即停機,數據庫會自動將數據文件置爲offline,如果數據庫已停,可在mounnt模式先將受損文件offline,然後把數據庫open,最後考慮恢復。
image copy還原
1、切換目錄
RMAN run{
sql'alter datafile 4 offline';
set newname for datafile 4 to 'xx';--set命令,如set until set newname set dbid等,只能在run塊中執行
switch datafile 4;
recover datafile 4;
sql 'alter database datafile 4 online';
}
2、還原備份文件
RMAN run{
sql'alter datafile 4 offline';
set newname for datafile 4 to 'xx';--set命令,如set until set newname set dbid等,只能在run塊中執行
switch datafile 4;
recover datafile 4;
sql 'alter database datafile 4 online';
}
塊介質恢復 BMR
alter system set db_block_checking off,false|low|medium|full,true默認off,system表空間默認full
low 內存中更改塊或從磁盤中讀取塊後對塊進行基本檢查
medium,除low外,檢查所有非IOT塊
analyze table|index發現受損壞
塊受損不會導致數據文件offline,僅當會話讀取受損塊時返回錯誤,並寫入警報日誌。
RMAN備份默認遇塊受損停止
RMAN> run {
set maxcorrupt for datafile 7 to 100;7號數據文件備份時,如受損塊未超過100,繼續
backup datafile 7
}
RMAN> backup nochecksum datafile 7不檢查物理塊損壞,默認RMAN檢查物理塊損壞
RMAN> backup check logical datafile 6檢查物理、邏輯塊損壞
RMAN恢復受損塊,先從閃回日誌搜索受損塊完好副本(如啓用閃回數據庫功能),然後使用最新的級別0還原塊(不使用增量級別1),最後用重做日誌執行恢復
v$database_block_corruption
v$backup_corruption
v$copy_corruption
RMAN> block recover datafile 7 block 5
RMAN> block recover datafile 7 block 5,6,7 datafile 9 block 21,25
RMAN> block recover datafile 7 block 5,6,7 datafile 9 block 21,25 from backupset 1093
RMAN> block recover corruption list
Backup validate database查看RMAN檢測到的所有數據庫損壞(含spfile、controlfile
填充v$backup_corruption v$database_block_corruption
不完整恢復(整個數據庫,不能單個數據文件或表空間)
應用環境:
1、缺失聯機重做日誌文件(日誌組所有副本)、歸檔重做日誌文件,僅能執行不完整恢復;
2、用戶錯誤或業務需求回退數據庫至某個時間點
RMAN> run {
shutdown abort; startup mount
set until time "to_date('xxx' , 'xxx')"
restore database
早於指定時間點的所有數據文件備份,然後應用歸檔重做日誌文件、當前重做日誌文件
完整恢復僅還原損壞文件的最近一次備份
recover database-- 應用歸檔重做日誌文件、聯機重做日誌文件至故障點(set語句指定位置)
alter database open resetlogs
}
或者
RMAN> run {
shutdown abort; startup mount
set until time "to_date('xxx' , 'xxx')"
restore databaseuntil time "to_date('xxx' , 'xxx')"
recover database until time "to_date('xxx' , 'xxx')"
alter database open resetlogs
}
關於故障點(指點恢復到哪)
until time指定時間點
until scn
until sequence
控制文件恢復
RMAN> configure autoback on
RMAN> run{
set dbid=
startup nomount pfile=xxx/init.ora
restore spfile from autobackup
shutdown abort; startup nomount
restore controlfile from autobackup-- 還原到spfile文件指定目錄,如原位置不可用,則需先改spfile
alter database mount
restore database until scn xxx
recover database until scn xxx-- 不完整恢復
alter database open resetlogs
恢復目錄
RMAN版本須和目標數據庫版本相同,恢復目錄的RMAN版本須等於或高於註冊的數據庫RMAN版本
1、創建恢復目錄
sqlplus / as sysdba駐留恢復目錄的數據庫
create tablespace rmancat datafile '/u01/rmancat01.dbf' size 200m;
create user rman identified by rman default tablespace rmancat;
quota unlimited on rmancat;
grant recovery_catalog_owner to rman;
rman catalog rman@rman@catdb
create catalog;
rman target / catalog rman/rman@catdb從目標數據庫啓動RMAN,連接目標數據庫、目錄數據庫
register database註冊目標數據庫到恢復目錄,複製控制文件中的RMAN元數據
unregister database註銷
resync catalog
list backup of database
2、虛擬專用目錄
恢復目錄的一個邏輯子集,DBA將自己的數據庫註冊到自己的專用目錄中,虛擬專用目錄所有者僅能看到自己註冊的數據庫或有權訪問的數據庫(由恢復目錄所有者分配已註冊的目標數據庫)
sqlplus / as sysdba駐留恢復目錄的數據庫
craeate user vpc1 identified by vpc1 default tablespace rmamcat quota unlimited on rmancat
grant recovery_catalog_owner to vpc1vpc1不是恢復目錄所有者,vpc1可以創建自己專用恢復目錄
grant register database to vpc1vpc1可以註冊目標數據庫
rman catalog vpc1/vpc1@rcatdb
create virtual catalog
rman target / catalog vpc1/vpc1@catdb從目標數據庫啓動RMAN,連接目標數據庫、目錄數據庫
register database註冊目標數據庫到恢復目錄,複製控制文件中的RMAN元數據
unregister database註銷
resync catalogRMAN下一次連接到目標數據和目錄時會自動同步
list backup of database
RMAN腳本
vi recover.rman
run{
backup database plus archivelog delete all input;
}
rman target / @recover.rmanrman腳本放在目標數據庫操作系統文件系統
RMAN> create script recover.rman
(
backup database plus archivelog delete all input;
)
RMAN> run (execute script recover.rman)rman腳本存在恢復目錄
create|replace|print|list|execte|delete [global] script
RMAN> create script recover.rman from file '/.../recover.rman'將操作系統腳本轉爲存儲恢復目錄腳本
輔助數據庫
target當前數據庫
auxiliary從target創建的新數據庫,target、auxiliary可在同一臺機器、也可不在同一臺機器
取得target數據庫最近一次備份副本
輔助數據庫節點
輔助實例創建口令文件
orapwd file=$ORACLE_HOME/dbs/oranewdb password=1234 entries=3口令文件ora<SID>
auxiliary 配置listener、target配置tnsnames.ora,確保target到auxiliary網絡連通性(如不同一臺機器)
輔助實例創建初始化參數文件DB_NAME、CONTROL_FILES、DB_BLOCK_SIZE必需
輔助實例啓動nomount
export ORACLE_SID=newdb
startup nomount
mount或open目標數據庫
target的備份放在auxiliary數據庫能訪問的位置,如active模式不需要
rman target sys/oracle@orcl auxiliary sys/1234@newdb
run{
allocate auxiliary channel a1 device type disk;爲輔助實例分配channel,可選
allocate channel t1 type disk;
duplicate target database to newdb;
或duplicate target database to newdb from active database
}
open輔助實例
alter database open resetlogs
duplicate命令完成的工作
爲auxiliary創建控制文件
將target備份還原到auxiliary數據庫,或直接從運行中的數據庫複製
執行不完整恢復到最後的歸檔重做日誌文件(不復制聯機重做日誌文件)
關閉後重啓auxiliary,用resetlogs打開數據庫
爲auxiliary數據庫生成新DBID
tspitr表空間時間點恢復
不完整恢復須應用到整個數據庫,應還原所有數據庫文件,整個數據庫一起向前滾動。tspitr可以在不影響數據庫其他表空間或對象前提下,將一個或多個表空間的內容恢復到過去某個時間點。tspitr依據目標數據庫的表空間的一個子集創建一個輔助數據庫,僅在此子集上執行不完整恢復,然後用輔助數據庫的表空間替代目標數據庫中的表空間,看起來好像僅恢復了該子集,保持目標數據庫的其作部分是最新數據
除非使用了恢復目錄,否則不能再次執行TSPITR
應用情景
表空間內對象在邏輯上獨立,不與其他表空間存在父子關係(引用完整性)和索引關係
用DDL改了表空間中表的結構,導致無法用閃回表恢復
PURGE刪除表
已經刪除的表空間無法恢復,表空間改名後無法恢復到改名前的時間點(現在已經可以做到)
術語
目標時間表空間恢復到哪個時間點或哪個SCN
恢復集待恢復的表空間數據文件組
輔助集system undo temp等表空間數據文件
輔助目標存儲輔助文件集的臨時目錄,如 redolog archivelog controlfile
執行tspitr前準備事項
①、select obj1_owner,obj1_name,ts1_name,obj2_owner,obj2_name,ts2_name
from ts_pitr_check
where ts1_name = 'tbs_name' and ts2_name != 'tbs_name'
or ts1_name != 'tbs_name' and ts2_name = 'tbs_name'
檢查是否與其他表空間的對象存在引用關係,可以刪除引用關係、加到恢復集一起恢復或掛起該關係,確保表之間邏輯上一致
②、select owner,name,to_char(creation_time,'yyyy-mm-dd:hh24:mi:ss') create_time
from ts_pitr_objects_to_be_dropped
where tablespace_name = 'tbs_name'
and creation_time > to_date('2008-07-19:21:55:00','yyyy-mm-dd:hh24:mi:ss')
恢復指定目標時間之後創建的對象,在執行恢復前導出各個對象,恢復後導入
TSPITR完成的動作
隨機生成輔助實例
被恢復表空間脫機
還原控制文件到輔助實例
還原恢復集、輔助集的數據文件到輔助實例
恢復輔助實例到期望時間點、用resetlogs打開輔助實例
導出已恢復表空間元數據,關閉輔助實例
導入元數據到目標數據庫
刪除輔助文件
恢復表空間聯機手動
RMAN> CONNECT TARGET
RMAN> RECOVER TABLESPACE users, example
UNTIL TIME '2007-06-29:08:00:00'
AUXILIARY DESTINATION '/u01/app/oracle/oradata/aux';
RMAN>BACKUP TABLESPACE users, example;
RMAN> SQL ‘ALTER TABLESPACE users, example ONLINE’;
執行TSPITR 並使表空間聯機以後,就不能使用更早時間的備份
可傳輸表空間
rman可創建副本數據,但僅限相同平臺。
可傳輸表空間可跨平臺遷移表空間及其數據,由此可演化爲跨平臺遷移整個數據庫。
傳輸表空間限制:
表空間應自包含;
一樣或兼容的字符集、字節序格式
傳輸表空間中的對象的模式,目標數據庫應有(就是對象的owner)
表空間不能同名
相同對象(schema.object,還應考慮名稱空間)相同,導入時忽略
select * from v$transportable_platform order by platform_name 檢查字節序格式 endian
exec dbms_tts.transport_set_check('TS1')--檢查表空間自包含,並使其只讀(RMAN可不必)
RMAN>transport tablespace users
>tablespace destination '/export/home/oracle/oradata/users'
>auxiliary destination '/export/home/oracle/oradata/test1';
! expdp system/oracle transport_tablespace=ts1 dumpfile=ts1.dump directory=dp_out
RMAN> covert datafile 'u01/ttsfiles/ts1.bdf'
>from platform='Linux IA (32-bit)' format '/u01/ttsfiles/ts1conv.bdf'不同字節序格式平臺需RMAN轉換
!scp xxx xxx--拷貝表空間數據文件、元數據到目標數據庫
! impdp system/oracle dumpfile=ts1.dump transport_datafiles=/01/ttsfiles/ts1.bdf directory=dp_out
alter database read write源和目標都執行
RMAN異步IO配置
磁帶BACKUP_TAPE_IO_SLAVES=TRUE 開啓異步IO,默認FALSE
磁盤本地操作系統支持異步IO
如不支持異步IO :BACKUP_TAPE_IO_SALVES=TRUE且DBWR_IO_SALVES=nozero模擬異步IO
v$backup_sync_io監視同步IO
v$backup_async_io監視異步IO
RMAN所需內存從PGA分配,如BACKUP_TAPE_IO_SALVES=TRUE則用large pool,如未配large pool則用share pool
導入導出
使用導出導入程序需要create session權限
如果需要導出導入其他用戶對象,需要exp_full_database、imp_full_database
常規方式(Data Pump 稱外部表路徑)
類似普通的INSERT語句,用戶進程構造VALUES子句,然後讀取源數據文件,爲每個插入行執行一
次INSERT,使用數據庫緩衝區緩存,生成undo,生成重做。
直接路徑(Data Pump也稱直接路徑)
直接讀取源數據文件,將內容發送到服務器進程,服務器進程在其PGA組裝數據中
的塊,直接寫入數據文件,寫操作在表的高水位線上完成。不使用數據庫高速緩衝區,不生成undo,
不生成重做。優點快,缺點:刪除或禁用引用完整性約束(僅unique primary key not null約束有效),
沒有激活INSERT觸發器,針對其他會話的DML鎖定表,羣集表不適用。
SQL*Loader
vi load.ctl-- 創建Load控制文件
load data-- 啓動加載操作
infile ‘depts.txt’-- 數據源
badfile ‘depts.bad’-- Loader拒絕記錄,如違反完整性約束、與控制文件格式不一致
discardfile ’depts.dsc’--已成功從輸入文件提取出記錄,但不匹配記錄選擇標準而被拒絕
append-- 附加,而不是先truncate
into table dept-- 附加到哪張表
fidlds terminated by ‘,’-- 數據源分隔符
trailing nullcols-- 如缺少字段,抽入null
(deptno integer external(2),-- 表結構
dname,
loc
)
sqlldr userid=scott/tiger control=load.ctl direct=true 操作系統命令行執行加載,direct=true 直接路徑,默認是insert into
external表
create directory data_dir as ‘/sales/etl’
create directory log_dir as ‘/sales/etl’
grant read on directory data_dir to scott
grant write on directory log_dir to scott
select * from dba_tab_privs-- sys用戶始終擁有目錄,任務用戶創建目錄需 create directory權限
select * from dba_directories
create table sales_ext(
id number(6),
name varchar2(20)
age number(9)
)
organization external
(type oracle_loader
default directory data_dir-- 存放數據目錄
access parameters
(records delimited by newline characterset us7ascⅡ用換行符分隔,字符集爲us7ascⅡ
badfile ‘sales.bad’-- 外表壞文件
discardfile ‘depts.dsc’
logfile ‘sales.log’-- 外表日誌文件
fields terminated by “ “ optionally enclosed by ‘/t’)字段由空格或tab他隔
location (‘sales.txt’)-- 數據文件名
)
reject limit unlimited讀入整個文件
Data Pump
create directory data_dump as ‘/datapump_data’
grant read,write on directory data_dump to scott
vi scott_expdp.txt
directory=data_dump
schemas=scott
dumpfile=schema_scott.dat
exclude=package
exclude=view
exclude=procedure
exclude=index:”LINK ‘PK_%”
expdp scott/tiger parfile=/tmp/ scott_expdp.txt
create directory data_dump as ‘/datapump_data’
create directory log_dump as ‘/datapump_data’
grant read,write on directory data_dump to scott
grant read,write on directory log_dump to scott
vi scott_to_dog.txt
directory=data_dump目錄
dumpfile=schema_scott.dat待導入二進制文件
remap_schema=scott:dog將schema(用戶)scott的對象更改爲dog不同用戶之間
remap_tablespace=user:dog將表空間user更改爲dog表空間不同表空間之間
impdp dog/wangwang parfile=/tmp/scott_to_dog.txt
閃回 flashback
flashback database
等同不完整恢復,受閃回日誌限制,需歸檔重做日誌,mount模式
啓用閃回數據庫,SGA分配一個存儲區域(閃回緩衝區),系統啓動恢復寫入器(Recovery Writer,RVWR)進程,將閃回緩衝區內容寫入閃回日誌。執行閃回數據庫時,數據庫用閃回日誌將數據庫閃回到某個時間點,然後應用歸檔重做日誌和聯機重做日誌文件前滾到確切的時間點(和數據庫不完全恢復一樣),最後用resetlogs打開一個新數據庫化身(incarnation)
1、啓動閃回數據庫功能
archivelog list
alter system set db_recovery_file_dest_size=8G
alter system set db_recovery_file_dest='/flash_recovery_area'
alter system set db_flashback_retention_target=240(m)
shutdown immediate
startup mount
alter database flashback on
alter database open
v$flashback_database_log閃回保留時間是一個期望的目標時間,確切閃回能力信息
v$flashback_database_stat閃回數據庫性能消耗
select * from v$sgastat where name = 'flashback generation buff'閃回緩衝區大小
2、sqlplus執行閃回數據庫
shutdown abort
startup mount
flashbackup database to timestamp to_timestamp(’20-12-08 10:00:00’,’dd-mm-yy hh:mm:ss)’
alter database open read only查看閃回結果,可多次閃回以達到最接近的結果
shutdown abort
startup mount
alter database open resetlogs
3、rman執行閃回
RMAN> flashbackup database to time = to_date('','')或to scn=to sequence=
4、開啓閃回數據庫後,默認所有表空間參與閃回功能
alter tablespace tbs flashbackup off關閉表空間閃回功能
alter tablespace tbs flashback onmount模式開啓
執行閃回數據時,表空間須脫機。
閃回前備份脫機表空間,然後使用表空間恢復功能使其可以在閃回後的數據庫中聯機
flashbackup drop
能否恢復主要看錶空間的可用空間,不需停機
drop表,僅rename table後放入recyclebin。
恢復表及其索引、權限、觸發器、除外鍵約束外的所有約束,不能恢復system表
閃回時能改表名,不能改模式,和表一起閃回索引、觸發器、約束,名字保持回收站名稱
oracle空閒空間利用順序:空閒--> 回收站 -->自動擴展
alter system set recyclebin = on
select * from cat
show recyclebin
drop table student刪表,後臺放入recyclebin
select object_name,original_name,type from user_recyclebin
flashback table 回收站內表名 to before drop
flashback table tb_name to before drop to new_tb
purge table student | drop table student purge刪表,後臺不放入recyclebin
purge recyclebin清空recyclebin
drop user hr cascade刪除模式時連同模式對像(表),無法執行閃回表刪除
flashback data archive
閃回數據歸檔,11g新功能,用FBDAF進程,可追溯幾年前,常出於法規需要,僅記錄update delete
flashback archive administer 系統權限--> 創建、修改flashback data archive
flashback archive對象權限 -->啓用對錶的跟蹤
create flashback archive default fb_fi tablespace fbda1 quota 500m retention 7 year
default表啓用歸檔時可指定,如未指定則用default,如沒有default ?
retention歸檔默認保留時間
alter flashback archive fb_fi add tablespace fbda2 quota 500mcreate flashback archive不能指定多個表空間
alter flashback archive fb_dflt purge before timestamp to_timestamp(‘’,’’)手工清除部分歷史數據
alter table hr.employees flashback archive fb_fi除添加列外,不能執行DDL語句
alter table hr.employees flashback archive fb_fi off禁用後歷史數據丟失
select * from employees
as of timestamp(systimestamp - interal ‘28’ day) 類似閃回查詢,用戶不知是搜索undo,還是flashback archive
where employee_id = 169
列出歸檔
顯示歸檔與表空間關係
使用歸檔功能的表
flashback query
查詢表或事務過去某一時間點的值或歷史變更值,構建相應的DML語句將表或事務反轉到過去某個時間點,在線不影響用戶。
1、閃回查詢
select * from student as of timestamp to_timestamp(’07-11-13 16:00:07’,’dd-mm-rr hh:mm:ss’);
查詢07-11-13 16:00:07時student表狀態
insert into student select * from student
as of ….
create table student2 as
select * from student
as of ….
execute dbms_flashback.enable_at_time to_timestamp(’07-11-13 16:00:07’,’dd-mm-rr hh:mm:ss’)
數據庫07-11-13 16:00:07時狀態,僅對當前會話有效(其他會話使用實時數據庫),不能DML
execute dbms_flashback.disable
2、閃回表 flashback table
構造DML語句來反轉到過去的一個時間點,還原表索引、觸發器disable、約束,處於聯機狀態。
grant flashback any table to emp
alter table student enable row move
flashback table student to timestamp to_timestamp(’07-11-13 16:00:07’,’dd-mm-rr hh:mm:ss’)
失敗原因:約束,可以同時閃回相關聯的表
沒有足夠的undo信息
其他用戶不能鎖定被閃回作用的行
表結構不能改變(添加或刪除外)
系統表、固定表(x$)、遠程表、外部表、臨時表、v$視圖不適用
3、閃回版本查詢Flashback Version Query
返回兩個SCN或時間戳之間的行的完整歷史變更
依賴AUM(Automatic Undo Management)
version_between不能跨越DDL
4、閃回事務查詢flashback_transaction_query
相比閃回版本查詢,可實施撤銷語句反轉相關記錄
alter database add supplemental log data
alter database add supplemental log data (primary key) columns
gant execute on dbms_flashback to hr
grant select any transaction to hr
flashback_transaction_query顯示數據庫執行的所有更改(包括DDL操作、已刪除的表和用戶)
declare
v_xid xid_array;
begin
v_xid :=xid_array('05000300FB050000');
dbms_flashback.transaction_backout(1,v_xid,options => dbms_flashback.nocascade);--執行撤銷事務1
end;
cascade回滾所有事務及其從屬事務
nocaseade如果可能,僅回滾指定事務
nocaseade_force回滾指定事務,忽略從屬事務
nonconflict_only僅回滾指定事務的非衝突行的更改、
數據庫進行一致狀態,但無法再次自動完成指定事務