Получить время выполнения sql script в oracle sqlplus

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

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

Ответ 1

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

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)

Ответ 2

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

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

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

1 row selected.

Elapsed: 00:00:00.00
SQL> 

Ответ 3

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

timing start timing_name

И это в конце script

timing stop

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

Ответ 4

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

Здесь шаблон, аналогичный тому, который мы используем для захвата и регистрации всей деятельности базы данных, которую мы реализуем. Мы используем его через 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 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

Ответ 5

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

time sqlplus @inserts.sql

Он будет печатать:

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

Первая строка дает общее время выполнения.