2011-12-06 209 views
11

我有一个脚本,用于将我的数据加载到Oracle中的表中(通过插入语句列表)。我怎样才能得到整个加载过程的执行时间?我已经尝试过set timing on,但是这给了我每个插入语句的持续时间,而不是整个过程。该脚本如下所示:在oracle中获取sql脚本的执行时间sqlplus

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

回答

14

试试这个,添加以下的开头和它会记住当前时间:

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) 
+0

只是打败了我....或者在SQL Developer或PLSQL Developer等工具中运行您的脚本,它会告诉您自己已经过去的时间。 – Rene

+0

该函数的输出是'PL/SQL过程已成功完成。'而不是时间:),是否可以使用'systimestamp'来拥有日期等?剧本将在某个时间点需要几个小时,并在夜间运行,所以日期将很重要! – aweis

+0

是的,就在我退出之前; – aweis

1

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

time sqlplus @inserts.sql 

它会打印:

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

第一行给出的总执行时间。

+0

由于我无法评论其他人的帖子,我在这里评论。我编辑了PeterPeiGuo的上面的答案,在**上添加了** set serveroutput。它会正确显示消息。 – Stamm

+0

这对于不退出的脚本不起作用。例如,时间@catalog。SQL,我不得不这样做:'日期;回声退出| sqlplus“/ as sysdba”@ catalog.sql>〜/ catalog.out;日期' –

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 
10

不知道为什么大家都这么复杂。简单如:

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

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

1 row selected. 

Elapsed: 00:00:00.00 
SQL> 
+5

'set timing on'将打印每条语句的时间,这个问题是关于获取整个脚本的时间。 –

10

它的老问题,但我找到了简单的方法来衡量在sqlplus中运行脚本的时间。你只需要添加本就开始

timing start timing_name 

这在脚本的末尾

timing stop 

有关此命令的更多信息可以在Oracle的SQL *PLUS®用户指南和参考发现: Collecting Timing Statistics

相关问题