【问题标题】:Does Oracle have something like Change Data Capture in SQL Server 2008?Oracle 在 SQL Server 2008 中是否有类似变更数据捕获的功能?
【发布时间】:2008-09-30 22:26:13
【问题描述】:

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

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

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

甲骨文有这样的东西吗?

【问题讨论】:

    标签: sql-server oracle


    【解决方案1】:

    当然。根据业务需求,Oracle 实际上有许多用于此类事情的技术。

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

    【讨论】:

      【解决方案2】:

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

      这是使用 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# 方法。哇!

      【讨论】:

        【解决方案3】:

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

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

        话虽如此,我要补充一点,Oracle 10g+ 可以简单地通过使用闪回查询语法来挖掘日志文件。这里的例子:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2112847

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

        【讨论】:

          【解决方案4】:

          我相信 Oracle 从 8i 开始就提供了审计功能,但是用于捕获数据的表相当复杂,并且在启用此功能时会对性能产生重大影响。

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

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

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

          【讨论】:

            【解决方案5】:

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

            Oracle 闪回查询检索过去某个时间存在的数据。

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

            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;
            

            【讨论】:

              猜你喜欢
              • 2011-04-27
              • 1970-01-01
              • 1970-01-01
              • 2018-01-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-01-08
              • 1970-01-01
              相关资源
              最近更新 更多