基於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的數據。

發佈了38 篇原創文章 · 獲贊 7 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章