小蛙上星期遇到一個棘手的問題,也才知道原來 Oracle 沒有了 GUI 介面之後是那麼樣的難操作 … 這篇文章紀錄一下關於如何把資料透過 Oracle start file (@ file) 的方式匯入沒有 GUI 介面的 Oracle。

聽起來好像不是什麼很大的問題,對大部分的資料庫老手來說,但對小蛙真的是個大問題,一直以來都是透過 GUI 操作 Oracle,真正遇到文字介面的時候還慌了一大下,問題是這樣的,某個 Tomcat + Oracle 的環境下,Tomcat 跟 Oracle 各為兩台不同機器,Tomcat 有對外 IP,而 Oracle 只能透過 Tomcat SSH (虛擬IP) 進去操作,由於環境內部幾乎所有 port 都被擋掉,連請同事打 tunnel 都沒辦法的情況下,只好使出將要匯入的資料先整理成 sql 檔案再匯入。

原本使用 PL/SQL 的 Export data 匯出 SQL Inserts,卻出現

Table xxx contains one or more CLOB columns.
Cannot export in SQL format, user PL/SQL Developer format instead.

如果使用 Oracle Export 會沒辦法達成小蛙要的需求(兩邊資料庫是不同的,加上還要額外另外匯入 Excel 的資料),只好乖乖寫程式把要匯入的資料整理成 SQL Inserts format。怎麼把資料或 Excel 匯出成 SQL format 就不贅述了,有幾點要注意:
1. 原本程式裡的 PreparedStatement 要全部寫成 Statement
2. 從 Excel 撈出的資料要檢查其正確性(單雙引號等特殊字元)。
3. JXL 對於 Date Format 的 Cell 撈出來後會有問題(這個在另一篇詳述)。

資料全部匯出之後,在 Oracle 機器下進入 sqlplus,首先小蛙第一次忘了把結果紀錄下來(spool filename),到最後根本不知道哪些有問題哪些沒問題,只好乖乖的把資料刪掉重匯(好死不死竟然輸入了commit;),這該死的資料庫,一個主表帶著一堆子表,並擁有 FK 關係,更令人噴飯的是通通沒有設定 on delete cascade … 只好,先一個一個子表清光光後,再清主表(這邊其實可以把既有的 FK 刪除,再新增有 on delete cascade 屬性的 FK,而且很怪的是 PL/SQL 可以使用 delete from table cascade 的語法,而在 Oracle sqlplus 中小蛙輸入卻發生錯誤),好,清完之後第二次謹慎點!

SQL> spool import_result.log
SQL> @ import_file_name.sql

新增一筆資料
新增一筆資料
...
...
新增一筆資料

SQL> commit;
SQL> spool off

終於,大功告成。如果有更好的做法,還請各位高手不吝留言給小蛙,感恩萬分!

參考資料:

  1. Oracle Database – SQLPLUS常用指令 @ 資訊理想化的延伸
    http://hsinichi.pixnet.net/blog/post/5321280

 

相關文章

Solr 教學 (4) – 使用 DataImport 匯入資料庫資料

好一陣子沒有用 Solr,接續前幾篇
2014-01-08 12:00:17
hans

18

將專案匯出 / 匯入 WAR 檔

在 
2013-10-18 18:00:38
hans

18

JSP 連結 MySQL

Java 連結 MySQL 的方法
2013-06-03 23:18:16
hans

18

Java 連結 MySQL

在寫程式需要連結到資料庫的時候,程式中必須要先有 Connector 及 Driver,MySQL 叫做 Connector/J,Oracle 則叫做 OJDBC。這篇文章是從舊部落格轉發過來,純粹當做文件記錄。
2013-06-03 23:17:32
hans

18

官方 Client – Oracle SQL Developer 安裝教學

之前大多使用 PL/SQL Dev 這套軟體,有些單位並沒有這套付費軟體,而且 Oracle 官方出的 Oracle SQL Developer 就已經很好用了,該有的功能都有,重點是免費的!這篇文章介紹怎麼安裝跟設定 Oracle SQL
2013-03-13 15:04:03
hans

18

MySQL 排程(Event Scheduler)

一段陣子沒清vps上的東西,同步到Dr
2012-09-29 14:12:19
hans

18

Java 連結遠端 MySQL

昨天小蛙在我的股票精
2012-02-06 22:28:25
hans

18

SQLite 圖形化操作軟體 – SQLite Expert Personal (2)

小蛙在上一篇文章中介紹 SQLite Expert Personal 簡單的使用方式,這篇文章小蛙要說明怎麼設定
2011-12-19 22:12:54
hans

18

SQLite 圖形化操作軟體 – SQLite Expert Personal (1)

小蛙今天要介紹一套圖形化的SQLite管理軟體,目前像Android, iOS … 等手持式裝置內部都支援使用SQLite,不外乎是因為它方便、小、速度快,SQLite不
2011-12-17 00:46:18
hans

18




 回覆

你可以使用以下語法 HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

(required)

(required)

   
© 2012 蛙齋 Suffusion theme by Sayontan Sinha