|
|
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
У меня есть долгоиграющий скрипт PL/SQL, который в процессе работы выводит информацию через dbms_output. Но эта информация выводится только после того, как скрипт завершит работу, а до этого момента не ясно, на какой он стадии. При запуске скрипта на рабочей базе выполняется несколько часов и неясно, он завис, или все же выполняется. Скрипт я выполняю в TOAD, но при выполнении в sqlplus ситуация такая же, пока блок PL/SQL не завершит работу, никакого промежуточного вывода нет. set echo on мне не подходит, prompt внутри блока PL/SQL использовать нельзя. Можно ли вывести текст, чтобы он сразу же отразился на клиенте? Как вариант, можно сообщения выводить с таблицу, но тут я не знаю, как зафиксировать в этой таблице запись и при этом не закрывать транзакцию. ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 09:28 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
автономная транзакция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 09:30 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B.У меня есть долгоиграющий скрипт PL/SQL, который в процессе работы выводит информацию черезRTFM DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS Alibek B.я не знаю, как зафиксировать в этой таблице запись и при этом не закрывать транзакцию.RTFM pragma autonomous_transaction ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 09:33 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
ElicRTFM DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS Может быть я неправильно понял, но это даст мне возможность просмотреть процент выполнения (процент от totalwork) и прочитать сообщение вида "Rowid Range Scan: TABLE: 12777 out of 12777 Blocks done". Если так, то это не подойдет, мне нужно видеть все сообщения, которые выводит скрипт в процессе работы. ElicRTFM pragma autonomous_transaction Спасибо за подсказку, теперь понятно, как сделать вывод в таблицу. А просто вывести текст на клиенте нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 09:44 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B.А просто вывести текст на клиенте нельзя?В готовый Гуй - нельзя. Тут нужно программировать межсессионное взаимодействие любым из множества способов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 10:07 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B., если вообще без создания таблиц, то уже ссылку дали , вот на DBMS_APPLICATION_INFO там пример CREATE or replace PROCEDURE add_employee( name VARCHAR2, salary NUMBER, manager NUMBER, title VARCHAR2, commission NUMBER, department NUMBER) AS BEGIN DBMS_APPLICATION_INFO.SET_MODULE( module_name => 'add_employee', action_name => 'insert into emp'); INSERT INTO emp (ename, empno, sal, mgr, job, hiredate, comm, deptno) VALUES (name, emp_seq.nextval, salary, manager, title, SYSDATE, commission, department); DBMS_APPLICATION_INFO.SET_MODULE(null,null); END; дальше с клиента надо через вторую сессию посмотреть что выполняет необходимая сессия через select * from v$session ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 11:13 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Столкнулся со странностью в автономных транзакциях. Есть такой скрипт (скелет): Код: 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. Запускаю скрипт в командной строке Windows (с помощью sqlplus), параллельно в TOAD наблюдаю за таблицей DYNRPT_LOGS, которая пополняется значениями. Странность я обнаружил, когда случайно закрыл командную строку с выполняющимся скриптом, но потом проверил отдельно и странность повторилась. Странность в следующем. Запускаю скрипт в командной строке, параллельно смотрю за таблицей DYNRPT_LOGS, в ней понемногу добавляются строки вида " - запрос 2, шаг 5". Закрываю командную строку вместе со скриптом, окно закрылось, процессов cmd.exe или sqlplus.exe в диспетчере задач не видно. Однако в течении какого-то времени в DYNRPT_LOGS продолжают появляться новые записи, причем не одна запись (которую можно было бы объяснить тем, что процедура log уже запущена на сервере и просто завершила свою работу), а несколько записей (то есть цикл LOOP ... END LOOP продолжает работать). Более того, если скрипт запустить снова, то иногда я наблюдал, что в таблице DYNRPT_LOGS появляются записи как с новым LOG_SCOPE, так и с LOG_SCOPE из ранее запущенного и завершенного скрипта. Правда в последнем случае я возможно что-то напутал. Это нормально или это какой-то сбой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 18:05 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B.это какой-то сбой?В знаниях. Alibek B.cmd.exe или sqlplus.execmd.exe или sqlplus.exe не являются процессами СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 18:20 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Это нормально, клиент послал код, а сервер его выполняет, а о том что клиента уже нет сервер конечно узнает но не так сразу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 18:23 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Другими словами, весь скрипт PL/SQL (или во всяком случае его часть до символа /) отправляется на сервер и далее наличие клиента в живых для работы скрипта не требуется, так? Да, в Oracle некоторые подходы необычны, запомню этот момент. Тут, по идее, может быть спорный момент в том, что если в скрипте есть commit, то изменения будут применены даже если клиентское приложение завершилось аварийно и пользователь ждет, что изменения не применены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 19:11 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Другими словами, весь скрипт PL/SQL (или во всяком случае его часть до символа /) отправляется на сервер и далее наличие клиента в живых для работы скрипта не требуется, так? Да, в Oracle некоторые подходы необычны, запомню этот момент. Тут, по идее, может быть спорный момент в том, что если в скрипте есть commit, то изменения будут применены даже если клиентское приложение завершилось аварийно и пользователь ждет, что изменения не применены. Не надо придумывать, нужно прочитать про архитектуру клиент-сервер + работа сети ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 19:22 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Да, в Oracle некоторые подходы необычныдумаешь, где-то иначе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 19:27 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Столкнулся со странностью в автономных транзакциях. Есть такой скрипт (скелет): Код: 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. коммитов не многовато будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 08:55 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Транзакции фиксируются в тех местах, где скрипт завершил обработку логического блока данных. Суммарный объем данных, которые изменяет скрипт, довольно большой (порядка 20 тысяч строк), поэтому я решил, что это слишком много, чтобы применять или отменять изменения в одной транзакции. Я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 09:27 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
20 тыс строк - обычно это немного в вашем случае и автономка не нужна, и так коммитов натыкано хотя я бы все коммиты повыбрасывал, кроме последнего (если это джоб) а если не джоб, то все это обычный метод, если нет разных фишек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2017, 12:28 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Мой скрипт заканчивается следующими строками: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Когда я запускаю скрипт, неважно откуда (через sqlplus или TOAD), он зависает — в sqlplus курсор мигает, в TOAD выводится диалоговое окно "Выполняется" и идет время выполнения, и такое сохраняется несколько часов. Но если в это время глянуть в таблицу логов, то в ней последней записью указано " - ИТОГО", время выполнения скрипта обычно в пределах 1-2 часов. И все данные, которые обрабатывал скрипт, обработаны. То есть цикл успешно обработал, выполнился следующий оператор, скрипт вроде бы завершился, но клиент этого не показывает. А можно ли посмотреть, чем занята сессия, если после выполнения последней команды выполнение скрипта считается незавершенным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 09:01 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B., не знаю, правильно ли, но проще всего глянуть в v$session, v$open_cursor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 09:05 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B.время выполнения скрипта обычно в пределах 1-2 часовЗа это время сетевое оборудование между клиентом и сервером посчитало соединение "протухшим" и перестало его обслуживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 09:06 |
|
||
|
Можно ли отследить статус выполнения процедуры?
|
|||
|---|---|---|---|
|
#18+
Alibek B., DBMS_PIPE или DBMS_ALERT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2017, 09:36 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39399030&tid=1886476]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 381ms |

| 0 / 0 |
