問(wèn)題:
1、 使用 oracle dump方式導(dǎo)出的數(shù)據(jù)在導(dǎo)入的時(shí)候不能隨意選擇一張表的數(shù)據(jù)進(jìn)行導(dǎo)入;
一般業(yè)務(wù)的表的數(shù)量都有 1000左右,在出現(xiàn)由于某張表數(shù)據(jù)異常導(dǎo)致的故障時(shí),用 dump文件進(jìn)行恢復(fù)基本不可行或者很費(fèi)事;
2、 表存在外鍵約束和觸發(fā)器,使用 oracle dump import方式導(dǎo)入表的時(shí)候不能非常簡(jiǎn)單
的禁止觸發(fā)器和外鍵,導(dǎo)致大量錯(cuò)誤產(chǎn)生,導(dǎo)入的表的數(shù)據(jù)不全,部分表數(shù)據(jù)沒(méi)有導(dǎo)入;
3、 當(dāng)修改了某些表的數(shù)據(jù)后需要將這些表的數(shù)據(jù)恢復(fù)到測(cè)試環(huán)境搭建時(shí)的數(shù)據(jù), import
不能將這些表的數(shù)據(jù)清空后重新導(dǎo)入。
4、 當(dāng)修改了某些表的字段后需要將這些表的數(shù)據(jù)恢復(fù)到測(cè)試環(huán)境搭建時(shí)的數(shù)據(jù), import
不能將這些表重建后重新導(dǎo)入。
解決:
PL/SQL Developer導(dǎo)入導(dǎo)出工具
PL/SQL Developer位于 PLSQL DEV工具的 “Tools”菜單下的 “Export tables?”和 “Import
tables?”下,可以進(jìn)行數(shù)據(jù)的導(dǎo)出和導(dǎo)入。
導(dǎo)出功能介紹
Where clause:
使導(dǎo)出操作支持where條件,比如你只需要導(dǎo)出每張表的10000條記錄,可以在輸入框里輸入
“rownum < 10001”。
Compress file:
選中后支持導(dǎo)出文件的壓縮,節(jié)省存儲(chǔ)空間,但是壓縮會(huì)占用多余的時(shí)間。
Include storage:
導(dǎo)出的文件中包含建表信息,如果需要在導(dǎo)入的時(shí)候能支持建表操作,需要選中該項(xiàng)。
導(dǎo)入功能介紹
Drop tables:
支持在導(dǎo)入數(shù)據(jù)前先刪除表,選擇該項(xiàng)后,默認(rèn)選擇 “Create tables”選項(xiàng),并且 “Truncate
tables”和 “Delete table”操作變成灰色不可用狀態(tài)。
Create tables:
支持在導(dǎo)入數(shù)據(jù)前先創(chuàng)建表,比如我們已將建好了用戶,這個(gè)時(shí)候需要導(dǎo)入表而之前又沒(méi)有執(zhí)
行建表腳本的時(shí)候,可以選中此項(xiàng)。
Truncate tables:
支持在導(dǎo)入數(shù)據(jù)前先清空表數(shù)據(jù),想恢復(fù)表數(shù)據(jù)到建測(cè)試環(huán)境的時(shí)候可以使用這個(gè)選項(xiàng),該選
項(xiàng)和 “Delete tables”互斥。
Delete tables:
支持在導(dǎo)入數(shù)據(jù)前刪除表數(shù)據(jù),這個(gè)選項(xiàng)目前還沒(méi)有發(fā)現(xiàn)比較特殊的使用意義,該選項(xiàng)和
“Truncate tables”互斥。該選項(xiàng)的導(dǎo)入速度大大慢于 “Truncate tables”,一般使用 “Truncate tables”。
如何解決導(dǎo)出 clob 和 blob 類型數(shù)據(jù)報(bào)錯(cuò)的問(wèn)題
當(dāng)表字段中含有 clob和 blob類型數(shù)據(jù)時(shí),使用 PL/SQL Developer導(dǎo)出會(huì)報(bào) stream read error
的錯(cuò)誤,導(dǎo)出操作終止,說(shuō)明 PL/SQL Developer方式導(dǎo)出不支持這種類型, oracle export方式可以支持這種類型。
由于需要導(dǎo)出的表很多, PL/SQL在導(dǎo)出前都要對(duì)需要導(dǎo)出的表進(jìn)行分析,通常都會(huì)花費(fèi)十幾分
鐘的時(shí)間,然而由于某張表存在 clob和 blob類型數(shù)據(jù)時(shí)就會(huì)異常終止,那之前的操作時(shí)間就會(huì)浪費(fèi),為了導(dǎo)出所有表需要將導(dǎo)出的表進(jìn)行標(biāo)記,只導(dǎo)出沒(méi)有 clob和 blob類型數(shù)據(jù)的表。我們通常的做法是在導(dǎo)出表的時(shí)候用 ctrl或者 shift按鍵進(jìn)行手工選擇,通過(guò)導(dǎo)出的日志記錄不能導(dǎo)出的表,然后手工將這些表反選出待導(dǎo)出的表。但是這樣操作費(fèi)時(shí)費(fèi)力,需要通過(guò)不停反復(fù)的操作,才能知道哪些表不能導(dǎo)出。
如何使用 oracle 系統(tǒng)視圖 all_tab_columns 和 PL/SQL 在導(dǎo)出表的時(shí)候提供的
Object selection 功能快速導(dǎo)出不包含 clob 和 blob 的表數(shù)據(jù)。
1、 使用下面的 sql語(yǔ)句拼出 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、 按照上面的語(yǔ)句的執(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ù),進(jìn)行導(dǎo)出操作。 用 oracle export方式導(dǎo)出包含 clob和 blob的數(shù)據(jù)。
本文為張軍原創(chuàng)文章,轉(zhuǎn)載無(wú)需和我聯(lián)系,但請(qǐng)注明來(lái)自張軍的軍軍小站,個(gè)人博客http://www.eyofj.com
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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