
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
30.01.2003, 12:25
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
Такой вопрос: Я работаю с таблицей, вношу в нее измения, срабатывает триггер к примеру на вставку делает определенный расче и сохраняет данные в другой таблице (при этом срабатывает процедура с Автономной транзакцией) Далее я делаю rollback и таблица (в которую я вносил изменения) откатывается в начальное состояние Вопрос, можно ли отлавить данны откат, чтобы провести перерасчет в таблице, в которой данные были сохранены процедурой с автономн. транзакц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 12:33
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
Убери автономную транзакцию, зачем она тебе в данном случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 12:37
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
да дело в том что таблица, в которую сносятся результаты перед тем как заполняется полностью очищается, и может это происходить одновременно из нескольких мест, если ее убрать то таблица заблакируется и остальные будут ждать коммита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 12:53
|
|||
|---|---|---|---|
Сложнейшая тема по Oracle |
|||
|
#18+
квест софтвера был вопрос как отловить коммит. Возьми идею которая там описывается и сделай аналогично. Это весьма хитроумный способ, порадуешся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 12:55
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
По-моему, тут надо что-то придумать с конфигурацией всей систему. Большая эта таблица расчетов? Может быть стоит завести еще одну временную, таблицу, куда складывать расчет, а потом, непосредственно перед commit'ом, вносить изменения в "боевую" таблицу расчетов. Кстати, если ты ее очищаешь через truncate table, то всяко откатиться не сможешь. Когда-то у меня бродила мысть использовать alter table exchange partition для разруливания таких ситуаций. В общем, ИМХО, следует поразмыслить над построением системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 13:05
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
о я где почерпнуть эту драгоценную информацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 13:15
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
Какую именно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 13:41
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
Инфу, что бы отслеживать коммиты и ролбеки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 13:56
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
ИМХО не найдешь. По крайней мере, нет таких System Event'ов, позволяющий отслеживать commit или rollback. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 15:16
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
Ты "ИМХО" сверху заметил? Если же знаешь как- поделись, мне, к примеру, интересно было бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 15:27
|
|||
|---|---|---|---|
Сложнейшая тема по Oracle |
|||
|
#18+
Если вкратце, то ты помнишь что у нас есть триггер на ошибки в БД. Ты делаешь какой то сигнальный флажок, то есть табличку с констрейном. и перед началом операции записываешь туда неправильные данные. После того как ты все сделал, флажок снимаешь. А если флажок не снял, то при попытке коммита у тебя пойдет ругань, коммит не пройдет, а ругань ты сможешь отловить на триггере с ошибками. Эта идея была когда идет вставка с анализируемым порядком и т.д. Он ее реализовал, и нечто похожее я видел на форуме квест софтваре Теперь к нашим баранам. Я не проверял, и возможно ошибаюсь Мы начали что то делать. вставил данные в таблицу А. А теперь беру и вставляю данные в сигнальную табличку Б. А из автономной транзакции мой констрайн позволяет при налии данных в Б записать данные в сигнальную табличку С. Потом идет бла-бла-бла И вот я делаю роллбэк. Возможно у нас пойдет ругань на нарушение констрэйна? И мы сможем ее отловить и сделать то что нужно? В общем тут дело за экспирементом. А форум идет на адресе http://www.quest-pipelines.com/pipelines/plsql/tips.htm или где то там. Напиши потом на емель, если получится? С уважением, Алексей les21@mail.ru PS Без обид *-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 15:43
|
|||
|---|---|---|---|
Сложнейшая тема по Oracle |
|||
|
#18+
не увидит измененных данных вызвавшей ее сессии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 15:57
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
Откровенно говоря, метод с сигнальными таблицами мне показался несколько запутанным. Потом, если ты вставил в своей сессии данные, то вроде как из автономной транзакции до commit'а ты из не увидишь, на то она и автономная. Далее, ИМХО существует вероятность заблокировать самого себя, если попытаться вставить даные с некую таблицу, апотом в автономной транзакции вставить данные в нее же или связанную с ней по ссылочной целостности . В общем, если попробую, то позже, когда в голове алгоритм уляжеется:) В свое оправдание предлагаю решить задачу следующим образом: 1. Изменять данные только через процедуру. 2. Свои расчеты производим в отдельную таблицу, по структуре одинаковую с основной, после всех изменений. Ее можно создавать как global temporary table. 3. В конце всего чистим таблицу расчетов и вставляем данные из нашей временной таблицы. При наличии Oracle Enterprise Edition это можно сделать похитрее: - Есть еще одна таблица с одной партицией, по структуре одинакова с таблицей расчетов. - Обмениваемся этой партицией с таблицей расчетов (теперь она пустая). - Вставляем данные из временной таблицы. - Commit. При возникновении exception'а обмениваемся партицией взад, возвращая все на свои места. Такая вот вкраце идея. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 19:06
|
|||
|---|---|---|---|
|
|||
Сложнейшая тема по Oracle |
|||
|
#18+
А триггер на событие AUDIT за системной привилегией FORCE TRANSACTION? P.S. Об исходном вопросе темы - неужели нельзя по-другому кандовее задачу решить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2003, 20:26
|
|||
|---|---|---|---|
Сложнейшая тема по Oracle |
|||
|
#18+
vobschem ideya dostatocho standartnaya i reshenie toge. -- sozdaetsya paket-hraniliche rezultata do zaversheniya osnovnoy tranzakcii -- pered nachalom dannie ochischautsya -- dlya kagdoy stroki osnovnoy tranzakcii pereraschet ukladyvaetsya v bufer -- po zavershenii osnovnoy tranzakcii zapicivautsya rezultaty pererascheta. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=52&mobile=1&tid=1991989]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 500ms |

| 0 / 0 |
