天天看點

Oracle基礎 資料庫備份和恢複

一、為什麼需要資料備份

  造成資料丢失的主要原因:

  1、媒體故障。

  2、使用者的錯誤操作。

  3、伺服器的徹底崩潰。

  4、計算機病毒。

  5、不可預料的因素。

  Oracle中故障類型分為以下4種。

  1、語句故障:

  執行SQL語句過程發生的邏輯故障可導緻語句故障。如果使用者編寫的SQL語句無效,就會發生語句故障。Oracle可自我修複語句故障,撤銷語句産生的而印象,并将控制權交給應用程式。

  

  2、使用者程序故障

  當使用者程式出錯而無法通路Oracle資料庫時,就會發生使用者程序故障。使用者程序故障隻會導緻目前使用者無法操作資料庫,但不會印象其他使用者程序,當使用者程序出現故障時,程序監控程式(PMON)會自動執行程序恢複。

  3、執行個體故障

  當Oracle 資料庫執行個體由于硬體或軟體問題而無法繼續運作時,就會發生執行個體故障。硬體問題包括意外斷電,而然間問題可能是伺服器作業系統崩潰。如果發現執行個體故障,Oracle會自動完成執行個體修複。執行個體修複将資料庫恢複到與故障之前的事務一緻狀态,Oracle會自動復原未送出的資料。

  4、媒體故障

  媒體故障是當一個資料庫檔案或者磁盤不能讀或者不能寫時出現的故障。

二、備份

  備份就是把建立一個資料庫副本到磁盤。從不同角度分類如下:

  1、從實體角度與邏輯角度分類:

  (1)實體備份:對資料庫作業系統的實體檔案(如資料檔案、控制檔案和日志檔案等)的備份。實體備份又可分為脫機備份(冷備份)和聯機備份(熱備份),前者是在關閉資料庫的時候進行的,後者對運作在歸檔日志方式的資料庫進行備份。

  (2)邏輯備份:對資料庫邏輯元件(如表和存儲過程等資料對象)的備份。

  2、從資料庫的備份政策角度分類:

  (1)完全備份:每次對資料進行完整備份。

  (2)增量備份:值有那些在上次完全備份或者增量備份後備修改的檔案才會被備份。優點是備份資料量小,需要的時間短,缺點是恢複的時候需要依賴之前的備份記錄,出問題的風險較大。例如:如果在星期一進行完全備份,在星期二至星期五進行增量備份。如果星期五資料被破壞了,則資料恢複需要星期一的完全備份和從星期二至星期五的所有增量備份。

  (3)差異備份:備份那些從上次完全備份之後被修改過得檔案。是以從差異備份中恢複資料的時間長短,是以隻需要兩份資料(最後一次完全備份和最後一次差異備份),缺點是每次備份的時間較長。例如:如果在星期一進行完全備份,在星期二到星期五進行了差異備份,如果星期五資料被破壞了,則資料恢複隻需要星期的完全備份和星期四的差量備份。

  增量備份和差異備份的差別:增量備份需要保留所有增量備份的資料;差異備份隻需要保留最後一次差異備份的資料。

三、恢複

  恢複就是發生故障後,利用已備份的資料檔案或控制檔案,重建立立一個完整的資料庫。恢複分為兩種類型:

  1、執行個體恢複:當Oracle執行個體出現失敗後,Oracle自動進行的恢複。

  2、媒體恢複:當存放資料庫的媒體出現故障時所做的恢複。媒體恢複又分為完全恢複和不完全恢複。

    完全恢複:将資料庫恢複到資料庫失敗時的狀态。

    不完全恢複:将資料庫恢複到資料庫失敗前的某一時刻的狀态。

四、導出

  (一)使用資料泵技術:

  1、expdp的導出方式:

    1)資料庫方式:整個資料被導入到作業系統檔案中。

    2)使用者模式:導出一個或者多個使用者下的所有資料和中繼資料。

    3)表方式:到處一組表的所有資料和中繼資料。

    4)表空間方式:用于提取一個表空間中所有的資料和中繼資料,另外還提取依賴于指定表空間清單中所有對象的任何依賴對象。 

    轉儲檔案:由資料泵到處程式所建立的檔案成為轉儲檔案,在單個資料泵導出作業期間所有的轉儲檔案稱為轉儲檔案集。

  2、基于指令行導出

   文法:

  c:\expdb system/password directory=pbdir dumpfile=pb.dmp full=y tables=table_list tablespaces=tablesapce_list schemas=schema_list    remap_schema=user1:user2 nologfile=y sqlfile=pb.sql

  system/passwrod:使用者名和密碼

  directory:資料庫目錄對象

  dumpfile:指定轉儲檔案

  full=y:表示實施的全部導入

  tables=table_list:表示導入表的清單

      schemas=schema_list:表示導入的使用者模式

      tablespaces=tablesapce_list:表示導入的表空間

      remap_schema=user1:user2:表示從user1導入到user2中

  nologfile=y:表示不進行日志操作

  sqlfile:表示将中繼資料(DDL語句)寫入到指定檔案中。

  注意:如果需要導出完全資料庫,必須具備exp_full_database權限。

  1)資料庫方式:    

  expdp scott/scott@accp directory=dump_dir dumpfile=full.dmp full=y

    

  2)使用者模式方式:    

  expdp scott/scott@accp directory=dump_dir dumpfile=scottschema.dmp schemas=scott

      

  3)表導出方式:    

  expdp scott/scott@accp directory=dump_dir dumpfile=tables.dmp tables=emp,dept,bonus,salgrade content=data_only

  說明:

  content=data_only:data_only表示隻導出表中的資料,不導出中繼資料;metadata_only:則表示隻導出中繼資料而不導出表中的資料。如果不寫,則兩者全部導出。  

  4)表空間導出方式:    

  expdp scott/scott@accp directory=dump_dir dumpfile=tablespace.dmp tablespaces=users

  3、DBMS_DATAPUMP進行資料泵導出

  使用這種方式比直接使用指令方式要麻煩一些,但是卻從資料庫作業排程中安排資料泵導出作業的運作日程提供了友善,為資料泵導出提供了更好的功能度和控制度。

五、導入

  (一)資料泵導入模式

  1、導出方式

  1)全部導入模式:一個導出檔案集的全部内容被裝入,該導出檔案集不一定是全資料庫方式進行導出的。

  2)使用者模式:指定檔案集中的一個使用者清單的全部内容被導入。

  3、表模式:指定表和相依對象從導出檔案中得到導入。

  4、表空間模式:指定檔案集中屬于表空間清單内的所有内容都被導入。

  2、使用指令行導入

  文法:

  c:\impdp system/password directory=pbdir dumpfile=pb.dmp full=y tables=table_list tablespaces=tablesapce_list schemas=schema_list  remap_schema=user1:user2 nologfile=y sqlfile=pb.sql

  例:

  1)導入整個資料庫:  

  impdp scott/scott@accp directory=dump_dir dumpfile=FULL.DMP full=y

  2)導入表空間:  

  impdp scott/scott@accp directory=dump_dir dumpfile=tablespace.DMP tablespaces=mytest

  3)導入scott使用者下的所有表:  

  impdp scott/scott@accp directory=dump_dir dumpfile=TABLES.DMP tables=emp,dept,bonus,salgrade

  4)将導出的scott使用者下的dept和emp表導入到mytest使用者下

  impdp scott/scott@accp directory=dump_dir dumpfile=SCHEMA.DMP tables=dept,emp remap_schema=scott:mytest

  3、DBMS_DATAPUMP進行資料泵導入