1. 程式人生 > >使用pl/sql備份資料

使用pl/sql備份資料

PL/SQL DeveloperOracle資料庫中用於匯入或匯出資料庫的主要工具,本文主要介紹了利用PL/SQL Developer匯入和匯出資料庫的過程,並對匯入或匯出時的一些注意事項進行了說明,接下來我們就一一介紹。

匯出步驟:

1 tools ->export user object 選擇選項,匯出.sql檔案。

2 tools ->export tables-> Oracle Export 選擇選項匯出.dmp檔案。

匯入步驟:

注:匯入之前最好把以前的表刪除,當然匯入另外資料庫除外。

1 tools->import tables->SQL Inserts 匯入.sql檔案。

2 tools->import talbes->Oracle Import然後再匯入dmp檔案。

一些說明:

Tools->Export User Objects匯出的是建表語句(包括儲存結構)。PS:這種方式只能匯出屬於這個使用者的表,其他使用者的表不能匯出,建議用命令列(exp,imp)匯出。

Tools->Export Tables裡面包含三種匯出方式,三種方式都能匯出表結構以及資料,如下:

  • Oracle Export
  • Sql Insert
  • pl/sql developer

第一種是匯出為.dmp的檔案格式,.dmp檔案是二進位制的,可以跨平臺,還能包含許可權,效率也很不錯,用得最廣 。

第二種是匯出為.sql檔案的,可用文字編輯器檢視,通用性比較好,但效率不如第一種,適合小資料量匯入匯出。尤其注意的是表中不能有大欄位 (blob,clob,long),如果有,會提示不能匯出(提示如下: table contains one or more LONG columns cannot export in sql format,user Pl/sql developer format instead)。

第三種是匯出為.pde格式的,.pde為Pl/sql developer自有的檔案格式,只能用Pl/sql developer自己匯入匯出,不能用編輯器檢視。

PS:只有"Oracle Export"方式匯出再匯入後,表結構和索引結構沒有發生變化,另兩種方式都改變了索引型別。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

第1章  匯入資料的苦惱

最近,一直再為搭建測試資料庫的事情煩惱,主要碰到如下困難: 1、 使用oracle dump方式匯出的資料在匯入的時候不能隨意選擇一張表的資料進行匯入;一般業務的表的數量都有1000左右,在出現由於某張表資料異常導致的故障時,用dump檔案進行恢復基本不可行或者很費事; 2、 表存在外來鍵約束和觸發器,使用oracle dump import方式匯入表的時候不能非常簡單的禁止觸發器和外來鍵,導致大量錯誤產生,匯入的表的資料不全,部分表資料沒有匯入; 3、 當修改了某些表的資料後需要將這些表的資料恢復到測試環境搭建時的資料,import不能將這些表的資料清空後重新匯入。 4、 當修改了某些表的欄位後需要將這些表的資料恢復到測試環境搭建時的資料,import不能將這些表重建後重新匯入。 那麼有沒有一個工具能夠解決上面我們這位工程師的苦惱呢?

第2章  PL/SQL Developer匯入匯出工具

PL/SQL Developer位於PLSQL DEV工具的“Tools”選單下的“Export tables…”和“Import tables…”下,可以進行資料的匯出和匯入。

2.1  匯出功能介紹 

基於PL/SQL的資料庫備份方法 - 廖潤明 - 異次元藍客  

Where clause: 使匯出操作支援where條件,比如你只需要匯出每張表的10000條記錄,可以在輸入框裡輸入“rownum < 10001”。

Compress file: 選中後支援匯出檔案的壓縮,節省儲存空間,但是壓縮會佔用多餘的時間。

Include storage: 匯出的檔案中包含建表資訊,如果需要在匯入的時候能支援建表操作,需要選中該項。

2.2  匯入功能介紹 

Drop tables: 支援在匯入資料前先刪除表,選擇該項後,預設選擇“Create tables”選項,並且“Truncate tables”和“Delete table”操作變成灰色不可用狀態。 Create tables: 支援在匯入資料前先建立表,比如我們已將建好了使用者,這個時候需要匯入表而之前又沒有執行建表指令碼的時候,可以選中此項。 Truncate tables: 支援在匯入資料前先清空表資料,想恢復表資料到建測試環境的時候可以使用這個選項,該選項和“Delete tables”互斥。 Delete tables: 支援在匯入資料前刪除表資料,這個選專案前還沒有發現比較特殊的使用意義,該選項和“Truncate tables”互斥。該選項的匯入速度大大慢於“Truncate tables”,一般使用“Truncate tables”。

2.3  如何解決匯出clob和blob型別資料報錯的問題

當表字段中含有clob和blob型別資料時,使用PL/SQL Developer匯出會報stream read error的錯誤,匯出操作終止,說明PL/SQL Developer方式匯出不支援這種型別,oracle export方式可以支援這種型別。 由於需要匯出的表很多,PL/SQL在匯出前都要對需要匯出的表進行分析,通常都會花費十幾分鐘的時間,然而由於某張表存在clob和blob型別資料時就會異常終止,那之前的操作時間就會浪費,為了匯出所有表需要將匯出的表進行標記,只匯出沒有clob和blob型別資料的表。我們通常的做法是在匯出表的時候用ctrl或者shift按鍵進行手工選擇,通過匯出的日誌記錄不能匯出的表,然後手工將這些表反選出待匯出的表。但是這樣操作費時費力,需要通過不停反覆的操作,才能知道哪些表不能匯出。 下面介紹一下如何使用oracle系統檢視all_tab_columns和PL/SQL在匯出表的時候提供的Object selection功能快速匯出不包含clob和blob的表資料。

1、 使用下面的sql語句拼出Object selection的檔案內容。 --不包含clob和blob的表 select distinct('TABLE "'||a.OWNER ||'"."'||a.TABLE_NAME||'"') from sys.all_tab_columns a where  a.OWNER = 'ICDPUB' and a.TABLE_NAME not in (select t.TABLE_NAME from sys.all_tab_columns t where t.OWNER = 'ICDPUB' and t.DATA_TYPE in ('CLOB','BLOB'))  注意:上面的sql語句裡的ICDPUB是使用者名稱 

2、 按照上面的語句的執行結果生成Object selection的檔案(字尾是.osf),檔案的內容如下:    PL/SQL Developer Object Selection File 1 TABLE "ICDPUB"."ACTIVE_ALARMS" TABLE "ICDPUB"."ALLAPPOINT" TABLE "ICDPUB"."ALLOPTIONVIEW" TABLE "ICDPUB"."ALLOTCONFIG" TABLE "ICDPUB"."ALLPAPERAUTHVIEW" TABLE "ICDPUB"."ALLPAPERVIEW" TABLE "ICDPUB"."ALLQUESTIONVIEW"

3、 在匯出表功能的表選擇框裡單擊右鍵選擇“Load Object selection”,選擇上一步製作的檔案,完成表的選擇。

4、 選擇合適的引數,進行匯出操作。

5、 用oracle export方式匯出包含clob和blob的資料。