無趣味の戯言

📄️

Oracle DB自分的まとめ

こんにちは、だいちゃんです。

Oracle Databaseの勉強をしなくちゃいけなくなり、超基礎の部分から分からなくてアワアワしてます。自分が見直しやすいように記事をノート代わりに使ってみようと思います。


SQLの分類

データ検索

  • SELECT

DML

データ操作言語(Data Manipulation Langage)

  • INSERT ... 行の追加(挿入)
  • UPDATE ... 値の更新
  • DELETE ... 行の削除
  • MERGE ... 他の表にある行をマージ

DDL

データ定義言語(Data Definition Langage)

  • CREATE ... オブジェクトの作成
  • DROP ... オブジェクトの削除
  • ALTER ... オブジェクトの定義変更
  • RENAME ... オブジェクトのリネーム
  • TRUNCATE ... 表の全行を削除
  • COMMENT ... オブジェクトへのコメント登録

トランザクション制御

  • COMMIT ... トランザクションの確定(コミット)
  • ROLLBACK ... トランザクションの取り消し
  • SAVEPOINT ... セーブポイントの設定

DCL

データ制御言語(Data Control Langage)

  • GRANT ... 権限の付与
  • REVOKE ... 権限の取り消し

領域

データブロックごとに読み書きされる。ハードウェアはエクステントという単位で区分けされていて、複数のデータブロックを保存できる。
表などのオブジェクトはセグメントと呼ばれ、実際は複数のエクステントに分散して保存されてる。

  • セグメント
    • データ格納領域が必要なオブジェクト(表など)
    • 論理領域
    • 複数のエクステントの塊
  • データブロック ... 読み書きの最小単位
  • エクステント ... データブロックの塊。ハードウェアの領域の単位。

索引とビュー

索引

  • 条件ごとに作成し、データブロックの位置だけが記録されてる
  • その条件に合致する行がどこのデータブロックにあるかすぐ見つかるようにする
  • PRIMARY制約とUNIQUE制約を付けると自動で索引が作られる
  • ルート>ブランチ>リーフ の順で探索できる
  • 各リーフが均等(=Balanced)だからBツリー索引とも
  • データを更新したら索引も自動でアップデートされる

ビュー

  • SELECT文を保存したSYSユーザーのスキーマオブジェクト
  • ※スキーマオブジェクトはユーザーごとに作成できるオブジェクトで、データディクショナリに保存される
  • 実際の表の一部を切り抜いた仮想表のようになってる(実体はSELECT文だけが保存されてる)
  • ビューに対してDML(データ操作)文も使える
    • 元になる表にNOT NULL列があるのにビューに含まれて無ければ、INSERTなどでエラーになる
  • ビュー自体は値を持ってない(普通にSELECTする)ので高速化には関与しない

ストアドプログラム

PL/SQL言語で書かれたプログラムで、ソースコードとコンパイルされたプログラムがデータベースに格納される

  • プロシージャ ... 値を返さない
  • ファンクション ... 値を1つだけ返す
  • パッケージ ... 複数のプロシージャ or ファンクションを含む
  • トリガー ... 表orビューに関連付け。トリガー自体をプログラムとして実行可能。

SCN

データファイル・REDOログファイル・制御ファイル

上記の各ファイル感の整合性を保つためのOracle内部のタイムスタンプ

REDOログファイル

  • REDOログメンバー
    • 1つ以上必要
    • 複数用意するときは、冗長化のために物理ディスクを分けて保存する。
    • ロググループが違うログメンバーは同じディスクに置ける
    • 複数用意するときは、全く同じ内容をすべてのメンバーに記録する
  • REDOロググループ
    • 1つ以上のREDOログメンバーで構成
    • 一杯になったら、REDOログスイッチによって次のロググループへ

バックグラウンドプロセス

DBW

データベースライタ。複数起動可能。
データベースバッファキャッシュ→データファイルへの書き込みを行う。

CKPT

チェックポイント。
チェックポイント時に、データファイルのヘッダーと制御ファイルにSCN(タイムスタンプ)を書き込む

LGWR

ログライタ。
コミット時に、REDOログバッファ→REDOログファイルへの書き込みを行う。

ARC

アーカイバ。複数起動可能。 ARCHIVELOGモード時に、REDOログファイル→アーカイブREDOログファイルへアーカイブを行う。

SMON

システムモニタ。
インスタンス障害(メモリでの障害)後、再起動したときにREDOログファイルを元に回復を行う。

PMON

プロセスモニタ。
プロセス障害(クライアントが突然落ちたとか)時に回復させる。通信相手がいなくなったサーバープロセスをクリーンアップする。

MMON

管理モニタ。
パフォーマンス関連の統計情報を取得する。

制御ファイル

データファイル名・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日間保存される。

ADDM

自動データベース診断モニター。

AWRに保存されたスナップショットを診断し、結果をAWRに格納する。データベース全体のアドバイスを提供する。

メモリアドバイザ

  • メモリアドバイザ ... (自動メモリー管理モード時)インスタンス全体のメモリを最適化する
  • PGAアドバイザ ... (自動PGAメモリー管理モード時)PGA全体のメモリーを最適化する
  • SGAアドバイザ ... (自動共有メモリー管理モード時)SGAの各コンポーネントサイズを最適化する
  • 共有プールアドバイザ ... 共有プールの最適サイズを提供する
  • データバッファキャッシュアドバイザ ... データベースバッファキャッシュの最適サイズを提供する。

SQLアドバイザ

  • SQLチューニングアドバイザ ... SQLの書き換え、索引作成を推奨する
  • SQLアクセスアドバイザ ... アクセスパスに関するチューニングを推奨する

その他のアドバイザ

  • セグメントアドバイザ ... オブジェクト内の断片化を調査し、セグメントの縮小操作をアドバイスする
  • UNDOアドバイザ ... UNDO表領域サイズをアドバイスする
  • MTTRアドバイザ ... インスタンス障害後の平均リカバリ時間をチューニング
  • データリカバリアドバイザ ... リカバリを提供
Buy Me A Coffee