|
|
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
Добрый день! Разбираюсь со странным поведением процедуры: в целевой таблице появляются загруженные в разное время одинаковые строки, хотя в процедуру включен правильно работающий механизм обработки такой ситуации. Пробовал повторно вставлять строку, повторяющую дублирующиеся - отсеилась. В связи с этим имею два вопроса-версии, буду благодарен за советы и комментарии: 1) Первый запуск процедуры, вставивший данные, упал из-за нехватки места в табличном пространстве, к которому относится целевая таблица. Подскажите могла ли возникнуть ситуация, при котором insert выполнился после того, как место освободилось? 2) В v$sql есть подозрительный delete из целевой таблицы, с давнишним first_load_time и периодически обновляемым last_active_time Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Результат: 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. Возможна ли здесь блокировка или наличие запроса в v$sql, при отсутствии связанной сессии в v$session, не говорит о том, что над таблицей выполняется действие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2018, 23:31 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906в процедуру включен правильно работающий механизм обработки такой ситуации. Возможен ли вызов процедуры из нескольких сессий и если да, то учитывает это "правильно работающий механизм обработки такой ситуации"? Сессия не видит еще незакомиченных изменений другой сессии. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2018, 23:43 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
SY, этот вариант связан с вопросом №1. Возможно ли, что упавшая из-за нехватки табличного пространства процедура (а это явно в момент insert) после устранения завершила свою работу и выполнила коммит (он выполняется в конце)? Между упавшим запуском и второй ошибочной вставкой запусков не было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 00:39 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906этот вариант связан с вопросом №1. Ситуация на которую я намекал: Сессия 1 проверяет есть ли такая запись в таблице, получает "такой записи нет" и делает вставку. До того как сессия 1 выполняет commit, сессия 2 также проверяет есть ли такая запись в таблице, получает "такой записи нет" и делает вставку. В результате 2 "таких записи". Ну и откуда мы можем знать что делает твоя процедура при возникновении исключения? Да и дошло ли исключение "нехваткa места в табличном пространстве" до процедуры? Может у тебя задействован resumable и место добавили до истечения resumable_timeout? Тогдa да, этот вариант можем быть связан с вопросом №1 и c cитуацией на которую я намекал. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 00:56 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906наличие запроса в v$sql, при отсутствии связанной сессии в v$sessionЭто статистически более чем частая ситуация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 06:38 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
SY Ситуация на которую я намекал: Сессия 1 проверяет есть ли такая запись в таблице, получает "такой записи нет" и делает вставку. До того как сессия 1 выполняет commit, сессия 2 также проверяет есть ли такая запись в таблице, получает "такой записи нет" и делает вставку. В результате 2 "таких записи". Ну и откуда мы можем знать что делает твоя процедура при возникновении исключения? Да и дошло ли исключение "нехваткa места в табличном пространстве" до процедуры? Может у тебя задействован resumable и место добавили до истечения resumable_timeout? Тогдa да, этот вариант можем быть связан с вопросом №1 и c cитуацией на которую я намекал. SY. Первый запуск упал через 30 секунд после старта, второй запуск произошел спустя 6 часов. show parametrer resumable_timeout возвращает 0. По поводу отношения "нехватки места в табличном пространстве" именно к процедуре - скорее всего касается оно именно ее, так как параллельно успешно отработали процессы, вставляющие данные в этот же tablespase ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 10:29 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
-2-baza906наличие запроса в v$sql, при отсутствии связанной сессии в v$sessionЭто статистически более чем частая ситуация. может быть, тогда вы сталкивались с проблемой, как такой запрос (есть в v$sql, но нет в v$session) можно "убить"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 10:31 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906как такой запрос (есть в v$sql, но нет в v$session) можно "убить"?Изложи смысл на языке, доступном специалисту по ораклу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 11:09 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
-2-, что бы остановить сессию, есть комманда kill, но в моей ситуации идентификатор сессии я получить не могу. Если предположить, что запрос из v$sql все-таки работает, то какой аналог kill для него подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 11:14 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906, убрать из v$sql можно, но зачем? Это ничем не поможет и он вам ничем не мешает. И нет, он сейчас не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 11:19 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906Если предположить, что запрос из v$sql все-таки работаетВыполняемый запрос отражен в v$session. Искать блокировку, нужно тоже в v$session, но не по блокирующему запросу, ибо не обязательно активен. Из изложенного не понятен смысл поисков - смотреть сейчас какие-то сессии и запросы, если дубли "в разное время". По поводу delete - оператор не создаст дубли строк. И даже, если delete заблокировал insert, что в отсутствие unique проблематично, все равно не задублирует строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 11:31 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906, а вы проверяли - у вас заканчивается место в таблеспейсе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 14:54 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
EvgeniaMakarova, да, ошибка была из-за действительно заканчивавшегося места. кстати, обнаружил еще несколько запусков с этой же ошибкой, после который так же возникали дубли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 15:32 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906, получается вроде бы не вставил так как места нет, а потом выходит что вставил. Как будто бы перезапускается процедура заново при ошибке. 1. что у вас идет на обработку исключения? 2. почему уникальный ключ не сделаете ? 3. где код вызывается(из приложения например и тд) - там нет никакой обработки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 15:59 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
EvgeniaMakarovabaza906, получается вроде бы не вставил так как места нет, а потом выходит что вставил. Как будто бы перезапускается процедура заново при ошибке. вот и мне похоже на какие-то действия после падения. по вопросам: 1) Текст выполняемого запроса сохраняется в логи и выполняется commit 2) Б.д. проектировал не я, возможно действительно есть смысл создать ключ 3) Нет, только сообщение, на каком этапе возникла ошибка. В нашем случае - при выполнении процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 16:13 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906, 1. Скорее нет, чем да. 2. Наличие запроса в v$sql говорит о том что он когда-то выполнялся. То что джоин с сессиями не возвращает ничего говорит о том, что он сейчас не выполняется. Однако он мог выполняться в сессии которая еще не закоммитила изменения, и потом выполняла другие запросы, блокировка возможна. Судя по вопросам, есть ненулевая вероятность, что все кроется в кривой реализации "правильно работающий механизм обработки такой ситуации" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 16:25 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906, в автономной транзакции делается коммит для таблицы логов или прямо в текущую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 16:40 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
EvgeniaMakarova, коммит без открытия новой транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 16:49 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
baza906, я не знаю почему у вас такое поведение- хорошо бы посмотреть на Ваш код (но вы наверное если бы могли , то уже показали его), но писать в логи лучше в автономной транзакции http://www.dba-oracle.com/t_autonomous_transaction.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 16:56 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
EvgeniaMakarova, спасибо большое вам. оберну логирование в отдельную транзакцию и посмотрю на поведение процедуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 17:14 |
|
||
|
Незапланированный INSERT
|
|||
|---|---|---|---|
|
#18+
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.В приведенном сценарии автономка не является насущной необходимость. Локальный ролбак даже лучше автономки, так как можно манипулировать строками отмененной транзакции без опасения попасть в дедлок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2018, 17:57 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=93&tid=1883148]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 351ms |

| 0 / 0 |
