我有一个带有S3目标的DMS配置的Oracle实例。满载后,我正在进行复制,当我用新值更新一行时,创建的DMS文件只显示那些已更新的列,但我希望整个行处于数据库中的当前状态。
例子: client_id、client_name、年龄
然后我将Johns的年龄更新为47岁,我希望DMS看起来是这样的:\x{e76f}\x{e76f}
但是,我收到的文件如下所示:
*···奥斯( DMS_TIMESTAMP )·奥斯维特(DMS_TIMESTAMP)·维特( client_id )·维勒( client_name ):年龄
根据文档,DMS行应该表示行的当前状态,但是我的所有不是主键的列似乎都丢失了,尽管数据库中的行有正确的值。我缺少配置了吗?
发布于 2022-06-10 15:25:32
我遗漏了文档的一部分,该文档解释说,如果您想要一个行的所有列的值,则需要将以下内容应用于表:
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;https://stackoverflow.com/questions/72187898
复制相似问题