A Oracle DBA - user000422/0 GitHub Wiki

UNDO(アンドゥー) REDO(リドゥー)

メモ オンラインで実行できる ALTER DATABASE MOVE オフラインでないと実行できない ALTER TABLESPACE sample_space RENAME

基本

RDBMS(リレーショナルデータベース管理システム)… 行、列、表でデータを管理するシステム

DML(データ操作言語)… SELECT INSERT UPDATE DELETE DDL(データ定義言語)… CREATE DROP ALTER TRUNCATE DCL(データ制御言語)… GRANT REVOKE トランザクション制御 … COMMIT ROLLBACK

■環境変数 ORACLE_BASE … xxxxx ORACLE_HOME … Oracleソフトをインストールするディレクトリ ORACLE_SID … Oracleインスタンス名

■データベースファイル データファイル … 表や索引を格納 REDOログファイル … DBの更新履歴を記録 障害復旧に使用される 制御ファイル … DBに関する様々な構成情報および管理情報を記録 多重化推奨

データベース(データベースファイル)

**■制約(整合性制約)**

制約 表記 NULL 説明
主キー PRIMARY KEY × 値の重複禁止 1つの表に1つだけ設定可能
一意キー UNIQUE 値の重複禁止
NOT NULL NOT NULL × NULL禁止
外部キー FOREIGN KEY 同じ表または別の表の主キーまたは一意キーを参照する列 参照先の列に登録されていな値は設定不可

ユーザー

DB作成時に管理者ユーザー(SYS、SYSTEM)が作成される SYSTEMユーザー … インスタンスの起動、停止は行えない SYSユーザはデフォルトでSYSDBA権限が付与されている SYSDBA権限 … 「インスタンスの起動と停止」と「バックアップとリカバリ」を含む全ての権限 SYSOPER権限 … SYSDBA権限とほとんど同じだが、データベースの作成権限はない

■スキーマ ユーザーが所持するオブジェクトを格納する箱のようなもの ユーザー作成時に同名のスキーマが自動作成される スキーマオブジェクト … ユーザが所有するオブジェクト

■権限 システム権限 … DBに対しての許可 オブジェクト権限 … 他のユーザーが所有する特定のオブジェクトに対しての許可

権限 権限種類 説明
CREATE SESSION システム データベースにログイン
SELECT オブジェクト SELECT
CREATE TABLE システム 自スキーマに表を作成する権限
SYSDBA★ システム 「インスタンスの起動と停止」と「バックアップとリカバリ」を含む全ての権限
SYSOPER★ システム SYSDBA権限とほとんど同じだが、データベースの作成権限はない
UNLIMITED TABLESPACE システム 表領域の使用を無制限とする権限

■ロール … 複数の権限をグループ化したもの PUBLICロール … PUBLICロールに権限を付与するとすべてのユーザーに付与される 事前定義済みロール(データベース作成時に自動作成されるロール) DBAロールでも他スキーマのテーブルをSELECTできなかったりする(Trigger作成で他スキーマを参照するシノニムではまった)

事前定義済みロール 説明 所有権限
CONNECT DB接続のためのシステム権限 CREATE SESSION
DBA ほとんどの管理操作を行える SYS、SYSTEMユーザ
SELECT_CATALOG_ROLE データディクショナリビューへのSELECT権限

■索引(インデックス) … 表データの検索を高速にするためのオブジェクト 表が削除されると索引も削除される 列の値の種類が多い場合は効果が大きい(値が0、1のみは効果が小さい) WHERE句の条件によく指定される列は効果が大きい 主キー、一意キーに暗黙的に索引が作成される

■データディクショナリ … Oracle内部の管理情報 所有ユーザはSYS ■データディクショナリビュー … データディクショナリを人間が読みやすい形式に変換するSELECT文

データディクショナリービュー 動的パフォーマンスビュー
参照可能状態 OPEN MOUNT OPEN
読み取り一貫性 ×

■プロファイル ユーザにパスワード管理ポリシーおよびリソース制限を設定 指定しなかった場合「DEFAULT」プロファイルが割り当てられる

属性 内容
FAILED_LOGIN_ATTEMPTS ログイン失敗制限 アカウントロック
PASSWOD_LOCK_TIME パスワード認証不正でロックされる日数
PASSWORD_LIFE_TIME パスワード継続利用日数
PASSWORD_REUSE_TIME 現在パスワードを再び使用するまでに必要な日数
PASSWORD_VEIFY_FUNCTION パスワードの複雑さ検証スクリプト

表(TABLE)

■表命規則 数字、記号以外の文字で始まること 30バイト以下であること

■データ型

データ型 説明
CHAR 固定長文字型 固定長の文字データ 最大2000バイト ※指定文字数に満たない場合空白埋めされる
VARCHAR2 可変長文字型 可変長の文字データ 最大長サイズの指定が必須 最大4000バイト
DATE 固定長日付型 日付と時刻のデータ型
NUMBER 可変長数値型 数値データ 第一引数に精度、第二引数に小数点以下桁数

表領域(TABLESPACE)

表や索引などのデータベースオブジェクトが格納される 表領域を削除すると表領域に格納されているオブジェクトも削除される 表領域はデータファイルをグループ化したものである

表領域の空き容量が不足した場合、データファイルのリサイズもしくはデータファイルの追加をする必要がある

■特殊な永続表領域 アプリケーション用のデータを格納してはいけない SYSTEM表領域 … データディクショナリなどの管理情報を格納 SYSAUX表領域 … SYSTEM表領域の補助的役割

データファイルのメンテナンス(削除や再配置)を行う場合はオフラインにする必要がある

関係 … セグメント > エクステント > データブロック エクステント … 表領域の最小単位

**■UNDO(アンドゥー ※Oracle公式セミナーより)** UNDOデータ … トランザクションによって変更される前のデータ UNDOデータは主に「ロールバック」、「フラッシュバック」、「DBリカバリ」、「読取り一貫性」で使われる UNDOデータはトランザクションのコミット後も一定期間は保存される(UNDO保存期間) UNDOデータは1つのDBに1つしか使用可能(アクティブ)にできない。 UNDO保存期間の保証オプション … UNDO保存期間内にUNDOデータが上書きされるのを防ぐ ※表領域不足に注意

■ビュー ビューは検索高速化の技術ではない オブジェクト権限などを組み合わせて任意のユーザにビュー権限のみ付与しデータを保護できる

インスタンス

NOMOUNTからアラートログに記録される

起動順序 状態 読み込み 起動
0 SHUTDOWN
1 NOMOUNT 初期化パラメータファイル SGA プロセス
2 MOUNT 制御ファイル
3 OPEN REDOログファイル データファイル

■バックグラウンドプロセス … プロセス郡(インスタンス起動時に自動起動) Oracleがスムーズに動作するために管理

プロセス名 タイミング 役割
データベースライター(DBWn) チェックポイント発生 データファイルへ書き込み
ログライター(LGWR) コミット REDOログファイルへ書き込み
チェックポイント(CKPT) チェックポイント発生 DBWnへ書き込み指示
システムモニター(SMOM) インスタンス異常終了 データベースファイルの整合性復旧
プロセスモニター(PMON) プロセス異常終了 リソースの後処理
管理性モニター(MMON) 統計情報取得

■初期化パラメータ … インスタンスの動作特性を設定するパラメータ 初期化パラメータファイルに設定する 動的パラメータ … インスタンス起動中に変更可能な初期化パラメータ 静的パラメータ … インスタンス起動中に変更不可能な初期化パラメータ 基本的にSPFILEが使用される

PFILE SPFILE
ファイル形式 テキスト バイナリ
ALTER文によるファイル影響 変更されない 変更される
パラメータ名 起動中に変更 説明
MEMORY_TARGET SGAとPGAのメモリを自動管理 上限値を設定
SGA_TARGET 自動メモリー管理有効時に、SGAの下限値を設定
PGA_AGGREGATE_TARGET 自動メモリー管理有効時に、PGAの下限値を設定

ネットワーク

サービス … クライアントがDBを判別する際に利用する

■リスナー … クライアントからOracleDBへの接続要求を処理する DBサーバーで運用を行う デフォルトでは自動起動しないため起動コマンドで起動させる必要がある デフォルトリスナー名「LISTENER」

■listener.ora … リスナー構成(ファイルはDBサーバ側に配置) [ORACLE_HOME]/network/admin/listener.ora OUIインストール時にDB作成を行わず、DBCAでDB作成を行った場合はlistener.oraファイルを自分で作成する必要がある listener.oraファイルを自分で作成する場合は Oracle Net Configuration Assistant を使用する 手順 > リスナー名「LISTENER」> プロトコル「TCP」> ポート「1521」

■リスナー制御ユーティリティ(lsnrctl) … コマンドラインベースのリスナー管理ツール

# コマンド
lsnctl start [リスナー名]    # 起動
lsnctl stop [リスナー名]     # 停止
lsnctl status [リスナー名]   # 状態を確認
lsnctl services [リスナー名] # 詳細情報を確認

# lsnctl 表示で分かること
# 「status READY」は動的サービス登録、「status UNKNOWN」は静的サービス登録

tnsnames.ora … DB接続情報(ファイルはクライアント側に配置) tnsnames.oraファイルを自分で作成する場合は Oracle Net Configuration Assistant を使用する 手順 > ローカル・ネットサービス名構成 > 追加 > プロトコル「TCP」> ポート「1521」 ■ネーミングメソッド ローカルネーミング … 「tnsnames.ora」を利用し、ネットサービス名と接続記述子をマッピング xxxxxネーミング … xxxxx

接続記述子 … DBへの接続情報 listener.oraに記述されている情報など 接続識別子(ネットサービス名) … 接続記述子に付けた名前 接続記述子例

ネットサービス名 =
  (DESCRIPTION =
    (ADDRESS=LIST =
      (ADRESS = (PROTOCOL = TCP)(HOST = ホスト名)(port = 1521)
    )
    (CONNECT_DATA =
      (SERVICE_NAME = サービス名)
    )

接続文字列 … 「ユーザ名」、「パスワード」、「@」、「接続識別子」 で構成 接続識別子は「接続記述子」か「ネットサービス名」で指定

Oracle Net … クライアントがDB(DBサーバ)へアクセスするためのツール Oracle Net Manager … 「listener.ora」、「tnsnames.ora」を編集するツール

ログ

■ADR(Automatic Diagnostic Repository) … ログの自動集中管理 ディレクトリパス設定は初期化パラメータ「DIAGNOSTIC_DEST」

■アラートログ … 非常に重要なログファイル エラー内容、変更内容、管理情報が出力される パス : [ADRホーム]/trace/alert_[SID].log 1つのインスタンスに1つ存在する [出力]インスタンスの起動、終了 [出力]デフォルト値以外が設定されている初期化パラメータの設定値 [出力]致命的なエラーのみ(SQLの構文エラーや実行エラーは出力されない)

■プロセストレースファイル … サーバープロセス、バックグラウンドプロセスの出力情報が出力されるファイル ファイル名 [Oracle SID]_[プロセス名]_[OSプロセス番号].trc

■インシデントダンプファイル …インシデント情報が出力されるファイル

Oracle Data Pump

データをデータベース外部にエクスポート、外部からデータベースにインポートするツール expdp … エクスポート用コマンドラインツール impdp … インポート用コマンドラインツール expdpはデータベースサーバまたは、データベースサーバ以外のマシンで起動することも可能 コマンドはsqlplusではなくOSのコマンドラインで入力すること コマンドラインツール以外にも「パラメータファイル」や「対話型」などの操作インターフェースがある ダンプファイルの入出力先のディレクトリオブジェクトを事前に決めておく必要がある(「CREATE DIRECTORY」) ディレクトリオブジェクト確認SQL SELECT * FROM DBA_DIRECTORIES; ディレクトリオブジェクト作成SQL CREATE OR REPLACE DIRECTORY sample_dir AS '/sample/dmp_sample_dir' 動作モードを指定しなかった場合は接続したユーザのすべてのオブジェクトを対象とする

# expdp エクスポート
# クライアントから接続する場合は [ユーザ名]/[パスワード]@[接続子]
# DUMPFILE=[ディレクトリ名]:[ダンプファイル名]

# スキーマモード(接続したユーザのすべてのオブジェクトをエクスポート)
expdp sample_user/pass SCHEMAS=sample_user DUMPFILE=dmp_dir:expdat.dmp

# 表モード(指定テーブルのみエクスポート)
expdp sample_user/pass DUMPFILE=dmp_dir:expdat.dmp TABLES=emp, dept
# impdp インポート スキーマモード
impdp sample_user/pass SCHEMAS=sample_user DUMPFILE=dmp_dir:expdat.dmp

# impdp インポート 表モード
impdp sample_user/pass DUMPFILE=dmp_dir:expdat.dmp TABLES=emp, dept

SQL*Loader

OSファイルシステム上データをOracleデータベースの表にロードするツール SQLLoaderデータファイル … ロードするデータを記述 拡張子は「.csv」 SQLLoader制御ファイル … ロード方法や場所や表や形式などを記述 拡張子は「.ctl」 ダイレクト・パス … データベース・バッファ・キャッシュを経由せずに直接データファイルに書き込むロード方法 コマンドsqlldrでSQL*Loaderを起動する

# control 制御ファイルの名称
sqlldr sample_user/sample_pass control=sample.ctl

■SQL*Loader エクスプレスモード Oracle12cから導入されたモード SQL*Loader制御ファイルの用意が不要に ロードするデータファイルは必要([対象テーブル名].dat)

# エクスプレスモード
# TABLE 対象テーブル ※必須
sqlldr sample_user/sample_pass TABLE=sample_table

SQL Developer

■バックアップ テーブルを選択 > 右クリック > エクスポート

アドバイザ

■セグメントアドバイザ … 断片化された未使用領域を検出 自動実行

■SQLチューニングアドバイザ … 単一のSQLを分析しパフォーマンス向上をアドバイス 自動実行 新しい索引の推奨を行う 履歴SQL … 過去の任意のSQL文を24時間単位で分析する 対象となるSQLはSELECTのみ トップ・アクティビティ … 過去1時間に実行された、最もリソースが集中したSQL文を分析する

■SQLアクセスアドバイザ … ワークロード全体のSQLを分析しパフォーマンス向上をアドバイス マテリアライズドビューの作成の推奨を行う パーティション表の作成の推奨を行う

■UNDOアドバイザ … UNDO表領域の最小サイズをアドバイス

■MTTRアドバイザ … インスタンス・リカバリにかかる平均時間をチューニング