2011-12-06 12 views
11

Oracleの表にデータをロードするために使用するスクリプトがあります(insert文のリストによって)。ロードプロセス全体の実行時間を取得するにはどうすればよいですか?私はset timing onで試しましたが、それは私に各insert文の持続時間を与え、プロセス全体ではありません。スクリプトを以下に示します。oracle sqlplusでsqlスクリプトの実行時間を取得

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 

が最後にこれを追加し、それは経過時間を計算します。

あなたがUnixである場合
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

、あなたもそのようにそれを行うことができます。

time sqlplus @inserts.sql 

それが印刷されます:

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

最初の行は、総実行時間を与えます。

+0

まだ他の人の投稿にはコメントできませんので、ここでコメントします。上記のPeterPeiGuoさんの答えを編集して、** set serveroutput **を追加しました。メッセージが正しく表示されます。 – Stamm

+0

これは、終了しないスクリプトでは機能しません。たとえば、@ catalogをタイムリーにする。sql、私はこれをしなければなりません: 'date;エコー終了| sqlplus "/ as sysdba" @ catalog.sql>〜/ catalog.out;日付 ' –

3

基本的には、スクリプトの実行を監査する方法です。経過時間であっても、キャプチャしている特定の開始時間と終了時間であれ、正常に記録されているかどうか(またはそうでない場合は、どうしてそうではないか)を正しく記録したいでしょうか。

ここでは、実装しているすべてのデータベースアクティビティのキャプチャとロギングに使用するのと同様のテンプレートを使用します。すべてのDDL更新(例えばCREATE TABLE)にはsqlplus.exeを使用し、セットアップテーブルには使用します。

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

詳しい情報は、OracleのSQL * Plusユーザーズ・ガイドおよびリファレンスで見つけることができますスクリプトの終わりに始まり

timing start timing_name 

そして、この上でこれを追加する必要がありますCollecting Timing Statistics

関連する問題