2015-06-17 49 views
0

我们有一张关于3M记录的表格,这些记录在我们的应用程序中只用于只读操作。一天一次,我们会收到带有新版表格的csv文件。大多数记录没有更改,但有些记录是创建,更新或删除的。总变化量小于整个内容的1%。 用新数据更新表格内容的最佳方式是什么?表独家锁定是不可接受的,该应用程序正在全天候工作。 更新应该在一次提交中完成。对数据库的访问是通过JDBC。 谢谢。如何从csv文件/ Oracle的另一个表中更新大表格

回答

1

我会考虑将您的数据加载到全局临时表中,然后使用MERGE语句在公共和唯一键值上的目标表之间进行连接,从而应用更改。

在SO和文档中有很多MERGE示例。

https://docs.oracle.com/database/121/SQLRF/statements_9016.htm#SQLRF01606

+1

MERGE是否删除记录? – spoonboy

+0

它看起来像MERGE不能从目标表中删除源表中未显示的记录。 – spoonboy

+0

我会给出另一个答案,以及... –

0

一种选择是保持在一对表,并通过使用同义词切换它们之间的应用程序。

因此,给定table1和table2,您的同义词在星期一指向table1。通宵加载table2,然后将同义词切换为指向它而不是table1。

这样做的一个间接好处是它可以保留您以前的数据集,以防需要切换回来。

+0

它是否适用于公开交易?我想不是。 – spoonboy

+0

我已经做了一段时间了,但是我记得同义词定义没有锁定问题,因为一旦查询运行,您可以对同义词进行任何操作,因为底层关系作为查询解析的一部分被解析和转型。测试会很简单。 –

相关问题