アーカイブ

‘Oracle’ カテゴリーのアーカイブ

Oracle SQLを実行しないで実行計画を取得する(EXPLAIN PLAN FOR)

2014 年 2 月 24 日 コメントはありません

UPDATE文やDELETE文など、直接SQLを実行しないで実行計画を確認したい場合があります。

そんな時に便利なのが、EXPLAIN PLAN文です。

EXPLAIN PLAN文を使うことで、SQLを実行しないでもOracleのオプティマイザが選択した実行計画を確認することができます。

使い方

実行計画を取得したいSQLの前にEXPLAIN PLAN FOR句を使用します。

SQL>EXPLAIN PLAN FOR
SQL>UPDATE EMP SET NAME=’xxx’ WHERE ID=’001′;

取得した実行計画を表示するには、DBMS_XPLAN.DISPLAYを使用します。

SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

 
もっと詳しく知りたいかたは、以下のページを参照してみてください。
>Oracle パフォーマンス・チューニングガイド(EXPLAIN PLANの使用方法)

http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05743-02/ex_plan.htm
 


カテゴリー: Oracle, 開発 タグ:

Oracle SQL を パラレルで実行してパフォーマンスを上げる方法(PARALLEL DML|DDL|QUERY)

2014 年 2 月 24 日 コメントはありません

データベースサーバのスペックが高くリソースに余裕がある場合、SQLをパラレルで実行することでパフォーマンスを大幅に上げることができます。

やり方

SQLを実行するSESSIONでパラレル実行を有効にします。
対象のSQLは、QUERY、DML、DDLの3種類です。

パラレル度(並列度)を指定することができます。

・QUERY

SELECT文を並列実行します。

ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4;

・DML

INSERTやUPDATE、DELETEなどSELECT以外のSQLを並列実行します。

ALTER SESSION FORCE PARALLEL DML PARALLEL 4;

・DDL

CREATE TABLEやCREATE INDEXなどのSQLを並列実行します。

ALTER SESSION FORCE PARALLEL DDL PARALLEL 4;

もっと詳細な内容を知りたいかたは、以下のリンクを参照してみてください。

>Oracle データウェアハウス・ガイド(パラレル実行の使用)
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19217-02/usingpe.htm


カテゴリー: Oracle, 開発 タグ:

Oracle CREATE TABLE AS SELECT 文 で表のコピー(バックアップ)を作成する

2014 年 2 月 24 日 コメントはありません

テストなどで一時的に表のバックアップを作成したい場合があります。

Export/ImportユーティリティやDataPumpを使用しても良いですが、CREATE TABLE文で簡単に表のバックアップが取得できます。

やり方

以下のように、CREATE TABLE文の後に、as Select …とSELECT文を書くだけです。
バックアップなので、COMPRESS句をつけて表を圧縮しています。

 

CREATE TABLE EMP_BK COMPRESS AS SELECT * FROM EMP;

これで、簡単に表の定義やデータをコピーすることができます。
索引や制約は引き継がれないので、必要であれば別に作成が必要です。
また、統計情報も引き継がれないので新たに取る必要があります。


カテゴリー: Oracle, 開発 タグ:

Oracle SQLPlus PL/SQL 変数(置換変数・バインド変数)の使い方

2013 年 6 月 13 日 コメントはありません

変数の使い方がいまいち理解できていなかったのでメモ。

OracleではSQLに変数を使うことができます。
この変数にはいくつか種類があって使い方が異なります。

置換変数

OracleのSQLでは、置換変数という変数を使用することができます。
置換変数にはDEFINEコマンドを使用して、事前に値を定義しておく事ができます。
SQLの中で置換変数を使用する場合は変数名の前に&(アンパーサンド)を付けて使用します。
 
DEFINEコマンドで定義されていない置換変数を使用した場合、SQL実行時にプロンプトが表示され値の入力が促されます。
 
DFINEコマンドで置換変数を定義しないで以下のようなSQLを実行するとmailに値を設定して下さいというプロンプトが表示されます。

SQL> SELECT * FROM CUSTOMER WHERE MAIL_ADDRESS = ‘&mail’;

DEFINEコマンド

置換変数を事前に定義して値を設定できます。
設定した変数はスクリプトの中で繰り返し使用できます。

DEFINE 変数名=値
SQL> DEFINE mail=hoge@hoge

と設定して置換変数&mailの値を事前に設定しておく事ができます。

ただ単に、DEFINEとだけコマンドを実行すると
現在定義されている置換変数の一覧を表示することができます。

置換変数(引数)

変数名に数字のみを使用すると、SQLスクリプトファイルに渡された引数が順番に格納されます。

SQLスクリプトファイル:test.sql
SELECT * FROM CUSTOMER WHERE MAIL_ADDRESS = ‘&1′ OR TEL = ‘&2′;

SQL> @test.sql hoge@hoge.com 111-1111

&1に、hoge@hoge.com
&2に、111-1111

が入ります。

また、置換変数(引数)の場合、SQLスクリプト中のすべての置換変数が繰り返し置き換わります。

この時、DEFINEコマンドで置換変数を確認してみると以下のように設定されている事が確認できます。

SQL>define
DEFINE 1=hoge@hoge
DEFINE 2=111-111

 
置換変数について、もっと詳しい内容は以下のOracleのページを参照してみてください。
>Oracle SQL*Plus ユーザーズガイド(置換変数)
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19277-01/ch5.html#7364

バインド変数

バインド変数は、SQL*PlusとPL/SQLの双方で参照できる変数です。
PL/SQLに値を渡したり、結果を受け取ったりできます。
バインド変数は var 変数名 型 と宣言します。

SQL> var count number;

宣言したバインド変数は、PL/SQLから変数名の前に:コロンをつけて参照したり値を格納することができます。

SQL> BEGIN
SQL> :count:=3;
SQL> END;
SQL> /

PL/SQLで設定した値を、SQL*Plusで画面に出力するにはPRINTコマンドを使います。

SQL> PRINT count

 
バインド変数についての詳細は以下のOracleのページを参照してみてください。
>Oralce SQL*Plusユーザーズガイド(バインド変数の使用方法)
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19277-01/ch5.html#9862
 


カテゴリー: Oracle, 開発 タグ: , ,