oracle

I/Oの待機イベント

V$SESSION_EVENTビューではセッション開始後のイベントの待機の合計情報を取得することができる。。 SELECT SID, EVENT as 待機イベントの名前, TOTAL_WAITS as 待機回数, TIME_WAITED/100 as 待ち時間計_秒, WAIT_CLASS FROM V$SESSION_EVENT ORDER BY 1ま…

ファンクション索引

これを利用すると関数の結果に対してインデックスを作成することができる。 関数の結果をあらかじめ計算しておき、インデックスとして作成されている。 使用例 (日付のMMDD部分のみでインデックスを作成する ) CREATE INDEX TBL_HOGE_IX2 ON TBL_HOGE (SUBST…

ロックを発生させているセッションを調べる

ロックを発生させているセッションを調べるSQLは以下の通り SELECT * FROM V$SESSION WHERE SID IN ( SELECT SID FROM V$LOCK WHERE TYPE IN ('TM','TX') )TYPEは以下のロックの種類を表す TM → DMLエンキュー(表ロック) TX → トランザクション・エンキュ…

NULLS FIRST LAST

NULLS オプションを使用すると ORDER BYしたときにNULLを最初にするか最後にするかを指定することができる。 Oracle 8.1.6からの機能。NVL関数でも実現できるけど・・・ 以下使用例 SELECT * FROM HOGE ORDER BY WRTDT ASC NULLS FIRSTSELECT * FROM HOGE OR…

ORA-12516

Oracleのセッション・プロセス数が上限を超えた場合に発生することがある。 上限は初期化パラメータを変更することで増やせるが、 増加させた分、リソースを消耗するのであまり大きくしすぎないほうがよい。 現在のセッション・プロセスの状況を調べるSQL SE…

ソートするカラム、方向を切り替える

ストアドで使用するカーソルをパラメタの値によってソートする項目、及びソート方向を切り替える例。 どうしても動的SQLを使用したくない場合などに以下の方法で実現可能。 ただし、以下の点に注意 ・レスポンスは無視しているのでINDEXにはたぶん当たらない…

SELECT結果でUPDATE

ORACLEでSELECTした結果でUPDATEする例 UPDATE HOGE_A SET (UODGENKN, UODKEIKN) = ( SELECT SUM(HOGE_B.UODGENKN) , SUM(HOGE_B.UODKN) FROM HOGE_B WHERE HOGE_B.DATNO = HOGE_A.DATNO ) WHERE HOGE_A.DATNO = '999999' ; 動作確認環境:Oracle 11g

WITH句

WITH句を使用するとSQLの先頭に仮想のビューのように副問い合わせのビューを定義することができる。 1つのSQLの中に同じ条件の副問い合わせを複数回記述しなければならない場合に使用すると便利 WITH句を使用しなかった場合 SELECT * FROM (SELECT 'test' F…

OIP-04109

Oracle Objects for OLE(OO4O)で発生するエラー。 Dynasetを作成するときにNOCASHオプションを付けていなかった場合に発生することがある。 NOCASHオプションを付けていない場合、Tempフォルダにoipsr***(***は連番)のファイルを作成するが プログラムを同…

ORA-03113: 通信チャネルでファイルが終りになりました。

oracleでPL/SQLを実行した際に以下のエラーが発生することがある。 ORA-03113: 通信チャネルでファイルが終りになりました。 ORA-03114: Oracleに接続されていません どうやら、Nullの値に対してTRIM関数を実行した場合に発生する模様。 回避策としてTRIMを…

ORA-12535: TNS:操作はタイムアウトしました

TNSに接続できない場合に発生するエラー。 このエラーが発生した場合は以下の内容を試してみること。 コマンドプロンプトよりtnspingを実行してみる tnsping ローカルネットワークサービス名 サービス「TNSListener」が起動されていることを確認する →起動さ…

表領域の追加

alter tablespaceで表領域にファイルを追加することができる。 表領域「USERS」にデータファイルを追加する例 alter tablespace USERS add datafile 'D:\oradata\USERS02.dbf' size 1000M;表領域は以下のビューで確認できる select a.name, b.name from v$da…

入力は1文字に切り捨てられました

SqlPlusでテキストファイルを実行したときに「入力は1文字に切り捨てられました」というメッセージがでることがある。 これはテキストファイルの末尾の「/」の後に改行が入っていない場合に発生する。 なので「/」の後ろに改行を付けるとこのメッセージは発…

ORA-12560:TNSプロトコル・アダプタ・エラー

Terminal ServiceでOracleのデータベースを作成しようとすると 「Database Configuration Assitant」の途中で 「ORA-12560:TNSプロトコル・アダプタ・エラー」が発生することがある。 回避先としてはTerminal Serviceからインストールしないようにすればよい…

統計情報のバックアップ・リストア

統計情報のバックアップ・リストア手順は以下の通り。 ユーザごとのバックアップ・リストア --統計情報の格納テーブルを作成する (テーブル名は任意でよい) exec dbms_stats.create_stat_table('SCOTT','STAT_TABLE_ALL') --作成したテーブルにユーザ「SCOTT…

自動オプティマイザ統計収集

oracleの自動オプティマイザ統計収集はジョブスケジューラに登録されているので そのジョブを無効にすることにより統計情報の自動収集をやめることができる。 統計情報の自動収集を無効にする。 exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB'); ジョブス…

データベースバッファキャッシュ

データベースバッファキャッシュ率は統計情報を格納しているV$SYSSTATより 取得することができる。キャッシュ率は90%以上が好ましい。 キャッシュ率を取得するSQL SELECT db_block_gets --キャッシュIOブロック数その1 ,consistent_gets --キャッシュIOブロ…

USER_EXTENTS

テーブル、インデックスのエクステント情報を参照するためのビュー。 SELECT * FROM USER_EXTENTS WHERE SEGMENT_NAME = 'テーブル名 or インデックス' EXTENT_IDが増えることによってエクステントが発生したか判断できる。 ただし、エクステントの発生時間…

ALTER SYSTEM FLUSH SHARED_POOL

共有プールをクリアする。 ALTER SYSTEM FLUSH SHARED_POOL; Oracle10gからの機能。インスタンスを再起動することなく、キャッシュをクリアできる。 Oracle9iにはこの機能がないのでキャッシュをクリアしたい場合にはインスタンスの再起動が必要。 なお、使…

Null同士の比較

Null=Nullの結果はFalseとなる。 変数に格納されている状態でも同じなので注意。 set serveroutput on; declare wkVal1 char(1); wkVal2 char(1); begin wkVal1 := null; wkVal2 := null; if wkVal1 = wkVal2 then DBMS_OUTPUT.PUT_LINE('equal' ); else DBM…

改行コード

oracleでの改行コードは以下の通り CHR(13)・・・CR CHR(10)・・・LF カラムの値に改行コードが含まれているか調べるには以下のようにLIKEで 文字列結合するとよい SELECT * FROM tbl_hoge WHERE name LIKE '%' || CHR(13) || '%' 動作確認環境:oracle10g

Insert文のチューニング

oracleでInsert命令のチューニングを行うには以下の手段がある。 1.ダイレクトロードインサートを使う メリット: APPENDヒント句を記述するだけでOKなのでプログラムの改修が不要。 デメリット: Insert実行後に必ずcommitを発行する必要がある。 表単位のロ…

STATSPACK

Oracleの性能分析をするためのレポートを作成するOracleデータベース標準のツール インストール、使用手順は以下のとおり。 SQLトレースと比べ、処理は軽いが採取できる情報が異なるため使い分けが必要。 ・インストール手順 1.SYSDBAでSQLPlusからログイン …

動的パフォーマンスビュー

V$SQL,V$SQL_TEXT,V$SQL_PLAN。 現在共有SQL領域にキャッシュされているSQLの情報が格納されている。 これらを用いて、チューニングが可能。 1.V$SQLで調査したいSQLのSQLIDを調べる SELECT * FROM V$SQL WHERE SQL_TEXT LIKE '%HOGE_TBL%' 2.EnterPrise Man…

AWRレポート

Oracle10gより提供された機能。Enter Prise Managerで性能分析がGUIにより収集、レポート作成までできる。 Statspackより手軽、かつ詳細。 ただし、利用するにはEnterprise Edition でかつ Oracle Diagnostics Pack のライセンスが必要。 レポート作成までの…

動的SQLでカーソルオープン

SET SERVEROUTPUT ON DECLARE --カーソルタイプの定義 TYPE typeMyCursor IS REF CURSOR; --カーソル変数の定義 curHoge typeMyCursor; --INTOで受け取る変数 WK_MONEY Hoge.money%TYPE; --SQL生成用 WK_SQL VARCHAR(2000); BEGIN --動的SQL文の作成 WK_SQL …

共有サーバ

Oracle Netを使用した接続には以下の2つがある。 ・専用サーバ接続 ユーザープロセスとサーバプロセスが1対1で関連付けられる。 リソース消費大 デフォルトはこちらのみ ・共有サーバ接続 クライアントからディスパッチャが受け取ったSQLをキューに格納して…

char型の比較

1.char型とvarchar型を比較する場合、char型にスペースが埋められる点を考慮する必要がある。 2.char型同士の比較であれば桁数を気にしなくてよい。 3.SUBSTRなど関数を使用した場合、スペースを考慮する必要がある。(関数の戻り値はchar型ではない??) 以…

NESTED TABLE型

コレクション型。 VARRAYと違い、配列のサイズを指定しなくてよい。 また、deleteなどメソッドを実装している。 SET SERVEROUTPUT ON DECLARE --NESTED TABLE型の定義 TYPE tMyList IS TABLE OF VARCHAR2(20) INDEX BY VARCHAR2(3); --上記の型を利用した変…

DROP CONSTRAINT

プライマリキーを変更するにはDROP CONSTRAINTで行う。 以下、使用例 ALTER TABLE tbl_Hoge DROP CONSTRAINT PK_tbl_Hoge ; Alter Table tbl_Hoge Add Constraint PK_tbl_Hoge Primary Key ( hogeId,hogeNo );