算是挺全的了,有指令有真相
一、Oracle備份方式分類:
Oracle有兩類備份方式:
(1)實體備份:是将實際組成資料庫的作業系統檔案從一處拷貝到另一處的備份過程,通常是從磁盤到錄音帶。
實體備份又分為冷備份、熱備份;
(2)邏輯備份:是利用SQL語言從資料庫中抽取資料并存于二進制檔案的過程。
邏輯備份使用導入導出工具:EXPDP/IMPDP或EXP/IMP;
備份方式的優缺點及使用時機比較如下圖:

二、Oracle備份方式介紹:
1、實體備份之冷備份(條件-NonArchiveLog):
當資料庫可以暫時處于關閉狀态時,我們需要将它在這一穩定時刻的資料相關檔案轉移到安全的區域,當資料庫遭到破壞,再從安全區域将備份的資料庫相關檔案拷貝回原來的位置,這樣,就完成了一次快捷安全等資料轉移。由于是在資料庫不提供服務的關閉狀态,是以稱為冷備份。冷備份具有很多優良特性,比如上面圖中我們提到的,快速,友善,以及高效。一次完整的冷備份步驟應該是:
(1)首先關閉資料庫(shutdown normal)
(2)拷貝相關檔案到安全區域(利用作業系統指令拷貝資料庫的所有的資料檔案、日志檔案、控制檔案、參數檔案、密碼檔案等(包括路徑))
(3)重新啟動資料庫(startup)
以上的步驟我們可以用一個腳本來完成操作:
su – oracle < sqlplus /nolog
connect / as sysdba
shutdown immediate;
!cp 檔案 備份位置(所有的日志、資料、控制及參數檔案);
startup;
exit;
這樣,我們就完成了一次冷備份,請确定你對這些相應的目錄(包括寫入的目标檔案夾)有相應的權限。
實體冷備份的恢複:
恢複的時候,相對比較簡單了,我們停掉資料庫,将檔案拷貝回相應位置,重新開機資料庫就可以了,當然也可以用腳本來完成。
2、實體備份之熱備份:(條件-ArchiveLog)
當我們需要做一個精度比較高的備份,而且我們的資料庫不可能停掉(少許通路量)時,這個情況下,我們就需要歸檔方式下的備份,就是下面讨論的熱備份。熱備份可以非常精确的備份表空間級和使用者級的資料,由于它是根據歸檔日志的時間軸來備份恢複的,理論上可以恢複到前一個操作,甚至就是前一秒的操作。具體步驟如下:
(1)通過視圖v$database,檢視資料庫是否在Archive模式下:
如果不是Archive模式,則設定資料庫運作于歸檔模式下:
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>alter database open;
如果Automaticarchival顯示為“Enabled”,則資料庫歸檔方式為自動歸檔。否則需要手工歸檔,或者将歸檔方式修改為自動歸檔,如:
正常shutdown資料庫,在參數檔案中init.ora中加入如下參數
SQL>shutdown immediate
修改init.ora:
LOG_ARCHIVE_START=TRUE
LOG_ARCHIVE_DEST1=ORACLE_HOME/admin/o816/arch(歸檔日志存放位置可以自己定義)
SQL>startup
然後,重新啟動資料庫,此時Oracle資料庫将以自動歸檔的方式工作在Archive模式下。其中參數LOG_ARCHIVE_DEST1是指定的歸檔日志檔案的路徑,建議與Oracle資料庫檔案存在不同的硬碟,一方面減少磁盤I/O競争,另外一方面也可以避免資料庫檔案所在硬碟毀壞之後的檔案丢失。歸檔路徑也可以直接指定為錄音帶等其它實體儲存設備,但可能要考慮讀寫速度、可寫條件和性能等因素。
注意:當資料庫處在ARCHIVE模式下時,一定要保證指定的歸檔路徑可寫,否則資料庫就會挂起,直到能夠歸檔所有歸檔資訊後才可以使用。另外,為建立一個有效的備份,當資料庫在建立時,必須履行一個全資料庫的冷備份,就是說資料庫需要運作在歸檔方式,然後正常關閉資料庫,備份所有的資料庫組成檔案。這一備份是整個備份的基礎,因為該備份提供了一個所有資料庫檔案的拷貝。(展現了冷備份與熱備份的合作關系,以及強大的能力)
(2)表空間檔案備份步驟:
a,首先,修改表空間檔案為備份模式 ALTER TABLESPACE tablespace_name BEGIN BACKUP;
b,然後,拷貝表空間檔案到安全區域 !CP tablespace_name D_PATH;
c,最後,将表空間的備份模式關閉 ALTER TABLESPACE tablespace_name END BACKUP;
(3)歸檔日志檔案備份步驟:
停止歸檔程序-->備份歸檔日志檔案-->啟動歸檔程序
如果日志文檔比較多,我們将它們寫入一個檔案成為一個恢複的參考:$ files <code>ls <歸檔檔案路徑>/arch*.dbf</code>;export files
(4)控制檔案備份步驟:
SQL> alter database backup controlfile to ‘controlfile_back_name(一般用2004-11-20的方式)’ reuse;
當然,我們也可以将上面的東東寫為一個腳本,在需要的時候執行就可以了:
腳本範例:
ALTER TABLESPACE tablespace_name BEGIN BACKUP
!CP tablespace_name D_PATH
ALTER TABLESPACE tablespace_name END BACKUP
alter database backup controlfile to ‘controlfile_back_name(一般用2004-11-20的方式)’ reuse;
!files <code>ls <歸檔檔案路徑>/arch*.dbf</code>;export files
實體熱備份的恢複:
熱備份的恢複,對于歸檔方式資料庫的恢複要求不但有有效的日志備份還要求有一個在歸檔方式下作的有效的全庫備份。歸檔備份在理論上可以無資料丢失,但是對于硬體以及操作人員的要求都比較高。在我們使用歸檔方式備份的時候,全庫實體備份也是非常重要的。歸檔方式下資料庫的恢複要求從全備份到失敗點所有的日志都要完好無缺。
恢複步驟:LOG_ARCHIVE_DEST_1
(1)shutdown資料庫。
(2)将全備份的資料檔案放到原來系統的目錄中。
(3)将全備份到失敗點的所有歸檔日志放到參數LOG_ARCHIVE_DEST_1所指定的位置。
(4)利用sqlplus登陸到空執行個體。(connect / as sysdba)
startup mount
set autorecovery on
recover database;
alter database open;
3、邏輯備份之EXP/IMP:
EXP和IMP是用戶端工具程式,它們既可以在用戶端使用,也可以在服務端使用。
EXPDP和IMPDP是服務端的工具程式,他們隻能在ORACLE服務端使用,不能在用戶端使用。
IMP隻适用于EXP導出的檔案,不适用于EXPDP導出檔案;IMPDP隻适用于EXPDP導出的檔案,而不适用于EXP導出檔案。
使用EXP/IMP導出/導入包括三種方式:
(1)表方式(T) 可以将指定的表導出備份;
(2)使用者方式(U) 可以将指定的使用者相應的所有資料對象導出;
(3)全庫方式(Full) 将資料庫中的所有對象導出;
(1)導出表:
E:>exp system/oracle TABLES=scott.dept,scott.emp FILE=a.dmp
(2)導出方案:
E:>exp system/oracle OWNER=scott FILE=b.dmp
(3)導出資料庫:
E:>exp system/oracle FILE=c.dmp FULL=Y
(4)導入表:
SQL> drop table scott.emp;
SQL> drop table scott.dept;
E:>impdp scott/tiger file=a.dmp tables=dept,emp
(5)導入方案:
SQL> drop user scott cascade;
SQL> create user scott identified by tiger;
SQL> grant dba to scott;
E:>impdp scott/tiger file=b.dmp
E:>impdp system/oracle file=b.dmp owner=scott
(6)導入資料庫:
impdp system/oracle file=c.dmp full=y
在導入導出備份方式中,提供了很強大的一種方法,就是增量導出/導入,但是它必須作為System來完成增量的導入導出,而且隻能是對整個資料庫進行實施。增量導出又可以分為三種類别:
(1)完全增量導出(Complete Export) 這種方式将把整個資料庫檔案導出備份;exp system/manager inctype=complete file=20041125.dmp(為了友善檢索和事後的查詢,通常我們将備份檔案以日期或者其他有明确含義的字元命名)
(2)增量型增量導出(Incremental Export) 這種方式将隻會備份上一次備份後改變的結果;exp system/manager inctype=incremental file=20041125.dmp
(3)累積型增量導出(Cumulate Export) 這種方式的話,是導出自上次完全增量導出後資料庫變化的資訊。exp system/manager inctype=cumulative file=20041125.dmp
通常情況下,DBA們所要做的,就是按照企業指定或者是自己習慣的标準(如果是自己指定的标準,建議寫好計劃說明),一般,我們采用普遍認可的下面的方式進行每天的增量備份:
Mon: 完全備份(A)
Tue: 增量導出(B)
Wed: 增量導出(C)
Thu: 增量導出(D)
Fri: 累計導出(E)
Sat: 增量導出(F)
Sun: 增量導出(G)
這樣,我們可以保證每周資料的完整性,以及恢複時的快捷和最大限度的資料損失。恢複的時候,假設事故發生在周末,DBA可按這樣的步驟來恢複資料庫:
第一步:用指令CREATE DATABASE重新生成資料庫結構;
第二步:建立一個足夠大的附加復原。
第三步:完全增量導入A:
imp system/manager inctype=RESTORE FULL=y FILE=A
第四步:累計增量導入E:
imp system/manager inctype=RESTORE FULL=Y FILE=E
第五步:最近增量導入F:
imp system/manager inctype=RESTORE FULL=Y FILE=F
通常情況下,DBA所要做的導入導出備份就算完成,隻要科學的按照規律作出備份,就可以将資料的損失降低到最小,提供更可靠的服務。另外,DBA最好對每次的備份做一個比較詳細的說明文檔,使得資料庫的恢複更加可靠。
4、邏輯備份之EXPDP/IMPDP
使用資料泵(Data Dump)導出/導入包括4種方式:導出表、導出方案、導出表空間、導出資料庫。
(1)導出表
在E盤建立目錄oracledump;
SQL> CREATE DIRECTORY dump_dir AS ‘E:\oracledump’;
SQL> GRANT READ,WRITE ON DIRECTORY dump_dir TO scott;
E:>expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp
E:>expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schemaScott.dmp SCHEMAS=’SCOTT’;
(3)導出表空間:
E:>expdp system/oracle directory=dump_dir dumpfile=tablespaceUsers.dmp ESTIMATE_ONLY
(4)導出資料庫:
E:>expdp system/oracle directory=dump_dir dumpfile=database.dmp FULL=Y
(5)導入表:
E:>impdp scott/tiger directory=dump_dir dumpfile=tab.dmp tables=dept,emp
(6)導入方案:
E:>impdp system/oracle directory=dump_dir dumpfile=schemaScott.dmp schemas=scott
(7)導入表空間:
impdp system/oracle directory=dump_dir dumpfile=tablespaceUsers.dmp tablespaces=users
(8)導入資料庫:
impdp system/oracle directory=dump_dir dumpfile=database.dmp FULL=Y