問題:
1 、 使用 oracle dump 方式導(dǎo)出的數(shù)據(jù)在導(dǎo)入的時候不能隨意選擇一張表的數(shù)據(jù)進行導(dǎo)入;
一般業(yè)務(wù)的表的數(shù)量都有 1000 左右,在出現(xiàn)由于某張表數(shù)據(jù)異常導(dǎo)致的故障時,用 dump 文件進行恢復(fù)基本不可行或者很費事;
2 、 表存在外鍵約束和觸發(fā)器,使用 oracle dump import 方式導(dǎo)入表的時候不能非常簡單
的禁止觸發(fā)器和外鍵,導(dǎo)致大量錯誤產(chǎn)生,導(dǎo)入的表的數(shù)據(jù)不全,部分表數(shù)據(jù)沒有導(dǎo)入;
3 、 當(dāng)修改了某些表的數(shù)據(jù)后需要將這些表的數(shù)據(jù)恢復(fù)到測試環(huán)境搭建時的數(shù)據(jù), import
不能將這些表的數(shù)據(jù)清空后重新導(dǎo)入。
4 、 當(dāng)修改了某些表的字段后需要將這些表的數(shù)據(jù)恢復(fù)到測試環(huán)境搭建時的數(shù)據(jù), import
不能將這些表重建后重新導(dǎo)入。
解決:
PL/SQL Developer 導(dǎo)入導(dǎo)出工具
PL/SQL Developer 位于 PLSQL DEV 工具的 “Tools” 菜單下的 “Export tables?” 和 “Import
tables?” 下,可以進行數(shù)據(jù)的導(dǎo)出和導(dǎo)入。
導(dǎo)出功能介紹
Where clause:
使導(dǎo)出操作支持where條件,比如你只需要導(dǎo)出每張表的10000條記錄,可以在輸入框里輸入
“rownum < 10001”。
Compress file:
選中后支持導(dǎo)出文件的壓縮,節(jié)省存儲空間,但是壓縮會占用多余的時間。
Include storage:
導(dǎo)出的文件中包含建表信息,如果需要在導(dǎo)入的時候能支持建表操作,需要選中該項。
導(dǎo)入功能介紹
Drop tables :
支持在導(dǎo)入數(shù)據(jù)前先刪除表,選擇該項后,默認(rèn)選擇 “Create tables” 選項,并且 “Truncate
tables” 和 “Delete table” 操作變成灰色不可用狀態(tài)。
Create tables :
支持在導(dǎo)入數(shù)據(jù)前先創(chuàng)建表,比如我們已將建好了用戶,這個時候需要導(dǎo)入表而之前又沒有執(zhí)
行建表腳本的時候,可以選中此項。
Truncate tables :
支持在導(dǎo)入數(shù)據(jù)前先清空表數(shù)據(jù),想恢復(fù)表數(shù)據(jù)到建測試環(huán)境的時候可以使用這個選項,該選
項和 “Delete tables” 互斥。
Delete tables :
支持在導(dǎo)入數(shù)據(jù)前刪除表數(shù)據(jù),這個選項目前還沒有發(fā)現(xiàn)比較特殊的使用意義,該選項和
“Truncate tables” 互斥。該選項的導(dǎo)入速度大大慢于 “Truncate tables” ,一般使用 “Truncate tables” 。
如何解決導(dǎo)出 clob 和 blob 類型數(shù)據(jù)報錯的問題
當(dāng)表字段中含有 clob 和 blob 類型數(shù)據(jù)時,使用 PL/SQL Developer 導(dǎo)出會報 stream read error
的錯誤,導(dǎo)出操作終止,說明 PL/SQL Developer 方式導(dǎo)出不支持這種類型, oracle export 方式可以支持這種類型。
由于需要導(dǎo)出的表很多, PL/SQL 在導(dǎo)出前都要對需要導(dǎo)出的表進行分析,通常都會花費十幾分
鐘的時間,然而由于某張表存在 clob 和 blob 類型數(shù)據(jù)時就會異常終止,那之前的操作時間就會浪費,為了導(dǎo)出所有表需要將導(dǎo)出的表進行標(biāo)記,只導(dǎo)出沒有 clob 和 blob 類型數(shù)據(jù)的表。我們通常的做法是在導(dǎo)出表的時候用 ctrl 或者 shift 按鍵進行手工選擇,通過導(dǎo)出的日志記錄不能導(dǎo)出的表,然后手工將這些表反選出待導(dǎo)出的表。但是這樣操作費時費力,需要通過不停反復(fù)的操作,才能知道哪些表不能導(dǎo)出。
如何使用 oracle 系統(tǒng)視圖 all_tab_columns 和 PL/SQL 在導(dǎo)出表的時候提供的
Object selection 功能快速導(dǎo)出不包含 clob 和 blob 的表數(shù)據(jù)。
1 、 使用下面的 sql 語句拼出 Object selection 的文件內(nèi)容。
-- 不包含 clob 和 blob 的表
select distinct('TABLE "'||a.OWNER ||'"."'||a.TABLE_NAME||'"') from sys.all_tab_columns a
where a.OWNER = '用戶名'
and a.TABLE_NAME not in (select t.TABLE_NAME from sys.all_tab_columns t where t.OWNER =
'用戶名' and t.DATA_TYPE in ('CLOB','BLOB'))
?
2 、 按照上面的語句的執(zhí)行結(jié)果生成 Object selection 的文件(后綴是 .osf ),文件的內(nèi)容
如下:
PL/SQL Developer Object Selection File
1
TABLE "用戶名"."表名1"
TABLE "用戶名"."表名2"
TABLE "用戶名"."表名3"
3 、 在導(dǎo)出表功能的表選擇框里單擊右鍵選擇 “Load Object selection” ,選擇上一步制
作的文件 , 完成表的選擇。
4 、選擇合適的參數(shù),進行導(dǎo)出操作。 用 oracle export 方式導(dǎo)出包含 clob 和 blob 的數(shù)據(jù)。
?
oracle export:.dmp ? export executeble:oracle安裝路徑下client_1\bin文件夾下的exp.exe
sql inserts:.sql
pl/sql developer:.pde
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
