正在看的ORACLE教程是:有關Oracle資料庫的備份情況。一、意義:
當我們使用一個資料庫時,總希望資料庫的內容是可靠的、正確的,但由於電腦系統的故障(硬體故障、網路故障、進程
故障和系統故障)影響資料庫系統的操作,影響資料庫中資料的正確性,甚至破壞資料庫,使資料庫中全部或部分資料丟
失。因此當發生上述故障後,希望能重建立立一個完整的資料庫,該處理稱為資料庫恢複。恢複子系統是資料庫管理系統
的一個重要組成部分。恢複處理隨所發生的故障類型所影響的結構而變化。
二、備份的方法
ORACLE資料庫有三種標準的備份。匯出/匯入(EXPORT/IMPORT) 、冷備份、熱備份。
匯出備份是一種邏輯備份,這種方法包括讀取一系列的資料庫日誌,並寫入檔案中,這些日誌的讀取與其所處位置無關。
冷備份和熱備份是物理備份(也稱低級備份),它涉及到組成資料庫的檔案,但不考慮邏輯內容。
下面我們分別介紹一下這三種備份方法及其特點:
(一)、匯出/匯入(EXPORT/IMPORT)
EXPORT/IMPORT是用來將ORACLE中資料移出/移入資料庫。
1、EXPORT將資料庫中資料備份成一個二進位系統檔案稱為“匯出轉儲檔案”(EXPORT DUMP FILE),並將重建資料庫寫
入檔案中。
它有三種模式:
a.使用者模式:匯出使用者所有對象以及對象中的資料;
b.表模式:匯出使用者所有表或者指定的表;
c.整個資料庫:匯出資料庫中所有對象。
它的備份有三種類型:
a.完全型(COMPLETE EXPORT):備份整個資料庫;
b.積累型(COMULATIVE ERPORT):備份上一次積累型備份所改變的資料;
c.增量型(INCREAMENTAL EXPORT):備份上一次備份後改變的資料。
EXPORT 的命令可以互動式進行,各參數的具體含義見附錄。
在進行匯出備份時我們要考慮一點問題,那就是匯出的一致性,在匯出過程 中匯出每讀一次就讀取一個表,因而儘管匯出
是在一個特點時自己開始的,但不同的表讀取的時間不同,因此,匯出開始讀一個表時,此時表中的資料才是匯出的數
據,這樣當大多數表按內部關鍵字和外部關鍵字相互聯絡時,在匯出過程中這些相關聯表的改變就會導致匯出的不一致
性,要避開這個,我們可以將匯出過程安排在不對錶操作的時候進行。另外,當ORACLE中RESTRICTEP CONSISTENT 選項就
可以保證匯出資料一致性。
2、IMPORT匯入:
匯入的過程是匯出的逆過程,這個命令先讀取匯出來的匯出轉儲二進位檔案,並運行檔案,恢複對象使用者和資料。
IMPORT命令執行的方法和EXPORT方案有關。
1、如果EXPORT所實施的是完全型方案(FULL)則在IMPORT時所有的資料對象,包括資料表空間,資料檔案,使用者都會在匯入時創
建,但考慮到資料庫中的物理布局,預先建立資料表空間和使用者是有用的。
2、如果EXPORT使用的是INCREMENTAL/CUMULATIVE方式,則需要預先設定好資料表空間、使用者、資料檔案。
(二):冷備份
冷備份發生在資料庫已經正常關閉的情況下,當正常關閉時會提供給我們一個完整的資料庫。
資料庫使用的每個檔案都被備份下來,這些檔案包括:
☆所有資料檔案
☆所有控制檔案
☆所有聯機REDO LOG 檔案
☆INIT.ORA檔案(可選)
值得注意的是冷備份必須是資料庫關閉的情況下完成,當資料庫開著的時候,執行資料庫檔案系統備份無效。
作冷備份一般步驟是:
1:正常關閉要備份的執行個體(instance);
2: 備份整個資料庫到一個目錄
3:啟動資料庫
1: SQLDBA>connect internal
SQLDBA>shutdown normal
2: SQLDBA>! cp <file> <backup directory>
或
SQLDBA>!tar cvf /dev/rmt/0 /wwwdg/oracle
3: 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 initoracle7.ora
加入log_archive_start = true # if you want automatic archiving
log_archive_dest = $ORACLE_HOME/dbs/arch
log_archive_format = log%s.arc
%dbstart
%ps -ef|grep arch
oracle 1743 1 0 15:20:20 ? 0:00 ora_arch_oracle7
註:oracle database is in automatic archivelog mode
?full offline entire database backup, 當資料庫初始完成後 這份備份是將來備份的基礎。它提供了所有與資料庫有關
的拷貝.
%dbshut
%cp /oracle/oradata/oracle7/system.dbf
/oracle/oradata/oracle7/rbs.dbf
/oracle/oradata/oracle7/temp.dbf
/oracle/oradata/oracle7/tools.dbf
/oracle/oradata/oracle7/users.dbf
/oraclecle/app/oracle/product/7.3.2/dbs/application.dbf
/oracle/app/oracle/product/7.3.2/dbs/apptmpsp.dbf
/oracle/app/oracle/product/7.3.2/dbs/apprlbksp.dbf
/oracle/oradata/oracle7/redooracle.log
/oracle/oradata/oracle7/control1.ctl
/oracle/oradata/oracle7/control2.ctl
/oracle/oradata/oracle7/control3.ctl
<backup directory>
%dbstart
注:以上*.dbf檔案為資料檔案,*.log檔案為記錄檔,*.ctl檔案為控制檔案
%exit
%tar uvf /dev/rmt/0 <backup files>
注:如果為oracle 7.2 ,則copy 相應的 data files,relog files,control files.
6.3、每天做一次 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
[1] [2] [3] 下一頁
正在看的ORACLE教程是:有關Oracle資料庫的備份情況。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.
七、備份檔案的恢複:
7.1恢複檔案:
以下是對"/etc/passwd"檔案的恢複
(、放入正確的磁帶
(、運行以下命令恢複"/etc/passwd"檔案
# rsh www mt -f /dev/rmt/0 rew
( 找到最近的磁帶,向前進帶到最近的"/etc/passwd",比如要找星期三的"/etc/passwd"檔案,運行如下命令)
#rsh www mt -f /dev/rmt/0n fsf 2
# ufsrestore if www:/dev/rmt/0n
ufsrestore > ls
.:
etc/
ufsrestore > cd etc
ufsrestore > ls
./etc:
passwd
ufsrestore > add passwd
Warnign :./etc:File 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 #:1
extract file ./etc/passwd
Add links
Set directory mode ,ower,and times.
set owner /mode for '.'?(yn)n
Directories already exit , set mode anyway?(yn)y
ufsrestore >quit
熱備份可以在資料庫開啟打情況下進行,一般通過使用Alter命令改變資料表空間的狀態來開始進行備份的,備份完成後,
要恢其原來狀態,否則redo log 會錯配,引起資料庫下次啟動時對受影響的資料表空間進行完全覆蓋。熱備份的要求是:
1.熱備份工作必需要求資料庫在Archivelog 方式下操作,在SQLDBA狀態下用alter database archivelog|noarchivelog命
令可改變備份的模式。
2.熱備份只能在資料庫不使用或使用率低的情況下進行。
3.熱備份需要大量的檔案空間。
一般情況,Oracle 以迴圈的方式寫入Online redo log 檔案,當填滿第一個redo log檔案後寫第二個,直至最後一個,最
後一個被填滿後,後台進程LGWR就覆蓋第一個,在Archivelog方式下,後台進程ARCH在每一個redo log 檔案被覆蓋前,給
它作一個拷貝,一般,這些文檔的redo log 檔案被寫入磁碟或磁帶中。如果磁碟空間夠用,建議使用磁碟,這樣可大大減
少完成備份所需的時間。
在作熱備份之前,要將config.ora檔案中的log_archive_start 設為true 將log_archive_dest
規定archive redo log 檔案的位置:
log_archive_dest=/wwwdg/oracle/arch/arch
log_archive_start=true
一旦資料庫運行在archivelog狀態下,就可以作備份了。熱備份的命令檔案由三部分組成:
1、資料檔案一個資料表空間一個空間地備份:
a.設定資料表空間為備份狀態。
b.備份資料表空間的資料檔案。
c.恢複資料表空間為正常狀態。
2、備份歸檔要作log 檔案:
a.臨時停止歸檔進程
b.log下那些在archive redo log目標目錄中的檔案
c.重新啟動archive進程
d.備份歸檔的redo log 檔案
3、用alter database backup controlfile命令來備份拷貝檔案
在熱備份運行之前log_archive_dest目錄可能已滿,這時就要備份目錄,然後刪除檔案,釋放空間,這個過程有如下步
驟:
1、暫時停止archive進程。
2、記錄在log_archive_dest目錄下的檔案。
3、重新啟動archive 進程。
4、備份archive redo log 檔案。
5、刪除目錄中的檔案。
sqldba lmode=y <<EOF arch1
archive log stop;
exit
EOF arch1
FILES='ls /wwwdg/oracle/arch/arch*.dbf';
sqldba lmode=y<<EOF arch2
connect internal
archive log start;
exit
EOF arch2
tar -rvf /dev/rmt/0 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.假設為360。
Svrmgrl>exit
$cd /billdg/oracle/app/oracle/product/7.3.2/dbs/arch
$ rm ......... #將log360.arc之前的檔案如log359.arc,log358.arc.............刪除。
冷 備 份
物理型
可將資料庫到它被關閉的狀態
熱 備 份
物理型
可將資料庫恢複到任一時間點的狀態
當資料庫比較小時,處理業務也小時,冷備份匯出就可以了。如果只對一兩個表備份匯出就夠了。一般來說一個好,備份最
終執行總包括邏輯和物理,匯出確認資料庫在邏輯的正確性而物理備份確保物理。
另外,在進行備份時需要一些儲存介質,對於這些介質應該對其作好管理
1:根據備份的內容,日期將介質統一編號,以免備份和恢複時弄錯介質,造成原有的備份丟失。
2:介質應存放在與電腦裝置不同的地點,以免機房發生意外時,備份與電腦裝置一同損壞。
附錄:
tar命令
tar option [arguments] filename...
option:
c:建立一個由命令列指定的新的tarfile
t:列出tarfile中的內容
x:開啟tarfile;
f:使用其後的filename 或/dev/rmt/0|1
v:列出被恢複的檔案名稱;
p:恢複檔案
example:
#tar cvf /dev/rmt/0 /oracle
備份/
上一頁 [1] [2] [3] 下一頁
正在看的ORACLE教程是:有關Oracle資料庫的備份情況。root 下的所有內容
#tar tvf /dev/rmt/0
列出磁帶上的所有內容
#tar xvf /dev/rmt/0 /oracle
將磁帶上的/oracle目錄中的內容恢複到目前的目錄中
匯出選項
關鍵字 內 容
USERID 運行匯出命令的帳號的使用者名稱/口令。
BUFFEER 用來取資料行的緩衝區的大小。
FILE 匯出轉儲檔案的名字
COMPRESS 匯出是否應該壓縮有片段的段成一個範圍,這將會影響STORAGE
子句,
GRANTS 匯出時否要匯出資料庫物件上的授權
INDEXES 是否要匯出表上的索引
ROWS 是否應匯出行。如它為‘N',那麼在匯出檔案中僅產生資料庫
對象的DDL
CONSSTRAINTS 是否匯出表舊的約定條件
FULL 如設為‘Y',那麼將執行一個整個資料庫匯出操作
OWNER 要匯出的一系列資料庫帳號,然後執行這些帳號的USER匯出操
作
TABLES 要匯出的一系列表;執行這些表的TABLE匯出操作
RECORDLENGTH 轉儲匯出檔案日誌的長度(以位元組為單位),通常都使用預設,除
非要在兩個不同作業系統中傳遞匯出檔案
INCTYPE 正在執行的匯出操作的類型(有效值有”COMPLETE“(預設值),
CUMULATIVE”和“IVCREMENTAL”)
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“(預設值),
CUMULATIVE”和“IVCREMENTAL”)
PARFILE 要傳遞給匯入的參數檔案的名字。這個檔案將包含所有參數的入
口項
ANALYZE 標明是否將移對象的統計資訊寫入匯入轉儲檔案中
LOG 匯入日誌將要寫入的檔案的名字
MLS 標明是否要匯入MLS 標號
熱備份的命令檔案:
ORACLE_SID=oracle7
ORACLE_HOME=/wwwdg/oracle
sqldba lmode=y<<EOF arch1
connect internal
alter tablespace SYSTEM begin backup;
!tar -cvf /dev/rmt/0 /wwwdg/oracle/dbms/sys01.dbf
alter tablespace SYSTEM end backup;
alter tablespace BWT begin backup;
!tar -cvf /dev/rmt/0 /wwwdg/oracle/dbms/BWT1.dbf
alter tablespace BWT end backup;
archive log stop
exit
EOF arch1
FILES='ls /wwwdg/oracle/arch/arch*.dbf';
sqldba lmode=y<<EOF arch2
connect internal
archive log start;
exit
EOF arch2
tar -rvf /dev/rmt/0 $FILES
rm -f $files
sqldba lmode=y<<EOFarch3
alter database backup controlfile to
'/wwwdg/oracle/dbms/bwtcontrfile.backup';
exit
EOF arch3
tar -rvf /dev/rmt/0 /wwwdg/oracle/bwt/bwtcontrofile.backup
上一頁 [1] [2] [3]