【发布时间】:2013-11-24 09:49:06
【问题描述】:
某些表的数据需要在我的系统中更新(或删除、插入)。 但我想知道哪些数据被更新、删除和插入。 所以在数据改变之前,我会以不同的模式备份表 就像这样:
create table backup_table as select * from schema1.testtable
和数据更改后,我想找到backup_table之间的区别 和 testtable ,我想将差异保存到备份模式中的表中。
我要运行的sql是这样的:
CREATE TABLE TEST_COMPARE_RESULT
AS
SELECT 'BEFORE' AS STATUS, T1.*
FROM (
SELECT * FROM backup_table
MINUS
SELECT * FROM schema1.testtable
) T1
UNION ALL
SELECT 'AFTER' AS STATUS, T2.*
FROM (
SELECT * FROM schema1.testtable
MINUS
SELECT * FROM backup_table
) T2
我担心的是我听说减号操作会使用 大量的系统资源。在我的系统中,一些表大小将超过 700M。所以我想 知道 oracle 将如何读取内存(PGA??)或临时表空间中的 700M 数据吗? 以及我应该如何确保资源足以进行比较操作?
【问题讨论】:
-
如果您的表可能是 700 MB,那么您可能只更改一小部分行。可能有比您建议的机制更好的方法来处理此问题,尤其是因为您至少需要足够的磁盘空间来存储两个数据副本。但是,我不是 Oracle 专家,所以我不知道合适的术语是什么。 'Changed Data Capture' 可能是一个合适的搜索词。
标签: performance oracle resources compare