您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Oracle數(shù)據(jù)庫怎么備份與恢復(fù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Oracle數(shù)據(jù)庫怎么備份與恢復(fù)”吧!
在Oracle數(shù)據(jù)庫的使用過程中,備份與恢復(fù)是經(jīng)常遇到的操作。Oracle中的備份分為兩大類:邏輯備份
和物理備份
。其中物理備份又分為兩類:冷備份
和熱備份
。本節(jié)將簡要講述如何利用各種備份手段進(jìn)行Oracle數(shù)據(jù)庫的備份與恢復(fù)。
邏輯備份是指利用exp
命令進(jìn)行備份。利用該命令進(jìn)行備份,簡單易行,也不影響正常的數(shù)據(jù)庫操作。因此,經(jīng)常被作為日常備份的手段。exp
命令可以添加多個(gè)參數(shù)選項(xiàng),以實(shí)現(xiàn)不同的導(dǎo)出策略??梢酝ㄟ^exp –?
命令進(jìn)行查看。其中,常用參數(shù)包括:owner
、table
和inctype
。
對于一個(gè)導(dǎo)出命令,可以只使用必備參數(shù),如范例1所示。
【范例1】演示導(dǎo)出命令的使用。
C:\Documents and Settings\Administrator>exp system/abc123 file=d:/b.dmp
【代碼說明】system/abc123
為登錄數(shù)據(jù)庫時(shí)所使用的用戶名和密碼;file=d:/b.dmp
指定數(shù)據(jù)導(dǎo)出所存放的文件完整路徑。這里需要注意的是,該命令并未指定登錄到哪個(gè)數(shù)據(jù)庫實(shí)例,因此,將使用系統(tǒng)環(huán)境變量ORACLE_SID
所指定的數(shù)據(jù)庫實(shí)例。
注意:另外一種特殊情況為,在環(huán)境變量列表中找不到ORACLE_SID
,那么,可以在注冊表中搜索ORACLE_SID
項(xiàng)。Oracle也會參考注冊表中該項(xiàng)的值來設(shè)置環(huán)境。
owner參數(shù),可以指定一個(gè)用戶名列表。導(dǎo)出時(shí),將只導(dǎo)出用戶名列表中用戶所擁有的對象,如范例2所示。
【范例2】演示owner參數(shù)的使用。
C:\Documents and Settings\Administrator>exp system/abc123 owner=(test, oracle) file=d:/b.dmp
【代碼說明】owner=(test, oracle)
指定exp
命令僅僅導(dǎo)出test
和oracle
兩個(gè)用戶所擁有的對象。如果某個(gè)用戶不存在,例如,本例中用戶oracle
不存在,那么將給出相應(yīng)警告,但不會影響對于用戶test
的對象的導(dǎo)出。
當(dāng)使用exp命令時(shí),同樣可以指定tables參數(shù)。該參數(shù)用于指定導(dǎo)出哪些數(shù)據(jù)表。范例3演示了該參數(shù)的使用。
【范例3】演示tables參數(shù)的使用。
exp system/abc123 tables=(people, employees) file=d:/b.dmp
【代碼說明】tables=(people, employees)
指定了要導(dǎo)出的數(shù)據(jù)表列表,在exp
命令執(zhí)行時(shí),將只導(dǎo)出用戶system
的people
和employees
表。如果要導(dǎo)出的表不存在,那么將給出警告信息。但不會影響其他表的導(dǎo)出工作。
在Oracle 9i之前的版本中,可以利用inctype參數(shù)指定導(dǎo)出的增量類型。但是,在Oracle 9i及以后的版本中,該參數(shù)不再使用。范例4演示了在Oracle 10g中使用該參數(shù)的錯(cuò)誤信息。
【范例4】Oracle 10g中參數(shù)inctype已經(jīng)廢除。
C:\Documents and Settings\Administrator>exp system/abc123 inctype=complete file=d:/b.dmp
【代碼說明】在exp
命令中使用inctype
參數(shù),Oracle將拋出錯(cuò)誤錯(cuò)誤信息,
對于邏輯備份,相應(yīng)的恢復(fù)命令為imp
。如果數(shù)據(jù)庫遭到破壞,可以利用如下命令進(jìn)行恢復(fù):
C:\Documents and Settings\Administrator>imp system/abc123 file=d:/b.dmp
imp
命令同樣可以指定參數(shù)。例如,使用owner
參數(shù)只導(dǎo)入特定用戶的對象;使用tables
參數(shù)只導(dǎo)入特定表,代碼如下:
C:\Documents and Settings\Administrator>imp system/abc123 file=d:/b.dmp tables=(people, employees)
該命令將只導(dǎo)入名為people
與employees
的表。
物理備份,是指直接備份數(shù)據(jù)庫的文件。物理備份又分為兩種:冷備份和熱備份。
冷備份是指在數(shù)據(jù)庫關(guān)閉的狀態(tài)下,備份所有的數(shù)據(jù)庫文件。這些文件包括:所有數(shù)據(jù)文件、所有控制文件、所有聯(lián)機(jī)REDO LOG文件和Init.ora文件(可選)。
【范例5】演示數(shù)據(jù)庫冷備份。
(1)首先以管理員身份登錄數(shù)據(jù)庫,并將數(shù)據(jù)庫關(guān)閉
C:\Documents and Settings\Administrator>sqlplus / as sysdba
SQL> shutdown normal;
Database closed.
Database dismounted.
ORACLE instance shut down.
(2)在關(guān)閉數(shù)據(jù)庫之后,可以對其物理文件進(jìn)行備份。這些物理文件默認(rèn)處于{ORACLE_HOME}\product\10.1.0\oradata\test
,其中test
為數(shù)據(jù)庫名。因此,首先返回到Windows命令行下使用復(fù)制命令,或者在SQL命令行中添加host
關(guān)鍵字直接使用主機(jī)命令:
SQL> host copy D:\oracle\product\10.1.0\oradata\test f:\backup\
D:\oracle\product\10.1.0\oradata\test\CONTROL01.CTL
D:\oracle\product\10.1.0\oradata\test\CONTROL02.CTL
D:\oracle\product\10.1.0\oradata\test\CONTROL03.CTL
此時(shí),已經(jīng)實(shí)現(xiàn)了整個(gè)數(shù)據(jù)庫的冷備份。而冷備份的恢復(fù)則十分方便,只要數(shù)據(jù)庫處于關(guān)閉狀態(tài),將備份的文件復(fù)制到原來的位置即可。
數(shù)據(jù)庫的熱備份是指對處于啟動狀態(tài)下的數(shù)據(jù)庫進(jìn)行備份。熱備份一個(gè)數(shù)據(jù)庫,首先要保證數(shù)據(jù)庫運(yùn)行于歸檔模式,然后備份表空間的數(shù)據(jù)文件,最后備份控制文件。
【范例6】演示數(shù)據(jù)庫熱備份。
(1)在進(jìn)行日志模式切換之前,必須將運(yùn)行的數(shù)據(jù)庫正常關(guān)閉。因此,首先應(yīng)該以管理員身份登錄數(shù)據(jù)庫,關(guān)閉數(shù)據(jù)庫。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
(2)重新啟動數(shù)據(jù)庫實(shí)例,但是并不打開數(shù)據(jù)庫。
SQL> startup mount;
ORACLE instance started.
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145488364 bytes
Database Buffers 25165824 bytes
Redo Buffers 524288 bytes
Database mounted.
(3)利用alter命令將數(shù)據(jù)庫切換到歸檔模式。
SQL> alter database archivelog;
Database altered.
(4)打開數(shù)據(jù)庫,以便對數(shù)據(jù)庫進(jìn)行操作。
SQL> alter database open;
Database altered.
(5)利用archive log list
命令確認(rèn)當(dāng)前數(shù)據(jù)庫處于歸檔模式。
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 538
Next log sequence to archive 540
Current log sequence 540
Archive Mode
表明當(dāng)前的數(shù)據(jù)庫處于歸檔模式。Oracle數(shù)據(jù)庫有聯(lián)機(jī)重做日志,該日志用于記錄用戶的數(shù)據(jù)庫操作,如插入、刪除或更新數(shù)據(jù)。一般情況下,每個(gè)Oracle數(shù)據(jù)庫至少含有兩個(gè)聯(lián)機(jī)重做日志組。當(dāng)一個(gè)聯(lián)機(jī)重做日志組被寫滿的時(shí)候,就會發(fā)生日志切換。另一個(gè)聯(lián)機(jī)日志組成為當(dāng)前使用的日志,繼續(xù)記錄用戶操作。當(dāng)前聯(lián)機(jī)日志組寫滿后,會切換到第一個(gè)聯(lián)機(jī)日志組,并覆寫其中的數(shù)據(jù)。
如果數(shù)據(jù)庫處于非歸檔模式,聯(lián)機(jī)日志在切換時(shí)就會丟棄已有信息。而在歸檔模式下,當(dāng)發(fā)生日志切換時(shí),被切換的日志會首先進(jìn)行歸檔,并將信息復(fù)制到其他目錄。這樣,不會造成聯(lián)機(jī)日志信息的丟失。
(6)將數(shù)據(jù)庫中的表空間users設(shè)置為備份模式,代碼如下:
SQL> alter tablespace users begin backup;
Tablespace altered.
(7)復(fù)制實(shí)際的表空間的數(shù)據(jù)文件到備份目錄下,代碼如下:
SQL> host copy D:\oracle\product\10.1.0\oradata\test\users01.dbf d:\back;
已復(fù)制 1 個(gè)文件。
關(guān)閉表空間的備份模式,代碼如下:
SQL> alter tablespace users end backup;
Tablespace altered.
(8)以同樣的方式備份數(shù)據(jù)庫中的其他表空間的數(shù)據(jù)文件。
(9)備份控制文件,代碼如下:
SQL> alter database backup controlfile to 'F:\backup\TEST_BACKUP' reuse;
Database altered.
(10)備份控制文件的創(chuàng)建腳本,代碼如下:
SQL> alter database backup controlfile to trace;
Database altered.
此時(shí)會在{ORACLE_HOME}\admin\{INSTANCE_NAME}\udump
目錄下生成新的控制文件的跟蹤文件。在本例中其路徑為D:\oracle\product\10.1.0\admin\test\udump
。在目錄中獲得最新的跟蹤文件,該文件記錄了數(shù)據(jù)庫控制文件的創(chuàng)建腳本。以下代碼為文件片段:
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\REDO01.LOG' SIZE 10M,
GROUP 2 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\REDO02.LOG' SIZE 10M,
GROUP 3 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\REDO03.LOG' SIZE 10M
-- STANDBY LOGFI
復(fù)制該文件,并將該文件復(fù)制到備份目錄下。至此,熱備份的過程結(jié)束。
在備份成功之后,一旦出現(xiàn)數(shù)據(jù)庫故障,即可以利用備份文件進(jìn)行恢復(fù)工作。例如,如果數(shù)據(jù)文件D:\oracle\product\10.1.0\oradata\test\users01.dbf
損壞,那么在啟動數(shù)據(jù)庫時(shí)會拋出錯(cuò)誤。
SQL> startup mount;
ORACLE instance started.
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 145488364 bytes
Database Buffers 25165824 bytes
Redo Buffers 524288 bytes
Database mounted.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 4- see DBWR trace file
ORA-01110: data file 4: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\USERS01. DBF'
由于無法找到數(shù)據(jù)文件USERS01.DBF,數(shù)據(jù)庫啟動失敗。此時(shí),需要將以前備份的數(shù)據(jù)文件復(fù)制到原目錄中。
SQL> host copy f:\backup\users01.dbf D:\ORACLE\PRODUCT\10.1.0\ORADATA\
TEST\USERS01.DBF;
已復(fù)制 1 個(gè)文件。
此時(shí),重新啟動數(shù)據(jù)庫。
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 4 needs media recovery
ORA-01110: data file 4: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\USERS01. DBF'
Oracle在啟動時(shí),總是會檢查控制文件中的標(biāo)識(Checkpoint CNT與Checkpoint SCN)與數(shù)據(jù)文件中的標(biāo)識是否相同。如果不同,則需要重新恢復(fù)數(shù)據(jù)文件,以同步控制文件中的標(biāo)識與數(shù)據(jù)文件中的標(biāo)識。恢復(fù)的命令如下:
SQL> recover datafile 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\USERS01. DBF';
當(dāng)然,也可以使用如下語句代替。
SQL> recover datafile 4;
此時(shí),Oracle可能會要求用戶指定歸檔日志。歸檔日志默認(rèn)存儲在{ORACLE_HOME}\flash_recovery_area\{DATABASE_NAME}\ARCHIVELOG\
下,為recover
命令選擇最近的歸檔日志或使用Oracle建議的歸檔日志,如圖所示。
選擇歸檔日志
在選擇了歸檔日志之后,Oracle將使用該歸檔日志進(jìn)行恢復(fù)?;謴?fù)成功之后,可以成功打開數(shù)據(jù)庫。
SQL> alter database open;
Database altered.
備份控制文件的意義在于,當(dāng)控制文件丟失時(shí),可以將熱備份的控制文件還原。而備份跟蹤文件的意義在于,當(dāng)備份的控制文件無法正常使用時(shí),利用跟蹤文件重新創(chuàng)建控制文件。
除了利用各種命令對數(shù)據(jù)庫進(jìn)行備份之外,還可以利用PL/SQL Developer進(jìn)行備份。利用該工具進(jìn)行備份,簡單易學(xué),而且不易出錯(cuò)。利用PL/SQL Developer進(jìn)行備份的模式包括針對整個(gè)數(shù)據(jù)庫、針對某個(gè)用戶、針對某些特定表等。本節(jié)以備份某個(gè)用戶對象為例,講述如何利用PL/SQL Developer進(jìn)行備份。
【范例7】演示利用PL/SQL Developer備份用戶System所有對象。
(1)打開PL/SQL Developer,并利用System用戶登錄數(shù)據(jù)庫TEST。
(2)在左側(cè)窗口的下拉菜單中選擇【My objects】從而保證所有的操作都是針對當(dāng)前用戶的對象。
(3)選擇菜單欄中的【Tools】菜單下的【Export User Objects】菜單項(xiàng),將彈出導(dǎo)出窗口,如圖所示。
利用PL/SQL Developer備份用戶的所有對象
(4)選擇列表中所有對象,并為【Output File】指定導(dǎo)出文件的路徑。導(dǎo)出的文件實(shí)際上是一個(gè)SQL腳本文件。其中記錄了當(dāng)前用戶的所有對象的創(chuàng)建腳本。一旦數(shù)據(jù)庫出現(xiàn)故障,可以重建數(shù)據(jù)庫,并在其中創(chuàng)建相應(yīng)用戶(System用戶無須創(chuàng)建,為數(shù)據(jù)庫默認(rèn)用戶),然后利用該用戶登錄數(shù)據(jù)庫,并執(zhí)行該SQL腳本,即可實(shí)現(xiàn)數(shù)據(jù)庫對象的重新創(chuàng)建。
(5)除了備份數(shù)據(jù)庫對象之外,還需要備份數(shù)據(jù)表中的數(shù)據(jù)。備份表中數(shù)據(jù),需要使用【Tools】菜單下的【Export Tables】功能。
到此,相信大家對“Oracle數(shù)據(jù)庫怎么備份與恢復(fù)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。