2015-10-15 76 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。将网络留在一边。 –