Как мне получить SCN, соответствующий моему COMMIT? - PullRequest
1 голос
/ 03 сентября 2010

Когда я фиксирую транзакцию в Oracle, как получить самый ранний SCN, содержащий изменения транзакций?

Ответы [ 2 ]

2 голосов
/ 04 сентября 2010

После фиксации получите текущий SCN, используя DBMS_FLASHBACK.

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_flashb.htm#i997043

Предложенная Адамом концепция ORA_ROWSCN не безопасна на 100%.

В 10:001 июня я делаю вставку из тысячи записей по 1 МБ каждая.В 10:30 я делаю еще одну вставку такого же размера.А в 11 утра я обязуюсь.

Эти вставки были (почти наверняка) записаны в базу данных как грязные блоки (то есть содержащие незафиксированные изменения).У них будет SCN в зависимости от времени их записи, но записи будут помечены как заблокированные (и блок хранит идентификатор транзакции, удерживающей блокировку).

15 июля я прочитал эти блоки,Они все еще «грязные» и выглядят запертыми.Механизм согласованности чтения выполняет проверку транзакции и обнаруживает, что она больше не существует (и не существует в течение некоторого времени).Поэтому система знает, что эти записи были зафиксированы, но на самом деле не может дать точную запись о том, когда они были зафиксированы.Он очищает грязные блоки и вставляет там SCN.SCN не является точным временем, когда они были зафиксированы, но SCN соответствует самому старому времени, которое БД может применить.

1 голос
/ 03 сентября 2010

Использование псевдостолбца ORA_ROWSCN с CREATE TABLE ... ROWDEPENDENCIES в 10g + позволит вам увидеть SCN, связанный с последним коммитом каждой строки.Все изменения, которые вы делаете в одном коммите, должны иметь одинаковое значение SCN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...