以下の内容は、Oracle9iに即しています。
Oracleのインストール・アップグレード・削除 サイレントモード(非対話式)
DBの作成・削除または変更
複数のデータベースの管理運用を行う統合ツール
第1層 JavaベースのOEMコンソール・管理アプリケーション
第2層 OMS + OMEリポジトリ
第3層 インテリジェントエージェント・Oracle サーバー
OMEリポジトリ DB上の表で構成 OEMクライアントに依存しないサーバー直下のDB
Instance Manager / Schema Manager / Security Manager / Storage Manager / SQL Worksheet
sqlplus /nolog
NOMOUNT / MOUNT / OPEN の3つの状態がある
nomount 初期化パラメータの読み込み・インスタンスの開始・トレースファイル・ALERTファイル
mount 制御ファイルのオープン (archive_logやデータベース回復)
open データファイル・REDOログファイルのオープン
セッションを終了しても、OSプロセスは終了しない
Windows では、Oracle DBがサービスとして動作、起動時はOracleService <SID>が開始している必要
shutdown abort は、他の停止モードでDB停止できない場合に使用
確認 show parameter / v$parameter
PFILEはテキストで編集可能だが、有効にするためOracleサーバーを再起動
永続パラメータはOracle 9iの新機能
SPFILE は、参照できるが、手動で変更できない alter system文を使用
create spfile コマンドは、インスタンスが停止していても sysdba権限で発行できる
alter system set -=- scope=( memory / spfile / both )
基本的に動的なパラメータだが、インスタンス再起動を要するパラメータもある
restricted session権限をもつユーザーのみがDBにアクセス可能
制限モードへの入り方 startup restrict / alter system enable restricted session
alter文の場合 現行セッションを制御不能 よってalter system kill session 'ID,serial';
DBメンテナンスまたは大量のエクスポート・インポート
現行インスタンスが制限モードかどうかは、v$instanceで確認
サーバーとBGプロセスが検出した内部エラーを書き出すファイル
BGプロセスで発生した問題に関する詳細な情報が含まれる
異常な動作やクラッシュが発生した場合には、管理者は、まず参照すべし
ネットワークプロセスを含めてリスナープロセスなどが、生成する場合もある
ユーザーがコマンドを発行するか、パラメータを指定することで明示的に指定することも可能
DBの作成以降、DBシステムに対して行われた変更情報を保持
DBがいつ作成されたか? DBがどの端末からいつ起動・停止されたか?
データファイルやREDOログファイルがいつ作成・削除されたか?
ログスイッチに関する情報、ログ順序番号など
表領域の作成・新規データファイルの表領域への割り当て
エラーレポートが記録 内部エラー・ブロック破損エラー・デッドロックエラー
エラーに関しては、トレースファイルと比べ重要な情報だけが書かれる
log_checkpoints_to_alert=true によってCKPTに関連付けられる
background_dump_dest ALERTファイル・BGトレースファイル
user_dump_dest ユーザートレースファイル
Oracle 9iの新機能
db_create_file_dest データファイルのデフォルトディレクトリ
db_create_online_log_dest_n REDOログファイル及び制御ファイルのデフォルト nは多重化によるメンバ・番号
OMFで作成された表領域は、削除するとOSファイルも削除 and datafile オプション不要
Javaプログラムユニット
orapwdユーティリティを使用してパスワードファイルを作成
初期化パラメータ remote_login_passwordfile=exclusiveに設定
grant sysdba to username; でパスワードファイルにユーザーを追加 admin optionは使用できない
connect username/password@db as sysdba; で接続
v$pwfile_usersビューで、どのユーザーがsysdba/sysoperを持っているかを確認
exclusiveのモードが、最もセキュリティレベルが高い
SQL*PlusなどでOracleサーバへの接続を求めることで生成
構文チェック・アクセス権チェックを経て、接続が確立
セッション確立後は、ユーザープロセスはUPIを通して、サーバープロセスにアクセス
DBへの接続が確立すると生成
ユーザープロセスからの問い合わせや更新命令を受け取り、Oracleインスタンスとやり取りを担う
各サーバープロセス毎にPGAが割り当てられ、
ソート領域・スタック領域・セッション情報・カーソル状態などが格納
ユーザープロセスの要求に対し、OCIを通じてSGAを使いながらOracleサーバと通信
要求に対する結果をユーザープロセスに戻す
ライブラリキャッシュ・DDキャッシュを使いながら、SQL文を解析
データ操作に必要なデータをDDキャッシュやDBバッファキャッシュに格納
キャッシュへのバッファリングは、LRUアルゴリズムにより更新頻度の高いものが残る
共有サーバーの場合は、ディスパッチャプロセスがサーバープロセスへのキューイングを行い
PGAに格納されていたセッション情報は、SGAの共有プールへ格納される
パラレルサーバーモードでは、複数インスタンスで共有のDBに接続する
データファイルヘッダー,制御ファイルへのチェックポイント情報の書き込み
ログスイッチ / alter system checkpoint / shutdown (abort以外)
backup / offline
log_checkpoint_interval / log_checkpoint_timeout / fast_start_io_target / fast_start_mttr_target
トランザクションとは一致していない
DBバッファキャッシュ上の使用済みバッファをデータファイルへ書き込む
CKPT / DBW0タイムアウト(3秒) / 使用済みバッファ数のしきい値を越えた
Snnnがクリーンなバッファを発見できなかた時
回復処理のためにデータベースへの変更を記録
バッファ使用が全体の1/3 / 3秒おき / DBWRのタイミング / トランザクションがコミット
現行ロググループが一杯になり別のグループへ書き込みを開始する事をログスイッチという
log_archive_start=trueであれば、ARCHIVELOGモードでの運営となり、ARCHが発生
ユーザプロセス障害後にリソースをクリーンアップ
ユーザー処理が何らかの理由で中断されてしまった場合に稼動
DBバッファキャッシュのクリーンアップやトランザクションバックアウト(暗黙ロールバック)
3秒おきに定期的に活動
インスタンスリカバリの実行
インスタンス起動時にデータの整合性を回復させる
データファイルの空き領域結合・一時ファイルセグメントの割当て解放
一時セグメントにおいてソート作業後のクリーンアップ
解析済みのSQL文のコピー・未解析のSQL文のコピーがライブラリキャッシュに残っているか?
発行されたSQL文が有効化どうか検査され、有効な場合C言語へ展開される
参照している列や表が存在するか? → 参照先のロックを行う (DD定義・表定義・列定義)
SQL文を実行しようとするユーザーは、適切な権限をもっているか?
実行に最適である方法によって、解析ツリーまたは実行計画をライブラリキャッシュに作成
サーバープロセスは必要なデータをデータブロックとUNDOセグメントよりDBバッファキャッシュに入れる
SELECT文の場合、文実行によってOracleから返されたデータはカーソルに保存され、
行ごとにバインド変数に配置され、ユーザープロセスに返される
DML文の場合、変更するデータに暗黙的にロックがかけられ、
行っているDML操作の結果生成されたREDO情報とデータ変更情報がREDOログバッファへ保存
指定の変更をDBバッファキャッシュ上でデータに加える
DML文の発行後、ユーザープロセスはREDOバッファに変更情報がREDOエントリとして格納
更新・削除の場合、新旧両バージョンのデータをそのトランザクションで取得されたUNDOセグメントへ
挿入の場合、PCTFREE領域にかからない十分な領域があるブロックを取り出し、それらを配置する
これらの処理によりDBバッファキャッシュ内のデータブロックとUNDOブロックには「使用済み」マーク
実行計画はライブラリキャッシュにある期間だけ保存される
バッファ内のデータを格納する
COMMIT文が発行されると、ユーザープロセスによりREDOエントリが作成され、
読み取り一貫性を保証する為のSCNと共にREDOログバッファに書き込まれる
LGWRによってバッファの内容はREDOログファイルへフラッシュされ、トランザクションが終了
コミット完了がユーザープロセスへ 表・行ロック及び対応するセグメントのロックの解除
遅延書き込みの場合や更新中の障害など、commitしても更新データが反映されていない場合がある
そのような場合の為に、REDOログファイルに更新データが書き込まれている
インスタンス再起動時にSMONが自動的にcommit済みの更新データをデータファイルに適用する
複数ユーザー環境でOracleDBを稼動できるだけのCPU・メモリ・ディスク容量が備わっているかどうか
別個に制御するディスクリソースが3つ以上あることが推奨
パラメータとして、db_name / controlfiles / db_block_size を指定
環境変数 oracle_base / oracle_home / oracle_sid / ora_nls33 / ld_library_path を設定
OFAに準拠し、実運用で避けられない問題に関して標準対処が可能にする
ホストで稼動中の他のOracleDBの停止及びバックアップ
Oracleで推奨するOSパッチをマシンにインストールする
データファイルを他のファイルと簡単に区別できるようにする
制御ファイル,REDOログファイル,データファイルを簡単に識別できるようにする
ファイルを異なるディスクやディレクトリに分類することで、同じマシン上の複数のORACLE_HOMEの管理を容易にする
データベースファイルが個別のディレクトリやディスク上に常駐できるように考えることでファイル間のディスク競合が削減されパフォーマンスを向上させる
作成前にinit.oraファイルを作成する
db_name ホストマシンにおけるDBのローカル名をdefaultでなく一意な名前に変更
db_domain ネットワーク内におけるDBのドメイン名 worldにするかinetドメイン名
db_block_size 標準ブロックサイズを指定
control_files DB作成時に限り、指定したファイルがない場合自動作成 作成時以外の場合は起動せず
db_cache_size バイト単位でバッファキャッシュのサイズを指定
log_buffer バイト単位でREDOログバッファのサイズを指定
undo_management autoに設定することでUNDOセグメント管理が自動化
undo_tablespace 自動管理の場合のUNDO表領域の名前を指定
processes Oracleに接続できるプロセスの数 BGプロセスとサーバープロセスを含む
DB作成後 init.oraファイルをベースにspfileを作成 create spfile from pfile = '...';
初期化パラメータファイル読み込みの優先順位(一番初めのDB作成時には、init.oraのみのはず)
STARTUPコマンドのPFILEオプション
spfile<SID>.ora
spfile.ora
init<SID>.ora
SPFILEの変更は、alter system set -=- scope= spfile / memory / both ;
作成前に実行する手順
init.oraファイルに正しいDB名・正しい制御ファイル名が参照されていることを確認
background_dump_dest / user_dump_dest / core_dump_dest / utl_file_dirが実在することを確認
sysdbaユーザでnomountモードでOracle インスタンスを起動させる
create database 文の実行
default temporary tablespace句を省略すると、default一時表領域がsystem表領域になってしまう
undo tablespace句を省略すると、undo_management / undo_tablespace指定で、自動作成されるらしい
reuse 句を使用しない場合は、新規作成 使用する場合は実在しなければいけない
default temporary tablespace句には、datafile でなくtempfileを指定する
autoextend句により、datafile文を自動拡張に設定
管理者ユーザーsys とsystem
SYSTEM表領域・SYSTEM UNDO 表領域・物理ファイル・内部基本表(sql.bsq)
DD基本表とDDV・v$の所有者
Oracleツールが必要とする表の所有者
system表領域以外にdefault temporary tablespace / undo tablespace を作成可能になった ( 9i )
OMF により、datafile 及び logfile はファイル名を指定する必要なし
REDOログファイルに関するオプションは制御ファイルのサイズに影響
maxlogfile ロググループの最大数 / maxlogmembers / maxloghistory / maxdatafiles / maxinstances
インストール時のディレクトリ構成の決定方法
/$oracle_homeの下に置かれる
キャラクタセット・標準ブロックサイズ
障害に備えて
データファイルは、データの特性・表領域の用途によってファイルを分ける
有効なデータファイル名は、v$datafile 有効なREDOログファイルは、v$logfileで確認可能
Oracle 9iの新機能 提供テンプレートか既存のDBから作成 構造のみ・データ込
sql.bsq DDVの実表を作成
catalog.sql sysユーザーで実行
DDV或いは動的パフォーマンスビューの作成及びそれらのパブリックシノニムを作成~
catproc.sql PL/SQLの環境を構築
pupbld.sql SQL*Plusの製品情報を作成 systemユーザーで実行
cat*.sql カタログ情報・データディクショナリ情報
dbms*.sql データベースパッケージ仕様部
prvt*.sql ラップされたDBパッケージコード
utl*.sql ユーティリティ用のビューと表
現在のユーザーが所有しているオブジェクトの情報
現在のユーザーがアクセス可能なオブジェクトの情報
データベースの全てのオブジェクトの情報
sysdba またはselect any dictionary / select_catalog_role を付与されたユーザ
dictionaryビューまたはdict_columnsビューを検索
通常のDDV とv$は、DML不可 ただし監査に関するsys.aud$表はDML可能(必要)
DDL発行・DMLにより新しく領域が割り当てられたときにDDVが更新
NOMOUNT時、メモリから情報を生成する
v$parameter / v$sga / v$option / v$process / v$session / v$version / v$instance
MOUNT時、制御ファイルから情報を生成する
v$thread / v$controlfile / v$database / v$datafile / v$datafile_header / v$logfile
v$fixed_tableビューを検索すると、全ての動的パフォーマンスビューを表示できる
v$instance / v$sga nomount段階で取得可能
v$thread 現在のREDOロググループ・グループ数・順序番号
v$parameter 現在のセッションパラメータ
v$system_parameter 現在のシステム値の表示
v$controlfile_record_section 制御ファイルの異なるセクションに関する情報
マウント時にパラメータファイル参照で読まれる
表領域情報はデータファイル,REDOログファイルを追加,削除したときに更新
データファイルとREDOログファイルの名前と場所はそれらの追加変更削除時に更新
REDOログファイルの履歴と現在のログ順序番号はREDOログファイルスイッチ時に記録
アーカイブログの場所とステータスはアーカイブ時に記録
バックアップの場所とステータスはRecoveryManagerにより記録
チェックポイント情報はチェックポイント実行時に記録
データベース名(DB_NAME)と識別子(DBID) (不変)
データベース作成時のタイムスタンプ (不変)
表領域名
データファイルとREDOログファイルの名前と場所
現行のREDOログファイルのログ順序番号(現行のものだけ)
チェックポイント
REDOログファイルのアーカイブ情報
バックアップ情報
create database文で指定するログに関するパラメータ
maxlogfiles / maxlogmembers / maxloghistory / maxdatafiles / maxinstances
制御ファイルはmount中常に更新が行われているので、DB停止後にOSコピー
PFILEの場合、停止後コピー、そしてPFILEを編集、起動
SPFILEの場合、alter system set control_files=' ',' '... scope=spfile; 停止後コピー、起動
制御ファイルの多重化は、ダウンタイムを極力なくす為であって、障害時にはインスタンス再起動が必要
alter database backup controlfile to ' ' (ファイル名)
alter database backuup controlfile to trace
show parameter / v$controlfile / v$parameter / v$spparameter / v$controlfile_record_section
各SQL文実行、或いはトランザクション確定にあたって、変更内容が格納される
DBに何らかの障害が発生した場合に備え、回復に必要な変更履歴を保持するファイルである
トランザクション識別子・物理的変更位置・変更後の値などがある
ログスイッチによる発行されるログ順序番号が、データ/制御ファイルのヘッダに格納され、整合性を保つ
log_archive_start=true, log_archive_destを指定により、ARCHプロセスが起動
ユーザーシステムのトランザクション量やDMLのタイプにより、サイズはまちまち
v$sysstatのredo sizeにより現時点までの累積サイズを確認
ランダムアクセスであるデータファイルとは異なり、順次書き込みであり更新中の読み込みは発生しない
インスタンスの回復にはREDOログファイルが必要
LGWRがREDOログファイルに書き込む
REDOロググループは同一サイズ・同一ログ順序番号をもつログメンバで構成
DBバッファキャッシュよりDBファイルへ書き出す
CKPT / DBW0タイムアウト / 使用済みバッファ数のしきい値を越えた
Snnnがクリーンなバッファを発見できなかた時
REDOログバッファよりログファイルへ書き出す
バッファ使用が全体の1/3 / 3秒おき / DBWRのタイミング / トランザクションがコミット
現行ロググループが一杯になり別のグループへ書き込みを開始すること
手動でのログスイッチ alter system switch logfile; CKPT発生 <- ロググループ削除前に必要
効用:DBWR・制御ファイルの更新・データファイルのヘッダ更新
ログスイッチ / alter system checkpoint / shutdown (abort以外) / backup / offline / 以下の初期化パラメータ
log_checkpoint_interval / log_checkpoint_timeout / fast_start_io_target / fast_start_mttr_target
log_checkpoints_to_alert=true
log_archive_start=true でアーカイブの自動実行・手動実行を設定
手動 alter system archive all
DBWRとの競合のため、データファイルとログファイルは別ディスクへ
ARCHとの競合のため、アーカイブログファイルとログファイルは別ディスクへ
DB停止後にOSコピー その後alter database rename ' ' to ' '
alter database - drop logfile
REDOロググループが削除できない場合
REDOロググループ削除によってグループ数が1になる
ロググループがアクティブな場合
アーカイブされていないロググループである場合 ( ARCHIVELOGモード )
alter database - drop logfile member
REDOログメンバが削除できない場合
メンバーが所属グループ最後の有効メンバである
アーカイブされていないロググループのメンバーである場合 ( ARCHIVELOGモード )
メンバーが全て破損している場合
alter database - clear [unarchived] logfile
アーカイブされていないロググループで破損している場合に有用
archive log list / v$database / v$instance
v$log のstatus列 unused / current / active (回復に必要) / inactive (回復に不要)
v$logfile のstatus列 invalid / stale (不完全) / deleted / null (使用中)
extent management句を省略するか(デフォルト)、local指定で、ローカル管理になる
表データを格納する表領域には、OFA準拠でDATAと名づける
create undo tablespace文では、datafile以外の指定ができない
create temporary tablespace文では、tempfileであったが、
create tablespace文で、一時表領域を作る場合は、datafileにして最後にtemporaryオプション
デフォルトであれば、ローカルの永続表領域の指定となる
永続指定から一時指定に変更をする場合、永続オブジェクトを含んではいけない
各表領域はそれぞれ個別にオンライン・オフラインに設定することが可能
これによりDBを止めずにDBのバックアップ・リカバリ操作を表領域単位で行える
オフラインで設定しなければならない設定は、
アプリケーションのメンテナンスや復旧作業・大規模なデータのインポートなど
影響範囲と一般ユーザーからの更新を最小限に抑える
オンラインでのメンテナンスが可能な項目として、
オンライン索引(再)作成
トランザクション処理が行われている表に対して、9iよりあらゆる種類の索引に対応
オンライン索引構成表の(再)作成
9iよりオーバーフロー・領域を伴った移動が可能になり、オンライン操作が拡張
オンライン表再定義
9iよりオンラインのまま、表の再定義が可能になった
オンラインオブジェクト構造の検証
表:データブロックと行の整合性
パーティション:パーティションと行の整合性
索引:データブロックの整合性
analyze table / index - validate structure; 整合性を保証する cascade句も指定できる
索引の整合性についてはindex_statビューを参照する
analyze table - estimate statistics; 表に対する一連の統計情報が見積もられる
analyze table - compute statistics; 表に含まれる全ての行に基づき表に対する統計情報を計算
dba_tablesビュー の chain_cnt列に統計情報、特に連鎖行・移行行の個数が含まれる
alter index - monitoring usage; 索引使用の監視するメカニズムを有効にする v$object_usageビュー
system表領域
default temporary指定の表領域
表領域 > セグメント > エクステント > データブロック
エクステントはデータファイルをまたげない
create tablespace文
create temporary tablespace文
permanent と temporary (ソート操作に使用する一時セグメントのみを格納)
ディクショナリ管理とローカル管理 extent management (dictionary / local)
default storage句を使用 エクステントをDDで管理 UNDOやDDの更新あり
extent management dictionary [default storage ( - )]
エクステント割り当てがビットマップ表示 自ら管理
領域管理に関するDDアクセスがなくDD更新が減少
ビットマップによる空き領域追跡・割り当て・エクステント結合不要
extent management local [uniform size - / autoallocate]
initial / next / pctincrease / maxextents / minextents
ディクショナリ管理の表領域作成時に設定 断片化を制御
alter tablespace - offline [normal / temporary / immediate] CKPT発生
常に更新されるDDを含む表領域 system表領域・UNDOセグメントや一時セグメントを含む表領域は常にオンライン
alter tablespace - read (only / write) CKPT発生
書込み禁止であっても dropは可能 ポインタの移動だけであるから
alter tablespace - add datafile / alter database datafile - resize / autoextend on
alter tablespace - rename datafile ' ' to ' ' / alter database rename file ' ' to ' '
alter database default temporary tablespace -
dba_tablespaces / dba_data_files / dba_temp_files / v$tablespace / v$datafile
including contents [and datafiles] [cascade constraints]
通常のSQL文はオブジェクト参照不可
ソースはro・ブロックサイズとOSは同じにすべし・ビットマップ移動不可
compress=Y エクスポート時にセグメントが現在使用している全ての合計領域をまとめる
オブジェクトを作成した時に作成されるオブジェクト格納用の領域、表領域内に定義
・表:通常のデータの格納方法
・パーティション表:表の中を分割し、個々のパーティションを行分割しセグメント化したもの
・クラスタ:表を格納するためのセグメント クラスタキーに基づいてブロックにデータを格納(ディスクI/Oの減少)
・索引:指定されたキーに基づいて表内の行の位置を参照するエントリを格納するセグメント
・索引構成表:索引構造の中の表の索引列を除くすべてのデータを格納する
データを索引ツリーから検索できるので表への参照はない(パフォーマンス向上)
・パーティション索引:パーティション化された索引(パフォーマンス向上とメンテナンスの容易性)
・UNDO:トランザクションの前のデータを格納
ユーザーがcommitをする事により、トランザクションで使用されてきた領域が開放
UNDOセグメントの自動管理は、segment space management auto句必要なし 表領域で管理
・一時:メモリ上でソートが完了せずディスク上で必要になったときの中間結果を格納する
一時セグメント・UNDOセグメントでは、全て同じサイズのエクステントをもつ initial=next
一時セグメントのサイズは、sort_area_sizeの倍数+db_block_size(?)をしようすべし
一時セグメントは、order by 句・create index文によりソート処理に使用される
一時表は、一時セグメントに格納され表として参照できる 領域は共有だが操作は個別に行う
・LOB:LOB列の値を格納 表にはロケータ(LOBデータの位置へのポインタ)のみを含める
表と異なる表領域に格納可能
・ネストした表:別のセグメントに格納された表を1つのフィールドに対応させるもの
・bootstrap:DBがオープンにされるときにデータディクショナリキャッシュを初期化するためのセグメント
各セグメントの第1エクステントの第1ブロックは、セグメントヘッダーとして獲得される
セグメントのタイプ情報 どのようなセグメントなのか?
エクステント情報 領域をどのように獲得しているか?
フリーリスト どのブロックが飽き状態であるか? ブロックヘッダにある空きリストとは別
表や索引やUNDOセグメントを作成したり拡張したとき
削除・変更・切り捨てが行われるとき
alter tablespace - coalesce / 新エクステント生成時自動 / SMONによる自動
挿入時に一行のデータが大きすぎる場合、単一行が複数ブロックにまたがる PCTFREE大
更新時にPCTFREEがたりなくなったとき、行のデータごと別ブロックへ移動 代わりにROWID格納
ブロック内の削除された領域に関して考慮必要 削除頻繁なら小さく 大きいと全件検索に有利(満杯に近い)
更新用領域 更新によってレコード長が長くなる場合 今後挿入されるなら小さく 大きいと全件検索に不利
セグメントレベルで設定・表領域のパラメータは影響しない
ブロックサイズからブロックヘッダーをのぞいた部分を100%として算出
dba_tablespaces 表領域の情報
dba_data_files セグメントに割り当てられたデータファイルの情報
dba_tables 連鎖行・移行済みの行を検出
dba_free_space 使用可能エクステント・使用可能ブロック数・表領域・ファイル情報
dba_segments 表・索引などオブジェクトが使用している領域(セグメント)に関する情報 エクステントの拡張なども
dba_extents エクステントに割り当てられた領域に関する情報 所在・数・大きさなど
割り当てられたエクステントはdba_free_spaceから消される
パラメータinitrans (初期トランザクションスロット) / maxtrans (最大)
ローカル管理の永続表領域のみ LOB型格納不可
セグメントに指定したPCTUSED / FREELISTS / FREELIST GROUPSは無視される
表を作成する場合のPCTUSED句も無視
一時セグメント > UNDOセグメント >> その他
ローカル管理表にするか、エクステントの数を少なく・大きくすると改善
minimum extents句・uniform size句が最大
次がセグメントレベル・表領域レベル・Oracleサーバデフォルト
一時セグメントを格納するための表領域
一次ファイルのみ格納可能な一時的なセグメント サイズはsort_area_sizeの倍数に
一時表領域を構成するデータファイル
temporary指定の表オブジェクト
db_file_multiblock_read_countの倍数に さらにOSのI/Oサイズの倍数
SQL文毎の読みとり一貫性を保証するため トランザクション終了時に変更前データを格納
複数のトランザクションが同時に一つのUNDOセグメントへアクセス可能
一つのトランザクションは、一つのUNDOセグメントへのみアクセス可能
UNDO表領域を切り替える場合、トランザクションが終了するまで「待ち」が発生
set transaction isolation ( read only / level serializable )
トランザクションのロールバック・回復 読みとり一貫性
undo_management=(auto/manual) / undo_tablespace= / undo_suppress_errors / undo_retention(保存期間・秒)
変更後は、spfile指定であってもインスタンス再起動が必要
削除の前に他の表領域を指定する
create undo tablespace / alter system set undo_tablespace= / drop tablespace
dba_rollback_segs オフラインなものを含めたUNDOセグメントの情報
v$rollname / v$rollstat 現在インスタンスが使用しているUNDOセグメントの情報
v$undostat インスタンス実行中にUNDOブロックがどれくらい生成されたか
アクティブならばpending offlineとなる
v$session / v$transactionでユーザーをチェック
DBリソースマネージャーによる
上からヘッダー・行データ領域(PCTFREE・INSERT可能データ領域)
ヘッダー ブロックヘッダ・表ディレクトリ・行ディレクトリ(ブロックに格納されている行の情報)が格納
ブロックヘッダ SCNやトランザクションスロット・ブロックアドレス
行データ 行ヘッダ(列定義)と列データ(列の長さ・列の値)
列の長さ 250以下または連続するnullでは1バイト 251以上は3バイト
列の値 null値は格納されない
DATE型の拡張機能で小数点以下9桁の時間と日付を格納
共に巨大なオブジェクトを格納するため 両者に互換性なし
LOBセグメント 巨大ファイル用 ライン外のLOBオブジェクト用
データの格納場所を表す疑似列ROWIDから行アドレスを受け取るための18文字データ型
オブジェクト番号・相対ファイル番号・ブロック番号・行番号 行の特定に使用 行移行など
dbms_rowid rowid型の変換用パッケージ
拡張ROWID
10byteの記憶領域、BASE64コードによる18文字から構成
データベース内の行を一意に識別するもの
データオブジェクト番号:データベース内で一意な番号
相対ファイル番号:表領域内の各ファイルに対して一意な番号
データブロック番号:ファイル内で一意な番号
行番号:ブロック内で一意な番号
データオブジェクト番号によってどの表領域にセグメントがあるかを認識する
必要があるパーティション表のパーティシDa9ン索引で使用
制限付きROWID
6byteの記憶領域、8.4.4の16進法で表示~
データブロック番号
行番号
絶対ファイル番号
データオブジェクト番号を持たないため、非パーティション表の非パーティション索引で使用
VARRAY型・TABLE型 (ネスト表) など配列を扱う PL/SQLでは主要なデータ型
create table / alter / truncate / drop
高水位標 truncate - reuse storage / drop ではリセットされない
truncate - [drop storage] / alter table - deallocate unused でリセット
export/import や create table as select を使用しないでも、alter table move文を使用できる
tablespace句 移動先の表領域を指定、省略すると同じ表領域の新規セグメントへ
storage句 エクステント構築情報を再設定できる ローカル管理表では設定できない
loggingオプション 移動による変更をオンラインREDOファイルへ書き込むことができる
表の移動中には、参照ができるが、変更ができない
alter table - drop column - / alter table - set unused - -> drop unused column
未使用マーク dba_unused_col_tabs 削除途中の表 dba_partial_drop_tabs
alter table - storage () / alter table - allocate extent ( size - datafile ' ' )
表の同時使用率が高い用途 表の表領域はパーティション化でき、IO競合を削減
定義のみのエクスポート・インポートなど
領域管理操作の回避・空き領域の競合軽減・結合不要(ビットマップによる自動追跡)
エクステント自動・UNDO不要
create global temporary table - on commit (delete トランザクション中/ preserve) rows で作成
ソートセグメント 各エクステントは1トランザクションずつ
表・索引の作成・DDL発行に関して dba_objectsのcreated / last_ddl_time
analyze table - compute statistics 正確な連鎖行数などのすべての行での統計生成
結果 dba_tablesのchain_cnt列 検出された行数が記録
analyze table - estimate statistics - 行のサブセットに基づいた統計生成
B*Tree
各索引列の値とROWIDのペアを昇順ソートしてツリー構造に格納
カーディナリティが高いOLTP環境で動的な表に索引を作成するのに適している
ビットマップ
カーディナリティ(選択性)の低い列に適した索引
大規模でかつ静的な表で使用されるデータウェアハウス(DSS)環境に適している
複雑な計算(AND,OR,NOT,複合)処理もビット演算により効率的に行える
索引を定義した列を更新するときはビットマップセグメントレベルのロックが行われるためオーバーヘッドが大きくなる
CREATE BITMAP INDEXコマンド
逆キー(B*Tree)
B*Treeの構造での索引列のバイトを逆にソートして格納
索引への変更が少数のリーフブロックに集中する場合に適している
where文で、X=5のように等号比較が使用している場合に有効で、between指定ではメリットなし
パラレルサーバー環境におけるパフォーマンス向上にも通ずる
降順索引(B*Tree)
降順で検索を行う場合に有効 create index - on emp(salary desc);のように作成時に指定
同様に連結索引として、create index - on emp(dept asc, salary desc);のように作成時に指定
ファンクション索引
列に対する関数や式を使用して索引列の値を事前計算して格納
B*Tree索引、ビットマップ索引として作成
索引構成表(索引ではない)
主キーのみで検索を行う場合は、create table文にorganization index句をつけ索引構成表を作る
必要領域が少なく、主キーのみで高速な検索が可能 2次検索はできない ROWIDを格納しない
クラスタ索引
2つ以上の表を結合して一つのデータブロックに格納
索引クラスタ WHERE句によく指定される共通の列をクラスタキーに採用する場合
ハッシュクラスタ 大量のデータの中から一件だけのデータを検索する場合
ハッシュ関数に渡されたクラスタキーの列値によって、クラスタブロック別に分類
ビットマップ索引やクラスタ索引では、オンライン構築や再構築を使用できない
alter index - next / maxextents / initrans / maxtrans
alter index - allocate extent
size句やadd datafile句を指定できる
alter index - deallocate unused;
keep句により領域を確保しながら取り除くことも可能
alter index - rebuild [tablespace -];
新しい索引は既存の索引を元に作成
既存の索引を使用するため再構築にソートは不要
再構築中は古い索引と新しい索引の両方を格納する領域が必要
再構築後古い索引は削除される
作成された索引には削除済みエントリは含まれない
索引再構築中も問合せでは既存索引を使用可能
alter index - rebuild online
オンライン作成により索引の作成中、再構築中に実表に対するDML操作が可能
再構築中の対象の表の変更は、再構築後に索引に反映
ただし、オンライン作成には時間がかかるので、ピーク時の実行を避ける
dba_objectsビューのステータスがinvalidの場合
dbverifyを実行する 又は analyzeにより破損を確認したならば索引の再構築
カーディナリティの高い大量のデータ 更新多 OLTP環境向き ルート-ブランチ-リーフ(キー値とROWID)
alter index - rebuild [online]で変更可能 新旧の表領域が必要 性能向上
表と同様に、alter index - storage / allocate extent / deallocate unused が使用可能
storage句により索引用セグメントが作成される
I/O分散に有効 範囲指定時は使用されない reverse指定 nosortとは排他コマンド
カーディナリティの低い大量のデータ 高速処理・トランザクション少 DSS環境向き
create_bitmap_area_sizeで指定 デフォルト8MB 大きい方がパフォーマンス向上
alter index - coalesce
analyze index - validate structure index_statsに結果
analyze index - monitoring usage
v$object_usageに結果 索引が使用されたかどうかをチェック
dba_indexes / dba_ind_columns
コミット時に整合性をチェック deferrable [initially (immediate / deferred)]により指定
[disable / enable ][validate / novalidate]
無効にすると制約のもととなる一意制約が削除される 親表である時は cascade constraints句をつける
utlexcept.sqlで作成 $ORACLE_HOME/rdbms/adminにある
alter table - enable constraint - exceptions で有効化してチェック
dba_constraints / dba_cons_columns
OS認証・PWD認証
sysoper / sysdbaを割り当てたUNIXグループ ( 通常dba ) にユーザーの属するグループを設定
remote_login_passwordfile=none に設定後 sysoper / sysdbaでDBに接続
create user - identified externally OS認証作成
orapwd file= password= entries=最大エントリ でパスワードファイルを作成
remote_login_passwordfile=exclusive インスタンスが一つの場合 sysdba権限で接続可能 ( grant で付加 )
remote_login_passwordfile=shared orapwd後、sys / internalのみがアクセス
v$pwfile_usersを参照して sysdba / sysoperをもつユーザー名・PW認証可の時のみ
初期化パラメータos_authent_prefix参照
undo表領域や一時表領域用にクォータを設定する必要はない
quotaを0に設定すると、既存のエクステントから新しいエクステントを取得しようとするとエラー
dba_users / dba_ts_quotas
プロファイルが明示指定されていないユーザーに割り当てられる
alter profile default -- で変更
プロファイルを drop profile により消去するとデフォルトになる
デフォルトプロファイルは消去できない
dba_profiles の resource_typeで確認 kernel か password
per_session / per_call
セッションレベルの制限 トランザクションのロールバックと切断
コールレベルの制限 文単位のロールバックのみ
CPU時間・I/O操作・アイドル時間・接続時間・メモリ領域・同時実行セッション数
cpu_ / logical_reads_ / idle_time / connect_time / private_sga / sessions_per_user
alter system set resource_limit=true kernelタイプのみ有効
resource_cost 各リソースに割り当てられた重みを表示
プロファイルの割り当ては、現在接続中のセッションには影響しない
failed_login_attempts / password_life_time / _reuse_time / _reuse_max / _lock_time / _grace_time
PL/SQLファンクションであるutlpwdmg.sql password_verify_function=trueで、パスワードの複雑さを検証
dba_profiles と dba_usersを参照すべし
grant - to user with admin option / revoke - from user
削除時、CASCADEは発生しない dba_sys_privs / session_privsより情報取得
grant - on obj to user with grant option / revoke - on obj from user
付与者の権限が抹消されると、連鎖的にCASCADEが発生 dba_tab_privs / dba_col_privsより情報取得
通常はsys / sysdba / sysoperのみ
o7_dictionary_accessibility=trueにより、sys / sysdba / sysoperでなくてもシステムdictionaryを参照可能
インスタンスの起動・停止を記録 audit_trail=os
sysdba /sysoper以外のアクションを監視
文監査・権限監査・オブジェクト監査がある
接続時間・論理I/O回数・実行ユーザ数のピーク
全レコードをDB監査証跡 ( sys.aud$表 ) に記録 限りなく拡張するため整理が必要
sysユーザーであるか、delete_catalog_roleをもつ必要がある
また、sys.aud$表にある監査結果を参照するには、dba_audit_trail / _exists / _object / _session / _statement
文監査のオプション 権限を指定するのではない audit固有のエイリアスを使う index / profile / role / session / synonym / table / user / view / - table / procedure / sequence
データベーストリガーにより値ベース監査
インスタンス起動・停止・エラー・ログイン・DDL・DML(表・ビュー)
所有者権限・オブジェクト権限・システム権限の順にチェックされる
所有者が表を検索すると、オブジェクト権限監査にはひっかからない
文監査と権限監査は、次のセッションから有効になるが、オブジェクト権限は現行セッションから有効
データベース監査を実行するには、audit_trailがosまたはdbに設定されている必要
sys / sysdbaでの作業は、証跡が満杯であっても可能
ロールを使用して権限をグループ化することができる
ログイン時に有効になるロール
デフォルトロールをnoneにすると ユーザーが直接付与された権限のみになる
alter user - default role none;
デフォルトロールにパスワードを生成できる create role - [identified by - / not identified]
システム・オブジェクト混在可・ユーザー毎の使用不可・所有者なし・パスワード
set role all [except -]
PL/SQLパッケージでのみ有効 create role - identified using schema.package
dba_ (全ユーザ・ロールに対し) / role_ (ロールに対し) / session_ (セッション内で有効な)
_role_ (ロール) / _sys_ (システム権限) / _tab_ (表権限) / _col_ (行権限)
_roles (ロールに関する情報) / _privs (種類の取得)
一般レベルのロールに関する情報の取得 dba_roles / session_roles
付与されているロールの取得 dba_role_privs / role_role_privs
ロール内の権限の取得 dba_sys_privs / role_sys_privs / role_tab_privs
US7ASCII / WE8--- / JA16---
national character setの種類 Unicodeキャラクタ UTF8 / AL16UTF16 / AL32UTF8
character set と national character set
現行のDBcharsetがUS7ASCIIの場合、alter database character setで変更可能
nls_language・nls_territoryが他のNLSパラメータのデフォルトを設定
nls_language 言語・年号・デフォルトソート
nls_territory 使用する通貨記号など地域依存の規則・デフォルト日付書式など
nls_sort SQL関数 nls_upper / nls_lower / nls_initcap / nlssortにて指定
nls_date_language / nls_calendar / nls_currency / nls_iso_currency / nls_date_language
nls_session_parameters セッション内NLSパラメータ
nls_database_parameters CHARSET / NCHARSET
nls_instance_parameters 明示的に指定のNLS初期化パラ
nls_valid_values nlsパラメータに設定可能な値
言語_地域.キャラクタセット
to_date / to_number / to_charの中でパラメータ指定