2015-10-15 74 views
1

由於性能和其他原因,我正在尋找一種方法來直接解析數據泵轉儲文件的二進制文件格式。如何直接讀取Oracle數據泵二進制轉儲文件?

數據泵實用程序「impdp」僅適用於數據庫服務器主機,不適用於數據庫客戶端主機。爲了運行它,您必須將整個轉儲文件從DB客戶端發送到數據庫服務器主機,然後使用SSH運行「impdp」。

有時候,如果只想獲取轉儲文件中包含的模式或表的列表,則將大文件發送到遠程主機是無意義的。

我正在尋找一個庫(Java首選)或描述轉儲文件的格式規範,以便在沒有官方「impdp」實用程序的幫助下編寫本地解析代碼。

謝謝。

UPDATE:

我用下面的正則表達式過濾轉儲文件查找表名:

^[\\x32-\\x7e\\s]{4,}.*</OWNER_NAME><NAME>([^<]*)</NAME>.* 

表達[\\x32-\\x7e\\s]意味着可打印的ASCII字符,包括空格。這會過濾出二進制行。

表達式{4,}表示至少4個字符。

因爲我正在處理XML,所以我提取了直接位於「OWNER_NAME」元素後面的「NAME」元素。 也許這種方式不是那麼優雅,但它似乎工作。

請評論,如果這種方式幫助你。

回答

1
  • IMPDP數據格式是專有
  • 您還可以使用該工具小鬼/ EXP,這也進行遠程操作的舊版本。但是,這是沒有那麼快,由於網絡往返
  • 您也可以通過我們自己的工具,在進入平面文件導出數據,然後用SQLLDR(與直接路徑插入)
  • ,你也可以把轉儲文件上的NFS共享,然後讓Oracle通過NFS訪問它

使用Java/JDBC進行大量數據操作不是好主意。

+2

「*使用Java/JDBC進行大量數據操作不是好主意*」 - 這是不正確的。如果你做得對,JDBC甚至可以管理「巨大」的數據。 JDBC批處理插入的速度幾乎與sqlldr直接路徑插入一樣快 –

+0

@a_horse_with_no_name您是對的。但通常很少開發人員知道批量/批量操作或APPEND_VALUES提示。批量插入與SpringBatch不同。 – ibre5041

+0

你錯過了這一點。我正在尋找一種靜態獨立的方式來解析專有的二進制文件。拋開JDBC。將網絡留在一邊。 –