Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Теоретические аспекты и практические реализации создания, внедрения и использования баз данных, СУБД, хранилищ.
  • Страница:
  • 1
  • 2

ТЕМА:

Ошибка Ora-00054 в Oracle 12 года 9 мес. назад #1296

Добрый вечер!
У меня в программе начала вылетать ошибка ORA-00054, в pl/sql, на строчке
Execute immediate "truncate table MyTable";

Но вот если эту строку заменить на
delete from MyTable

то ошибки нет.
Ну вот в чём причина ошибки? Почему это изменение исправляет её.

В момент получения ошибки я пробовала выполнить запрос, который рассказывает, кто лочит какие объекты. Эта таблица блокируется текущей же сессией.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Ошибка Ora-00054 в Oracle 12 года 9 мес. назад #1297

Привет. Может truncate пытается очистить таблицу сразу, не дожидаясь пока закончатся DML инструкции.
А delete же ждет пока эти данные освободятся.
Аудит или трассировка сессии, возможно поможет определить причину.

и попробуй проверить еще в момент когда процедура вылетает, какие объекты у тебя залочены
select * from v$locked_object v

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Artmiy.

Re: Ошибка Ora-00054 в Oracle 12 года 9 мес. назад #1299

Хех, это я проверяла, уже писала.
Из этого очевидно, что залочена именно MyTable, то есть таблица, к которой выполняется truncate.
Как то так

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Ошибка Ora-00054 в Oracle 12 года 9 мес. назад #1300

Ну это понятно, что залочена именно нужная таблица :)
Я имею ввиду, что возможно определить что (какая сессия, какая операция) лочит таблицу и так изменить, чтобы не было локов, ну или хотя бы уничтожить сессию которая мешает.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Ошибка Ora-00054 в Oracle 12 года 9 мес. назад #1302

Я помоему, пробовала так сделать.
Но выявило, что там всего лишь одна сессия. Возможно ли такое? (что блокировка происходит в рамках всего лишь одной сессии?)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Ошибка Ora-00054 в Oracle 12 года 9 мес. назад #1303

Там всего лишь одна сессия. Возможно ли такое?


Странно. Я конечно могу ошибаться, но такого быть не должно. Одна сессия не сможет заблокировать объект

Неужели
select * from v$session

дает только одну строчку???

Хорошо. Давай тогда посмотрим какой row блокируется (хотя если честно, не знаю что это нам даст если там всего одна сессия)
SELECT DO.OBJECT_NAME,
           ROW_WAIT_OBJ#,
           ROW_WAIT_FILE#,
           ROW_WAIT_BLOCK#,
           ROW_WAIT_ROW#,
           DBMS_ROWID.ROWID_CREATE(1,
                                   ROW_WAIT_OBJ#,
                                   ROW_WAIT_FILE#,
                                   ROW_WAIT_BLOCK#,
                                   ROW_WAIT_ROW#)
      FROM V$SESSION S, DBA_OBJECTS DO
     WHERE SID = &SID
       AND S.ROW_WAIT_OBJ# = DO.OBJECT_ID

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.384 секунд