天天看點

OCP11g IZO-053 Ⅰ

使用者管理備份(實體備份)作業系統指令執行的備份

伺服器管理備份(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

starup

⑶、恢複新位置

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、完全恢複控制檔案、重做日志檔案未損壞,自上次備份以來的歸檔日志檔案完整

①、資料庫恢複

!cp

recover database

②、非關鍵資料檔案

alter database tablespace|datafile xxx offline一般系統自動将故障表空間或資料檔案offline

recover tablespace|datafile xxx

alter database tablespace|datafile xxx online

③、關鍵資料檔案

2、歸檔日志不完整、或修複使用者錯誤或業務需求--> 不完全恢複

startup mount 

recover database until time ....

alter database open resetlog

RMAN和sqlplus比較:

RMAN

until time某一時間點

until scncommit後的system change number

until sequence日志切換序列号和線路号

SQL plus

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

recover database using backup controlfile

提示聯機重做日志檔案位置,一個一個地猜

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

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将資料檔案備份到一個實體檔案,實體檔案叫備份片,幾個備份片的邏輯組合叫備份集。

一般地,一個通道産生一個備份集,包括一個備份片,如啟用控制檔案自動備份,單獨産生一個備份集。

filesperset一個備份集包括的資料檔案個數,預設64 

maxpiecesize備份片大小,可能一個備份集産生多個備份片

maxopenfiles一個通道最大能打開的資料檔案數,預設64

maxsetsize備份集大小

section size 10G分段備份,如單個資料檔案很大,可分段并行化備份

duartion備份完成時間

備份語句如果沒有顯式設定RMAN參數,則用rman configure中的預設設定,備份檔案存放位置可在通道指定,也可在backup指令後指定。

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’;-- 備份資料存放地

}

rman target sys/oracle@orcl@database_backup

前提:控制檔案完整

restore database

recover database noredo-- 應用增量備份

alter database open resetlog-- 重設redolog

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跳過離線、丢失、隻讀表空間|資料檔案

隻能在磁盤,不能增量,且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 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備份與恢複相關的檔案(即使不位于閃回恢複區)

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份備份片或鏡像副本

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.

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

configure controlfile autobackup on

恢複步驟:

1、spfile檔案完整

restore controlfile from autobackup

2、spfile檔案丢失

startup pfile=/$ORACLE_HOME/dbs/init.ora nomount--使用預設參數檔案啟動資料庫

set DBID=''資料庫唯一辨別

restore spfile from autobackup

shutown abort

alter database restore

alter database recover

alter database open resetlogs

3、沒有啟動autobackup, spfile、controlfile恢複

沒有啟用自動備份控制檔案,每次備份1号資料檔案的時候,都會強制備份控制檔案和spfile,人工找到備份片,使用restore進行還原

restore spfile from ‘c:\backup\07qwjljsad’第一個備份片

restore controlfile from ‘c:\backup\07qwjljsad’第一個備份片

前提:上一次備份後歸檔重做日志檔案,聯機重做日志檔案

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

sql 'alter tablespace system online'

關鍵檔案與非關鍵檔案恢複差別:

關鍵檔案崩潰導緻資料庫立即停止,且恢複前無法open資料庫。啟動資料庫到mount(RMAN須在mount以上模式工作),然後開始恢複關鍵檔案,最後open資料庫。

非關鍵檔案崩潰或許不會導緻資料庫立即停機,資料庫會自動将資料檔案置為offline,如果資料庫已停,可在mounnt模式先将受損檔案offline,然後把資料庫open,最後考慮恢複。

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、還原備份檔案

alter system set db_block_checking off,false|low|medium|full,true預設off,system表空間預設full

low 記憶體中更改塊或從磁盤中讀取塊後對塊進行基本檢查

medium,除low外,檢查所有非IOT塊

analyze table|index發現受損壞

塊受損不會導緻資料檔案offline,僅當會話讀取受損塊時傳回錯誤,并寫入警報日志。

RMAN備份預設遇塊受損停止

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、使用者錯誤或業務需求回退資料庫至某個時間點

shutdown abort; startup mount

set until time "to_date('xxx' , 'xxx')"

早于指定時間點的所有資料檔案備份,然後應用歸檔重做日志檔案、目前重做日志檔案

完整恢複僅還原損壞檔案的最近一次備份

recover database-- 應用歸檔重做日志檔案、聯機重做日志檔案至故障點(set語句指定位置)

或者

restore databaseuntil time "to_date('xxx' , 'xxx')"

recover database until time "to_date('xxx' , 'xxx')"

關于故障點(指點恢複到哪)

until time指定時間點

until scn

until sequence

RMAN> configure autoback on

RMAN> run{

set dbid=

startup nomount pfile=xxx/init.ora

shutdown abort; startup nomount

restore controlfile from autobackup-- 還原到spfile檔案指定目錄,如原位置不可用,則需先改spfile

alter database mount

restore database until scn xxx

recover database until scn xxx-- 不完整恢複

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将自己的資料庫注冊到自己的專用目錄中,虛拟專用目錄所有者僅能看到自己注冊的資料庫或有權通路的資料庫(由恢複目錄所有者配置設定已注冊的目标資料庫)

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,連接配接目标資料庫、目錄資料庫

resync catalogRMAN下一次連接配接到目标資料和目錄時會自動同步

vi recover.rman

run{

backup database plus archivelog delete all input;

rman target / @recover.rmanrman腳本放在目标資料庫作業系統檔案系統

RMAN> create script recover.rman

(

)

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

mount或open目标資料庫

target的備份放在auxiliary資料庫能通路的位置,如active模式不需要

rman target sys/oracle@orcl auxiliary sys/1234@newdb

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輔助執行個體

duplicate指令完成的工作

為auxiliary建立控制檔案

将target備份還原到auxiliary資料庫,或直接從運作中的資料庫複制

執行不完整恢複到最後的歸檔重做日志檔案(不複制聯機重做日志檔案)

關閉後重新開機auxiliary,用resetlogs打開資料庫

為auxiliary資料庫生成新DBID

不完整恢複須應用到整個資料庫,應還原所有資料庫檔案,整個資料庫一起向前滾動。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源和目标都執行

錄音帶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鎖定表,群集表不适用。

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

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讀入整個檔案

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 log_dump as ‘/datapump_data’

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

等同不完整恢複,受閃回日志限制,需歸檔重做日志,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

alter database flashback on

v$flashback_database_log閃回保留時間是一個期望的目标時間,确切閃回能力資訊

v$flashback_database_stat閃回資料庫性能消耗

select * from v$sgastat where name = 'flashback generation buff'閃回緩沖區大小

2、sqlplus執行閃回資料庫

flashbackup database to timestamp to_timestamp(’20-12-08 10:00:00’,’dd-mm-yy hh:mm:ss)’

alter database open read only檢視閃回結果,可多次閃回以達到最接近的結果

3、rman執行閃回

RMAN> flashbackup database to time = to_date('','')或to scn=to sequence=

4、開啟閃回資料庫後,預設所有表空間參與閃回功能

alter tablespace tbs flashbackup off關閉表空間閃回功能

alter tablespace tbs flashback onmount模式開啟

執行閃回資料時,表空間須脫機。

閃回前備份脫機表空間,然後使用表空間恢複功能使其可以在閃回後的資料庫中聯機

能否恢複主要看表空間的可用空間,不需停機

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删除模式時連同模式對像(表),無法執行閃回表删除

閃回資料歸檔,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

列出歸檔

顯示歸檔與表空間關系

使用歸檔功能的表

查詢表或事務過去某一時間點的值或曆史變更值,建構相應的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

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僅復原指定事務的非沖突行的更改、

資料庫進行一緻狀态,但無法再次自動完成指定事務