OCP11g IZO-053 Ⅰ

備份術語

用戶管理備份(物理備份)操作系統命令執行的備份

服務器管理備份(RMANRMAN能備份數據文件、控制文件、歸檔重做日誌文件、SPFILE、備份集片

RMAN不能備份口令、聯機重做日誌、PFILEOracleNet配置文件、臨時文件

冷備份(脫機、一致性備份)數據庫處於關機狀態,用操作系統複製相關文件進行備份

非歸檔模式,RMAN處於mount模式執行的備份

熱備份(聯機、非一致性備份)數據庫處於聯機狀態,開啓歸檔模式,備份數據庫相關文件

關鍵文件構成system表空間、當前undo_tablespace、控制文件任一副本 --> 實例立即停止(崩潰)

全部備份所有數據文件、控制文件

局部備份部份表空間、數據文件,大部分情況下僅歸檔模式才能進行

完整備份所有使用的文件塊

增量備份自上一次完整備份以來更改的塊,累積增量備份、差異增量備份

完全恢復恢復到數據庫或數據文件崩潰前,不丟失任何數據

部分恢復恢復到數據庫某一時間點,丟失數據

restore將數據文件從備份位置複製到數據庫指定位置(數據文件原位置或重新指定位置)

recover用聯機重做日誌文件和歸檔重做日誌文件恢復到實例崩潰時或指定時間點

備份和恢復服務級別協議:

MTBF平均無故障時間

MTTR平均恢復時間

數據丟失程度

故障類型

語句、用戶進程失敗,實例崩潰自動回滾

網絡故障

用戶錯誤閃回、不完全恢復

介質失敗備份和恢復

用戶管理備份

冷備份和恢復(非歸檔模式)

⑴、備份非歸檔模式僅能執行冷備份,自上次備份以來的數據全部丟失

shutdown immediate |transactional | normal

!cp datafilecontrolfile

shutdown abort

!cp datafilecontrolfile、重做日誌文件(必選)

⑵、恢復到原位置

shutdown abort

!cp datafilecontrolfile

starup

⑶、恢復新位置

shutdown abort

!cp datafilecontrolfile

startup mount

alter database rename file ‘原位置’ to ‘新位置

alter database open

熱備份(歸檔模式)

1、備份恢復數據前提begin backupend 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

RMANsqlplus比較:

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 失敗

1inactive損壞,oracle再次使用此組前無影響,如日誌文件組切換到此組時,實例暫停

已歸檔:alter database clear logfile group 1

未歸檔:alter database clear logfile unarchived group 1歸檔日誌文件已不完整,應立即完全備份數據庫

2active損壞

嘗試 alter system checkpoint,如成功則參考inactive辦法恢復,如失敗則執行不完全數據庫恢復

3current損壞

執行數據庫不完全恢復

閃回恢復區

所有與恢複相關的文件的默認位置,創建數據庫時沒有設CONTROL_FILES DB_CREATE_FILE_DESTDB_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@orclrman客戶端遠程登錄

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備份

只能在磁盤,不能增量,且openmount模式

與手工通過操作系統的複製命令備份數據文件類似。一個數據文件生成一個鏡像副本文件,整個複製過程是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備份信息

listreport、動態性能視圖僅通過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

恢復spfilecontrolfile

configure controlfile autobackup on

恢復步驟:

1spfile文件完整

startup nomount

restore controlfile from autobackup

2spfile文件丟失

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 spfilecontrolfile恢復

沒有啓用自動備份控制文件,每次備份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數據庫。啓動數據庫到mountRMAN須在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默認offsystem表空間默認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檢測到的所有數據庫損壞(含spfilecontrolfile

填充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當前數據庫

auxiliarytarget創建的新數據庫,targetauxiliary可在同一臺機器、也可不在同一臺機器

取得target數據庫最近一次備份副本

輔助數據庫節點

輔助實例創建口令文件

orapwd file=$ORACLE_HOME/dbs/oranewdb password=1234 entries=3口令文件ora<SID>

auxiliary 配置listenertarget配置tnsnames.ora,確保targetauxiliary網絡連通性(如不同一臺機器)

輔助實例創建初始化參數文件DB_NAMECONTROL_FILESDB_BLOCK_SIZE必需

輔助實例啓動nomount

export ORACLE_SID=newdb

startup nomount

mountopen目標數據庫

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=TRUEDBWR_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_databaseimp_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:dogschema(用戶)scott的對象更改爲dog不同用戶之間

remap_tablespace=user:dog將表空間user更改爲dog表空間不同表空間之間

impdp dog/wangwang parfile=/tmp/scott_to_dog.txt

閃回 flashback

flashback database

等同不完整恢復,受閃回日誌限制,需歸檔重做日誌,mount模式

啓用閃回數據庫,SGA分配一個存儲區域(閃回緩衝區),系統啓動恢復寫入器(Recovery WriterRVWR)進程,將閃回緩衝區內容寫入閃回日誌。執行閃回數據庫時,數據庫用閃回日誌將數據庫閃回到某個時間點,然後應用歸檔重做日誌和聯機重做日誌文件前滾到確切的時間點(和數據庫不完全恢復一樣),最後用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'閃回緩衝區大小

2sqlplus執行閃回數據庫

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

3rman執行閃回

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

列出歸檔spacer.gif

顯示歸檔與表空間關係

spacer.gif

使用歸檔功能的表

spacer.gif

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:07student表狀態

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或時間戳之間的行的完整歷史變更

依賴AUMAutomatic Undo Management

spacer.gif

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操作、已刪除的表和用戶)

spacer.gif

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僅回滾指定事務的非衝突行的更改、

數據庫進行一致狀態,但無法再次自動完成指定事務

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章