假设您已经检查了基本的网络内容,例如接口、防火墙、代理以及数据库服务器的硬件元素。
选项1 :
代替 :
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/orcl", "user", "pass");
尝试使用:
OracleDataSource ods = new OracleDataSource();
java.util.Properties prop = new java.util.Properties();
prop.setProperty("MinLimit", "2");
prop.setProperty("MaxLimit", "10");
String url = "jdbc:oracle:oci8:@//xxx.xxx.xxx.xxx:1521/orcl";
ods.setURL(url);
ods.setUser("USER");
ods.setPassword("PWD");
ods.setConnectionCachingEnabled(true);
ods.setConnectionCacheProperties (prop);
ods.setConnectionCacheName("ImplicitCache01");
更多细节here http://docs.oracle.com/cd/B19306_01/java.102/b14355/concache.htm
选项 2:获取大小
正如斯蒂芬强烈指出的那样,fetchsize 似乎太大了。
并且,对于 500,000 的获取大小,您的 -Xms 和 -Xmx 是多少。另外,在分析器中,最大堆大小是多少?
选项 3:数据库
选项 4:线程
Say n
你可以开始了n
写入器的线程,每个线程都配置为处理某个存储桶,例如thread1 处理 0 到 10000,写入n
不同的文件,一旦所有线程完成,后连接,最好使用低级操作系统命令将文件合并在一起。
也就是说,所有这些都不应该是像现在这样的预定义代码。'n'
并且桶应该在运行时计算。创建超过系统支持的线程数量只会搞砸。
选项 5:
代替
select * from src_schema.big_table_view
你可以使用
SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view
这可以避免创建 500000StringBuilders
and Strings
。 (假设不涉及其他复杂的格式)。 CHR(9) 是制表符。
选项 6:
同时,您还可以向 DBA 检查是否存在任何数据库系统问题,并提出 SR甲骨文支持 https://support.oracle.com.