|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Вопрос, который я решил с привлечением PL/SQL и возможно коряво, а хочется без PL/SQL и красиво. Например я в sqlplus сессии, только что сделал апдейт одной таблицы по длинному критерию, вижу что апдейтнулось 5 строк. Хочется посмотреть что именно готово записаться, увидеть разницу между commited и сессионной версиями таблицы. Через SQL это просто, но зачем плодить код если можно вручную. Сегодня попробую через SCN, пока не знаю какую лучше дать SCN. наверное текущую. нет опыта с флешбэками. Это не покажет тавтологические изменения (когда апдейт был, но тем же значением), но меня это на данном этапе устраивает. Я слышал про какой-то тул для анализа лога, который всю накопленную транзакцию умеет показать/расписать, но это мне надо. Просто посмотреть что изменилось (собирается измениться) до коммита в текущей сессии. На другие я не замахиваюсь. Сессия в режиме commited reads, если это важно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2021, 23:06 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Оказалось все очень просто. Флеэбэк настоящего времени приравнивается к игнору некомитнутых данных сессии. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 00:24 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Если великий Оракл умеет не только показывать прошлое(FLASHBACK), но и настоящее (FLASHNOW?), то было бы странно не испытать его для будущего (FLASHFUTURE?). Все-таки имя продукта обязывает. Ешкин кот, мой умеет! Но только на 6.5 секунд вперед, не более. Надеюсь, не испортил лицензию. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 00:34 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
TIMESTAMP_TO_SCN TIMESTAMP_TO_SCN takes as an argument a timestamp value and returns the approximate system change number (SCN) associated with that timestamp. The returned value is of data type NUMBER. This function is useful any time you want to know the SCN associated with a particular timestamp. Note:The association between an SCN and a timestamp when the SCN is generated is remembered by the database for a limited period of time. This period is the maximum of the auto-tuned undo retention period, if the database runs in the Automatic Undo Management mode, and the retention times of all flashback archives in the database, but no less than 120 hours. The time for the association to become obsolete elapses only when the database is open. An error is returned if the timestamp specified for the argument to TIMESTAMP_TO_SCN is too old. вопрос по SCN + FlashBack Код: plsql 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. 90. 91. 92. 93. 94. 95.
ps. Ни чтения доки, ни поиска по форуму, ни понимания принципов... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 01:26 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Имейте совесть (и немного чувства юмора), не осилить мне столько строчек перед сном. Вы хоть намекните какую проблему пытаетесь решить. Если помочь мне выбрать SCN для флэшбэка, то это давно не нужно, флешбэк timestamp тоже принимает, конвертация вряд ли полезна, разве что потеряете где-то до 3х секунд точности. Но если бы не было уверенности что Оракл свою же systimestamp не воспримет как "самое новое", то пару вариантов возможны: SCN последнего обновления интересующей таблицы, или просто текущий SCN системы. Второй проще и быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 07:42 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Вторая фаза: после исполнения Код: plsql 1.
безымянная транзакция началась, но изменений (данных) не случилось. Триггеры исполнились, если были. Может, какие-то локи случились. Может, не случились. Что в такой ситуации можно накопать про природу незаконченной транзакции, не прибегая к специализированным тулзам? Asking for a friend :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 07:48 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
НеофитSQL Что в такой ситуации можно накопать про природу незаконченной транзакции, ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 08:48 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
НеофитSQL Что в такой ситуации можно накопать про природу незаконченной транзакции НеофитSQL Вы хоть намекните какую проблему пытаетесь решить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 11:05 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Elic НеофитSQL Что в такой ситуации можно накопать про природу незаконченной транзакции, "Расскажи мне про Сингапур", была такая детская книжка. Там тоже было трудно перечислить вещи, о которых не знаешь. Я привел пример транзакции которая "пустая" в смысле обновления данных, т.е. я ожидаю что после commit пользовательские данные в таблице не изменятся. Эта транзакция касалась одной или более строк, поэтому триггеры сработали, если были. Конкретный вопрос: что можно узнать от БД по поводу такой незаконченной транзакции? Как commit для этой транзакции будет отличаться от rollback с точки зрения пользователя с не-DBA правами, кроме возможного изменения значения некоторых псевдоколонок? Надеюсь, так яснее. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 16:03 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
что можно узнать от БД Что нужно узнать? Транзакция что-то изменила или не изменила. Сделан rollback. Другие пользователи не увидели изменений. Сделан commit - увидели. До коммита можно смотреть блокировки. Можно смотреть сессии, запросы, куча вьюх V$*. Пока ваш вопрос абстрактен. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 16:16 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
НеофитSQL Я привел пример транзакции которая "пустая" в смысле обновления данных, т.е. я ожидаю что после commit пользовательские данные в таблице не изменятся. Эта транзакция касалась одной или более строк, поэтому триггеры сработали, если были. Конкретный вопрос: что можно узнать от БД по поводу такой незаконченной транзакции? Зависит от доступных инструментов, желания и квалификации. Если нет ничего из перечисленного, то и узнать ничего нельзя. Если же кое-что есть, то кое-что узнать можно. Например, можно оценить, как много изменений произвела транзакция: v$transaction (полезно, если решается вопрос жизни и смерти - что быстрее, убить "зависшую", попав на откат или дождаться завершения) Если почитать доку, ссылку на которую я Вам давал в одном из соседних топиков, то можно посмотреть, какие блокировки по каким объектам держит транзакция: v$lock Если есть кушать-не-могу-какая потребность посмотреть, что именно потрогала транзакция - то можно воспользоваться LogMiner. А, быть может, к Вас есть лицензия ГГ и сервер сконфигурирован как источник? Тогда можно добавить на интересующие таблицы подходящий для наблюдений режим supplemental logging и смотреть trail-файлы. Много чего можно. Вопрос - что именно нужно и для зачем оно Вам. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 16:56 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
НеофитSQLНадеюсь, так яснее. Нет. Практическую цель назови. Тупо посчитать количество изменённых транзакцией записей? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 16:58 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
dmdmdm, > Транзакция что-то изменила или не изменила. Сделан rollback. Другие пользователи не увидели изменений. Сделан commit - увидели. В книжке так и пишут про очевидные случаи. Если транзакция не поменяла данные в таблице (set X=X), есть ли с точки зрения других пользователей разница между commit и rollback? С моей невысокой колокольни не видно. Может, materialized view где-то рассинхронизируется, или уведомления выстрелят? Или оракл сообразит что данные не изменились, и не станет дергаться? Пытаюсь увидеть общую философию БД по поводу нулевых изменений, а не решить какой-то конкретный вопрос. Пока разобрался только с началом транзакции и с триггерами. Смотрю дальше: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Локи на двух таблицах. На emp, которую упомянул но не изменил, и на dept. У emp есть FK на dept (без индекса), но я думал что блокирование таблиц из-за FK происходит в другую сторону. Сейчас разбираюсь как посмотреть насколько конкретные эти локи. На всю таблицу, ждущую ноль изменений? Или построчные, на ноль строчек? Тема пока не раскрыта. А вот "бесполезный" select-for-update блокирует только одну таблицу. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 18:11 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov НеофитSQLНадеюсь, так яснее. Нет. Практическую цель назови. Тупо посчитать количество изменённых транзакцией записей? Там ноль, по определению. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 18:16 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
НеофитSQLТам ноль, по определению. То есть практической цели у топика нет, чисто на "покопаться в непонятной фигне". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 18:34 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Так и не понял, что нужно автору. Может быть select * from flashback_transaction_query where xid = xid из v$transaction ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 18:49 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov То есть практической цели у топика нет, чисто на "покопаться в непонятной фигне". Если бы я доверял незнакомым Сибиряковам решать рабочие задачи, у меня были бы совсем другие проблемы :) Да, я копаюсь в непонятной фигне, т.к. хобби. "А что этот проводок делает?" "А почему эта трубка никуда не ведет?" Фокус не на задаче, а на инструменте, поэтому туннельным зрением не страдаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 19:42 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
Интересно. Код: plsql 1. 2. 3. 4. 5. 6. 7.
Пока не разобрался на чем именно стоят локи, смотрю на v$locked_object который упоминает таблицы в целом. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 20:12 |
|
Некомитнутые данные в сессии
|
|||
---|---|---|---|
#18+
НеофитSQL Dimitry Sibiryakov Нет. Практическую цель назови. Тупо посчитать количество изменённых транзакцией записей? Отнюдь не факт. Сам же упоминал возможные срабатывания триггеров. Вдруг они что-то меняли в других таблицах или даже в этой? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2021, 19:09 |
|
|
start [/forum/topic.php?fid=52&fpage=19&tid=1880176]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 243ms |
total: | 407ms |
0 / 0 |