熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

有關Oracle數據庫的備份情況

2013-11-13 16:00:41  來源: Oracle 

  一意義
當我們使用一個數據庫時總希望數據庫的內容是可靠的正確的但由於計算機系統的故障(硬件故障網絡故障進程
故障和系統故障)影響數據庫系統的操作影響數據庫中數據的正確性甚至破壞數據庫使數據庫中全部或部分數據丟
因此當發生上述故障後希望能重新建立一個完整的數據庫該處理稱為數據庫恢復恢復子系統是數據庫管理系統
的一個重要組成部分恢復處理隨所發生的故障類型所影響的結構而變化
備份的方法
ORACLE數據庫有三種標准的備份導出/導入(EXPORT/IMPORT) 冷備份熱備份
導出備份是一種邏輯備份這種方法包括讀取一系列的數據庫日志並寫入文件中這些日志的讀取與其所處位置無關
冷備份和熱備份是物理備份(也稱低級備份)它涉及到組成數據庫的文件但不考慮邏輯內容
下面我們分別介紹一下這三種備份方法及其特點
(一)導出/導入(EXPORT/IMPORT)
EXPORT/IMPORT是用來將ORACLE中數據移出/移入數據庫
EXPORT將數據庫中數據備份成一個二進制系統文件稱為導出轉儲文件(EXPORT DUMP FILE)並將重新生成數據庫寫
入文件中
它有三種模式
a用戶模式導出用戶所有對象以及對象中的數據
b表模式導出用戶所有表或者指定的表
c整個數據庫導出數據庫中所有對象
它的備份有三種類型
a完全型(COMPLETE EXPORT)備份整個數據庫
b積累型(COMULATIVE ERPORT)備份上一次積累型備份所改變的數據
c增量型(INCREAMENTAL EXPORT)備份上一次備份後改變的數據
EXPORT 的命令可以交互式進行各參數的具體含義見附錄
在進行導出備份時我們要考慮一點問題那就是導出的一致性在導出過程 中導出每讀一次就讀取一個表因而盡管導出
是在一個特點時自己開始的但不同的表讀取的時間不同因此導出開始讀一個表時此時表中的數據才是導出的數
這樣當大多數表按內部關鍵字和外部關鍵字相互聯系時在導出過程中這些相關聯表的改變就會導致導出的不一致
要避開這個我們可以將導出過程安排在不對表操作的時候進行另外當ORACLE中RESTRICTEP CONSISTENT 選項就
可以保證導出數據一致性

  IMPORT導入
導入的過程是導出的逆過程這個命令先讀取導出來的導出轉儲二進制文件並運行文件恢復對象用戶和數據
IMPORT命令執行的方法和EXPORT方案有關
如果EXPORT所實施的是完全型方案(FULL)則在IMPORT時所有的數據對象包括表空間數據文件用戶都會在導入時創
但考慮到數據庫中的物理布局預先創建表空間和用戶是有用的
如果EXPORT使用的是INCREMENTAL/CUMULATIVE方式則需要預先設置好表空間用戶數據文件
(二)冷備份
冷備份發生在數據庫已經正常關閉的情況下當正常關閉時會提供給我們一個完整的數據庫
數據庫使用的每個文件都被備份下來這些文件包括
☆所有數據文件
☆所有控制文件
☆所有聯機REDO LOG 文件
☆INITORA文件(可選)
值得注意的是冷備份必須是數據庫關閉的情況下完成當數據庫開著的時候執行數據庫文件系統備份無效
作冷備份一般步驟是
正常關閉要備份的實例(instance);
: 備份整個數據庫到一個目錄
啟動數據庫
SQLDBA>connect internal
SQLDBA>shutdown normal
SQLDBA>! cp <file> <backup directory>

SQLDBA>!tar cvf /dev/rmt/ /wwwdg/oracle
SQLDBA>startup

  (三)熱備份(ACHIRELOG)
數據庫需要二十四小時運行而且隨時有新的數據加入數據丟失將影響整個公司采用archivelog mode物理備份
?設置數據庫為automatic archivelog mode
#su oracle
%svrmgrl
svrmgrl>connect internal
svrmgrl>startup mount
svrmgrl>alter database archivelog
svrmgrl>shutdown
svrmgrl>exit
%vi initoracleora
加入log_archive_start = true # if you want automatic archiving
log_archive_dest = $ORACLE_HOME/dbs/arch
log_archive_format = log%sarc
%dbstart
%ps ef|grep arch
oracle :: ? : ora_arch_oracle
oracle database is in automatic archivelog mode

  ?full offline entire database backup 當數據庫初始完成後 這份備份是將來備份的基礎它提供了所有與數據庫有關
的拷貝
%dbshut
%cp /oracle/oradata/oracle/systemdbf
/oracle/oradata/oracle/rbsdbf
/oracle/oradata/oracle/tempdbf
/oracle/oradata/oracle/toolsdbf
/oracle/oradata/oracle/usersdbf
/oraclecle/app/oracle/product//dbs/applicationdbf
/oracle/app/oracle/product//dbs/apptmpspdbf
/oracle/app/oracle/product//dbs/apprlbkspdbf
/oracle/oradata/oracle/redooraclelog
/oracle/oradata/oracle/controlctl
/oracle/oradata/oracle/controlctl
/oracle/oradata/oracle/controlctl
<backup directory>
%dbstart
注:以上*dbf文件為數據文件*log文件為日志文件*ctl文件為控制文件
%exit
%tar uvf /dev/rmt/ <backup files>
注:如果為oracle 則copy 相應的 data filesrelog filescontrol files

  每天做一次 partial online with archiving backups
#su oracle
%svrmgrl
%svrmgrl>connect internal
%svrmgrl>alter tablespace billsp begin backup
%svrmgrl>alter tablespace billtmpsp begin backup
%svrmgrl>alter tablespace billrlbksp begin backup
%svrmgrl>alter tablespace system begin backup
%svrmgrl>alter tablespace rbs begin backup
%svrmgrl>alter tablespace temp begin backup
%svrmgrl>alter tablespace tools begin backup
%svrmgrl>alter tablespace users begin backup
%svrmgrl>host cp all datafile to the backup storage #文件名如第一步中以dbf結尾的
%svrmgrl>alter tablespace billsp end backup
%svrmgrl>alter tablespace billtmpsp end backup
%svrmgrl>alter tablespace billrlbksp end backup
%svrmgrl>alter tablespace system end backup
%svrmgrl>alter tablespace rbs end backup
%svrmgrl>alter tablespace temp end backup
%svrmgrl>alter tablespace tools end backup
%svrmgrl>alter tablespace users end backup

  做一個sql文件如上所寫

  The billing system can recover to the point of failure when the failure occur

  七備份文件的恢復
 恢復文件
以下是對"/etc/passwd"文件的恢復
  (放入正確的磁帶
  (運行以下命令恢復"/etc/passwd"文件
  # rsh www mt f /dev/rmt/ rew
( 找到最近的磁帶向前進帶到最近的"/etc/passwd"比如要找星期三的"/etc/passwd"文件運行如下命令)
  #rsh www mt f /dev/rmt/n fsf
  # ufsrestore if www:/dev/rmt/n
ufsrestore > ls

etc/
ufsrestore > cd etc
ufsrestore > ls
./etc
passwd
ufsrestore > add passwd
Warnign ./etcFile exists
ufsrestore > verbose
verbose mode on
ufsrestore > extract
Extract requested files
You have not read any volumes yet .
Unless you know which volume your file(s) are on you should start witch the last volume and work to wards
the first.
Specify next volume #
extract file ./etc/passwd
Add links
Set directory mode owerand times.
set owner /mode for ?(yn)n
Directories already exit set mode anyway?(yn)y
ufsrestore >quit
  熱備份可以在數據庫打開打情況下進行一般通過使用Alter命令改變表空間的狀態來開始進行備份的備份完成後
要恢其原來狀態否則redo log 會錯配引起數據庫下次啟動時對受影響的表空間進行完全覆蓋熱備份的要求是
熱備份工作必需要求數據庫在Archivelog 方式下操作在SQLDBA狀態下用alter database archivelog|noarchivelog命
令可改變備份的模式
熱備份只能在數據庫不使用或使用率低的情況下進行
熱備份需要大量的檔案空間
一般情況Oracle 以循環的方式寫入Online redo log 文件當填滿第一個redo log文件後寫第二個直至最後一個
後一個被填滿後後台進程LGWR就覆蓋第一個在Archivelog方式下後台進程ARCH在每一個redo log 文件被覆蓋前
它作一個拷貝一般這些文檔的redo log 文件被寫入磁盤或磁帶中如果磁盤空間夠用建議使用磁盤這樣可大大減
少完成備份所需的時間
在作熱備份之前要將configora文件中的log_archive_start 設為true 將log_archive_dest
規定archive redo log 文件的位置
log_archive_dest=/wwwdg/oracle/arch/arch
log_archive_start=true
一旦數據庫運行在archivelog狀態下就可以作備份了熱備份的命令文件由三部分組成
數據文件一個表空間一個空間地備份
a設置表空間為備份狀態
b備份表空間的數據文件
c恢復表空間為正常狀態
備份歸檔要作log 文件
a臨時停止歸檔進程
blog下那些在archive redo log目標目錄中的文件
c重新啟動archive進程
d備份歸檔的redo log 文件
用alter database backup controlfile命令來備份拷貝文件
在熱備份運行之前log_archive_dest目錄可能已滿這時就要備份目錄然後刪除文件釋放空間這個過程有如下步

暫時停止archive進程
記錄在log_archive_dest目錄下的文件
重新啟動archive 進程
備份archive redo log 文件
刪除目錄中的文件
sqldba lmode=y <<EOF arch
archive log stop;
exit
EOF arch
FILES=ls /wwwdg/oracle/arch/arch*dbf;
sqldba lmode=y<<EOF arch
connect internal
archive log start;
exit
EOF arch
tar rvf /dev/rmt/ FILES
rm f $FILES

  邏輯備份與物理備份的結合
前面介紹了三種備份的方法在數據庫做備份時應該將數據這三種備份的特點靈活運用我們首先比較一下三種方法的
特性

  方 法
類 型
恢 復 特 性
EXPORT導出
邏輯型
可以將任何數據庫對象恢復到它被導出時的狀態
乻hutdown
?將最近copyes of datafile拷貝到$oracle_home/dbs目錄
?%svrmgrl
?svrmgrl>connect internal
…svrmgrl>startup mount pfile=filename exclusive
?svrmgrl>alter database recover;
注:將自動恢復數據到the point of failure;
? svrmgrl>alter database open;
?當archive log文件過多時在 做過部分備份後可將current log sequence 之前的log***arc刪除
#su oracle
%svrmgrl
svrmgrl>connect internal;
svrmgrl>archive log list;
#此處標有current log sequence假設為
Svrmgrl>exit
$cd /billdg/oracle/app/oracle/product//dbs/arch
$ rm #將logarc之前的文件如logarclogarc刪除
冷 備 份
物理型
可將數據庫到它被關閉的狀態
熱 備 份
物理型
可將數據庫恢復到任一時間點的狀態

  當數據庫比較小時處理業務也小時冷備份導出就可以了如果只對一兩個表備份導出就夠了一般來說一個好備份最
終執行總包括邏輯和物理導出確認數據庫在邏輯的正確性而物理備份確保物理
另外在進行備份時需要一些存儲介質對於這些介質應該對其作好管理
根據備份的內容日期將介質統一編號以免備份和恢復時弄錯介質造成原有的備份丟失
介質應存放在與計算機設備不同的地點以免機房發生意外時備份與計算機設備一同損壞

  附錄
tar命令
tar option [arguments] filename
option:
c:創建一個由命令行指定的新的tarfile
t:列出tarfile中的內容
x:打開tarfile;
f:使用其後的filename 或/dev/rmt/|
v:列出被恢復的文件名
p:恢復文件
example:
#tar cvf /dev/rmt/ /oracle
備份/root 下的所有內容
#tar tvf /dev/rmt/
列出磁帶上的所有內容
#tar xvf /dev/rmt/ /oracle
將磁帶上的/oracle目錄中的內容恢復到當前目錄中

  導出選項
關鍵字 內 容
USERID 運行導出命令的帳號的用戶名/口令
BUFFEER 用來取數據行的緩沖區的大小
FILE 導出轉儲文件的名字
COMPRESS 導出是否應該壓縮有碎片的段成一個范圍這將會影響STORAGE
子句
GRANTS 導出時否要導出數據庫對象上的授權
INDEXES 是否要導出表上的索引
ROWS 是否應導出行如它為N那麼在導出文件中僅生成數據庫
對象的DDL
CONSSTRAINTS 是否導出表舊的約定條件
FULL 如設為Y那麼將執行一個整個數據庫導出操作
OWNER 要導出的一系列數據庫帳號然後執行這些帳號的USER導出操

TABLES 要導出的一系列表執行這些表的TABLE導出操作
RECORDLENGTH 轉儲導出文件日志的長度(以字節為單位)通常都使用缺省
非要在兩個不同操作系統中傳遞導出文件
INCTYPE 正在執行的導出操作的類型(有效值有COMPLETE(缺省值)
CUMULATIVEIVCREMENTAL)
RECORD 在增量導出類型中的一個標記標明是否將日志存儲到數據字典
中日志導出的表中
PARFILE 要傳遞給導出的參數文件的名字這個文件將包含所有參數的入
口項
ANALYZE 標明是否將移對象的統計信息寫入導出轉儲文件中
CONSISTENT 標明是否保留所有導出對象的讀取一致復制
LOG 導出日志將要寫入的文件的名字
MLS 標明是否要導出MLS 標號
MLS_LABEL_ 規定了MLS標號的格式

  導入選擇項
USERID 運行導入命令的帳號的用戶名/口令
BUFFEER 用來取數據行的緩沖區的大小
FILE 導入轉儲文件的名字
SHOW 規定文件內容是否被顯示而不是被執行
EGORE 標明在執行CREATE命令時是否忽略遇到的錯誤如果正
在導入的對象已經存在時應使用這個參數
FULL 如設為Y那麼將執行一個整個數據庫導入操作
FROMUSER 在FULL=N的情況下才有參數它是一系列的數據庫帳號
對象應從導出轉儲文件中讀取
TOUSER 一系列數據庫帳號導出轉儲文件扣的對象將要導入這些帳號
GRANTS 導入時否要導入數據庫對象上的授權
INDEXES 是否要導入表上的索引
ROWS 是否應導入行如它為N那麼在導入文件中執行數據庫對
象的DDL
FULL 如設為Y那麼將執行一個整個數據庫導出操作
TABLES 要導入的一系列表
RECORDLENGTH 轉儲導入文件日志的長度(以字節為單位)通常都使用缺省
非要在兩個不同操作系統中傳遞導入文件
INCTYPE 正在執行的導入操作的類型(有效值有COMPLETE(缺省值)
CUMULATIVEIVCREMENTAL)
PARFILE 要傳遞給導入的參數文件的名字這個文件將包含所有參數的入
口項
ANALYZE 標明是否將移對象的統計信息寫入導入轉儲文件中
LOG 導入日志將要寫入的文件的名字
MLS 標明是否要導入MLS 標號

  熱備份的命令文件
ORACLE_SID=oracle
ORACLE_HOME=/wwwdg/oracle
sqldba lmode=y<<EOF arch
connect internal
alter tablespace SYSTEM begin backup;
!tar cvf /dev/rmt/ /wwwdg/oracle/dbms/sysdbf
alter tablespace SYSTEM end backup;

  alter tablespace BWT begin backup;
!tar cvf /dev/rmt/ /wwwdg/oracle/dbms/BWTdbf
alter tablespace BWT end backup;

  archive log stop
exit
EOF arch
FILES=ls /wwwdg/oracle/arch/arch*dbf;

  sqldba lmode=y<<EOF arch
connect internal
archive log start;
exit
EOF arch

  tar rvf /dev/rmt/ $FILES
rm f $files

  sqldba lmode=y<<EOFarch
alter database backup controlfile to
/wwwdg/oracle/dbms/bwtcontrfilebackup;
exit
EOF arch

  tar rvf /dev/rmt/ /wwwdg/oracle/bwt/bwtcontrofilebackup


From:http://tw.wingwit.com/Article/program/Oracle/201311/17668.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.