ORACLE初心者です。
今 UNIXのORACLE 8を使用しています。
ストアドプロシージャーがあるのですが、レスポンスが悪いです。
改良したいのですが、まず評価したいと思っています。
評価情報として、体感スピードではなく、そのSQLの性能情報が数値わかるものを探しています。(例えば、CPUタイムとかテーブルアクセス数とか、なんでもいいのですが)
どうやったら簡単にそういった情報を取得できるでしょうか?
どなたか初心者の私にわかる表現でお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

実行時間程度であれば、sql*plusでset timing onをしておいてから、SQLを実行すれば、とれます。



最適化の情報などは、ObjectBrowserのSQL実行にSQLの分析情報やコスト、実行計画などを表示する機能があるので、これを使って最適化しています。

試用版がありますので、試してみては

参考URL:http://www.sint.co.jp/siob/
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

QUnix(soralis)で、Oracleに接続時にコアをはいて終了してしまう。

Pro*Cで、自動作成された、プリコンパイラをリンクして実行すると、「セグメント例外 (コアダンプしました)」となって止まってしまう。
Pro*Cのリストは以下のとおりでうs。

#include<sqlca.h>
main()
{
chara[20],b[20];

strcpy(a,"XX");
strcpy(b,"XX");
printf("test start\n");

EXEC SQL WHENEVER SQLERROR GOTO sql_error;
EXEC SQL CONNECT :a IDENTIFIED BY :b;

return(0);

sql_error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK WORK RELEASE;
printf("error\n");
return(1);
}

どうやら、Oracleへ接続してるところで、sqloxtという関数を呼び出しているところで止まってしまうらしいです。
コンパイル、リンクまでは、何事もなくいったのですが、実行してみるとダメです。
なにが、おかしいのでしょうか?

Pro*Cで、自動作成された、プリコンパイラをリンクして実行すると、「セグメント例外 (コアダンプしました)」となって止まってしまう。
Pro*Cのリストは以下のとおりでうs。

#include<sqlca.h>
main()
{
chara[20],b[20];

strcpy(a,"XX");
strcpy(b,"XX");
printf("test start\n");

EXEC SQL WHENEVER SQLERROR GOTO sql_error;
EXEC SQL CONNECT :a IDENTIFIED BY :b;

return(0);

sql_error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK WORK RELEASE;
printf("error\n")...続きを読む

Aベストアンサー

 えとですね。

 文字列は必ず、EXEC SQL BEGIN DECLARE SECTION; 内でホスト変数として宣言しなければいけません。
 なぜなら、通常の変数と違い、ホスト変数は実は構造体になっており、文字列の長さを設定するところがあるからです。
 今回の件は、通常の文字列を「構造体として」読もうとしているため、アクセスできない領域に無理矢理アクセスしようとしてコアダンプを吐いて止まってしまっています。

 また、このとき注意すべき点としては、文字列の長さを表す変数には、プログラマー(つまり Kannazuki さん自身)が自分で長さを設定しなければならないことでしょう。これが間違っているとオラクルはエラーを返します。

 具体的にはこうやります。

----------
char a[20], b[20];
   ↓
EXEC SQL BEGIN DECLARE SECTION;
varchar a[20], b[20];
EXEC SQL END DECLARE SECTION;

---------
strcpy(a,"XX");
strcpy(b,"XX");
   ↓
strcpy(a.arr, "XX");
a.len=strlen(a.arr);
strcpy(b.arr, "XX");
b.len=strlen(b.arr);
---------

 とまあ、これをやれば動くはずです。

 えとですね。

 文字列は必ず、EXEC SQL BEGIN DECLARE SECTION; 内でホスト変数として宣言しなければいけません。
 なぜなら、通常の変数と違い、ホスト変数は実は構造体になっており、文字列の長さを設定するところがあるからです。
 今回の件は、通常の文字列を「構造体として」読もうとしているため、アクセスできない領域に無理矢理アクセスしようとしてコアダンプを吐いて止まってしまっています。

 また、このとき注意すべき点としては、文字列の長さを表す変数には、プログラマー(つまり Ka...続きを読む

QASPからSQL Server2000のストアドプロシージャーを利用したいのですが。。

ASPからSQL Server2000のストアドプロシージャーを
利用したいのですが、記述の方法どのようにすれば
いいのでしょうか?

ストアドプロシージャーの結果をレコードセットと
して、ASPの中で使用したいのですが。。。

Aベストアンサー

まさに今作ってます。
以下のうようにやったら出来ます。
※省略をしているところ(変数宣言とか)も
 あるので自分の環境に合わせてください。

Const adOpenStatic = 3
Const adLockReadOnly = 1


strSQL = "Execute SP名" ← 引数を取るならそれも付けて


Set objResultSet = Server.CreateObject("ADODB.Recordset")
objResultSet.CursorType = adOpenStatic
objResultSet.LockType = adLockReadOnly
objResultSet.Open strSQL, コネクションオブジェクト

objResultSet(0) とか objResultSet(1) でアクセス可
objResultSet.EOF までとか言う判定も忘れずに!

QOracle8とOracle8iについて

サーバーにOralce8(8.0.5 nt)とOracle8i(8.1.7nt)があり
Oracle8の方のプログラムを作りたいのですが
Oracle8iのpro*cしか持っていません
このような場合oracle8用のpro*cを購入しないとだめでしょうか?
(ライセンスとか・・・)

Oralce8に接続するクライアントは今のままのバージョン(oracle8)を使用したいのですがOracle8クライアントのプログラムを8i用のpro*c8.1.7で作成できますか?
(このときはやっぱりクライアントは8iじゃないとだめでしょうか?)

回答、よろしくお願いします

Aベストアンサー

下位互換は無いようですね。
pro*c8.1.7ではOracle8i用のプログラムになってしまうようです。

取り扱い店に相談されるのが確実だと思いますがいかがでしょうか。

QOracle:Oracleシーケンスとは?

Oracleシーケンスとは何者なのでしょうか?
なにやら番号のようなものですよねえ・・・たぶん
ということで以下について教えて下さい。

1.シーケンスとは何ですか?
2.Oracleシーケンスとは何ですか?
3.どのようにOracleシーケンスを取得するのですか?

以上、宜しくお願いいたします。

Aベストアンサー

「順序」のことを言います。
平たく言えば、Oracleが用意しているカウンターです。
一意に採番するコードを生成する際などに使用します。

CREATE SEQUENCE文で「順序(シーケンス)」を生成し、作成(CREATE)されたシーケンスオブジェクトから、新たな値を取り出すことが可能になります。

QOracle8iのデータをOracle8へ移行する方法

Oracle8iでエクスポートしたファイルをOracle8へインポートすると
「IMP-00010:有効なエクスポート・ファイルではありません。
ヘッダーは検証に失敗しました。」
と出て失敗してしまいます。
講習会のテキストを読んでみると、「この方法ではうまくできないこと
のあります」とだけ書いてあり、どうすればうまく行くのかが
わかりません。
元々下位バージョンへ移行するということで、「ムリなんじゃないかなぁ~」
と思ってやってみたらやっぱりダメでした。
何か良い方法はないのでしょうか・・?

Aベストアンサー

ORACLE8iのエクスポートファイルじゃないとダメなんですか?
8i環境のテーブルのレコードを8環境に移行したいというのであれば、Oracle8iではなく、Oracle8のexpを使用してエクスポートファイルを作り、Oracle8のimpでデータを8環境に入れてやればいいはずです。


このカテゴリの人気Q&Aランキング

おすすめ情報