Oracle數據庫的備份與恢復案例詳解

在Oracle數據庫的使用過程中,備份與恢復是經常遇到的操作。Oracle中的備份分為兩大類:邏輯備份物理備份。其中物理備份又分為兩類:冷備份熱備份。本節將簡要講述如何利用各種備份手段進行Oracle數據庫的備份與恢復。

1 邏輯備份/恢復(導出/導入)

邏輯備份是指利用exp命令進行備份。利用該命令進行備份,簡單易行,也不影響正常的數據庫操作。因此,經常被作為日常備份的手段。exp命令可以添加多個參數選項,以實現不同的導出策略。可以通過exp –?命令進行查看。其中,常用參數包括:ownertableinctype

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命令僅僅導出testoracle兩個用戶所擁有的對象。如果某個用戶不存在,例如,本例中用戶oracle不存在,那麼將給出相應警告,但不會影響對於用戶test的對象的導出。

3.tables參數

當使用exp命令時,同樣可以指定tables參數。該參數用於指定導出哪些數據表。范例3演示瞭該參數的使用。

【范例3】演示tables參數的使用。

exp system/abc123 tables=(people, employees) file=d:/b.dmp

【代碼說明】tables=(people, employees)指定瞭要導出的數據表列表,在exp命令執行時,將隻導出用戶systempeopleemployees表。如果要導出的表不存在,那麼將給出警告信息。但不會影響其他表的導出工作。

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)

該命令將隻導入名為peopleemployees的表。

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數據庫的備份與恢復案例詳解,希望對大傢有所幫助。在此也非常感謝大傢對WalkonNet網站的支持!

推薦閱讀: