在oracle sqlplus中获取sql脚本的执行时间

时间:2011-12-06 14:13:20

标签: oracle

我有一个脚本用于将我的数据加载到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 个答案:

答案 0 :(得分:16)

试试这个,在开头添加以下内容并记住当前时间:

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)

答案 1 :(得分:15)

不确定为什么每个人都这么复杂。简单如下:

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

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

1 row selected.

Elapsed: 00:00:00.00
SQL> 

答案 2 :(得分:14)

这是一个古老的问题,但我找到了一种简单的方法来衡量在sqlplus中运行脚本的时间。你只需要在开头添加它

timing start timing_name

这是脚本的结尾

timing stop

有关此命令的更多信息,请参见Oracle的SQL *Plus®用户指南和参考:Collecting Timing Statistics

答案 3 :(得分:3)

您所描述的内容实际上是一种审核脚本执行的方法。无论是经过时间,还是特定的开始和结束时间,您都需要正确记录它们以确定事情是否顺利(或者如果没有,为什么不呢)。

这是一个类似于我们用于捕获和记录我们正在实现的所有数据库活动的模板。我们通过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

答案 4 :(得分:1)

如果你在Unix上,你也可以这样做:

time sqlplus @inserts.sql

它将打印:

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

第一行给出总执行时间。