- 由于計(jì)算機(jī)系統(tǒng)的各種軟硬件故障,用戶的錯(cuò)誤操作以及一些惡意破壞難以避免,因此這就影響到數(shù)據(jù)的正確性,甚至造成數(shù)據(jù)損失,服務(wù)器崩潰的嚴(yán)重后果。
- 所以經(jīng)常的備份可以有效地防止數(shù)據(jù)丟失,能夠把數(shù)據(jù)從錯(cuò)誤狀態(tài)恢復(fù)到正確狀態(tài)。
b、備份解決方案
- Oracle備份有分為:物理備份和邏輯備份。
- 物理備份又分為冷備份和熱備份。(熱備份又分為用戶管理備份和Oracle管理備份)
c、冷備份(脫機(jī)備份)具體步驟
- 脫機(jī)備份是在關(guān)閉數(shù)據(jù)庫后進(jìn)行的完整備份
- 脫機(jī)備份是最快和最安全的方法。
-
脫機(jī)備份是數(shù)據(jù)庫全部文件的備份,包括參數(shù)文件、所有控制文件、所有數(shù)據(jù)文件、所有聯(lián)機(jī)重做日志文件。
-
脫機(jī)備份的具體步驟分為三步:
1、以sys用戶或者system身份登錄數(shù)據(jù)庫,以immediate方式關(guān)閉數(shù)據(jù)庫。
SQL> conn sys/02000059 as sysdba
已連接。
SQL> shutdown immediate
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
2、把需要備份的文件拷貝到指定的位置。(復(fù)制所有需要備份的文件)
3、拷貝完成后,如果繼續(xù)讓用戶使用數(shù)據(jù)庫,需要以open方式啟動(dòng)數(shù)據(jù)庫。
SQL> startup open
ORACLE 例程已經(jīng)啟動(dòng)。
Total System Global Area 3373858816 bytes
Fixed Size 2180424 bytes
Variable Size 2013268664 bytes
Database Buffers 1342177280 bytes
Redo Buffers 16232448 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。
d、脫機(jī)備份的優(yōu)點(diǎn)和不足
-
優(yōu)點(diǎn):
1、是非??焖俚膫浞莘椒ǎㄖ恍枰截愇募?。
2、容易歸檔(簡(jiǎn)單拷貝即可)。
3、容易恢復(fù)到某個(gè)時(shí)間點(diǎn)上(只需要將文件在拷貝回去)。
4、能夠與歸檔方法向結(jié)合,作為數(shù)據(jù)庫“最新狀態(tài)”的恢復(fù)。
5、低度維護(hù),高度安全。
- 不足:
1、單獨(dú)使用時(shí),只能提供到“某一時(shí)間點(diǎn)上”的恢復(fù)。
2、在實(shí)施備份的全過程中,數(shù)據(jù)庫必須要做備份而不能作為其他工作。也就是說,在脫機(jī)備份過程中,數(shù)據(jù)庫必須是關(guān)閉狀態(tài)。
3、若磁盤空間有限,只能拷貝到其他外部存儲(chǔ)設(shè)備上時(shí),速度會(huì)很慢。
4、不能按表或者按用戶恢復(fù)。
e、數(shù)據(jù)庫恢復(fù)
- 數(shù)據(jù)庫恢復(fù)就是把數(shù)據(jù)庫中備份出來的數(shù)據(jù)重新還原給原來的數(shù)據(jù)庫。
- 數(shù)據(jù)庫恢復(fù)技術(shù)分為完全恢復(fù)和不完全恢復(fù)。
- 安全恢復(fù)是指把數(shù)據(jù)庫恢復(fù)到數(shù)據(jù)庫失敗時(shí)的數(shù)據(jù)庫狀態(tài);不完全恢復(fù)是指將數(shù)據(jù)庫恢復(fù)到數(shù)據(jù)庫失敗前的某一時(shí)刻的數(shù)據(jù)庫狀態(tài)。
f、脫機(jī)恢復(fù)
- 脫機(jī)恢復(fù)是使用備份文件將數(shù)據(jù)庫恢復(fù)到備份時(shí)的狀態(tài)。
g、脫機(jī)恢復(fù)的具體操作
- 脫機(jī)恢復(fù)的具體步驟分為三步:
1、以sys用戶或者system身份登錄數(shù)據(jù)庫,以immediate方式關(guān)閉數(shù)據(jù)庫。
2、將所有備份文件全部拷貝到原來的位置。
3、拷貝完成后,如果繼續(xù)讓用戶使用數(shù)據(jù)庫,需要以open方式啟動(dòng)數(shù)據(jù)庫。
2、數(shù)據(jù)的導(dǎo)入和導(dǎo)出
a、圖形化導(dǎo)入導(dǎo)出數(shù)據(jù)的方式
1、使用PLSQL Developer工具導(dǎo)出數(shù)據(jù):
- 第一種是導(dǎo)出為.dump的文件格式,.dmp文件是二進(jìn)制的,可以跨平臺(tái),還能包含權(quán)限,效率也很不錯(cuò),用得最為廣泛。
-
第二種是導(dǎo)出為.sql文件的,可用文本編輯器查看,通用性比較好,但是效率不如第一種,適合小數(shù)據(jù)量導(dǎo)入導(dǎo)出。
2、使用PLSQL Developer工具導(dǎo)出數(shù)據(jù):
- 第一種是導(dǎo)入為.dump格式的文件:
- 第二種是導(dǎo)入為.sql格式的文件:
- 需要注意,導(dǎo)入的.sql格式的文件可以沒有數(shù)據(jù),但是必須要有表的結(jié)構(gòu),不然導(dǎo)入會(huì)失敗。
b、命令行的方式進(jìn)行數(shù)據(jù)的導(dǎo)出
- 數(shù)據(jù)導(dǎo)出命令執(zhí)行方式如下:
EXP[username/password] 參數(shù)1 參數(shù)2
- 示例1:將數(shù)據(jù)庫orc完全導(dǎo)出。
exp system/oracle@orcl file=c:\dump\oracle_bak.dmp full=y
- 示例2:將數(shù)據(jù)庫中scott用戶的所有對(duì)象導(dǎo)出。
exp scott/tiger1@orcl file=c:\dump\scott_bak.dmp owner=scott
- 示例3:將scott用戶中表emp,dept導(dǎo)出
exp scott/tiger1@orcl file=c:\dump\table_bak.dmp tables=(emp, dept)
c、命令行的方式進(jìn)行數(shù)據(jù)的導(dǎo)入
- 導(dǎo)入數(shù)據(jù)命令執(zhí)行方式如下:
IMP [username/password] 參數(shù)1 參數(shù)2 ... ...
- 將備份文件導(dǎo)入到數(shù)據(jù)庫中:
imp scott/tiger1@orcl file=c:\dump\scott_bak.dmp ignore=y
- 需要注意,此示例中用scott用戶進(jìn)行的導(dǎo)出操作,在導(dǎo)入時(shí)也必須由scott用戶進(jìn)行導(dǎo)入操作。
3、利用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步備份
a、利用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步備份圖示
b、示例:利用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)的同步備份
-
因?yàn)樵谙到y(tǒng)中只安裝一個(gè)Oracle數(shù)據(jù)庫,選擇的方式是在同一數(shù)據(jù)庫中進(jìn)行備份:(即A表和A表備份都在同一個(gè)數(shù)據(jù)庫中)
1、創(chuàng)建員工表的備份表:
CREATE TABLE emp_bak
AS
SELECT * FROM emp;
2、創(chuàng)建觸發(fā)器來實(shí)現(xiàn)數(shù)據(jù)的同步備份。(如當(dāng)刪除員工后,備份表同步刪除)
CREATE OR REPLACE TRIGGER syno_bak_tirgger
AFTER DELETE
ON emp
FOR EACH ROW
BEGIN
DELETE FROM emp_bak WHERE empno = :old.empno;
END;
3、測(cè)試
DELETE FROM emp WHERE empno = 7951;
SELECT * FROM emp;
SELECT * FROM emp_bak;