Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Незапланированный INSERT / 21 сообщений из 21, страница 1 из 1
20.11.2018, 23:31
    #39735860
baza906
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
Добрый день!

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

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
20.11.2018, 23:43
    #39735862
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
baza906в процедуру включен правильно работающий механизм обработки такой ситуации.


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

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

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

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

SY.
...
Рейтинг: 0 / 0
21.11.2018, 06:38
    #39735904
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
baza906наличие запроса в v$sql, при отсутствии связанной сессии в v$sessionЭто статистически более чем частая ситуация.
...
Рейтинг: 0 / 0
21.11.2018, 10:29
    #39735962
baza906
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
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
21.11.2018, 10:31
    #39735963
baza906
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
-2-baza906наличие запроса в v$sql, при отсутствии связанной сессии в v$sessionЭто статистически более чем частая ситуация.

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

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

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

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

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

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

в автономной транзакции делается коммит для таблицы логов или прямо в текущую?
...
Рейтинг: 0 / 0
21.11.2018, 16:49
    #39736248
baza906
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
EvgeniaMakarova,
коммит без открытия новой транзакции.
...
Рейтинг: 0 / 0
21.11.2018, 16:56
    #39736251
EvgeniaMakarova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
baza906,
я не знаю почему у вас такое поведение- хорошо бы посмотреть на Ваш код (но вы наверное если бы могли , то уже показали его), но писать в логи лучше в автономной транзакции http://www.dba-oracle.com/t_autonomous_transaction.htm
...
Рейтинг: 0 / 0
21.11.2018, 17:14
    #39736269
baza906
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
EvgeniaMakarova,
спасибо большое вам. оберну логирование в отдельную транзакцию и посмотрю на поведение процедуры
...
Рейтинг: 0 / 0
21.11.2018, 17:57
    #39736324
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Незапланированный INSERT
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Незапланированный INSERT / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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