Oracle V$LOGMNR_CONTENTS для таблицы с UDT - соединение операций UPDATE и INTERNAL

Я обновляю таблицу оракула с помощью UDT (определяемого пользователем типа), а затем запрашиваю V$LOGMNR_CONTENTSПосмотреть. Я вижу, что для каждой обновленной строки есть 2 записи - ОБНОВЛЕНИЕ и ВНУТРЕННЯЯ. Мне нужно выяснить, как установить связь между ними, поскольку операция UPDATE имеет временное значение в ROW_IDи правильное значение появляется только во ВНУТРЕННЕЙ операции, и я не уверен, как соотносятся их номера SCN. Я думаю о том, чтобы сделать очередь ОБНОВЛЕНИЙ на DATA_OBJ#и свяжите их с ВНУТРЕННИМИ FIFO. Что мне не хватает?

Сценарий:

CREATE TYPE srulon AS OBJECT (name VARCHAR2(30),phone VARCHAR2(20) );
create table root.udt_table (myrowid rowid, myudt srulon);
BEGIN rdsadmin.rdsadmin_util.switch_logfile;END;
insert into root.udt_table values (null, srulon('small', '1234'));
commit;
BEGIN rdsadmin.rdsadmin_util.switch_logfile;END;
insert into root.udt_table values (null, srulon('small', '1234'));
update root.udt_table set myrowid=rowid, myudt = srulon('smaller', rowid);
commit;
BEGIN rdsadmin.rdsadmin_util.switch_logfile;END;

Запрос (после START_LOGMNR для последнего журнала):

select scn, SEQUENCE#,operation, SQL_REDO, ROW_ID from  V$LOGMNR_CONTENTS
where session# = 6366 and not operation like '%XML%'
order by scn, SEQUENCE#;

Полученные результаты:

| SCN | SEQUENCE# | OPERATION | ROW\_ID | SQL\_REDO |
| :--- | :--- | :--- | :--- | :--- |
| 240676056 | 1 | INTERNAL | AAB1avAAAAAAwT7AAA | NULL |
| 240676056 | 1 | UPDATE | AAAAAAAAAAAAAAAAAA | update "ROOT"."UDT\_TABLE" a set a."MYROWID" = 'AAB1avAAAAAAwT7AAA' where a."MYROWID" IS NULL; |
| 240676057 | 5 | INTERNAL | AAB1avAAAAAAwT7AAA | NULL |
| 240676058 | 1 | UPDATE | AAAAAAAAAAAAAAAAAA | update "ROOT"."UDT\_TABLE" a set a."MYROWID" = 'AAB1avAAAAAAwT7AAB' where a."MYROWID" IS NULL; |
| 240676059 | 5 | INTERNAL | AAB1avAAAAAAwT7AAB | NULL |
| 240676069 | 1 | COMMIT | AAAAAAAAAAAAAAAAAA | commit; |

2 ответа

Номер изменения системы (SCN) - это основная функция управления, которая используется для отслеживания транзакционной активности базы данных. SCN - это штамп, который определяет зафиксированную версию базы данных в определенный момент времени. Каждой совершенной транзакции назначается уникальный SCN. БД ведет учет всех изменений базы данных с помощью номеров SCN. SCN - это текущий номер для изменений в базе данных.

Чтобы получить текущий SCN, используйте

DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER()

Таким образом, между операцией UPDATE и INTERNAL нет другой связи, тогда как тот факт, что SCN UPDATE ниже, чем INTERNAL SCN, но нет расчетного или логического соединения

Ошибка заключалась в том, чтобы order by scn, SEQUENCE#. после удаления предложения order by каждый ВНУТРЕННИЙ оператор следует за соответствующим UPDATE. кредит достается срулону.

Другие вопросы по тегам