技術情報 > Oracle > サーバ基礎

Top > 技術情報 > Oracle > サーバ基礎

以下の内容は、Oracle9iに即しています。

Oracle Server

Oracle Universal Installer

Oracleのインストール・アップグレード・削除 サイレントモード(非対話式)

Oracle Database Configuration Assistant

DBの作成・削除または変更

Oracle Enterprise Manager

複数のデータベースの管理運用を行う統合ツール

OEMのアーキテクチャ

第1層 JavaベースのOEMコンソール・管理アプリケーション
第2層 OMS + OMEリポジトリ
第3層 インテリジェントエージェント・Oracle サーバー
OMEリポジトリ DB上の表で構成 OEMクライアントに依存しないサーバー直下のDB

OEMのコンポーネント

Instance Manager / Schema Manager / Security Manager / Storage Manager / SQL Worksheet

SQL*Plusのみの起動

sqlplus /nolog

Oracle インスタンスの管理

データベースの状態

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に関連付けられる

トレースファイル・ALERTファイルの保存先

background_dump_dest ALERTファイル・BGトレースファイル
user_dump_dest ユーザートレースファイル

Oracle-Managed Files ( OMF )

Oracle 9iの新機能
db_create_file_dest データファイルのデフォルトディレクトリ
db_create_online_log_dest_n REDOログファイル及び制御ファイルのデフォルト nは多重化によるメンバ・番号
OMFで作成された表領域は、削除するとOSファイルも削除 and datafile オプション不要

Jserverコンポーネント

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に接続する

CKPT

データファイルヘッダー,制御ファイルへのチェックポイント情報の書き込み
ログスイッチ / alter system checkpoint / shutdown (abort以外)
 backup / offline
 log_checkpoint_interval / log_checkpoint_timeout / fast_start_io_target / fast_start_mttr_target
 トランザクションとは一致していない

DBWn

DBバッファキャッシュ上の使用済みバッファをデータファイルへ書き込む
 CKPT / DBW0タイムアウト(3秒) / 使用済みバッファ数のしきい値を越えた
 Snnnがクリーンなバッファを発見できなかた時

LGWR

回復処理のためにデータベースへの変更を記録
 バッファ使用が全体の1/3 / 3秒おき / DBWRのタイミング / トランザクションがコミット
 現行ロググループが一杯になり別のグループへ書き込みを開始する事をログスイッチという
 log_archive_start=trueであれば、ARCHIVELOGモードでの運営となり、ARCHが発生

PMON

ユーザプロセス障害後にリソースをクリーンアップ
 ユーザー処理が何らかの理由で中断されてしまった場合に稼動
 DBバッファキャッシュのクリーンアップやトランザクションバックアウト(暗黙ロールバック)
 3秒おきに定期的に活動

SMON

インスタンスリカバリの実行
 インスタンス起動時にデータの整合性を回復させる
 データファイルの空き領域結合・一時ファイルセグメントの割当て解放
 一時セグメントにおいてソート作業後のクリーンアップ

SELECT文 と DML文の流れ

解析ツリーまたは実行計画を作成する場合

解析済みの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パッチをマシンにインストールする

OFAの使用

データファイルを他のファイルと簡単に区別できるようにする
制御ファイル,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文を自動拡張に設定

DB作成時に作られるもの

管理者ユーザーsys とsystem
SYSTEM表領域・SYSTEM UNDO 表領域・物理ファイル・内部基本表(sql.bsq)

sysユーザー

DD基本表とDDV・v$の所有者

systemユーザー

Oracleツールが必要とする表の所有者

create database文の注意点

system表領域以外にdefault temporary tablespace / undo tablespace を作成可能になった ( 9i )
OMF により、datafile 及び logfile はファイル名を指定する必要なし
REDOログファイルに関するオプションは制御ファイルのサイズに影響
maxlogfile ロググループの最大数 / maxlogmembers / maxloghistory / maxdatafiles / maxinstances

Optimal Flexible Architecture ( OFA )標準

インストール時のディレクトリ構成の決定方法 
/$oracle_homeの下に置かれる

DB作成後、変更不可のパラメータ

キャラクタセット・標準ブロックサイズ

制御ファイル・REDOログファイルの多重化

障害に備えて
データファイルは、データの特性・表領域の用途によってファイルを分ける
有効なデータファイル名は、v$datafile 有効なREDOログファイルは、v$logfileで確認可能

DBテンプレート

Oracle 9iの新機能 提供テンプレートか既存のDBから作成 構造のみ・データ込

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 ユーティリティ用のビューと表

データディクショナリの利用

USERビュー

現在のユーザーが所有しているオブジェクトの情報

ALLビュー

現在のユーザーがアクセス可能なオブジェクトの情報

DBAビュー

データベースの全てのオブジェクトの情報
sysdba またはselect any dictionary / select_catalog_role を付与されたユーザ

DDV とv$ の概要

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

REDOログファイルの管理

REDOログファイル

各SQL文実行、或いはトランザクション確定にあたって、変更内容が格納される
DBに何らかの障害が発生した場合に備え、回復に必要な変更履歴を保持するファイルである
トランザクション識別子・物理的変更位置・変更後の値などがある
ログスイッチによる発行されるログ順序番号が、データ/制御ファイルのヘッダに格納され、整合性を保つ
 log_archive_start=true, log_archive_destを指定により、ARCHプロセスが起動
ユーザーシステムのトランザクション量やDMLのタイプにより、サイズはまちまち
 v$sysstatのredo sizeにより現時点までの累積サイズを確認
ランダムアクセスであるデータファイルとは異なり、順次書き込みであり更新中の読み込みは発生しない
インスタンスの回復にはREDOログファイルが必要
LGWRがREDOログファイルに書き込む
REDOロググループは同一サイズ・同一ログ順序番号をもつログメンバで構成

DBWRのタイミング

DBバッファキャッシュよりDBファイルへ書き出す
CKPT / DBW0タイムアウト / 使用済みバッファ数のしきい値を越えた
Snnnがクリーンなバッファを発見できなかた時

LGWRのタイミング

REDOログバッファよりログファイルへ書き出す
バッファ使用が全体の1/3 / 3秒おき / DBWRのタイミング / トランザクションがコミット

ログスイッチ

現行ロググループが一杯になり別のグループへ書き込みを開始すること
手動でのログスイッチ alter system switch logfile; CKPT発生 <- ロググループ削除前に必要

CKPTのタイミング

効用:DBWR・制御ファイルの更新・データファイルのヘッダ更新
ログスイッチ / alter system checkpoint / shutdown (abort以外) / backup / offline / 以下の初期化パラメータ
log_checkpoint_interval / log_checkpoint_timeout / fast_start_io_target / fast_start_mttr_target

ALERTファイルへの書き出し指定

log_checkpoints_to_alert=true
log_archive_start=true でアーカイブの自動実行・手動実行を設定
手動 alter system archive all
DBWRとの競合のため、データファイルとログファイルは別ディスクへ
ARCHとの競合のため、アーカイブログファイルとログファイルは別ディスクへ

ログファイルの移動・改名

DB停止後にOSコピー その後alter database rename ' ' to ' '

REDOロググループの削除

alter database - drop logfile
REDOロググループが削除できない場合
REDOロググループ削除によってグループ数が1になる
ロググループがアクティブな場合
アーカイブされていないロググループである場合 ( ARCHIVELOGモード )

REDOログメンバの削除

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]

default storage句

initial / next / pctincrease / maxextents / minextents

minimum extent句

ディクショナリ管理の表領域作成時に設定 断片化を制御

表領域のオフライン化

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

drop tablespace のオプション

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格納

PCTUSED

ブロック内の削除された領域に関して考慮必要 削除頻繁なら小さく 大きいと全件検索に有利(満杯に近い)

PCTFREE

更新用領域 更新によってレコード長が長くなる場合 今後挿入されるなら小さく 大きいと全件検索に不利 

PCTFREE / PCTUSED

セグメントレベルで設定・表領域のパラメータは影響しない
ブロックサイズからブロックヘッダーをのぞいた部分を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サイズの倍数

UNDOデータの管理

UNDOセグメント

SQL文毎の読みとり一貫性を保証するため トランザクション終了時に変更前データを格納
複数のトランザクションが同時に一つのUNDOセグメントへアクセス可能
一つのトランザクションは、一つのUNDOセグメントへのみアクセス可能
UNDO表領域を切り替える場合、トランザクションが終了するまで「待ち」が発生

読みとり一貫性の有効・無効

set transaction isolation ( read only / level serializable )

UNDOセグメントの用途

トランザクションのロールバック・回復 読みとり一貫性

自動UNDO管理に必要なパラメータ

undo_management=(auto/manual) / undo_tablespace= / undo_suppress_errors / undo_retention(保存期間・秒)
変更後は、spfile指定であってもインスタンス再起動が必要

UNDO表領域の作成・変更・削除

削除の前に他の表領域を指定する
create undo tablespace / alter system set undo_tablespace= / drop tablespace

UNDOセグメントに関する情報

dba_rollback_segs オフラインなものを含めたUNDOセグメントの情報
v$rollname / v$rollstat 現在インスタンスが使用しているUNDOセグメントの情報
v$undostat インスタンス実行中にUNDOブロックがどれくらい生成されたか

UNDO表領域の切り替え

アクティブならばpending offlineとなる 
v$session / v$transactionでユーザーをチェック

UNDO表領域の使用量の制限

DBリソースマネージャーによる

表の管理

DBブロック内の行データの格納形式

上からヘッダー・行データ領域(PCTFREE・INSERT可能データ領域)
ヘッダー ブロックヘッダ・表ディレクトリ・行ディレクトリ(ブロックに格納されている行の情報)が格納
ブロックヘッダ SCNやトランザクションスロット・ブロックアドレス 
行データ 行ヘッダ(列定義)と列データ(列の長さ・列の値)
列の長さ 250以下または連続するnullでは1バイト 251以上は3バイト
列の値 null値は格納されない

TIMESTAMP型

DATE型の拡張機能で小数点以下9桁の時間と日付を格納

LONG型とLOB型

共に巨大なオブジェクトを格納するため 両者に互換性なし
LOBセグメント 巨大ファイル用 ライン外のLOBオブジェクト用

ROWID型

データの格納場所を表す疑似列ROWIDから行アドレスを受け取るための18文字データ型
オブジェクト番号・相対ファイル番号・ブロック番号・行番号 行の特定に使用 行移行など
dbms_rowid 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により破損を確認したならば索引の再構築

B*Tree索引

カーディナリティの高い大量のデータ 更新多 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句をつける

EXCEPTIONS表

utlexcept.sqlで作成 $ORACLE_HOME/rdbms/adminにある
alter table - enable constraint - exceptions で有効化してチェック

列に関しての制約情報

dba_constraints / dba_cons_columns

ユーザーの作成

特権ユーザーの認証方法

OS認証・PWD認証

OS認証の設定

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認証を示す接頭辞

初期化パラメータos_authent_prefix参照

quota設定

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を参照可能

OS監査

インスタンスの起動・停止を記録 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

値ベース監査

データベーストリガーにより値ベース監査

DBトリガーの発生

インスタンス起動・停止・エラー・ログイン・DDL・DML(表・ビュー)

権限監査のチェック順序

所有者権限・オブジェクト権限・システム権限の順にチェックされる
所有者が表を検索すると、オブジェクト権限監査にはひっかからない

監査の有効化

文監査と権限監査は、次のセッションから有効になるが、オブジェクト権限は現行セッションから有効

audit_trailパラメータ

データベース監査を実行するには、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

ロールに関するDDV名に見られる特徴

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

グローバリゼーションサポートの使用

character setの種類

US7ASCII / WE8--- / JA16---
national character setの種類 Unicodeキャラクタ UTF8 / AL16UTF16 / AL32UTF8

DB作成時の指定

character set と national character set
現行のDBcharsetがUS7ASCIIの場合、alter database character setで変更可能

NLSパラメータ

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パラメータを参照する為のDDV

nls_session_parameters セッション内NLSパラメータ
nls_database_parameters CHARSET / NCHARSET
nls_instance_parameters 明示的に指定のNLS初期化パラ
nls_valid_values nlsパラメータに設定可能な値

nls_lang環境変数

言語_地域.キャラクタセット

SQL関数

to_date / to_number / to_charの中でパラメータ指定

タグ:

+ タグ編集
  • タグ:
最終更新:2007年11月15日 07:21