Oracle是否有像SQL Server 2008中的Change Data Capture之类的东西?

时间:2008-09-30 22:26:14

标签: sql-server oracle

更改数据捕获是SQL Server 2008中的一项新功能。来自MSDN:

  

更改数据捕获提供   a的历史变化信息   用户表通过捕获这两个事实   DML的变化是和   已更改的实际数据。变化   通过使用异步捕获   读取事务日志的进程   并且对系统的影响很小

这非常甜蜜 - 不再需要手动添加CreatedDate和LastModifiedBy列。

Oracle有这样的东西吗?

5 个答案:

答案 0 :(得分:5)

不确定。根据业务需求,Oracle实际上有很多这类技术。

  • Oracle长期以来(8i天)有一个名为Workspace Manager的东西,允许您对表进行版本启用并跟踪一段时间内的变化。但是,这可能有点重量级,因为它基于具有替代触发器的视图。
  • 从11.1开始(作为企业版的额外成本选项),Oracle有一个Total Recall,它会异步挖掘重做日志以获取记录到单独表的数据更改,然后可以使用闪回查询语法查询该表。主表。 Total Recall会自动分区并压缩历史数据,并在指定的数据保留期后自动清除数据。
  • Oracle采用LogMiner技术,可以挖掘重做日志并向消费者提供交易。然后,在LogMiner之上构建了许多技术,包括Change Data CaptureStreams
  • 如果目标是复制更改,您还可以使用物化视图和物化视图日志。

答案 1 :(得分:3)

Oracle具有更改数据通知,您可以在其中向系统注册查询,并且标记该查询中访问的资源以进行监视。对这些资源的更改由系统排队,允许您对数据运行proc。

使用DBMS_CHANGE_NOTIFICATION包管理。

这是关于它的信息: http://www.oracle-base.com/articles/10g/dbms_change_notification_10gR2.php

如果您从C#应用程序连接到Oracle,ODP.Net(Oracles .Net客户端库)可以与更改数据通知进行交互,以便在进行Oracle更改时提醒您的c#应用程序 - 非常敏锐。如果您问我,请再次轮询数据更改 - 只需注册表,通过ODP.Net和wala设置更改数据通知,只有在必要时才会调用c#方法。活泉!

答案 2 :(得分:2)

“不再需要手动添加CreatedDate和LastModifiedBy列”...只要您能够在重做日志中保持数据库的完整历史记录,并且永远不想将数据移动到其他数据库。

我会继续添加它们,并避免依赖这样的内置数据库技术。如果您需要保留记录的历史状态,则使用审计表或将所有内容发送到数据仓库,以便正确处理缓慢变化的维度。

话虽如此,我还要补充一点,Oracle 10g +只需使用闪回查询语法即可挖掘日志文件。例如:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2112847

此技术还用于Oracle的Datapump导出实用程序,以便为多个表提供一致的数据。

答案 3 :(得分:0)

我相信Oracle自8i以来一直提供审计功能,但是用于捕获数据的表格相当复杂,并且在启用时会对性能产生重大影响。

在Oracle 8i中,您只能为整个数据库而不是一次启用表,但是9i引入了细粒度审计,它提供了更大的灵活性。这已经在10 / 11g中得到了扩展。

有关详细信息,请参阅http://www.oracle.com/technology/deploy/security/database-security/fine-grained-auditing/index.html

同样在11g中,Oracle推出了Audit Vault,它为审计信息提供安全存储,甚至DBA也无法更改这些数据(根据Oracle的文档,我还没有使用过这个功能)。更多信息可以在http://www.oracle.com/technology/deploy/security/database-security/fine-grained-auditing/index.html找到。

答案 4 :(得分:0)

Oracle有一种称为闪回数据存档的机制。来自A Fresh Look at Auditing Row Changes

  

Oracle Flashback Query会检索过去某个时间存在的数据。

     

闪回数据存档提供了在表的生命周期内跟踪和存储表的所有事务更改的功能。不再需要将此智能构建到您的应用程序中。闪回数据存档对于遵守记录阶段策略和审计报告非常有用。

CREATE TABLESPACE SPACE_FOR_ARCHIVE 
datafile 'C:\ORACLE DB12\ARCH_SPACE.DBF'size 50G;

CREATE FLASHBACK ARCHIVE longterm
TABLESPACE space_for_archive
RETENTION 1 YEAR;

ALTER TABLE EMPLOYEES FLASHBACK ARCHIVE LONGTERM;


select EMPLOYEE_ID, FIRST_NAME, JOB_ID, VACATION_BALANCE,
        VERSIONS_STARTTIME TS,
        nvl(VERSIONS_OPERATION,'I') OP
from EMPLOYEES
versions between timestamp  timestamp '2016-01-11 08:20:00' and systimestamp
where EMPLOYEE_ID = 100
order by EMPLOYEE_ID, ts;