Bra*_*ham 8 oracle oracle12c logminer
到目前为止,任何列名超过 30 个字符的表在查询 V$LOGMNR_CONTENTS 时都会给出 UNSUPPORTED 操作
如果我删除该列或将大小调整为 <=30,则所有 CRUD 操作都会报告正常。
在 Oracle 12.2 中支持 128 个字符对象,所以我试图了解我是否配置错误。无休止的谷歌搜索让我一无所获,Oracle 文档也没有。
提前致谢!
编辑
刚刚检查了 19c,同样的行为。兼容性设置为 19.0.0
编辑
关于使用补充日志记录的评论很多,但无法创建与接受的答案相同的场景。
无论哪种方式,鉴于 Oracle 现在已经表示永远不会支持它,这并不重要!
测试我跑到它仍然无法工作的地方
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SELECT supplemental_log_data_min, supplemental_log_data_pk
FROM V$Database;
SUPPLEME SUP
-------- ---
YES NO
CREATE TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY" (
"ID" NUMBER(10,0),
"NAME" VARCHAR2(254 BYTE)
);
ALTER TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY" MODIFY ("ID" NOT NULL ENABLE);
ALTER TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY" MODIFY ("NAME" NOT NULL ENABLE);
INSERT INTO atablewithquitealongnamelikeverylongactually VALUES (1, 'My Name');
DECLARE CURSOR LogMinerFileCursor IS
SELECT LogFile
FROM (
SELECT V$LOGFILE.Member AS LogFile,
FIRST_CHANGE# AS FirstSCN,
NEXT_CHANGE# AS LastSCN
FROM V$LOGFILE
INNER JOIN V$LOG ON V$LOGFILE.GROUP# = V$LOG.GROUP#
WHERE V$LOG.STATUS <> 'UNUSED'
AND FIRST_CHANGE# >= (SELECT RESETLOGS_CHANGE# FROM V$DATABASE)
UNION ALL
SELECT Name AS LogFile,
FIRST_CHANGE# AS FirstSCN,
NEXT_CHANGE# AS LastSCN
FROM V$ARCHIVED_LOG
WHERE FIRST_CHANGE# < (
SELECT MIN(FIRST_CHANGE#)
FROM V$LOGFILE
INNER JOIN V$LOG ON V$LOGFILE.GROUP# = V$LOG.GROUP#
WHERE V$LOG.STATUS <> 'UNUSED'
) AND FIRST_CHANGE# >= (SELECT RESETLOGS_CHANGE# FROM V$DATABASE)
) LogFiles WHERE FirstSCN >= 0 OR LastSCN > 0;
sDDL varchar2(2000);
BEGIN FOR LogMinerFileCursorRecords in LogMinerFileCursor LOOP
sDDL := 'BEGIN DBMS_LOGMNR.ADD_LOGFILE('''|| LogMinerFileCursorRecords.LogFile ||'''); END;';
DBMS_OUTPUT.Put_Line(sDDL);
execute immediate sDDL;
END LOOP;
COMMIT;
END;
BEGIN DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + + DBMS_LOGMNR.COMMITTED_DATA_ONLY ); END;
SELECT SQL_REDO AS RedoSQL
FROM V$LOGMNR_CONTENTS
WHERE SEG_OWNER = 'REPLICATION_OWNER'
AND TABLE_NAME = 'ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY'
REDOSQL
--------------------------------------------------------------------------------
CREATE TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY"
(
"ID" NUMBER(10,0),
"NAME" VARCHAR2(254 BYTE)
)
SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS
LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "REPLICATION_DATA";
REDOSQL
-------------------------------------------------------------------------------- ALTER TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY" M ODIFY ("ID" NOT NULL ENABLE);
REDOSQL
-------------------------------------------------------------------------------- ALTER TABLE "REPLICATION_OWNER"."ATABLEWITHQUITEALONGNAMELIKEVERYLONGACTUALLY" M ODIFY ("NAME" NOT NULL ENABLE);
REDOSQL
-------------------------------------------------------------------------------- Unsupported
BEGIN DBMS_LOGMNR.END_LOGMNR; END;
Run Code Online (Sandbox Code Playgroud)
只是为了结束这个循环。Oracle 21c 中已更新文档以指定限制。
真的不喜欢 Oracle 编写文档的方式,但是嘿,至少它在那里。
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |