1. 程式人生 > >oracle 11g中的備份-------邏輯備份

oracle 11g中的備份-------邏輯備份

備份 : 是資料庫中資料的副本,它可以保護資料在出現意外損失時最大限度的恢復。(現有備份才能恢復)

Oracle資料庫的備份包括以下兩種型別:

  • ①物理備份是對資料庫的作業系統物理檔案(如資料檔案、控制檔案和線上日誌檔案等)的備份

    • 在oracle 11g的體系結構中,我們知道物理檔案分為關鍵物理檔案和非關鍵物理檔案,上說所說的物理檔案為關鍵物理檔案,非關鍵物理檔案有引數檔案、密碼檔案、日誌檔案等。
  • ②邏輯備份是對資料庫邏輯元件(如表、檢視和儲存過程,觸發器等資料庫物件)的備份

備份為了防止系統出現異常和故障,在oracle中故障可以分為:

1、故障及其型別(4種):

  • ①語句故障
    :在執行 SQL 語句無效可導致語句故障。
  例:select * from aa; --假設此時aa表並不存在,所以引起語句故障

        -- 不需要處理,oracle自動會進行處理與分析。
  • ②使用者程序故障:當用戶程式出錯而無法訪問資料庫時發生使用者程序故障。導致使用者程序故障的原因是異常斷開連線或異常終止程序
     例:使用者與伺服器相連線,由於使用者宕機,使用者程序消失,使用者與伺服器的連線斷開,
那麼同時與之對應的伺服器程序也會終止(由pmon來實現)。
            
            -- oracle會自動幫我們完成
  • ③例項故障:當 Oracle 的資料庫例項由於硬體或軟體問題而無法繼續執行時,就會發生例項故障
     例項包括記憶體和後臺程序,例項故障即就是記憶體崩潰/洩露等 或 後臺程序壞掉等,
通過重啟oracle就可以解決例項故障。

    ---  同樣也不需要我們過多的處理。
  • ④介質故障:在資料庫無法正確讀取或寫入某個資料庫檔案時,會發生介質故障
如:硬碟壞掉了,導致資料檔案不能讀取了/不能用了。
      --需要DBA進行相關處理

2、傳統的匯入匯出:

   (oracle 9i中)傳統的匯出exp匯入imp程式用於實施資料庫的邏輯備份和恢復,傳統的匯出匯入程式是客戶端工具。

  •    匯出程式 將資料庫中的物件定義和資料備份到一個作業系統二進位制檔案中,該二進位制檔案位於客戶端。

  •    匯入程式 讀取二進位制匯出檔案並將物件和資料載入資料庫中

過程解釋: 將資料庫1中的表等匯出為一個dmp檔案拷貝給優盤,通過imp匯入給資料庫2 如圖所示

匯出和匯入實用程式的特點有:

  • 可以按時間儲存表結構和資料
  • 允許匯出指定的表,並重新匯入到新的資料庫中
  • 可以把資料庫遷移到另外一臺異構伺服器上
  • 在兩個不同版本的Oracle資料庫之間傳輸資料
  • 在聯機狀態下進行備份和恢復
  • 可以重新組織表的儲存結構,減少連結及磁碟碎片(降低高水位線HWM)

匯出和匯入資料庫物件的四種模式是:(一次只能使用一種模式)

1,資料庫模式 full:匯出和匯入整個資料庫中的所有物件

2,表空間模式tablespace:匯出和匯入一個或多個指定的表空間中的所有物件

3,使用者模式owner:匯出和匯入一個或多個使用者模式中的所有物件

4,表模式table:匯出和匯入一個或多個指定的表或表分割槽

使用以下三種方法呼叫匯出和匯入實用程式:

1,互動提示符:以互動的方式提示使用者逐個輸入引數的值。 2,命令列引數:在命令列指定執行程式的引數和引數值。 3,引數檔案:允許使用者將執行引數和引數值儲存在引數檔案中,以便重複

匯入匯出相關引數:

①使用exp事務的部分引數與其功能:

在這裡插入圖片描述 上述表格中的引數需要通過命令視窗來使用: 輸入 exp help=y 就可以檢視exp的所有引數,如下圖: 在這裡插入圖片描述 ②使用imp事務的部分引數與其功能: imp help=y

在這裡插入圖片描述

詳細介紹匯出匯入的三種方式:

舉例: 以scott使用者登入資料庫,其下包含表student 和表 address: 工具:命令視窗

①匯出—互動提示符

在這裡插入圖片描述

匯入—互動提示符

imp  同上述過程一樣

②匯出—命令列引數法

表模式匯出:

exp scott/[email protected]
      tables=(student,address)      -- 按表方式匯出指定tables
            file=f:\scott1.dmp           -- 匯出的二進位制引數檔案路徑和檔名
                  log = f:\scott1.log   -- 日誌資訊儲存到的日誌檔案路徑和名稱。

以該使用者身份,匯出其他使用者名稱下的表,會產生警告,許可權不足;
資料庫管理員system可以
  exp scott/[email protected] tables=(user1.t) file=f:\userscott1.dmp
    exp system/[email protected] tables=(user1.t) file=f:\userscott1.dmp
   

在這裡插入圖片描述

說明:此時匯出成功終止,但出現警告,原因是在資料庫的伺服器端和客戶端字符集不同,解決辦法見後文。

使用者模式:

  匯出該使用者下的所有內容,使用者模式:
  exp scott/[email protected] owner=scott file=f:\scott2.dmp log = f:\scott2.log
 
 system的許可權下可以導:(即就是非DBA不能導其他使用者)
  exp system/[email protected] 
     owner=scott
       file=f:\system2.dmp 
          log = f:\system2.log

匯入—命令列引數法

與匯出相反,首先在SQL*PLUS下刪除原有的student和address兩張表。

drop table student purge;
drop table address purge;

在命令提示框下:

  imp scott/[email protected] file=f:\scott1.dmp

在這裡插入圖片描述

匯入自己的表:

  • 匯入檔案中所有內容: 該檔案中含有匯入的表的建立和插入語句。 imp scott/[email protected] file=f:\scott1.dmp
  • 匯入檔案中指定內容:選擇性的匯入 imp scott/[email protected] file=f:\scott1.dmp tables=student

匯入別人的表:

  • 把別人的檔案匯入給自己 可以執行 imp user1/[email protected] file=f:\scott1.dmp fromuser =scott touser =user1

  • 把自己的檔案匯入給別人 不可以執行 imp scott/[email protected] file=f:\scott1.dmp fromuser=scott touser=user1

  • 資料庫管理員可以執行把使用者1的檔案匯入給使用者2 DBA imp system/[email protected] file=f:\scott1.dmp fromuser=scott touser=user1

  • 不可以重複匯入,(通俗說在此建立一個已經存在的表並插入相同的資料是不能成功執行的)除非使用引數ignore=y 忽略建立錯誤 ,並且在沒有唯一性的約束的條件下,student address 中的記錄會出現兩次。 imp user1/[email protected] file=f:\scott1.dmp fromuser=scott touser=user1 ignore=y

③匯出—引數檔案 匯入同

1)首先建立一個引數檔案 例如par.txt 位置在c盤根目錄 在這裡插入圖片描述 2)回到命令提示框,將路徑改為c盤根目錄執行檔案 在這裡插入圖片描述 實際上就是把檔案中所寫的引數放到exp中繼續運行了。

3、可傳輸表空間 如果遷移的資料量很大,可以使用可傳輸表空間:

舉例 : 前提是有兩個資料庫,使用可傳輸表空間,將orcl資料庫中的表空間t1傳遞給另一個數據庫。

orcl system登陸建立表空間:
create tablespace tb1 
     datafile'D:\app\Administrator\oradata\orcl\tb101.dbf'   
         size 10m
   scott使用者在此表空間下寫入內容:
    create table t  tablespace  tb1  
           as select * from all_tables;

1,檢查要傳輸的表空間是否是自包含的。

  • 該表空間中的表,及其其中表上的相關內容(如索引)都屬於該表空間,那麼此表空間就是自包含的,如果表屬於一個表表空間,表上索引屬於另一個表空間,那麼就是非自包含的。
  • 檢查表空間是否自包含 dbms_tts包中的儲存過程可以檢查。

2,將表空間設定成只讀。(system使用者下SQL*PLUS)

alter tablespace tb1 read only;

3,exp進行可傳輸表空間模式的匯出。dos下

exp   'system/[email protected] as sysdba'   -- 即就是sys使用者
          tablespaces=tb1
            transport_tablespace=y  -- y 使用可傳輸表空間的模式來傳輸。
            file=f:\tb111.dmp

4,將匯出檔案和資料檔案複製到目標資料庫上。

  • 注意兩個檔案,即就是剛剛匯出的tb111.dmp和資料檔案tb101.dbf
  • 將這兩文檔案分別放在路徑:e:\tb111.dmp和E:\app\Administrator\oradata\wang\tb101.dbf中

5,目標資料庫上,imp進行可傳輸表空間模式的匯入。

imp   system/[email protected]   as sysdba '  --匯入匯出必須為同一個使用者。
          tablespaces=tb1
            transport_tablespace=y  
              file='e:\tb111.dmp'
              datafiles='E:\app\Administrator\oradata\wang\tb101.dbf'

6,目標資料庫上,把表空間設定成讀寫狀態。

 alter tablespace tb1 read write;

4、資料泵、

     exp/imp的缺點是速度太慢,在大型生產庫中尤其明顯。從10g開始,oracle設計了資料泵,這是一個伺服器端的工具,它為Oracle資料提供高速並行及大資料的遷移。      imp/exp可以在客戶端呼叫,但是expdp/impdp只能在服務端,因為在使用expdp/impdp以前需要在資料庫中建立一個目錄 Directory 。

expdp,impdp相關概念

  •    在expdp進行匯出時,oracle先自動建立了MT表(主表),並把物件的資訊插入到MT表,之後進行匯出動作;MT表只存在於匯出過程中,過程結束就消失;
  • 匯出完成後,MT表也匯出到轉儲檔案中;
  • 匯出任務完成後、或者刪除了匯出任務後,MT表自動刪除;如果匯出任務異常終止,MT表仍然保留。
匯出:
expdp scott/[email protected]
     direcory=MY_DIR 
       dumpfile=expdp_scott1.dmp  
        tables(student,address)
-- directory 指定目錄 dumpfile 指定轉儲檔案  tables表模式

匯入:
impdp scott/[email protected]
     direcory=MY_DIR 
       dumpfile=expdp_scott1.dmp  
    

資料泵也具有四種模式:表tables、使用者schemas、可傳輸表空間tablespace、全庫full。

資料泵的引數介紹

  • expdp的引數: expdp help=y

1,部分的exp中的引數仍然可用,有的不能使用,如index。 2,directory:供轉儲檔案和日誌檔案使用的目錄物件。

create directory MY_DIR as 'c:\dir1 ';
grant read,write on directory  MY_DIR to scott;

3,job_name:指定的任務的名稱。

expdp system/[email protected]
     direcory=MY_DIR 
       dumpfile=expdp_system1.dmp  
        schemas(scott,hr)     --  schemas 使用者
        job_name=expdp1     --相當於給MT表命名,未指定則由oracle自己命名

4,content:指定要匯出的資料, 其中有效關鍵字值為: (ALL), DATA_ONLY 和 METADATA_ONLY,當設定content為ALL 時,將匯出物件定義及其所有資料; DATA_ONLY時,只匯出物件資料;為METADATA_ONLY時,只匯出物件定義 。

content = metadata_only    -- 只匯出表結構

5,reuse_dumpfiles:如果匯出檔案已經存在,是否覆蓋。

該引數預設不覆蓋,若要設定覆蓋在語句中加入下述語句:
reuse_dumpfiles =y 

6,compression:壓縮匯出檔案。 7,estimate:指定估算被匯出表所佔用磁碟空間分方法.預設值是BLOCKS 8, estimate_only:是否只估算匯出佔用的磁碟空間,而不進行真正的匯出,預設是N。 9,exclude:用於指定執行操作時要排除物件型別或相關物件,用法:

EXCLUDE=object_type[:name_clause] [,….] 

# 例如 匯出student表以及其上的約束,但是不匯出索引 
expdp scott/[email protected]
     direcory=MY_DIR 
       dumpfile=expdp_scott2.dmp  
       table=student  exclude=index    -- 或者使用indexes = N

# 匯出scott使用者下除student、address的表:
expdp scott/[email protected]
     direcory=MY_DIR 
       dumpfile=expdp_scott3.dmp  
       exclude=table:"in('STUDENT')"
       exclude=table:"in('ADDRESS')"

10,include:用於指定執行操作時要包含的物件型別或相關物件,用法:

INCLUDE=object_type[:name_clause] [,….]

11,query:匯出符合條件的行。 12,attch:連線到現有的作業,可以用在中斷匯出任務後重新啟動匯出任務。

  • impdp的引數介紹: impdp help=y

1,content:指定要載入的資料, 其中有效關鍵字值為: (ALL), DATA_ONLY 和 METADATA_ONLY,當設定content為ALL 時,將載入物件定義及其所有資料; DATA_ONLY時,只加載物件資料;為METADATA_ONLY時,只加載物件定義 。 2,estimate:估算所佔用磁碟空間分方法.預設值是BLOCKS 3,remap_schema:用於將物件從一個使用者下匯入到另一個使用者下。

remap_schema= scott:hr

4,remap_tablespace:用於將物件從一個表空間下匯入到另一個表空間下。 5,remap_datafile:用於在不同檔案系統的平臺間,切換資料檔案路徑。