こんにちは、だいちゃんです。
Oracle Databaseの勉強をしなくちゃいけなくなり、超基礎の部分から分からなくてアワアワしてます。自分が見直しやすいように記事をノート代わりに使ってみようと思います。
データ操作言語(Data Manipulation Langage)
- INSERT ... 行の追加(挿入)
- UPDATE ... 値の更新
- DELETE ... 行の削除
- MERGE ... 他の表にある行をマージ
データ定義言語(Data Definition Langage)
- CREATE ... オブジェクトの作成
- DROP ... オブジェクトの削除
- ALTER ... オブジェクトの定義変更
- RENAME ... オブジェクトのリネーム
- TRUNCATE ... 表の全行を削除
- COMMENT ... オブジェクトへのコメント登録
- COMMIT ... トランザクションの確定(コミット)
- ROLLBACK ... トランザクションの取り消し
- SAVEPOINT ... セーブポイントの設定
データ制御言語(Data Control Langage)
- GRANT ... 権限の付与
- REVOKE ... 権限の取り消し
データブロックごとに読み書きされる。ハードウェアはエクステントという単位で区分けされていて、複数のデータブロックを保存できる。
表などのオブジェクトはセグメントと呼ばれ、実際は複数のエクステントに分散して保存されてる。
- セグメント
- データ格納領域が必要なオブジェクト(表など)
- 論理領域
- 複数のエクステントの塊
- データブロック ... 読み書きの最小単位
- エクステント ... データブロックの塊。ハードウェアの領域の単位。
- 条件ごとに作成し、データブロックの位置だけが記録されてる
- その条件に合致する行がどこのデータブロックにあるかすぐ見つかるようにする
- PRIMARY制約とUNIQUE制約を付けると自動で索引が作られる
- ルート>ブランチ>リーフ の順で探索できる
- 各リーフが均等(=Balanced)だからBツリー索引とも
- データを更新したら索引も自動でアップデートされる
- SELECT文を保存したSYSユーザーのスキーマオブジェクト
- ※スキーマオブジェクトはユーザーごとに作成できるオブジェクトで、データディクショナリに保存される
- 実際の表の一部を切り抜いた仮想表のようになってる(実体はSELECT文だけが保存されてる)
- ビューに対してDML(データ操作)文も使える
- 元になる表にNOT NULL列があるのにビューに含まれて無ければ、INSERTなどでエラーになる
- ビュー自体は値を持ってない(普通にSELECTする)ので高速化には関与しない
PL/SQL言語で書かれたプログラムで、ソースコードとコンパイルされたプログラムがデータベースに格納される
- プロシージャ ... 値を返さない
- ファンクション ... 値を1つだけ返す
- パッケージ ... 複数のプロシージャ or ファンクションを含む
- トリガー ... 表orビューに関連付け。トリガー自体をプログラムとして実行可能。
データファイル・REDOログファイル・制御ファイル
上記の各ファイル感の整合性を保つためのOracle内部のタイムスタンプ
- REDOログメンバー
- 1つ以上必要
- 複数用意するときは、冗長化のために物理ディスクを分けて保存する。
- ロググループが違うログメンバーは同じディスクに置ける
- 複数用意するときは、全く同じ内容をすべてのメンバーに記録する
- REDOロググループ
- 1つ以上のREDOログメンバーで構成
- 一杯になったら、REDOログスイッチによって次のロググループへ
データベースライタ。複数起動可能。
データベースバッファキャッシュ→データファイルへの書き込みを行う。
チェックポイント。
チェックポイント時に、データファイルのヘッダーと制御ファイルにSCN(タイムスタンプ)を書き込む
ログライタ。
コミット時に、REDOログバッファ→REDOログファイルへの書き込みを行う。
アーカイバ。複数起動可能。
ARCHIVELOGモード時に、REDOログファイル→アーカイブREDOログファイルへアーカイブを行う。
システムモニタ。
インスタンス障害(メモリでの障害)後、再起動したときにREDOログファイルを元に回復を行う。
プロセスモニタ。
プロセス障害(クライアントが突然落ちたとか)時に回復させる。通信相手がいなくなったサーバープロセスをクリーンアップする。
管理モニタ。
パフォーマンス関連の統計情報を取得する。
データファイル名・REDOログファイル名・現行のログ順序・データベース作成のタイムスタンプ・チェックポイント情報・SCN を保存
SGA(System Global Area)のサイズ・バックグラウンドプロセスに関するパラメータ・制御ファイルの名前と場所 を保存
- CONTROL_FILES ... 静的 制御ファイル名
- DISPATCHERS ... 動的 ディスパッチャプロセスの構成
- MEMORY_MAX_TARGET ... 静的 MEMORY_TARGETの最大値
- MEMORY_TARGET ... 動的 Oracleシステム全体の使用可能なメモリー
- PGA_AGGREGETE_TARGET ... 動的 サーバープロセスが使用できるターゲット集計メモリー
- SHARED_POOL_SIZE ... 動的 共有プールのサイズ
- SGA_MAX_SIZE ... 静的 インスタンスのSGA(System Global Area)の最大サイズ
- SGA_TARGET ... 動的 SGAコンポーネントの合計サイズ
- UNDO_RETENTION ... 動的 UNDO保存の下限値(秒)
MMONが収集し、SYSAUX表領域内のAWR(自動ワークリポジトリ)に保存する。
デフォルトだと、60分間隔で収集し、8日間保存される。
自動データベース診断モニター。
AWRに保存されたスナップショットを診断し、結果をAWRに格納する。データベース全体のアドバイスを提供する。
- メモリアドバイザ ... (自動メモリー管理モード時)インスタンス全体のメモリを最適化する
- PGAアドバイザ ... (自動PGAメモリー管理モード時)PGA全体のメモリーを最適化する
- SGAアドバイザ ... (自動共有メモリー管理モード時)SGAの各コンポーネントサイズを最適化する
- 共有プールアドバイザ ... 共有プールの最適サイズを提供する
- データバッファキャッシュアドバイザ ... データベースバッファキャッシュの最適サイズを提供する。
- SQLチューニングアドバイザ ... SQLの書き換え、索引作成を推奨する
- SQLアクセスアドバイザ ... アクセスパスに関するチューニングを推奨する
- セグメントアドバイザ ... オブジェクト内の断片化を調査し、セグメントの縮小操作をアドバイスする
- UNDOアドバイザ ... UNDO表領域サイズをアドバイスする
- MTTRアドバイザ ... インスタンス障害後の平均リカバリ時間をチューニング
- データリカバリアドバイザ ... リカバリを提供