【发布时间】:2014-04-05 21:49:28
【问题描述】:
我想获取所有表的所有表定义。 而且我想快速完成(这是我经常运行的脚本的一部分)
我使用的是 oracle 11g,我有 700 个表。在一个普通的 jdbc 代码上,它需要 4 分钟并且确实:
s = con.statement("select DBMS_METADATA.GET_DDL(object_type,object_name) from user_objects where object_type = 'TABLE');
s.execute();
rs = s.getResultSet();
while(rs.next()){
rs.getString(1);
}
所以我想优化这段代码并达到大约 20 秒。
通过创建 14 个线程,我已经达到了 40-50 秒,每个线程打开与数据库的连接并读取部分信息,使用 rownum 上的 mod。
但这还不够。
我正在考虑这些方向:
http://docs.oracle.com/cd/B10501_01/java.920/a96654/connpoca.htm#1063660 - 连接缓存。是否可以通过将我的 14 个连接替换为 connectionCaching 来帮助加快速度?
是否可以将此函数访问的表保存在 KEEP 缓冲区缓存区中?
要不要在这里索引一些信息?
我们将不胜感激任何其他建议。
谢谢
【问题讨论】:
-
这听起来像是只有在不使用版本控制时才会问的问题。如果是这样,真正的答案是:使用版本控制。