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アドバイザ … インスタンス・リカバリにかかる平均時間をチューニング