oracle

SGA

システムグローバル領域(SGA)というメモリ構造。以下の5つに分けられる。 共有プール →SQLの解析に使用する領域。 データベース・バッファ・キャッシュ →最近読み込んだデータのキャッシュ領域。 REDOログ・バッファ →更新された履歴を保持するバッファ領…

ローカル・サブプログラム

変数の宣言部にサブプログラムを定義できる。 これによって単独のストアドプロシージャの内部もモジュール化することができる。 パッケージを利用したり、ストアドプロシージャの分割をするほどでもないような 簡単なロジックはこれを使うとよいかも。 サブ…

ビットマップインデックス

○長所 ・Null値のインデックス検索が可能 ・インデックスのサイズは小さめ(B-Treeと比べて) ・カーディナリティ(データのバラつき)が低い場合は高速 ○短所 ・更新パフォーマンスは通常のインデックスに比べて低い →更新時にオブジェクト単位でのロックが発…

MAX関数でORA-06502

PL/SQL内でchar型の項目に対し、MAX/MIN関数を使用すると取得した値の桁数が4000バイトになってしまうことがある。 で、INTOで指定した変数の桁数が少なければORA-06502が発生する。 oracleのバージョンが 10.1.0.4 、10.2.0.1のときこの現象が発生する。 以…

DBMS_PROFILER

ストアドの行ごとのコストを調べることができる。 実行するには以下の手順で。 ■DBMS_PROFILERをインストールする。 sqlplusを起動し、sysユーザで接続する conn sys/ora_pass@orcl as sysdba profload.sqlを実行し、パッケージをコンパイルする @?/rdbms/ad…

ユーザの作成・削除

ユーザを作成する CREATE USER hogeUser IDENTIFIED BY hogePwd; DBA権限を付与する GRANT DBA TO hogeUser; ユーザを削除する DROP USER hogeUser CASCADE;※CASCADEオプションをつけないとオブジェクトを所有しているユーザは削除できない

表領域の断片化

DBA_FREE_SPACE_COALESCED 表領域の断片化を調べるビュー 表領域の断片化はtableのDropやCreateを頻繁に行うと発生しやすい。 PERCENT_EXTENTS_COALESCEDの値が低い表領域は断片化が激しいので 以下の命令で断片化を解消するとよい. ALTER TABLESPACE 表領域…

ANALYZE TABLE

オプティマイザが使用する統計情報を収集してデータディクショナリに格納する。 オプションはANALYZE INDEXと同じ。 -- 全データの10%を使用して、統計情報を作成する ANALYZE TABLE テーブル名 ESTIMATE STATISTICS SAMPLE 10 PERCENT; -- 全データを使用…

BULK COLLECT

BULK COLLECT INTOを使うとSELECTやフェッチで一度に複数のレコードを取得することができる。 バルクフェッチでの使用例 SET SERVEROUTPUT ON; DECLARE --*=====================================================* --* 変数定義 * --*=====================…

初期化パラメータ

1.初期化パラメータを操作するSQL 現在有効になっている初期化パラメータを調べる SELECT * FROM v$parameter; 初期化パラメータを設定する ALTER SYSTEM SET 初期化パラメータ名 = '設定する値' ; 初期化パラメータをクリアする ALTER SYSTEM SET name…

ダイレクトロードインサート

他のテーブルから大量にデータをコピーする場合、APPENDヒント句を付与することにより、 バッファ・キャッシュ(SGA)を経由せずにINSERT処理を行うこと。 使用上の注意 ・表単位のロックが発生する ・INSERT後にコミットが必要(コミットする前にそのテーブ…

INDEXに関するメモ

INDEXが有効にならないケース ・Null値の検索 ・暗黙の型変換 ・INDEXのカラムに対して関数/演算を使用 ・LIKEの中間、後方一致 ・Not Equalの使用 INDEXの効果が薄いケース ・テーブルのDELETEが頻繁に行われる (DELETEされてもINDEXノードは再利用のため残…

SHRINK

セグメントを縮小するコマンド なお、SHRINKはoracle10gからの機能 ALTER TABLE テーブル名 SHRINK SPACE; SHRINKを行うとROWIDが代わってしまうのでROWIDマテリアライズビューを使用している場合は再作成が必要となる。

レプリケーション

Oracleのレプリケーションには以下の3つがある。 ○基本 Replication ・DataBase Link経由で他のユーザ(サーバ)のテーブルを対象にマテリアライズビューを作成することにより実現 ・レプリカサイトからの更新をマスターサイトに反映することも可能 ・非同期…

Oracle VM

・無償 ・ハイパーバイザタイプ(ホストOSを必要としない) ・オープンソースのVMであるXen(ゼン)を機能拡張したもの ・ブラウザベースのGUIにより管理が可能 ・Oracle DataBaseをサポート (VMWareはサポートしていない ※2008/5 現在) ・ライブマイグレ…

oracleのimport/exportの注意点

DBAのあるユーザがexportしたものはDBAがあるユーザでないとimportできない。 なので、別サーバにデータを移行したい場合に上記の点を注意すること。 エラーメッセージ IMP-00013: DBAのみ別のDBAがエクスポートしたファイルをインポートできます。自分の権…

ORA-00600: 内部エラー

oracleの内部エラー (oracleのバグ?)。 対処方法は「サポートに問い合わせる」or 「諦めて他の方法にする」or 「パッチを当ててみる」。 発生原因は様々。ハードウェアが原因のこともあるので原因を探すのはすごく困難。 再現しないようであれば無視したほ…

DBMS_JOB

DBMS_JOBでjobを登録すると決まった時間にSQLを実行してくれる。 alter index や analyze などを登録しておくと便利。 jobを登録する declare job number ; begin --JOBの登録 DBMS_JOB.submit(job, --job番号 (戻り値) 'update wk_table1 set money =111;',…

indexのチューニング

indexの情報を調べるのは以下のとおり --INDEXの分析 ANALYZE INDEX index_name VALIDATE STRUCTURE --INDEX情報の出力 (先に ANALYZE INDEX を実行すること) SELECT NAME, --INDEX名 LF_ROWS, --現在のINDEX LF_ROWS_LEN, --現在のINDEXサイズ DEL_LF_ROWS,…

SAVEPOINT

指定したSAVEPOINTまでRollbackする。 SAVEPOINTの作成 SAVEPOINT savepoint名;SAVEPOINTを指定してRollback ROLLBACK TO savepoint名;使用例 INSERT INTO TMP_TABLE_A (NAME,MONEY) VALUES ('HARADA',121); SAVEPOINT INSERT_A; INSERT INTO TMP_TABLE_A (N…

TEMPORARY TABLE

一時的にレコードが保持されるテーブル。 TEMPORARY TABLEのレコードは作成したセッション内でしか参照できない。 ※MSSqlServerの一時表と違い、一度定義したテーブルはDropしない限り存在する。 TEMPORARY TABLE のDDL 例 CREATE GLOBAL TEMPORARY TABLE TM…

GOTO文、ユーザ例外

oracleでのGOTO文のサンプル。 また、ユーザ例外でも似たようなことができるので併せてメモ。 HARADA_LAB3.sql CREATE OR REPLACE FUNCTION HARADA_LAB3 (PA_MESSAGE OUT VARCHAR2 ) RETURN NUMBER AS --例外の定義 USER_ABEND EXCEPTION; BEGIN DBMS_OUTPUT…

DDL文の取得

DBMS_METADATA.GET_DDLでオブジェクトのDDLを取得できる 書式 DBMS_METADATA.GET_DDL(object_type,object_name) 使用例 SELECT DBMS_METADATA.GET_DDL('TABLE','WK_TABLE_1') FROM DUAL; グリッドとかでは結果が見難いようであればspool をonにして出力した…

DDL文の暗黙コミット

DDL文を実行すると暗黙的なCommitが発行される。 なので、以下のようにストアドの中でTruncateなどのDDL文が実行されるような場合、 DDL文の発行と同時にCommitが発行されるので、その点を注意する必要がある。 harada_lab2.sql CREATE OR REPLACE FUNCTION …

intersect演算子

2つの結果のどちらにも存在する行を返す。用途はExists句とほぼ同じ。 下記の例は2つのテーブルを比較し、同じColumsを出力する select column_name,data_type,data_length from user_tab_columns where table_name = 'table_1' intersect select column_n…

ストアドのコンパイル時に文字を埋め込む

ストアドプロシージャ内に&を記述しておくと、 そこの値はコンパイル時に値を埋め込むことができる。 harada_lab.sql CREATE OR REPLACE FUNCTION harada_lab (Pa_Message OUT VARCHAR2 ) RETURN NUMBER AS USER_ABEND EXCEPTION; BEGIN --&comment DBMS_OUT…

USER_DEPENDENCIES (依存関係の表示)

user_dependencies ビューでオブジェクトの依存関係を参照することができる。 select * From user_dependencies where Name = オブジェクト名上記のビューを利用して指定したオブジェクトの依存関係を出力するスクリプトを 作成してみた。 ファンクションが…

recyclebin

oracle 10gより追加された機能。削除したオブジェクトを保持しておく。 テーブルスペースの容量が不足した場合に自動的に削除される。 recyclebinに前回dropしたオブジェクトが残っていると、再度dropできなくなることがあるので注意。 その場合はpurgeを実…

ストアドの中でTuncateを発行するには

ストアドの中では通常、Truncate文を記述できないが 以下のように動的ストアドとして実行すれば記述が可能である。 EXECUTE IMMEDIATE 'truncate table t_Hogehoge'; ※Truncate文はDDL文なのでコミットが発生する点に注意

oracleのアップグレード

oracleのアップグレードはターミナルリリースというバージョンかどうかで 直接アップグレードできるか、できないかが分かれる。 例えば、orace9i(R9.0.2.8)をoracle11gにアップグレードすることはできるが orace9i(R9.0.2.3)をoracle11gにアップグレードする…