Получить время выполнения скрипта sql в оракуле sqlplus - PullRequest
14 голосов
/ 06 декабря 2011

У меня есть скрипт, который я использую для загрузки своих данных в мои таблицы в Oracle (по списку операторов вставки). Как я могу получить время выполнения всего процесса загрузки? Я пробовал с set timing on, но это дает мне продолжительность для каждого оператора вставки, а не для всего процесса. Сценарий показан ниже:

spo load.log
prompt '**** load data ****'
set termout off
@@inserts.sql
commit;
set termout on
prompt '**** done ****'
spo off
exit;

Ответы [ 5 ]

16 голосов
/ 24 февраля 2014

Не уверен, почему все делают это так сложно.Просто как:

SQL> set timing on
SQL> select 1 from dual;

         1
----------
         1

1 row selected.

Elapsed: 00:00:00.00
SQL> 
16 голосов
/ 06 декабря 2011

Попробуйте, добавьте следующее в начале, и оно запоминает текущее время:

set serveroutput on
variable n number
exec :n := dbms_utility.get_time

Добавьте это в конце, и оно вычислит истекшее время:

exec :n := (dbms_utility.get_time - :n)/100
exec dbms_output.put_line(:n)
15 голосов
/ 19 мая 2015

Это старый вопрос, но я нашел простой способ измерить время выполнения скрипта в sqlplus. Вы просто должны добавить это в начале

timing start timing_name

И это в конце сценария

timing stop

Дополнительную информацию об этой команде можно найти в руководстве пользователя и справочнике Oracle по SQL * Plus®: Сбор статистики времени

3 голосов
/ 06 декабря 2011

То, что вы описываете, по сути является способом проверки выполнения скрипта. Независимо от того, прошло ли время или определено время начала и окончания съемки, вы хотите правильно зарегистрировать их, чтобы увидеть, все ли прошло хорошо (или если нет, то почему бы и нет).

Вот шаблон, аналогичный тому, который мы используем для регистрации и регистрации всей активности базы данных, которую мы реализуем. Мы используем его через sqlplus.exe для всех обновлений DDL (например, CREATE TABLE) и для вставок в установочные таблицы.

--Beginning of all SQL scripts:
set serveroutput on feedback on echo on verify on sqlblanklines on timing on define on
col time new_v v_time
col name new_v v_name
col user new_v v_user

select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time  from v$database;

--Creates a new log file every time the script is run, and it's immediately
--obvious when it was run, which environment it ran in, and who ran it.
spool &v_time._&v_name._&v_user..log 

--Run the select again so it appears in the log file itself
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time  from v$database;

Поместите тело вашей работы здесь.

--End of all SQL scripts:
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time  from v$database;
spool off
1 голос
/ 06 декабря 2011

Если вы работаете в Unix, вы также можете сделать это так:

time sqlplus @inserts.sql

Будет напечатано:

real    0m9.34s
user    0m2.03s
sys     0m1.02s

В первой строке указано общее время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...