【问题标题】:AWS Oracle DMS show full row each timeAWS Oracle DMS 每次都显示整行
【发布时间】:2022-06-10 23:25:32
【问题描述】:

我有一个配置了 DMS 和 S3 目标的 Oracle RDS 实例。 完全加载后我正在进行复制,当我用新值更新一行时,创建的 DMS 文件只显示那些已更新的列,但我希望整个行在数据库中处于其当前状态。

示例: |客户 ID |客户名称 |年龄 |
| :---: | :---: | :----: | | 1 |约翰·史密斯| 46| | 2 |简·多伊 | 25 |

然后我将 Johns 的年龄更新为 47 岁,我希望 DMS 看起来像这样: |操作 | DMS_TIMESTAMP |客户 ID |客户名称 |年龄 | | :---: | :----: | :---: | :---: | :---: | |你| 2022-01-01 12:00:00 | 1 |约翰·史密斯 | 47 |

但是我收到的文件是这样的:
|操作 | DMS_TIMESTAMP |客户 ID |客户名称 |年龄 | | :---: | :----: | :---: | :---: | :---: | |你| 2022-01-01 12:00:00 | 1 |空 | 47 |

根据文档,DMS 行应该代表该行的当前状态,但我的所有不是主键的列似乎都丢失了,尽管该行在数据库中具有正确的值.我是否缺少配置?

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-dms


    【解决方案1】:

    我遗漏了文档的一部分,该部分解释说,如果您想要一行的所有列的值,您需要将以下内容应用于表格:

    alter table table_name ADD SUPPLEMENTAL LOG DATA (all) columns';
    

    由于我需要将其应用于架构中的所有表,因此我创建了此循环来应用它。

    BEGIN
        FOR I IN (
        SELECT
            table_name,
            owner
        FROM
            ALL_TABLES
        WHERE
            owner = 'SCHEMA_OWNER'
    ) LOOP
        -- Print table name
        BEGIN
        DBMS_OUTPUT.PUT_LINE('Attempting to alter ' || I.table_name || ' at ' || current_timestamp);
        EXECUTE IMMEDIATE 'alter table SCHEMA_OWNER.' || I.table_name || ' ADD SUPPLEMENTAL LOG DATA (all) columns';
        EXCEPTION
        WHEN OTHERS THEN 
            DBMS_OUTPUT.PUT_LINE(I.table_name || ' alteration failed at ' || current_timestamp);
        END;
    END LOOP;
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 2021-05-29
      相关资源
      最近更新 更多