ti-enxame.com

Obter tempo de execução do script sql no Oracle sqlplus

Eu tenho um script que eu uso para carregar meus dados em minhas tabelas no Oracle (por uma lista de instruções de inserção). Como posso obter o tempo de execução de todo o processo de carregamento? Eu tentei com set timing on, mas isso me dá uma duração para cada instrução insert e não para todo o processo. O script é mostrado abaixo:

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

Tente isso, adicione o seguinte no início e ele lembra a hora atual:

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

Adicione isso no final e ele calcula o tempo decorrido:

exec :n := (dbms_utility.get_time - :n)/100
exec dbms_output.put_line(:n)
16
勿绮语

Não sei por que todo mundo está fazendo isso tão complexo. Simples como:

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

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

1 row selected.

Elapsed: 00:00:00.00
SQL> 
18
Jon Coulter

É questão antiga, mas eu encontrei maneira fácil de medir o tempo de execução de um script no sqlplus. Você só precisa adicionar isso no começo

timing start timing_name

E isso no final de um script

timing stop

Mais informações sobre este comando podem ser encontradas no Guia e Referência do Usuário do SQL * Plus® da Oracle: Coletando estatísticas de tempo

16
Dcortez

O que você está descrevendo é essencialmente uma maneira de auditar a execução do script. Seja um tempo decorrido ou um horário específico de início e término que você está capturando, você deseja registrá-los adequadamente para ver se tudo correu bem (ou, se não, por que não).

Aqui está um modelo semelhante ao que usamos para capturar e registrar todas as atividades do banco de dados que estamos implementando. Nós o usamos via sqlplus.exe para todas as atualizações de DDL (por exemplo, CREATE TABLE) e para inserções em tabelas de configuração.

--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;

Coloque o corpo do seu trabalho aqui.

--End of all SQL scripts:
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time  from v$database;
spool off
3
BQ.

Se você está no Unix, também pode fazer o seguinte:

time sqlplus @inserts.sql

Irá imprimir:

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

A primeira linha fornece o tempo total de execução.

1
Stamm