在oracle數據庫的使用過程中,備份與恢復是經常遇到的操作。oracle中的備份分為兩大類:邏輯備份
和物理備份
。其中物理備份又分為兩類:冷備份
和熱備份
。本節將簡要講述如何利用各種備份手段進行oracle數據庫的備份與恢復。
1 邏輯備份/恢復(導出/導入)
邏輯備份是指利用exp
命令進行備份。利用該命令進行備份,簡單易行,也不影響正常的數據庫操作。因此,經常被作為日常備份的手段。exp
命令可以添加多個參數選項,以實現不同的導出策略。可以通過exp –?
命令進行查看。其中,常用參數包括:owner
、table
和inctype
。
1.必備參數
對于一個導出命令,可以只使用必備參數,如范例1所示。
【范例1】演示導出命令的使用。
c:\documents and settings\administrator>exp system/abc123 file=d:/b.dmp
【代碼說明】system/abc123
為登錄數據庫時所使用的用戶名和密碼;file=d:/b.dmp
指定數據導出所存放的文件完整路徑。這里需要注意的是,該命令并未指定登錄到哪個數據庫實例,因此,將使用系統環境變量oracle_sid
所指定的數據庫實例。
注意:另外一種特殊情況為,在環境變量列表中找不到oracle_sid
,那么,可以在注冊表中搜索oracle_sid
項。oracle也會參考注冊表中該項的值來設置環境。
2.owner參數
owner參數,可以指定一個用戶名列表。導出時,將只導出用戶名列表中用戶所擁有的對象,如范例2所示。
【范例2】演示owner參數的使用。
c:\documents and settings\administrator>exp system/abc123 owner=(test, oracle) file=d:/b.dmp
【代碼說明】owner=(test, oracle)
指定exp
命令僅僅導出test
和oracle
兩個用戶所擁有的對象。如果某個用戶不存在,例如,本例中用戶oracle
不存在,那么將給出相應警告,但不會影響對于用戶test
的對象的導出。
3.tables參數
當使用exp命令時,同樣可以指定tables參數。該參數用于指定導出哪些數據表。范例3演示了該參數的使用。
【范例3】演示tables參數的使用。
exp system/abc123 tables=(people, employees) file=d:/b.dmp
【代碼說明】tables=(people, employees)
指定了要導出的數據表列表,在exp
命令執行時,將只導出用戶system
的people
和employees
表。如果要導出的表不存在,那么將給出警告信息。但不會影響其他表的導出工作。
4.關于inctype參數
在oracle 9i之前的版本中,可以利用inctype參數指定導出的增量類型。但是,在oracle 9i及以后的版本中,該參數不再使用。范例4演示了在oracle 10g中使用該參數的錯誤信息。
【范例4】oracle 10g中參數inctype已經廢除。
c:\documents and settings\administrator>exp system/abc123 inctype=complete file=d:/b.dmp
【代碼說明】在exp
命令中使用inctype
參數,oracle將拋出錯誤錯誤信息,
對于邏輯備份,相應的恢復命令為imp
。如果數據庫遭到破壞,可以利用如下命令進行恢復:
c:\documents and settings\administrator>imp system/abc123 file=d:/b.dmp
imp
命令同樣可以指定參數。例如,使用owner
參數只導入特定用戶的對象;使用tables
參數只導入特定表,代碼如下:
c:\documents and settings\administrator>imp system/abc123 file=d:/b.dmp tables=(people, employees)
該命令將只導入名為people
與employees
的表。
2 物理備份/恢復
物理備份,是指直接備份數據庫的文件。物理備份又分為兩種:冷備份和熱備份。
1.冷備份/恢復
冷備份是指在數據庫關閉的狀態下,備份所有的數據庫文件。這些文件包括:所有數據文件、所有控制文件、所有聯機redo log文件和init.ora文件(可選)。
【范例5】演示數據庫冷備份。
(1)首先以管理員身份登錄數據庫,并將數據庫關閉
c:\documents and settings\administrator>sqlplus / as sysdba
sql> shutdown normal;
database closed.
database dismounted.
oracle instance shut down.
(2)在關閉數據庫之后,可以對其物理文件進行備份。這些物理文件默認處于{oracle_home}\product\10.1.0\oradata\test
,其中test
為數據庫名。因此,首先返回到windows命令行下使用復制命令,或者在sql命令行中添加host
關鍵字直接使用主機命令:
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
此時,已經實現了整個數據庫的冷備份。而冷備份的恢復則十分方便,只要數據庫處于關閉狀態,將備份的文件復制到原來的位置即可。
2.熱備份/恢復
數據庫的熱備份是指對處于啟動狀態下的數據庫進行備份。熱備份一個數據庫,首先要保證數據庫運行于歸檔模式,然后備份表空間的數據文件,最后備份控制文件。
【范例6】演示數據庫熱備份。
(1)在進行日志模式切換之前,必須將運行的數據庫正常關閉。因此,首先應該以管理員身份登錄數據庫,關閉數據庫。
sql> shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
(2)重新啟動數據庫實例,但是并不打開數據庫。
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命令將數據庫切換到歸檔模式。
sql> alter database archivelog;
database altered.
(4)打開數據庫,以便對數據庫進行操作。
sql> alter database open;
database altered.
(5)利用archive log list
命令確認當前數據庫處于歸檔模式。
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
表明當前的數據庫處于歸檔模式。oracle數據庫有聯機重做日志,該日志用于記錄用戶的數據庫操作,如插入、刪除或更新數據。一般情況下,每個oracle數據庫至少含有兩個聯機重做日志組。當一個聯機重做日志組被寫滿的時候,就會發生日志切換。另一個聯機日志組成為當前使用的日志,繼續記錄用戶操作。當前聯機日志組寫滿后,會切換到第一個聯機日志組,并覆寫其中的數據。
如果數據庫處于非歸檔模式,聯機日志在切換時就會丟棄已有信息。而在歸檔模式下,當發生日志切換時,被切換的日志會首先進行歸檔,并將信息復制到其他目錄。這樣,不會造成聯機日志信息的丟失。
(6)將數據庫中的表空間users設置為備份模式,代碼如下:
sql> alter tablespace users begin backup;
tablespace altered.
(7)復制實際的表空間的數據文件到備份目錄下,代碼如下:
sql> host copy d:\oracle\product\10.1.0\oradata\test\users01.dbf d:\back;
已復制 1 個文件。
關閉表空間的備份模式,代碼如下:
sql> alter tablespace users end backup;
tablespace altered.
(8)以同樣的方式備份數據庫中的其他表空間的數據文件。
(9)備份控制文件,代碼如下:
sql> alter database backup controlfile to 'f:\backup\test_backup' reuse;
database altered.
(10)備份控制文件的創建腳本,代碼如下:
sql> alter database backup controlfile to trace;
database altered.
此時會在{oracle_home}\admin\{instance_name}\udump
目錄下生成新的控制文件的跟蹤文件。在本例中其路徑為d:\oracle\product\10.1.0\admin\test\udump
。在目錄中獲得最新的跟蹤文件,該文件記錄了數據庫控制文件的創建腳本。以下代碼為文件片段:
-- 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
復制該文件,并將該文件復制到備份目錄下。至此,熱備份的過程結束。
在備份成功之后,一旦出現數據庫故障,即可以利用備份文件進行恢復工作。例如,如果數據文件d:\oracle\product\10.1.0\oradata\test\users01.dbf
損壞,那么在啟動數據庫時會拋出錯誤。
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'
由于無法找到數據文件users01.dbf,數據庫啟動失敗。此時,需要將以前備份的數據文件復制到原目錄中。
sql> host copy f:\backup\users01.dbf d:\oracle\product\10.1.0\oradata\
test\users01.dbf;
已復制 1 個文件。
此時,重新啟動數據庫。
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在啟動時,總是會檢查控制文件中的標識(checkpoint cnt與checkpoint scn)與數據文件中的標識是否相同。如果不同,則需要重新恢復數據文件,以同步控制文件中的標識與數據文件中的標識。恢復的命令如下:
sql> recover datafile 'd:\oracle\product\10.1.0\oradata\test\users01. dbf';
當然,也可以使用如下語句代替。
sql> recover datafile 4;
此時,oracle可能會要求用戶指定歸檔日志。歸檔日志默認存儲在{oracle_home}\flash_recovery_area\{database_name}\archivelog\
下,為recover
命令選擇最近的歸檔日志或使用oracle建議的歸檔日志,如圖所示。
選擇歸檔日志
在選擇了歸檔日志之后,oracle將使用該歸檔日志進行恢復。恢復成功之后,可以成功打開數據庫。
sql> alter database open;
database altered.
備份控制文件的意義在于,當控制文件丟失時,可以將熱備份的控制文件還原。而備份跟蹤文件的意義在于,當備份的控制文件無法正常使用時,利用跟蹤文件重新創建控制文件。
3 利用pl/sql developer備份數據庫
除了利用各種命令對數據庫進行備份之外,還可以利用pl/sql developer進行備份。利用該工具進行備份,簡單易學,而且不易出錯。利用pl/sql developer進行備份的模式包括針對整個數據庫、針對某個用戶、針對某些特定表等。本節以備份某個用戶對象為例,講述如何利用pl/sql developer進行備份。
【范例7】演示利用pl/sql developer備份用戶system所有對象。
- (1)打開pl/sql developer,并利用system用戶登錄數據庫test。
- (2)在左側窗口的下拉菜單中選擇【my objects】從而保證所有的操作都是針對當前用戶的對象。
- (3)選擇菜單欄中的【tools】菜單下的【export user objects】菜單項,將彈出導出窗口,如圖所示。
利用pl/sql developer備份用戶的所有對象
- (4)選擇列表中所有對象,并為【output file】指定導出文件的路徑。導出的文件實際上是一個sql腳本文件。其中記錄了當前用戶的所有對象的創建腳本。一旦數據庫出現故障,可以重建數據庫,并在其中創建相應用戶(system用戶無須創建,為數據庫默認用戶),然后利用該用戶登錄數據庫,并執行該sql腳本,即可實現數據庫對象的重新創建。
- (5)除了備份數據庫對象之外,還需要備份數據表中的數據。備份表中數據,需要使用【tools】菜單下的【export tables】功能。
以上所述是小編給大家介紹的oracle數據庫的備份與恢復案例詳解,希望對大家有所幫助。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://blog.csdn.net/weixin_41918841/article/details/88413250