powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Незапланированный INSERT
21 сообщений из 21, страница 1 из 1
Незапланированный INSERT
    #39735860
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Разбираюсь со странным поведением процедуры: в целевой таблице появляются загруженные в разное время одинаковые строки, хотя в процедуру включен правильно работающий механизм обработки такой ситуации.
Пробовал повторно вставлять строку, повторяющую дублирующиеся - отсеилась.
В связи с этим имею два вопроса-версии, буду благодарен за советы и комментарии:

1) Первый запуск процедуры, вставивший данные, упал из-за нехватки места в табличном пространстве, к которому относится целевая таблица.
Подскажите могла ли возникнуть ситуация, при котором insert выполнился после того, как место освободилось?

2) В v$sql есть подозрительный delete из целевой таблицы, с давнишним first_load_time и периодически обновляемым last_active_time
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select 
  first_load_time, 
  last_load_time,
  last_active_time,
  sql_text 
from v$sql t
where sql_text like '%ACCOUNT %'
and first_load_time < to_date('2018-11-15', 'YYYY-MM-DD')


Результат:
2018-10-19/17:37:35 || 2018-11-20/12:29:38 || 2018-11-20 15:39:30 || DELETE /*+ no_index(a) */ FROM ACCOUNT a WHERE ROWID IN (SELECT DEL_ROWID FROM ORAWORK.SRV_DEL)

при этом джоин с v$session ничего не возвращает
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
  first_load_time, 
  last_load_time,
  last_active_time,
  s.*,
  sql_fulltext
from v$sql t
join v$session s
on t.sql_id = s.sql_id
where sql_text like '%ACCOUNT %'



Возможна ли здесь блокировка или наличие запроса в v$sql, при отсутствии связанной сессии в v$session, не говорит о том, что над таблицей выполняется действие?
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735862
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baza906в процедуру включен правильно работающий механизм обработки такой ситуации.


Возможен ли вызов процедуры из нескольких сессий и если да, то учитывает это "правильно работающий механизм обработки такой ситуации"? Сессия не видит еще незакомиченных изменений другой сессии.

SY.
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735880
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
этот вариант связан с вопросом №1. Возможно ли, что упавшая из-за нехватки табличного пространства процедура (а это явно в момент insert) после устранения завершила свою работу и выполнила коммит (он выполняется в конце)? Между упавшим запуском и второй ошибочной вставкой запусков не было
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735883
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baza906этот вариант связан с вопросом №1.

Ситуация на которую я намекал: Сессия 1 проверяет есть ли такая запись в таблице, получает "такой записи нет" и делает вставку. До того как сессия 1 выполняет commit, сессия 2 также проверяет есть ли такая запись в таблице, получает "такой записи нет" и делает вставку. В результате 2 "таких записи".

Ну и откуда мы можем знать что делает твоя процедура при возникновении исключения? Да и дошло ли исключение "нехваткa места в табличном пространстве" до процедуры? Может у тебя задействован resumable и место добавили до истечения resumable_timeout? Тогдa да, этот вариант можем быть связан с вопросом №1 и c cитуацией на которую я намекал.

SY.
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735904
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baza906наличие запроса в v$sql, при отсутствии связанной сессии в v$sessionЭто статистически более чем частая ситуация.
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735962
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Ситуация на которую я намекал: Сессия 1 проверяет есть ли такая запись в таблице, получает "такой записи нет" и делает вставку. До того как сессия 1 выполняет commit, сессия 2 также проверяет есть ли такая запись в таблице, получает "такой записи нет" и делает вставку. В результате 2 "таких записи".

Ну и откуда мы можем знать что делает твоя процедура при возникновении исключения? Да и дошло ли исключение "нехваткa места в табличном пространстве" до процедуры? Может у тебя задействован resumable и место добавили до истечения resumable_timeout? Тогдa да, этот вариант можем быть связан с вопросом №1 и c cитуацией на которую я намекал.

SY.

Первый запуск упал через 30 секунд после старта, второй запуск произошел спустя 6 часов. show parametrer resumable_timeout возвращает 0.

По поводу отношения "нехватки места в табличном пространстве" именно к процедуре - скорее всего касается оно именно ее, так как параллельно успешно отработали процессы, вставляющие данные в этот же tablespase
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735963
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-baza906наличие запроса в v$sql, при отсутствии связанной сессии в v$sessionЭто статистически более чем частая ситуация.

может быть, тогда вы сталкивались с проблемой, как такой запрос (есть в v$sql, но нет в v$session) можно "убить"?
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735982
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baza906как такой запрос (есть в v$sql, но нет в v$session) можно "убить"?Изложи смысл на языке, доступном специалисту по ораклу.
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735988
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,
что бы остановить сессию, есть комманда kill, но в моей ситуации идентификатор сессии я получить не могу. Если предположить, что запрос из v$sql все-таки работает, то какой аналог kill для него подойдет?
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39735996
maglevdevice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baza906,

убрать из v$sql можно, но зачем? Это ничем не поможет и он вам ничем не мешает.
И нет, он сейчас не работает.
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736005
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baza906Если предположить, что запрос из v$sql все-таки работаетВыполняемый запрос отражен в v$session. Искать блокировку, нужно тоже в v$session, но не по блокирующему запросу, ибо не обязательно активен.
Из изложенного не понятен смысл поисков - смотреть сейчас какие-то сессии и запросы, если дубли "в разное время".
По поводу delete - оператор не создаст дубли строк. И даже, если delete заблокировал insert, что в отсутствие unique проблематично, все равно не задублирует строки.
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736180
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baza906,
а вы проверяли - у вас заканчивается место в таблеспейсе?
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736204
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarova,
да, ошибка была из-за действительно заканчивавшегося места. кстати, обнаружил еще несколько запусков с этой же ошибкой, после который так же возникали дубли
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736219
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baza906,
получается вроде бы не вставил так как места нет, а потом выходит что вставил.
Как будто бы перезапускается процедура заново при ошибке.
1. что у вас идет на обработку исключения?
2. почему уникальный ключ не сделаете ?
3. где код вызывается(из приложения например и тд) - там нет никакой обработки?
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736234
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarovabaza906,
получается вроде бы не вставил так как места нет, а потом выходит что вставил.
Как будто бы перезапускается процедура заново при ошибке.

вот и мне похоже на какие-то действия после падения.

по вопросам:
1) Текст выполняемого запроса сохраняется в логи и выполняется commit
2) Б.д. проектировал не я, возможно действительно есть смысл создать ключ
3) Нет, только сообщение, на каком этапе возникла ошибка. В нашем случае - при выполнении процедуры.
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736240
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baza906,

1. Скорее нет, чем да.
2. Наличие запроса в v$sql говорит о том что он когда-то выполнялся. То что джоин с сессиями не возвращает ничего говорит о том, что он сейчас не выполняется. Однако он мог выполняться в сессии которая еще не закоммитила изменения, и потом выполняла другие запросы, блокировка возможна.

Судя по вопросам, есть ненулевая вероятность, что все кроется в кривой реализации "правильно работающий механизм обработки такой ситуации"
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736246
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baza906,

в автономной транзакции делается коммит для таблицы логов или прямо в текущую?
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736248
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarova,
коммит без открытия новой транзакции.
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736251
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baza906,
я не знаю почему у вас такое поведение- хорошо бы посмотреть на Ваш код (но вы наверное если бы могли , то уже показали его), но писать в логи лучше в автономной транзакции http://www.dba-oracle.com/t_autonomous_transaction.htm
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736269
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarova,
спасибо большое вам. оберну логирование в отдельную транзакцию и посмотрю на поведение процедуры
...
Рейтинг: 0 / 0
Незапланированный INSERT
    #39736324
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarovadba-oracle.comДанный сайт не в фаворе на sql.ru ввиду личностной неприязни столпов к буресонщине.
Да, собственно, по приведенной ссылке на столь элементарную тему приведено спорное утверждениесын пародии Question: What is the idea of an automous transaction in PL/SQL? I understand that there is the pragma automous transaction but I am unclear about when to use automous transactions.
Answer: Autonomous transactions are used when you wan to roll-back some code while continuing to process an error logging procedure.В приведенном сценарии автономка не является насущной необходимость. Локальный ролбак даже лучше автономки, так как можно манипулировать строками отмененной транзакции без опасения попасть в дедлок.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Незапланированный INSERT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]