Когда запись заблокирована, мы можем знать, какая из них заблокирована?
Как я могу получить запись rowid или другую информацию?
Я могу получить некоторую информацию по этому sql
SELECT c.ROW_WAIT_OBJ#,c.ROW_WAIT_FILE#,c.ROW_WAIT_BLOCK#,c.ROW_WAIT_ROW#
FROM v$locked_object a, dba_objects b, v$session c
WHERE a.object_id = b.object_id
AND a.SESSION_ID = c.sid(+)
Я нашел метод в Интернете, чтобы получить rowid с помощью функции DBMS_ROWID.ROWID_CREATE()
Но это не похоже на работу.
V$LOCK
.Ответы:
Вы не можете в действительности перечислить все строки, которые заблокированы сеансом. Однако, как только сеанс блокируется другим, вы можете найти, какой сеанс / строка его блокирует.
Oracle не поддерживает список отдельных блокировок строк. Скорее, блокировки регистрируются непосредственно внутри самих строк - воспринимайте это как дополнительный столбец.
Вы можете найти, какой сеанс получил блокировку объекта через
V$LOCK
представление, но в нем будет показана только общая информация, а не на уровне строк.С помощью этого представления вы также можете определить, был ли сеанс заблокирован другим. В этом случае, если сеанс заблокирован другим сеансом, информация о строке отображается в
V$SESSION
информации.Вы можете получить rowid, давайте создадим пример с двумя сессиями:
Сессия 2 теперь ожидает на Сессии 1. Мы можем обнаружить блокирующую строку с помощью:
Для дальнейшего чтения: описание процесса Тома Кайта .
источник
Вы можете найти все блокировки таблиц в базе данных Oracle, выполнив следующий запрос
источник