【ナレッジ】Oracle RDBMS④

1900-01-04

TEST

Oracle9iR2

(IBM AIX Oracle9iR2インストール リリースノート その1)
・Oracle9iR2・・・NLS_CHARACTERSET JA16EUC
・HACMPがインストールされている環境でOracle9iリリース2(9.2.0.1.0)をインストールしようとすると、HACMPが停止しているばあいでも
 OUIはHACMPを意識してしまう
 ⇒ ① OUIを起動する前にHACMPのファイル名を変更する。
    su -
    /usr/sbin/cluster/utilities/clfindres ・・・HACMPが停止していることを確認。
    mv /etc/objrepos/HACMPadapter /etc/objrepos/HACMPadapter.org
    mv /etc/objrepos/HACMPnode /etc/objrepos/HACMPnode.org
   ② インストール
   ③ インストール後、HACMPのファイル名の元に戻す。
    su -
    /usr/sbin/cluster/utilities/clfindres ・・・HACMPが停止していることを確認。
    mv /etc/objrepos/HACMPadapter.org /etc/objrepos/HACMPadapter
    mv /etc/objrepos/HACMPnode.org /etc/objrepos/HACMPnode

・ディスク領域要件
  コンポーネント        必要なディスク領域
  データベース・ソフトウェア  約4.5GB
  シード・データベース     約1.0GB
・DBCAはデータベースの作成に失敗するとデバイスファイルを消そうと試みるため、デバイス・ファイルが消えないように、ディレクトリの
 パーミッションを設定する必要がある。
・インストール後にOracle Intelligent Agentをし様子r場合は、agentctlコマンドを使用する。
・Oracle9iリリース2(9.2.0.1.0)へアップグレード後、新しいリリースの環境でデータベースをオープンする際には、必ずMIGRATEオプションを
 付けてstartupコマンドを実行すること。
・CREATE PROFILE
 PASSWORD_REUSE_TIMEとPASSWORD_REUSE_MAXの両方をunlimited以外の値に設定し、両方の条件を満たす必要がある。片方にunlimitedを設定した
 場合には、制限がかからない動作となる。

・SQL*Loader
 従来型パス → 断片化ない、索引再作成あり
 ダイレクト・パス・ロード → 断片化あり、索引再作成なし
・RMAN set limit channel <チャネル名> READ RATE
      ・・・1秒当りのディスクI/O負荷の調整
      fileperset・・・複数のデータファイルを1つのバックアップ・セットに多重化
      set limit channel kBytes ・・・ バックアップピースのファイルサイズを指定
・v$recover_fileビュー
 ・・・データが損失している場合は、チェックポイント番号が0になる。
・PMONプロセスダウン → インスタンスダウン
(Oracle9iR2 RMAN検証結果)
・Oracle9.0.1よりのSET LIMIT CHANNEL RMANコマンドは使用不可 ⇒ ALLOCATE CHANNEL ~ / CONFIGURE CHANNEL ~ を使用すること。
・ALLOCATE CHANNEL ~ TYPE RMANコマンドも使用不可 ⇒ CONFIGURE CHANNEL ~ DEVICE TYPE
cf) CONFIGURE CHANNEL <チャネル名> DEVICE TYPE DISK MAXPIECESIZE=2G;
cf) RELEASE CHANNELは、そのまま使える。
※使用不可になったRMAN構文は、下位互換性のために今後のリリースでも引き続きサポートされる。
・RMANオープン時のデータ用表領域(PLUS ARCHIVELOG)
 PLUS ARCHIVELOGを使用すると、RMANは次に示す処理を順番に実行する。
 ① ALTER SYSTEM ARCHIVE LOG CURRENTを実行  ② BACKUP ARCHIVELOG ALLを実行  
 ③ BACKUPコマンドで指定したファイルをバックアップ
 ④ ALTER SYSTEM ARCHIVE LOG CURRENTを実行  ⑤ バックアップ中に生成した、残りのアーカイブログを全てバックアップ
 RMAN実行中にアーカイブログが生成されるため、RAC環境ではRAC環境ではRMANがリモートノードにアクセスできる設定にして
 おかなければ、バックアップが異常終了する。
 したがって、RMANを実行する前に、単純にOSのrcpコマンドでアーカイブログを単一ノードに集約しておくだけの方法では、
 DBオープン時のアーカイブログを含むバックアップを行うことはできない。
・アーカイブログのバックアップ(オープン)
 DBがオープン時にBACKUP ARCHIVELOG ALLコマンドを実行すると、RMANがバックアップを取得する前に
 「ALTER SYSTEM ARCHIVE LOG CURRENT」を実行するため、リモートノードのアーカイブログにアクセスできるように設定して
 おかなければバックアップは異常終了する。
 BACKUPコマンドを「archivelog kile '%アーカイブログ名称%'」として実行すると、RMANが「ALTER SYSTEM ARCHIVE LOG CURRENT」を
 実行しないため、リモートノードのアーカイブログにアクセスできない状態でも、事前にrcpコマンドでアーカイブログを単一ノードに
 集約する方法にでバックアップを取得することが可能である。
 (最新のRedoログのバックアップが必要な場合、手動で「ALTER SYSTEM ARCHIVE LOG CURRENT」を実行する必要がある)

・Oracle9iリリース2(9.2.0.*)では、DRS_STARTの代わりにDG_BROKER_START初期化パラメータを使用する
 (DRS_STARTは下位互換用)。
DB_BLOCK_CHECKSUM・・・デフォルト値はTRUE
・sysスキーマオブジェクトにtriggerを設定する事はできない。
(Oracle9i Data Cartridge Developers Guide)
・create indextypeを実行するには、ODCIのインストールが必要。
 ① Java Optionのインストールが必要(Oracle Universal Installer)
 ② 以下のコマンドを実行。
   loadjava -user sys/<パスワード> -resolve -synonym -grant public -verbose $ORACLE_HOME/vobs/jlib/CartridgeServices.jar
   loadjava -user sys/<パスワード> -resolve -synonym -grant public -verbose $ORACLE_HOME/vobs/jlib/ODIC.jar

・Oracle9iR2 デフォルトで監査されるアクション
 ・管理者権限によるインスタンスへの接続
  SYSOPERまたはSYSDBAとしてOracleに接続したOSユーザーについて記述した監査レコードが生成。
 ・データベースの起動  ・データベースの停止
 ・systemスキーマにNORMALで接続している場合には、その操作内容はOS監査証跡に書き込まれないので、個別にaudit文を実行
  する必要がある。
 ・sudit_sys_operations=true設定時
  ・audit_traail=noneの場合でも、OS監査証跡に書き込まれる。
  ・audit文を実行しない時でも、操作内容がOS監査証跡に書き込まれる。

・Connection Load Balancingを使用する時は、local_listner初期化パラメータは無効にしておく。
・Connection Load Balancingは、共有サーバー接続の機能が必要。
・ロールバックセグメント 1セグメント当りエクステント数は20。(推奨値)
・Oracle explain plan実行 → PLAN_TABLEにINSERT
・レンジ・リスト・コンポジット・パーティショニング
 ・パーティション化・・・レンジ
 ・サブパーティション化・・・リスト
・DML_LOCKS
 ・・・トランザクションで変更される表ごとのDMLロックの最大数を指定。値は全てのカレント表に対するロックの総数と
   等しい値を指定する。
 デフォルト:4 × TRANSACTIONS
 RAC:全てのインスタンスに、このパラメータを指定する必要があり、全てのインスタンスに正の値を設定するか、または
     全て0に指定する必要がある。
 パラレルDML・・・この値を増やす必要がある。
・FlashCopy使用リカバリ時、制御ファイルのみは最新のものを使用。
 (FlashCopyにて、データファイルのみ戻す)
・DBMS_SHARED_POOL
 ・・・共有プールのアクセスを提供。共有プールのオブジェクト・サイズを表示したり、メモリの断片化を減らすために、
    オブジェクトを保存または非保存としてマークすることができる。
 @?/rdbms/admin/dbmspool.sql → prvpool.plb  ※dbmspool.sql・・・STASTPACK SNAPSHOT取得時に呼び出し
 ・SIZESプロシージャ・・・共有プールにあるオブジェクトで、指定サイズより大きいオブジェクトを表示する。
 ・KEEPプロシージャ・・・共有プールにオブジェクト(パッケージプロシージャ、タイプ、トリガー、シーケンス)を保存する。
 ・UNKEEPプロシージャ・・・指定オブジェクトを解放する。
 ・ABORT_REQUEST_THRESHOLDプロシージャ
  ・・・共有プールについて」、異常終了を要求する閾値を設定する。

・JDBC Thin Driver 1カラム2000バイト 上限
・データ量見積
 NUBMER・・・1 + CEIL( p / 2 ) + 1(有効桁数pが38桁未満の負の数の場合)
 ROWID・・・6(一意でない索引の場合は + 1)
・FREELISTS(セグメントに同時にINSERTを行うプロセスの見込み数)
 ・オンラインサービス中にINSERTあり・・・15を設定(5分間500ユーザー、1秒間15ユーザー)
 ・オンラインサービス中にINSERTなし・・・1
・ハッシュ・パーティション
 ・パーティションキー・・・パーティション毎にデータ量の偏りがある場合
 ・レコード数100万以上
 ・レンジスキャンなし
 ・パーティション数・・・ハッシュ関数の仕様として、2の累乗にする必要がある。
・統計情報の収集・・・ANALYZE分を主に使用し、パーティション表についてはグローバル統計のみDBMS_STATSプロシージャを使用する。
 ・ANALYZE文
  ・行移行の情報を収集することが可能  ・個別のパーティション → グローバル
 ・DBMS_STATSプロシージャ
  ・行移行の情報を収集することが不可能
  ・パーティション表及び索引に対して、グローバル統計を収集することが可能。
・listener.ora、tnsnames.ora
 SDU、TDU・・・3000を指定い
 送信されるデータ・パケットを配置するバッファのサイズ。デフォルトより大きい1500の倍数を指定(チューニング要)。
・tnsnames.ora(資産調査サーバー)
 ENABLE=BROKEN (TCP/IPのKeepaliveを使用可能にする)
 TYPE=session・・・セッションのフェイルオーバーを指定
・max_commit_propagation_delays=0 ・・・ SCNコミット後にリフレッシュさせる。
・control_file_record_keep_time=15 ・・・制御ファイルの再利用期間を設定。再利用できない場合のエラーを避ける。
・OracleNet
 ・TAF
  ・TYPE=session
   ・・・セッションをフェイルオーバーする。SELECTはリカバリされない。
      解析済のクエリは結果を返す。解析中のクエリは中断される。
  ・METHOD=basic
   ・・・フェイルオーバー時に接続を確立する。
      
・SDU(session data unit)
 ・・・Oracle Netがネットワーク間でデータを転送する前にデータを配置するバッファ。Oracleがバッファ内のデータを送信するのは、
   データ送信が要求された時、またはバッファがデータでいっぱいになった時。
・cluster_interconnect
 ・2重化されているが、ACTIVE/STANDBY構成(通常時STANDBY側NICにはIPアドレスがバインドされていない)。
  ACTIVE側切断時、IPアドレスがSTANDBY側NICにTakeoverされる。
・AIX版Oracle PSR適用手順
 インスタンス停止後、rootユーザーにて/usr/sbin/slibcleanを実行し、ライブラリ・メモリ内の現在使用されているモジュールを
 アンロードする ⇒ PSR適用本番手順
・初期化パラメータ(UNIX) $ORACLE_HOME/dbs
・listener.ora、tnsnames.ora、sqlnet.ora ・・・$ORACLE_HOME/network/admin
AIX gid=dba、groups=hagsuser → Oracle RAC インストール
・sort_area_size × 2 = 一時表領域エクステントサイズ
・CREATE SEQUENCE ~ ;
 ・CACHEオプション
  ・・・順序番号の集合をメモリに事前に割り当て、維持する。キャッシュ内の最後の順序番号が使用されると、別の順序の集合が
    読み込まれる。
    インスタンス・ダウン/SHUTDOWN ABORT → キャッシュされているが使われていない順序番号は失われる。
    順序のキャッシュが不十分な場合や、順序が全くキャッシュされていない場合は、待機時間の増加によって、
    パフォーマンスの問題が生じることがある。
・初期化パラメータSPFILE要件 代替方法(RAC)
 ・・・各初期化パラメータファイルに、以下のエントリを追加(各ノードとも同じ値であること)。
    <インスタンス名>.<初期化パラメータエントリ>
   ※show parameter <インスタンス名>では参照不可。
・tnsping・・・OracleNetクライアント ~ リスナー・プロセスのみの確認(インスタンスまでは見に行かない)
・初期化パラメータcontrol_file_record_keep_time
 ・・・制御ファイル内の再利用可能なレコードを再利用するまでの最小経過日数を指定する。デフォルトは7日。
   再利用できないためのエラーを避ける。
・制御ファイル内LOGHISTORY最大値65535 (デフォルト)
・RAWデバイス control_fileサイズを調べる方法
 ① alter database backup controlfile to '/tmp/cont';
   この操作で生成されるファイルサイズを調べる(OSファイルヘッダ分だけ大きくなる)
 ② $ORACLE_HOME/binにて、以下のコマンドを実行する。
    dbfsize <制御ファイル名>
・RAC用RBS
 ・・・RBS再作成を行う時、自ノード分RBSのみで行うこと。
   (ノード1でノード2のRBS再作成を行うとエラーになる)
・sysユーザー以外 ログインしたインスタンス調べ方
 以下のSQL文を実行する。
  select userenv('instance') from dual;
 この検索によりインスタンス番号(RAC)が表示される。
(Oracle9iデータベース・パフォーマンス・チューニング・ガイド及びリファレンス リリース2)
・CBOは、経験則を使用すると、経験則を適用しない場合に比べ、コストがはるかに大きい計画を生成する場合がある。
・FIRST_ROWSヒントは、下位互換性とプラン・スタビリティのためのもの。
・DBMS_STATSよりもANALYZE文
 ・VALIDATEまたはLIST CHAINED ROWS句  ・空きリスト・ブロックの情報を収集する場合
・コスト・・・作業単位の数(使用されるリソース)
・索引付きの列にファンクション → 索引は使用されない。
・表の並列度が高いと、レンジ・スキャンよりも全表スキャンの方向にオプティマイザを偏らせる。
・SELECT * FROM employee SAMPLE BLOCK(1); ・・・ブロックによるサンプリングを行って、employee表の1%にアクセスする。
・高速全索引スキャン
 ・・・表にアクセスすることなく、索引そのものに存在するデータにアクセスする。FAST_FULL_SCAN
    索引付けされた列の少なくとも1つにNOT NULL制約が必要。
・ハッシュ結合・・・RBOでは使用できない。大きなデータセットを結合。
・一時エクステント・サイズ・・・1MB以上(UNIFORM SIZE)
・HASH_AREA_SIZE・・・ハッシュ結合で使用するメモリの最大容量(バイト)を指定。デフォルト: 2 × SORT_AREA_SIZE (ノード単位)

・索引・・・PCTFREEのみ、PCTUSEDは使用不可。
・$ORACLE_HOME/bin  relink all
・Oracle9iR2より、アーカイブプロセス数(デフォルト)は2
 (log_archive_max_processesはデフォルト2)
・DBA_TABLES  CHAINED_CNT列・・・行移行と行連鎖の両方が含まれる。
・DBMS_JOBプロシージャ
 ・・・別にBugがあるわけではない。但し、cronが使えるのなら使ったほうがよい(Oracle社 長澤殿見解)
・db_file_multiblock_read_size
 ・・・Oracle9iR2よりRAC制限(MAX16)がなくなる。→ AIX or HSS 最大I/Oサイズ 要調査。
・Statspack
 Top5 Wait Events → Top 5 Timed Events(経過時間ベース)

・HASH_AREA_SIZE・・・ハッシュ結合で使用するメモリーの最大容量。
・CURSOR_SHARING ・・・ FORCE/SIMILAR
 ・共有プール内にリテラル値のみ異なる文があるかどうか(多数の類似文)。
 ・ライブラリ・キャッシュ・ミス率が非常に高くなっている
・session_cached_cursorsパラメータ
 ・・・セッション毎にキャッシュするカーソルの数を設定。
    ステートメント解析されるたび、Oracleは最初にセッションでキャッシュされているステートメントを確認しに行く。
    共有可能ばバージョン(同一スキーマ)のステートメントが存在する場合には、それが使用できる。これにより、
    CPU使用を少なく、かつ殆どラッチを取得することなく、頻繁にパースされるステートメントのショートカットが
    可能となる。
    デフォルト 0 ・・・同じステートメントが1つのセッション内で3回パースされる必要がある。
               → 最も使用されていないステートメントより廃棄。
    推奨値 50 (→ statspack 'session cached cursors'数の増加)

・SDU
 ・クライアントとサーバーで同じ値を使用。
 ・パケットヘッダーのオーバーヘッド及びメッセージの断片化を最小限にするには、SDUのサイズをMSSの倍数にする。
 ・Oracle Advanced Securityの暗号化を使用していない時は、SDUのサイズを1つ増やす。
・動的にキャッシュ・サイズを変更すると、DB_CACHE_ADVICEがOFFに設定される。
・KEEPバッファ中身・・・v$BHを検索。
・large_pool_size・・・パラレル問合せ
・CURSOR_SPACE_FOR_TIME=TRUE
 ・・・その文に関連する全てのアプリケーション・カーソルがクローズされる場合のみ、カーソルの割り当てを解除。
    ※プライベートSQL領域のメモリー量が不十分な場合、CURSOR_SPACE_FOR_TIMEの値をTRUEにしない。
    ※あまり頻繁に使用されないステートメントの、共有プールの固定/解除を減らせる。

・SESSION_CACHED_CURSORS
 ・・・v$sysstat(STATSPACK内)「session cursor cache hits」が低い場合、SESSION_CACHED_CURSORSを設定する。   
    ※「session cursor cache hits」
     ・・・解析コールによってセッション・カーソル・キャッシュ内でカーソルが検出された回数
・SHARED_POOL_RESERVED_SIZE
 ・・・基本的にはSHARED_POOL_SIZEの10%とした方がよいが、SHARED_POOL_SIZEが非常に大きいか、
    SHARED_POOL_RESERVED_MIN_ALLOCパラメータの値がデフォルトよりも低い値に設定されている場合は、その限りではない。
    ※SHARED_POOL_RESERVED_MIN_ALLOC・・・8iより隠しパラメータ
    v$shared_pool_reserved・・・REQUEST_FAILURESをなくすことを目標。
・CURSOR_SHARING
 ・exact(デフォルト)
 ・similar・・・リテラルがわずかに異なっても、その他が同じSQL文であれば、その異なるリテラルがSQL文の意味または計画が
         最適化されている程度のいずれかに影響しない限り、カーソルが共有される。
 ・force・・・リテラルがわずかに異なっても、その他が同じSQL文であれば、その異なるリテラルがSQL文の意味に影響しない限り、
        カーソルが共有される。(実行計画に影響あり)
 ※similarまたはforce → スター型変換はサポートされない(DSSには不向き)
・java_pool_size・・・PSR9202 150MB以上、OracleJVM、JServer
・SORT_AREA_RETAINED_SIZE・・・共有サーバー接続時に設定
・log_archive_max_processes・・・インスタンス起動時に起動されるアーカイバ・プロセス数を指定(デフォルト2)

・open_cursors・・・65535以上でOracleを起動しようとすると失敗する(Oracle不具合、調査中)
・v$sesstat
 ・session pga memory・・・セッションのカレントのPGAサイズ。v$sesstatのみ有効で、v$sysstatでは無効。
 ・session pga memory max・・・セッションの最大PGAサイズ
 ・session uga memory・・・セッションのカレントのUGAサイズ
 ・session uga memory max・・・セッションの最大のUGAサイズ

・session_cached_cursors初期化パラメータ
 ・・・v$sysstat 
     session cursor cache hits
     ・・・解析コールによってセッション・カーソル・キャッシュ内でカーソルが検出された回数を数える。この値が相対的に
       低い割合である場合に、このパラメータ値を増加させる。
          
・STATSPACK
 ・level 0 ・・・ PGAを独立した節での表示不可
 ・level 5 ・・・ PGAを独立した節での表示可能
・STATSPACK
 ・level 0 ・・・ PGAを独立した節での表示不可
 ・level 5 ・・・ PGAを独立した節での表示可能
・Oracle9iR2
 DB_FILE_MULTIBLOCK_READ_COUNT
 ・・・最大サイズ   最大I/Oサイズ / DB_BLOCK_SIZE
・large_pool_size
 ・パラレル問合せ  ・Recovery Manager  ・共有サーバー
・db_block_lru_latches → db_writer_processes数を増加
・DML_LOCKSパラメータ
 9iでは、通常、DDL操作の実行中に、Oracle 7のシステムで必要とする以上のDML_LOCKを使用する。
 → 明示的に多くの値を設定する必要がある。
・enqueue_resources
 ・・・ロック・マネージャが同時にロックできるリソースの数を指定。
   → 明示的に大きな値を設定する必要がある。
・CREATE DATABASE後、実行するスクリプト
 ・catalog.sql  ・catproc.sql  ・pupbld.sql ・・・systemアカウントで実行
・Oracle9iR2の新機能
 ・不要になったAPのパーティション化  ・高速パーティション分割  ・リモート
・Oracle8.1.5 → 9.2.0へのアップグレード
 ①8.1.7へアップグレード
 ②9.2.0へアップグレード
  a) Oracle9iR2のインストール  b) dbca or 手動アップグレード
・手動アップグレード手順
 ①OracleNet upgrade  ②upgradeされるデータベース SYSDBAでログイン  ③SYSTEM表領域、RBS領域の追加
 ④v$logfile、v$database、v$controlfileの検索 → バックアップ対象ファイルの確認
 ⑤shutdown  ⑥バックアップ  ⑦以前のORACLE_HOMEからOracle9iのORACLE_HOMEに構成ファイルをコピー
 ⑧パラメータファイルをOracle9iのORACLE_HOMEににコピー  ⑨パスワードファイルをOracle9iのORACLE_HOMEににコピー
 ⑩初期化パラメータファイルの変更
  ・SHARED_POOL_SIZE 48MB以上  ・DB_DOMAIN "WORLD"  ・REMOTE_LOGIN_PASSWORDFILE=NONE
 ⑪新しいリリースのOracleホーム・ディレクトリの所有者として、システムにログイン  ⑫$ORACLE_HOME/rdbms/adminに移動
 ⑬SQL*Plusにログイン  ⑭STARTUP MIGRATE PFILE=~  ⑮u.sql、u0801070.sql実行
 ⑯dba_registry検索  ⑰cmdbmig.sql実行  ⑱dba_registry検索  ⑲SHUTDOWN IMMEDIATE  ⑳STARTUP
 21.残りの全てのコンポーネントのupgrade  22.utlrp.sql実行  23.dba_objects検索  24.データベースのバックアップ
 25.OracleNet再設定  26.TEMPORARY表領域再作成(ローカル管理化)  27.RBS再作成(RBS用表領域ローカル管理化)

・ALTER USER <ユーザ名> QUOTA UNLIMITED ON ;
 か、UNLIMITED TABLESPACEシステム権限
1RBS当りエクステント数・・・20 × RBS 30 = 600
RBS用表領域3000MB エクステントサイズ3MB
1RBS当りエクステント・・・20(60MB)、MAX=Unlimited、optimal_size=60MBを指定
・OPatch・・・Perl5.6以上が必要
・CREATE UNIQUE INDEX
 ・・・索引がローカル非同一キー索引の場合、索引キーはパーティションキーを含んでいる必要がある。
    → GLOBALか通常の索引。
※ローカル非同一キー索引(NON_PREFIXED)
 CREATE INDEX ~ ON (・・・, <パーティションキー>, ・・・)

 ローカル同一キー索引(PREFIXED)
 CREATE INDEX ~ ON (<パーティションキー>, ・・・)

(ローカル管理表領域TIPS)
・エクステントの数が多い → パラレルクエリが有利。但し、パフォーマンスは低下する。
 1024エクステントの利点
 ・多くのユーザーによる高い並列性が可能  ・シングルユーザーによる高い使用率が可能。
 均一エクステント → 領域管理が改善
・ローカル管理一時表領域
 ・エクステントサイズ・・・SORT_AREA_SIZEの倍数 + DB_BLOCK_SIZE
・ユーザー表領域
 ・大規模な表・・・UNIFORM  ・小規模な表・・・AUTOALLOCATE  ・UNDO表領域・・・UNIFORM
・DBMS_SPACE_ADMIN.TABLSPACE_MIGRATE_TO_LOCALプロシージャ
  DBMS_SPACE_ADMIN.TABLSPACE_MIGRATE_TO_LOCAL(
    tablespace_name,
    allocate_unit, ・・・割当て単位。デフォルトは表領域の全エクステントの最大公約数。
    relative_fno); ・・・ビットマップ・ブロックが配置されるファイルの、相対ファイル番号。
               → データ・ファイル内の空きスペースが不十分な場合、データ・ファイルのサイズを
                 増加させる。
 ※一時表領域のローカル管理移行は不可  ※エクステント割当て方針・・・移行前のものを引き継ぐ
 ※ローカル管理表領域のエクステントサイズ管理に関する利点を得ることはできないが、STエンキューの競合を避ける等の
  領域管理上の利点を得ることはできる。
・STエンキュー・・・領域管理トランザクションのエンキュー
・エンキュー・・・データベース・リソースへのアクセスをシリアル化する共有メモリーの構造
・CREATE PUBLIC ROLLBACK SEGMENT ~
 ・・・パブリック・ロールバックセグメントの作成。全てのインスタンスで参照可能になる。
・OPTIMAL句(RBS) shrinkするタイミング
 ・データベース起動時  ・データベース起動後12時間おき(SMONによる)
 ・RBSのエクステントを跨るトランザクションが実行された時。
・UNDO表領域 領域開放するタイミング
 ・データベース起動後12時間おき(SMONによる)
 ・UNDO表領域が圧迫された時(使われていない割当て済みのエクステントの強制解放)
・ローカル管理表領域
 AUTO ALLOCATE
 ・・・適切なエクステントサイズが自動選択される。
   CREATE TABLE実行時の1エクステントサイズは64KB。
 UNIFORM SIZE・・・5ブロック以上(40k以上)
・optimizer_max_permutations・・・デフォルト値2000(→順列 6TBLまで)
                     1000以下 → 解析時間が少なくて済む(6つの結合)
・ビュー参照あり
 → select any tableシステム権限があれば、個別のオブジェクト権限必要なし。
・Oracle9iでは、SQL NCHARデータ型の使用は、Unicodeキャラクタセット・エンコーディング(UTF8とAL16UTF16)に制限されている。
 JA16SJISFIXED等のアジア言語のキャラクタセットを含めて、NCHARデータ型で使用可能であったOracle8 Serverの他の
 キャラクタセットは、現在はサポートされていない。
(Oracle9iR2 STATSPACKインストールTIPS)
・SP_TS 100M、UNIFORM_SIZE 40kにて正常インストールを確認。
・define perfstat_password='PERFSTAT'を追加のこと。
・spoolは不要(spcusr.lis、spctab.lis、spcpkg.lisログを参照する)
DBA_TABLESPACES
 INITIAL_EXTENT、NEXT_EXTENT・・・デフォルトのサイズ(バイト単位)
・DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL
 ・・・初期化パラメータCOMPATIBLE(静的)は8.1.6.0.0以上が必要。
・ORAINVENTORY
 ・・・通常oinstall。Oracle製品のインストール、削除、またはパッチの適用を行うユーザーは、ORAINVENTORYグループの
   メンバでなければならない。
・oracleアカウント・・・プライマリ・グループはORAINVENTORY(oinstall)
             セカンダリGIDはOSDBA(dba)

・ハードドライブからのOracle9iのインストール
 ・2.5GB以上のハードドライブ領域
・RunInstaller
 oracleユーザー /runInstaller
 cf) rootユーザー /tmp/OraInstall/orainstRoot.sh
・[ソフトウェアのみ]
・rootユーザー
 # cd $ORACLE_HOME
 # ./root.sh

・インストール後
 ・追加のUNIXアカウントの作成・・・OSDBA(dba)に属していること  ・ディレクトリ パーミッション変更
 ・/etc/oratab  ・root.shバックアップ
・インストール → DB構築 → 初期化パラメータリンクはり → OUI個別パッチ → PSR9203
・クラスタ・データベースにPSR適用作業
 ・・・初期化パラメータCLUSTER_DATABASEをFALSEに設定 → 事後作業が終了した場合にTRUEに戻す。

・OUI 2.2.0.18.0 ・・・PSR9203適用時に必要。
・個別パッチ 2878462hp ・・・ 中にある.jarファイルを、インストーラーとり実行。
★PSR9203 ・・・ 個別パッチ適用後、OUIは$ORACLE_HOME/binより起動すること!
・Oracle9iR2インストール時、JDK1.3以上がインストールされていなければならない。
 JDK1.3.02 ~
・OUI2回目以降時、デフォルト設定を消去するには、
 /var/opt/oracle/oraInst.locファイルを消去する。
・OUI起動時、LANG=Cに設定
・tnsnames.ora SERVICE_NAME
 ① 初期化パラメータSERVICE_NAMES
 ② listener.ora GLOBAL_DBNAME
 → 同じ値にすること。
runInstaller・・・rootユーザー、sysグループで実行される。
・LISTENERに登録されているサービス名の確認方法
 lsnrctlで以下のコマンドを発行
  set displaynode normal
    services <リスナー名>
  → サービス "~" ・・・サービス名
     インスタンス"~"
・Oracle初期化パラメータdb_cache_advice=falseに設定しても、共有プールのキャッシュアドバイス(STATSPACK)は取得される。
・RAC・・・全ノードで、必ずグループID(GID)、ユーザーID(UID)は同一に設定する。
          UID          GID
  oracle         101             dba  101   10.56.227.8
           101           101     10.56.227.9
・Oracle9i マルチブロック(標準以外)表領域
 ・・・compatible 9.0.0.0.0以上必要。
・Oracle Net Services
 ・listener.ora
   LOG_DIRECTORY_<リスナー名>・・・リスナーのログ・ファイルの宛先ディレクトリを指定
   LOG_FILE_<リスナー名>・・・リスナーのログ・ファイル名を指定
・listener.log・・・renameしても、renameされたファイルに引き続き追記される。
・パーティション表
 ・GLOBAL索引
  ・PARTITION BY RANGE (~)  ~・・・TBLのパーティションキーを指定。
  ・PARTITION KEYのみ、索引を作成することができる。
  ・最後のパーティションは、必ずMAXVALUEを指定。
  ・DDL(TRUNCATE)後、DML処理は不可(INDEXのREBUILDもしくは再作成が必要)
  ・GLOBALパーティション索引の場合は、同一キー索引にする必要がある。
  ・LOCAL索引・・・パーティション化列はUNIQUE索引のキー列のサブセットを構成する必要がある。

・8文字以上のインスタンス名 指定可
・Oracleバックグラウンド・プロセス1つ当り 20 ~ 30Mバイト(メモリ)
・dirty buffers inspected (v$sysstat)
 ・・・再使用するバッファ検索中に、ユーザー・プロセスが検出した使用済みバッファの件数
 cf) free buffer inspected
・グラニュル・・・動的SGA変更時に、連続したメモリ領域の割り当て/解放の単位。
・バッファプール設定時、グラニュル単位に丸められる。
・listener.ora 読み取り権限に注意。
・新料金 以下の環境変数を追加
 SHLIB_PATH=/opt/app/oracle9i/product/9.2.0.3/lib32
・Pro*C/C++ 64ビットアプリケーションのクライアント動作環境をリリース9.0.1.*あるいはそれよりも前のバージョンから
 リリース9.2.0.*に移行する場合、アプリケーションの再プリコンパイル、再コンパイル、及び再リンクを行う。

・Pro*C/C++ 異なるワード・サイズが混在しているのインストールの実装
 ① 次のコマンドを実行
   genclntsh
 ② 使用しているプラットフォームに応じて、次のいずれかの環境変数に32ビット及び64ビットの共有ライブラリのパスを入力。
   ・32ビットの共有ライブラリのパス $ORACLE_HOME/lib32
   ・64ビットの共有ライブラリのパス $ORACLE_HOME/lib
   プラットフォーム                 環境変数
    AIX、Solaris 64ビット                            LIBPATH
   HP(32ビットのクライアント・アプリケーション)     SHLIB_PATH
   HP(64ビットのクライアント・アプリケーション)     LD_LIBRARY_PATH
 → SHLIB_PATH=$ORACLE_HOME/lib32、LD_LIBRARY_PATH=$ORACLE_HOME/libを設定すること。

・Oracle9iR2・・・64ビット版でのみ提供
・HP-UX11iプラットフォーム固有
 ・Oracle JDBC Thin Driver for JDK1.4はサポート外
 ・Oracle JDBC OCI Driver for JDK1.4はサポート外
・RAC・・・各ノードにて等価関係を設定する。
      他のノードのエントリを、oracleアカウントの.rhostsファイルまたは/etc/hosts.equivファイルに追加する。
・どのようなタイプのレプリケーション・サイトを構築する場合でも、まずサイトを設定する。
 → マスター・グループ及びマテリアライズド・ビュー・グループの構築
    → 競合解消及びレプリケーション環境の管理

・レプリケーション計画で考慮すべき点
 ・レプリケーション・データベース・オブジェクトを設計する。
 ・レプリケーションで重要な初期化パラメータ設定の決定
 ・マルチマスター・レプリケーション環境、MVIEWレプリケーション環境のどちらを構築するのか、または両レプリケーション環境を
  組み合わせてハイブリッド環境を構築するのかを決定する。
 ・スケジュール・リンクの構成を決定する。  ・スケジュール・パージの構成を決定する。
 ・シリアル伝播、パラレル伝播のどちらを使用するのかを決定する。  ・パラレル伝播を使用する場合は、並列度を決定する。
 ・MVIEW環境の構築を計画する場合、環境構築に配置テンプレートを使用するかどうかを決定する。
 ・各自の環境における競合の可能性を分析し、競合の可能性がある場合は、どの競合解消メソッドを使用するかを決定する。
 ・レプリケーション環境のセキュリティを構成する。  ・レプリケーション環境の耐障害性を設計する。

・レプリケーション環境構築のプロセス・・・以下のメモファイル(.png)を参照。

・チェック中の遅延トランザクション・キューのサイズを一定に保つためには、完了した遅延トランザクションをパージする。
 DBMS_DEFER_SYS.SCHEDULE_PURGEプロシージャにより、パージ・プロセスが自動化される。
 レプリケーション管理者として、このプロシージャを実行する。

・複数のマスター・サイト(マルチマスター・レプリケーション)は、Oracle Enterprise Editionでのみ使用できる。
・更新可能スナップショット・アドバンスド・レプリケーション
 ・・・マスタDB側にサポート必要。
    開発環境では、SODBと同じバージョン(Oracle8.1.7.2)をマスタ、Oracle9iR2(9.2.0.3)をMVIEWとした場合、
    ・更新可能スナップショット自体の作成は可能
    ・マスタサイトの作成は不可(Oracle8.1.7.2)
・CREATE MATERIALIZED VIEW文
 ・USING NO INDEX
  ・・・デフォルトの索引の作成を抑制できる。CREATE INDEX文を使用することにより、代替する索引を明示的に作成できる。
     増分リフレッシュ(REFRESH FAST)でMVIEWを作成する場合、このような索引を作成する必要がある。
 ・MVIEWにおいて、UNIQUE INDEXは作成不可
  (遅延可能はUNIQUE INDEXは、更新可能スナップショットでのみサポート)
・Oracle Net Services listener.ora
 ・PROGRAM・・・パラメータPROGRAMを使用して、サービスの実行可能なプログラム名を識別する。
         このパラメータはSID_DESCの下に埋め込む。
・Net8 (8.1.*)
 listener.ora SID_DESCに(PROGRAM=extproc)の記述があるSIDに対して通常の接続を行おうとした場合に、ORA-3113が発生する。
 (PROGRAM=extproc)・・・外部プロシージャ用の設定。
 通常接続時は、(PROGRAM=extproc)部分を削除する。

・HASHパーティション・・・パーティションの物理属性で有効なのは、TABLESPACEオプションのみ。
・Oracle FK ・・・参照先TBLの列がPKかUNIQUEであることが必要。
・UNIQUEまたはPRIMARY KEY制約を使用可能にすると、対応する索引が作成される。
・CREATE MATERIALIZED VIEW ~ 文
 ・・・キーワードSNAPSHOTは、MATERIALIZED VIEWの代わりに下位互換用にサポートされている。
・Oracle TNS_ADMIN(環境変数)
 ・・・設定は必須。通常は$ORACLE_HOME/network/admin
・OracleNet(リリース全般)
 ・・・PORT 1521を使用した場合、リスナーが変な動作を行うらしい。このような情報がOracle殿 → HPサポート殿へあったもよう。
   (HPサポート殿より口頭にて聞く。非公式情報)

・複合索引
 ~ Oracle8i ・・・先頭の列のみ、索引検索。
 Oracle9i・・・2番目以降の列でも複合索引を使用。(スキップ走査)
         ・逆キー、ビットマップ列、ファンクション索引はサポート外
         ・索引の直接検索よりも、高速ではない。
・INDEX_STATS・・・ANALYZE INDEX ~ VALIDATE STRUCTURE;
・Oracle9i新機能
 ・索引使用率の監視の開始
  ALTER INDEX <索引名> MONITORING USAGE;
 ・索引使用率の監視の終了
  ALTER INDEX <索引名> NOMONITORING USAGE;

  v$OBJECT_USAGEビュー USED列を参照。
・Oracle 大量アーカイブログ発生
 更新処理に伴って、対象の表に対するSELECT FOR UPDATE
  → SELECT FOR UPDATE文の 対象となる行数の累計が多いほど、アーカイブREDOログが大量発生する。
 ex) 10000レコードのTBLに、SELECT FOR UPDATEでTBL全体にロック、「1行DELETE → commit;」を10000回実施
  ⇒ 10000 + 9999 + 9998 + ・・・ + 3 + 2 + 1の、計50005000行分のアーカイブREDOログ発生。
 対処) SELECT FOR UPDATE文でロックを掛ける対象となる行をWHERE句の適切な指定により、REDO LOGの生成量を
    減らすことができる。

・TNS-12537(接続がクローズされました)
 ・・・ファイルが終わり条件に達したためパートナーが切断されました。
・Oracle9iR2 "~" ・・・MSクライアント側で"?"と文字化け。
 対処) a. DB側 JA16SJISTILDE → DB再作成
    b. AP側コーディング(→パフォーマンスの問題)
・Oracle9iR2 JA16SJISTILDE → Oracleクライアント側ORA-3106
 対処) クライアント側PSR9014適用
・JA16SJISTILDE JA16EUCTILDE
 ・・・Oracle Text INSO_FILTERを使用して非バイナリドキュメント(テキスト)を索引付けし、フォーマット列及びcharset列を
    指定しない場合には、サポートされない。 ⇒ PSR9202以降で対処済み。

・ORA-1921・・・ロール名'string'は他のユーザー名またはロール名と競合しています。
・CREATE TYPE
 ・TYPE作成者
  ・CREATE TYPE システム権限(自スキーマ)
  ・CREATE ANY TYPE システム権限(他スキーマ)
 ・サブタイプ作成者
  ・UNDER ANY TYPE システム権限または、スーパータイプに対するUNDERオブジェクト権限
 ・TYPE所有者
  ・EXECUTEオブジェクト権限(全ての型にアクセスするための)、または
  ・EXECUTE ANY TYPEシステム権限
 ・TYPE所有者、型にアクセスする権限を、他のユーザーに付与する場合
  ・型に対するGrant Option付きのEXECUTEオブジェクト権限、または
   Admin Option付きのEXECUTE ANY TYPE システム権限が必要。
・CREATE TYPE BODY
 ・自スキーマ内・・・CREATE TYPEシステム権限またはCREATE ANY TYPEシステム権限が必要。
 ・他スキーマ内・・・CREATE ANY TYPEシステム権限
           オブジェクトの置換 DROP TYPEシステム権限が必要。
・CREATE FUNCTION
 ・事前にSYSでDBMS_SYDX_SQLを実行する必要がある。
 ・自スキーマ用・・・CREATE PROCEDUREシステム権限
 ・他スキーマ用・・・CREATE ANY PROCEDUREシステム権限
           ファンクションリプレースには、ALTER ANY PROCEDUREシステム権限
 ・コール仕様・・・追加権限(Cコール仕様のCライブラリに対するEXECUTE権限)

・CREATE PROCEDURE
 ・事前にSYSでDBMS_SYDX_SQLを実行する必要がある。
 ・自スキーマ用・・・CREATE PROCEDUREシステム権限
 ・他スキーマ用・・・CREATE ANY PROCEDUREシステム権限
           プロシージャ再配置 ALTER ANY PROCEDUREシステム権限
 ・コール仕様    追加権限

・Oracle用makeバージョン確認方法
 which make /usr/ccs/bin/makeであること。
・perl5.6インストール後、環境変数PATHに/usr/local/perl5を追加する。
・Opatch適用前・・・oraInventoryディレクトリ及び$ORACLE_HOME/inventoryディレクトリのバックアップが必要。
 (oraInventoryディレクトリは、/var/opt/oracle/oraInst.locファイルに記載されている)
・MVIEWグループ
 ・リフレッシュ・グループの作成・・・DBMS_REFRESH.MAKEプロシージャを使用。
・OracleNet SDU・・・クライアント/サーバー側ともに同じ値を使用する必要がある。
 Cf) イーサネットフレームサイズ 1500バイト
    - TCPヘッダ部                    20バイト 
       - IPヘッダ部                       20バイト
       ---------------------------------
                       1460バイト → SDUは、この倍数に設定する。

・HSRP(Hot Standby Router Protocol)
・DBがOracle9iR2、OracleクライアントがWindoiws2000/2003Server
 → DB側 JA16SJISTILDE / JA16EUCTILDEを使うこと(MS文字化け対応)。
・Oracle動的リスナー登録・・・インスタンス起動時に必ず行われる。(リスニングするポートの登録)
 ・初期化パラメータ「local_listener」エントリなし・・・デフォルトポート1521
 ・初期化パラメータ「local_listener」エントリあり・・・そこで指定したポートのみ
・listener.ora・・・指定されたポートに対してリスナー・プロセスを起動。
 lsnrctlユーティリティコマンド
  8i・・・1521表示
  9i・・・1521表示なし
  → Oracle側で情報なし(←インスタンス/リスナー起動する順番)
 8i・・・1521のむ
 9i・・・1521 + 1541 → 1541のみ・・・初期化パラメータlocal_listener、service_names、instance_name
                    listener.ora GLOBAL_DBNAME → インスタンス名
                                       tnsnames.ora SID → SERVICE_NAME指定。

★listener.ora
                     listener.ora記述
 (program=extproc)あり      ポート1521       → ○
                     ポート1521以外 → ×

 (program=extproc)なし      ポート1521       → ○
                     ポート1521以外 → ○ 
・Oracle MVIEWリフレッシュグループ・・・DBA_REFRESHを検索
・exp/impで注意しなければならないオブジェクト
 ・ビュー
 ・MVIEW(スナップショット)
 ・パブリックシノニム
 → imp後のビューのコンパイルが必要。
・import時、analyze=nを指定の事。
・Oracleホスト・ネーミング・メソッド
 ・Oracleクライアント
  ・TCP/IP  ・DNS/NISによる名前解決
  ・sqlnet.oraファイル内のnames.directory_pathにHOSTNAMEが定義されている。
 ・DB側
  ・TCP/IP  ・リスナー・・・PORT1521
  ・listener.oraのGLOBAL_DBNAMEがホスト名で定義
※IP-OpSでは、ネット・サービス名 = インスタンス名( <> ホスト名 )なので、
 Oracleホスト・ネーミング・メソッドは事実上使用不可。

・DBA_MVIEWS
 ・COMPILE_STATE
  ・ERROR・・・マテリアライズド・ビューは1つ以上のエラーを伴って、妥当性チェックされた。
・マスター・サイトをOracle9iへアップグレードした後、全ての関連マテリアライズド・ビュー・サイトの完全リフレッシュを実行する。
・カーネルパラメータshmmaxがSGAのサイズより大きければ、SGAが複数のセグメントから構成されることはない。
・HP-UX11i
 ・・・Oracle9iで非同期I/O走査を実行するには、Oracleソフトウェア所有者が属しているグループ(dba)にMLOCK権限を付与する
   必要がある。
(付与手順)
1. rootとしてログインし、以下のコマンドを実行する。
  setprivgroup dba MLOCK
2. リブート後もMLOCK権限を保持するには、/etc/privgroupファイルを作成し、以下の行をそのファイルに追加する。
   dba MLOCK 
・OUIにてInstall時、copy時にエラー
 ・・・OSバックグラウンドプロセスで、copyが失敗したファイルをつかんでいる可能性がある。
・Opatchはperlスクリプトとjavaプログラムにより構成されており、OUIとインベントリ(oraInventory)を共有する。
 → $ORACLE_BASE/oraInventory  $ORACLE_HOME/inventory
・OPatchコマンド構文
  [] [-h[elp]] [-n[o_op]]
 ・・・・「perl」実行プログラム  ・・・・OPatchのperl script。通常はopatch.pl。
 ・・・・以下のいずれかのコマンドが指定できる。
  apply  lsinventory  rollback  version
 ・・・・コマンドによりサポートされているオプションを指定。
 ・-h[elp]・・・コマンドのヘルプを表示する。  ・-n[o_op]・・・実行する処理を表示する(実際に実行はされない)
使用例)
 /usr/local/bin/perl5.6 opatch.pl apply /patches/133469
 ・・・/patches/133469に存在するパッチを、$ORACLE_HOMEに適用する。
 /usr/local/bin/perl5.6 opatch.pl lsinventory ・・・個別パッチ情報取得
 /usr/local/bin/perl5.6 opatch.pl version・・・OPatch自体のバージョンを確認
 /usr/local/bin/perl5.6 opatch.pl rollback -id <パッチID> -ph <パッチの存在するディレクトリ>
 ・・・個別パッチを外す
・OPatch適用時注意事項
 ・perl5.6  ・OUIとインベントリ共有  ・LANGはC  ・PERL5LIB・・・perlライブラリの場所を指定
 ・OSコマンドfuserに対する実行権

・Oracle9iR2 db_writer_processes デフォルト値
 ・・・ (cpu_count + 7) / 8 の商
 (Oracke9iR2リファレンス・マニュアルの記述ミス)
・9i → 8i DBLINK経由検索 SP-0642またはORA-02064発生。
 ・・・Oracleの不具合。RemoteDBが8.1.7.2以下ならORA-02064発生。
 → LocalDB・・・R9013もしくはR9201
   RemoteDB・・・R8.1.7.3以上
・JDK1.4 + classes12.zipは、APは動くかもしれないが、Oracleとしてはサポート外となる。
・CREATE DATABASE LINK
 USING 'connect_string' ・・・ リモートデータベースのサービス名を指定する。
・SQL*PlusOracle9i → 8i DBLINK経由検索 不具合の件
 ・Oracle9iR2(LocalDB) → Oracle8i(RemoteDB)へDBLINK作成。
 ・ローカルDB(Oracle9iR2)、リモートDB(Oracle8iデータベース)の複数表問合せを行い、リモートDBのTBLの列に
  SELECT・・・FOR UPDATE OFでロックをかけた時に、SP-0642またはORA-02064エラー発生。
対処) Oracleの不具合。LocalDBにR9013もしくはR9.2、RemoteDBにR8.1.7.3上を適用する。
(Oracle9iR2待機イベント)
・db file parallel write
 ・・・DBWRがファイルとブロックへのパラレル書き込みを実行中であることを示す。最後のI/Oがディスクに書き込まれると、
    待機は終了する。
・control file parallel write
 ・・・セッションが物理ブロックの全ての制御ファイルに書き込んでいる時に発生。
    セッションが制御ファイル・トランザクションを開始する場合
    (制御ファイル・トランザクションのコミット前にセッションがクラッシュする場合に備えて、制御ファイルが最新の
     状態に更新されるようにするため)
・control file sequential read・・・制御ファイルからの読み込み中。
                  ・制御ファイルのバックアップ中  ・(インスタンス間での)制御ファイル情報の共有中
                  ・制御ファイルから他のブロックの読み込み中  ・ヘッダー・ブロックの読み込み中
・async disk IO
・log buffer space
 ・・・セッションがログ・バッファにデータを書き込む速度が、LGWRによる書き出し速度を上回るため、ログ・バッファ内の
    領域を待機している。ログ・バッファが小さい場合は、大きくするか、ストライプ・ディスク等の高速ディスクに
    ログファイルを移動することを検討する。
・log file parallel write
 ・・・REDOログ・レコードをログ・バッファからREDOログファイルに書き込んでいる。
    待機時間・・・物理I/O(書き込み)の完了に必要な時間。REDOレコードはパラレルで書き込まれるが、パラレル書き込みは
           最後のI/Oがディスク上に書き込まれるまで完了しない。
・log file switch completion・・・ログ・スイッチの完了を待機している。
・rdbms ipc message
 ・・・バックグラウンドプロセス(LGWR、DBWR、LMS0)で使用される。バックグラウンドぷらセスがアイドル状態であり、何らかの
    作業を実施するためのIPCメッセージがフォアグラウンド・プロセスから送信されるのを待機している。

・非同期I/O・・・パラレル表スキャン、ハッシュ結合、ソート及びシリアル・テーブル・スキャンでサポート。
STATSPACK セッション単位の統計情報の採取
 (1) 情報採取対象のセッションIDを確認
 (2) sqlplus perfstat/perfstat
    SQL> execute statspack.snap(i_session_id => 11);

・Oracle初期化パラメータTIMED_STATISTICS=TRUE
 (ALTER SYSTEM or ALTER SESSIONで変更可能)
・STATSPACK レベル7・・・セグメント・レベルの情報(使用頻度、競合度) ・・・ロック情報は?
(パラレル処理予想されるボトルネック)
・ロック競合(→ENQUEUE_RESOURCES、DML_LOCKS値を増やす)  ・RBS(→1つのRBSで最大2つのパラレル・トランザクション・プロセス)
・ARC0プロセス負荷(パラレルDML時)  ・LGWRプロセス負荷(→log_bufferは大きめ)  ・インスタンス・リカバリ長期化
・spool(CSVファイル作成)パフォーマンス劣化(→Oracleの仕様)  ・DBWnプロセス作業負荷

(パラレルクエリ、パラレルDML対応策)
・パラレルクエリ・・・PARALLELヒント/PARALLEL句
・パラレルDML
 ・手動パラレル化  ・ALTER SESSION ENABLE PARALLEL DML → PARALLEL句
・RBSでの競合を減らすために、1つのRBSに対してパラレル・プロセス・トランザクションを少数にする(2つくらい)。
・パラレルDMLは、より多くのロックを保持するため、ENQUEUE_RESORCES及びDML_LOCKSの開始値を増やす。
・UPDATE、MERGE、及びDELETEの各操作に対してパーティション内並列性を実現するには、COMPATIBLE初期化パラメータを9.2以上にする。
・Oracleハッシュ・パーティション表 ハッシュキー
 ・・・値の偏り(重複値)がなるべく少ないと予想される列をハッシュキーにする
   (電話番号、販売活動履歴番号(←シーケンスより取得)など)
   ⇒ パーティション毎レコード偏り少なくて済む。
・ALTER TABLESPACE <表領域> BEGIN BACKUP;
  ALTER TABLESPACE <表領域> END BACKUP;
 ・・・DBがアーカイブログモードの場合のみ、実行可能。
・TEMPORARY表領域にBEGIN/END BACKUPは実行不可。
 → リカバリ方法
   ① startup
   ② alter database tempfile <ファイル名> drop;
   ③ alter tablaspace <一時表領域名> add tempfile <ファイル名> size ***;
 → ローカル管理一時表領域 BEGIN BACKUPなしでBusinessCopy resync/splitを実施しても問題なし。
   (HPコンサル殿Official手順)
   リカバリ手順は
   ① BusinessCopy戻し → ② アーカイブログ適用 → ③ローカル管理一時表領域 再作成 

・v$temp_space_header・・・ローカル管理一時表領域のみ表示
・export/import
 ・・・Oracleバージョン間の互換性を保つためには、下位バージョンのexportユーティリティを使用する、
   ex) Oracle8i → Oracle9i、Oracle9i → Oracle8i → Oracle8iのexportユーティリティを使用する。

    Importを行う際は、常に、import対象のデータベースバージョンのimportユーティリティを使用する。
・export/importユーティリティ・・・DBLINKは含まれる。
・環境変数ORACLE_SID・・・大文字/小文字は区別する。
・RECOVER DATABASE
 ・・・全てのデータファイル及び制御ファイルのチェックポイント番号が同じであっても、実行可能。
・alter database backup controlfile to 'ファイル名' ・・・バイナリのバックアップ
★オンラインREDOログと制御ファイルが同期化されていない
  → RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE コマンドにてリカバリ実行。
  → alter database open resetlogs;
   → DBバックアップ(ログ順序番号がリセットされたため)
・読み取り専用メディア、または低速のメディア上に読み取り専用表領域がある場合には、USING BACKUP CONTOROLFILEオプション
 を指定してメディア・リカバリを実行した場合に、エラーまたはパフォーマンスの低下が発生することがある。
・ログスイッチなしで現行のREDOログファイルのアーカイブ
 ALTER SYSTEM ARCHIVE LOG CURRENT NOSWITCH;
 マウント状態で行うコマンド → OPEN時にログスイッチすることを予約する。
・ORA-00308 アーカイブREDOログファイルをOPENできない・・・現行のオンラインREDOログがアーカイブされていない
 完全回復
 ・現行の制御ファイルが存在する → RECOVER [AUTOMATIC] DATABASE;
 ・現行の制御ファイルが存在しない
  → RECOVER DATABASE USING BACKUP CONTROLFILE; → RESETLOGSでOPEN。
 ・不完全回復
   → RECOVER DATABASE UNTIL CANCEL; → RESETLOGSでOPEN。
・ローカル管理一時表領域破損時、DBA_DATA_FILES及びv$temp_space_headerにレコードが表示されない。
・DBA_TEMP_FILESの検索結果が不正になる場合がある。 
 → v$tempfileを使用すること。
・ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
 ・・・user_dump_dest出力先に出力。
(オンラインREDOログ障害時対応)
①現行グループ以外のオンラインREDOログ障害
 a) 片系障害時(ddコマンドで破壊)
   ①v$logfileにて、破損したメンバーのファイル名を探す。
   ②破損したメンバーの削除 ALTER DATABASE DROP LOGFILE MEMBER '<フルパス>'
   ③グループに新しいメンバーを追加 ← この間、暫く待機する。
    ALTER DATABASE ADD LOGFILE MEMBER '<フルパス>' REUSE TO GROUP <グループ番号>;
    → ログスイッチ4回実行し、v$logfile STATUS列が全て空白(INVALIDではない)を確認する。

 b) 両系障害時
   v$logを検索、ACTIVE/INACTIVE/CURRENTを判定(グループ番号要チェック)
   α) 非アクティブ
     1.shutdown
     2.startup mount
     3.破損したロググループの再初期化 ALTER DATABASE CLEAR LOGFILE GROUP <グループ番号>;
     4.ALTER DATABASE OPEN;
   β) アクティブ
     1.ALTER SYSTEM CHECKPOINT;
         2.「α) 非アクティブ」の手順

②現行グループのオンラインREDOログ障害
 a) 片系障害時・・・試験時、破損後、インスタンス再起動必要。→ v$logfile STATUS列 「INVALID」を確認。
   1.ログスイッチ
   2.① - a)の手順

 b) 両系障害時(インスタンスが生きている)
   1.v$logを確認
   2.ALTER DATABASE CLEAR unarchived logfile group <グループ番号>;
   3.インスタンス停止 → インスタンス起動

 c) 両系障害時(インスタンスがハング)・・・不完全回復

・Oracle9iR1とR2の違い(RAC) ・・・LMSプロセスの役割変更
 R1 リソースマスターノード  LMD → LMS
 R2  リソースマスターノード  LMS(LMDの役割兼任)
 → latency高速化及びCPUオーバーヘッド低下
・環境変数PATH=$ORACLE_HOME/bin
 ・・・Oracle関連ユーティリティ(SQL*Plus、exp/impユーティリティ、RMAN、tkprof)の実行バージョンが決定されてしまう。
   (Oracle複数バージョン混在環境では、要注意)
・Oracle時間指定リカバリ
 (※Business Copy S-Vol → P-Vol戻しが終了していることを確認すること)
 startup mount
 recover database until time '1999-03-09:11:44:00';
 alter database open resetlogs;

・Oracle Point-In-Timeリカバリ
 ・・・使用するアーカイブREDOログが、どのデータファイルよりも新しいことを確認すること
   (データファイル バックアップ戻しを確認すること)。
・recover database using backup controlfile;
 ・・・バックアップ制御ファイル(バイナリ)を使用していない状態で(元の制御ファイルをそのまま使用して)でmountして、このリカバリを
   行うと、アーカイブ適用完了後、RESETLOGSでOPENできなくなる。
 → 初期化パラメータcontrol_filesで必ずバックアップ制御ファイルを指定してからmount、リカバリを行うこと。
・オンラインREDOログ両系障害 + Oracleクラッシュ
 → 不完全回復、失われたオンラインREDOログはOracleにて再作成される。
・STATSPACK
 ・必要領域 R9.0.0 60MB、R9.2.0 100MB
  ※RAC環境 → デフォルト表領域は自動セグメント領域管理モードを推奨(FREELIST GROUP競合回避)
 ・R9.2.0 インストール時、define句でperfstat_passwordを指定
 ・レベル7までのオーバーヘッドは微々たるもので、テスト全体のパフォーマンスに影響を及ぼすには至らず。
 ・sprepins.sql
  ・・・他のデータベースからインポートしてきたデータのレポートを作成するとき、RAC環境で直接接続していない
     インスタンスのレポートを作成する時に使用する。
     dbid    :データベースID
     inst_num    :インスタンス番号
         begin_snap  :開始snap_id
     end_snap    :終了snap_id
     report_name :出力レポート名
 ・import時、ignore=yを指定。
 ・perfstat Table名。、FK、シーケンス把握 → TBL単位でimport
 ※FKの関係上、STATS$SQLTEXT及びSTATS$SQL_PLANはエラーが発生してしまう。SQL文実行計画レポート出力を行うには
  ① 既存PERFSTATスキーマデータexport
  ② sptrunc
  ③ 対象DBインポート
  を行うこと。

・undo segment extensions待機イベント
 ・・・ロールバック・セグメントが拡張または縮小されています。セッションは、ロールバック・セグメントの操作が完了するまで
    待機する必要がある。待機時間・・・0.01秒
・latch free
 ・・・プロセスは、現在ビジー状態の(別のプロセスによって保持されている)ラッチを待機する(←共有プールの断片化)。
・dirty buffers inspected
 ・・・再使用するバッファを検索中に、ユーザー・プロセスが検出した使用済みバッファの件数。

・SQL*Net message from client
 ・・・サーバープロセス(フォアグラウンド・プロセス)は、クライアント・プロセスからのメッセージが到着するまで待機する。
    待機時間
    ・・・クライアントに最新のメッセージを送信してから、クライアントからメッセージが到着するまでに必要な時間。
・SQL*Net message from client、SQL*Net message to clientが発行されるタイミング
 ・SELECT文
  EXECUTE:SQL*Net message from client、SQL*Net message to clientが各1回
  FETCH:SQL*Net message from client、SQL*Net message to clientが各1回
  ex) select * from scott.emp; ※empには12レコード格納
  arraysizeが15の場合
  ・execute開始 SQL*Net message to client   1回
  ・fetch    SQL*Net message from client  1回
          SQL*Net message to client   1回
  ・execute終了  SQL*Net message from client  1回
  arraysizeが3の場合、fetchが3行ごとに行われるため、3 × 4 = 12で、4回fetchが行われる。
  ・execute開始 SQL*Net message to client   1回
  ・fetch    SQL*Net message from client  4回
          SQL*Net message to client   4回
  ・execute終了  SQL*Net message from client  1回

・update/commit
 ・execute開始 SQL*Net message to client   1回
 ・execute終了 SQL*Net message from client 1回

・EXECUTE to Parse ・・・SQL実行に対して解析が行われなかった割合
・Parse CPU to Parse Elapsed・・・解析CPU時間/解析の合計時間
・インスタンス効率(共有プール)
 Memory Usage%      :使用された共有プールの割合
 %SQL with executions > 1 :再利用されたSQL文の割合
 %Memory for SQL w/exec   :2回以上実行されたSQL文が使用したメモリの割合

・library cacheラッチ競合 → 共有プールの断片化
 → 予約領域を大きめ
 → SQLカーソルの共有(CURSOR_SHARING)
 など
・library cache latch
 ・・・ライブラリ・キャッシュ内のオブジェクトにアクセスする為に、順番を決める。SQL文やPL/SQLブロック、ストアド・ファンクション等が
   実施される度に、このラッチを必要とする。
・shared pool latch
 ・・・ライブラリ・キャッシュ内のメモリ確保の際に使用されるラッチ。データベース全体に対して、このラッチは1つのみ存在。
   ⇒ ①AP見直し(SQL再利用)  ②共有プールの拡張
・MTS
 ・・・UGAが共有プール内に存在するため、共有プールに負荷がかかる、
    MTSを使用していて"shared pool latch"の値が多くなる場合には、
   専用サーバーに変更することにより、改善する可能性がある。
× Oracle → DBサーバー 一行Fetch
     ↓
◎ 大量バッチ処理は、DBサーバー側で行うこと(Oracle推奨)
・スピンロック・プール・パラメータ
 各パラメータは、それぞれ対応するシステムリソースによって、指定された数のスピンロックを割り当てる。
 bufcache_hash_locks  バッファ・キャッシュ・スピンロック・プール
 chanq_hash_locks    チャネル待ち行列スピンロック・プール
 ftable_hash_locks      ファイル・テーブル・スピンロック・プール
 io_ports_hash_locks    I/Oポート・スピンロック・プール
 pfdat_hash_locks       Pfdatスピンロック・プール
 region_hash_locks      プロセス・リージョン・スピンロック・プール
 sysv_hash_locks        SystemVプロセス間通信スピンロック・プール
 vmode_cd_hash_locks    vnodeクリーン/ダーティ・スピンロック・プール
 vnode_hash_locks       vnodeスピンロック・プール
 ・・・マルチ・プロセッサ上でのスピンロックの使われ方や、必要なスピンロック数とシステムのサイズや複雑さとの相関関係について、
    十分な知識があるユーザーによる使用を前提としている(通常は、変更しないこと)。

・DBA_MVIEWS
 ・・・REFRESH METHOD列
    FAST・・・前回のリフレッシュ以降のマスター内の変更に対応する変更を適用する、増分リフレッシュが実行される。
・EXISTSやNOT EXISTSで導かれるサブクエリは、"共通部分"と"差"という2つの集合演算に使用することができる。
・ORA-02050
 トランザクション***はロールバックされました。いくつかのリモート・データベースはイン・ダウトの可能性があります。
 原因)2フェーズコミット機構において、ネットワーク障害またはリモート障害が発生。
    障害が解決されると、リモートデータベースは自動的に再同期化される・
・ORA-02068・・・DB_LINKで重大なエラー発生。
・インダウト状態・・・2フェーズコミット(分散環境)にて、COMMITまたはROLLBACKを待機している状態。
 インダウトになる原因
 ・Oracleソフトウェアを実行しているサーバー・マシンがクラッシュした。
 ・分散処理に関係している複数のOracleデータベース間のネットワーク接続が切断された。
  → ネットワークまたはシステム障害が解決した後、Oracleの自動リカバリ機能によって、セッション・ツリーの全てのノードが
    同じ状態になるように(全てコミットされるか全てロールバックされる)、全てのインダウト・トランザクションの処理が
    透過的に完了される。
 ・未処理のソフトウェアエラーが発生した。

※ 障害が長期にわたる場合は、トランザクションを強制的にコミットまたはロールバックすることで、ロックされたデータを
  全て解放する。

・DBA_2PC_PENDING
 ・・・インダウト分散トランザクションが全てリストされる。このビューには、インダウト・トランザクションが移入されるまで
    何もデータは入っていない。トランザクションが解決した後、ビューはパージされる。
・リモート・オブジェクトに対してユーザーがローカル・オブジェクトと同じ構文を使用してアクセスできるように、リモート・
 オブジェクトのシノニムを作成することができる。
 cf) 間接環境
◎分散更新
 ・・・複数のノードのデータを変更する。分散更新を行うには、プロシージャやトリガー等、異なるノードのデータにアクセス
    する複数のリモート更新を含むPL/SQLサブプログラム・ユニットを使用する。

・PSR9204
 ・Oracle Universal Installer リリース2.2.0.18.0 ~
 ・インストールしたパッチセットを元に戻す機能は提供していない。
 ・HP-UX・・・cpioによるアーカイブ
 ・HP-UX・・・必ずPSRに含まれるOUIを使用すること。
・$ORACLE_HOME/bin/dbsnmp.sav ・・・PSR9203を適用した環境で存在
 → PSR9204適用前に
   a) OWNERをroot → に変更
   b) dbsnmp.savファイルをrename
・bug#272712の修正が含まれていない(追加でopatch要適用)
・Patch本体・・・cpioによるアーカイブ(tarではない)
         解凍方法・・・cpio -ivcdum

・OLAPオプションを使用していない場合、PSR9204インストール後の作業でデータベース・リスナーを起動する必要はない。
 (HPレスポンスセンタ滝元殿より、受付番号2201431199)
・Oracle $ORACLE_HOME/rdbms/admin/utlrp.sql
 ・・・INVALIDになっている全てのPL/SQLオブジェクトがコンパイルされ、初回のアクセス時に再コンパイルする必要がなくなる。
・imp/expユーティリティ
 ・exp終了コード/imp終了コード
  エクスポートは警告なしで正常終了しました。EX_SUCC
  エクスポートは正常終了しましたが、警告が発生しました。EX_OKWARN
  エラーが発生したため、エクスポートを終了します。EX_FAIL
  UNIX
   EX_SUCC・・・0
   EX_OKWARN・・・0
   EX_FAIL・・・1
・Oracl;e初期化パラメータ
 ・global_names
  ・・・DBリンクが、接続するデータベースと同じ名前を持つ必要があるかどうか指定する(TRUE/FALSE)。
・Oracle従来型Exportを行い、Importを実行するとデータが不正となる。(→PSR9203にて改修、パッチリリースなし)
 ORA-01452、ORA-00604 (文書番号48145) (BUG#2598387)
 (回避策)
 ・Direct=yでExportを実行
 ・プリコンパイル・オプションPREFETCHもしくは文ハンドルの属性OCI_ATTR_PREFETCH_ROWSを65535以上の値に
  設定しない。
 ・環境変数ORA_OCI_NO_OPTIMIZED_FETCH=1を設定
   ← HP-UX・・・この環境変数を設定する前に、oracleアカウントで以下の操作を実行する。
          cd $ORACLE_HOME/sqlplus/lib
          make -f ins_sqlplus.mk isqlplus
 → 11/18(火)AM、HP市ヶ谷環境にて実行(→ 商用環境向け手順書に反映すること)

Oracle
 MLOCK・・・共有メモリロック機能
 MLOCK権限 dbaグループ
 ・・・非同期I/Oのカーネルドライバを呼び出すのに必要。
・ORA-00979
 ・・・グループ関数(AVG、COUNT、MAX、MIN、SUM、STDDEV、VARIANCE等)に含まれないSELECT式は、GROUP BY句の中に
   リストされている必要がある。
・時刻を過去に戻す場合、一部の機能が意図した動作をしない可能性がある。
 (1)時間ベースのリカバリとFlashback Queryの実行
 (2)読み取り専用(READ ONLY)トランザクション(CONSISTENT=Yのエクスポート)。
 (3)SYSDATE関数を使用したユーザー・アプリケーションの実行
 (4)ジョブのスケジュール・・・ジョブ・キュー・プロセス(SNP)によって実行されるジョブ。
 (5)RAC/OPS環境
   片ノードのみNTPシステム時刻戻す → ORA-29740が発生してインスタンス・ダウン。
   1. GCS(Global Cache Service・・・行ロック)/GES(Global Enqueue Service・・・TBL全体ロック)回線によるタイムアウト
    (300sec) + 5sec = 305sec
   2. 制御ファイルエンキューのタイムアウト(900sec)
   → 1. > 2.の場合、タイムアウトが発生したと認識して、当該メンバをグループから削除。その際に当該インスタンスでは
    ORA-29740が発生してインスタンスがダウンする。
 cf) システム時刻を過去に戻したいが、それに伴う問題が一切発生しないことを保証する。
   ① データベース停止 → システム時刻戻し → データベースを停止した時点のシステム時刻になるまでデータベースを起動しない。
   ② EXPORT / IMPORTを用いてデータベースの再作成を行う。

・HP-UX11i カーネルパラメータ
 ・maxfiles・・・1つのプロセスが同時にオープンできるファイル数に対する制限値
 ・maxfiles_lim・・・1つのプロセスが同時にオープンするファイルの数に対する物理制限値
・OISCサイト
 maxfilesを、全インスタンス分の、以下の件数の合計値以上にすること。
  select count(*) from v$datafile;
  select count(*) from v$controlfile;
  select count(*) from v$logfile;
 合計値以下の場合、ORA-00447/ORA-00474によるインスタンスダウンの可能性あり。

cf) MCCCサイトup済文書
  「9i RAC Sample Kernel Parameter Set Version 2.0 Install Guide for HP-UX11i」2002年6月20日版
  3頁
  「③bufpages
   RAC構成でRAWアクセスを行うため、バッファキャッシュを小さく固定するために設定しました。128MBをファイルバッファに
   割り当てる為に、32767に設定しました。本サンプルパラメータセットでもこの値を採用しています。必要に応じて変更して
   下さい。単位はページ数(1ページ4KB)です。」
⇒ この記述より、ファイル・システム・バッファ・キャッシュを動的 or 静的のどちらに設定すべきか不明だったので、
  HP Oracleサポート殿へ問合せを行う。(12/19(金)、受付番号2201748916、担当:大久保殿)
  → HPレスポンスセンタ滝元殿よりtelあり。12/22(月)に1次回答予定
cf) OISCサイトに、カーネルパラメータbufpagesについての記述はなし。

・HP-UX11iカーネルパラメータ
 ・dbc_max_pct・・・動的バッファ・キャッシュに使用するメモリの割合の上限をパーセンテージで定義。
 ・dbc_min_pct・・・動的バッファ・キャッシュに使用するメモリの割合の下限をパーセンテージで定義。
→ ITRCフォーラム
  Oracle RAWデバイスアクセスの場合、dbc_max_pctを6%以下にするか、bufpagesを使用して固定ファイルシステムキャッシュ
  設定を行う
  (ファイルシステムバッファキャッシュは、1GB以上は必要ない)
・Oracle初期化パラメータPRE_PAGE_SGA
 ・・・インスタンスの起動時にSGA全体がメモリーに読み込まれるかどうか判断する。
    TRUE・・・インスタンスの起動に必要な時間が長くなる場合があるが、Oracleのパフォーマンスが最高になるまでの時間が
          短縮される。
    FALSE(デフォルト)
       ・・・インスタンスの起動は速くなるが、Oracleのパフォーマンスが最高になるまでの時間が長くなる。
・HP-UX11i OSカーネルパラメータswapmem_on
 ・・・「擬似スワップ」を使用可能/不可能にする。擬似スワップとは、システム・メモリ内の領域であり、ディスク上のデバイス・
    スワップ・スペースに加えて使用できる仮想メモリ・スペースとみなされる。デフォルトでは、擬似スワップを使用できる。
     仮想メモリ(スワップ)スペースは、通常システムディスクのデバイス・スワップ領域から割り当てられる。但し、大量の
    RAMを搭載し、大容量のディスクまたはディスクアレイを持つシステムでは、割り当てられたデバイス・スワップ・スペース
    のみに制限しないほうが良い場合がある。
 → Oracle起動サーバーでは、「擬似スワップ」は、使用不可能にしておくこと(SGAページアウト回避のため)。

・HP-UX11i Oracle起動時、SWAP領域が小さいとOracle起動失敗
 ・この件で、日本HP社及びOracle社サポート部門から出せる情報はなし。
   (詳細情報を入手するためには、日本HP社及びOracle社コンサル契約が必要)
 ・Oracle起動時、swap領域を予約しに行くので、swap領域が小さいと、Oracleインスタンス起動は失敗する。
  (安達の経験則より、できれば、swap領域は実メモリの2倍にすること)
statsppack レベル10・・・親ラッチ/子ラッチ
・デタリフ向けOracle初期化パラメータ
 DB_FILE_MULTIBLOCK_READ_COUNT
 ・・・順次スキャン中に1回のI/O操作で読み取られるブロック(DB_BLOCK_SIZE)の最大数を指定。
 Cf) HP-UX11i カーネルパラメータ 「scsi_maxphys」 1048576
 ※ この値が高く設定された場合、オプティマイザは索引の全表スキャンを選択することがよくある。
・SORT_AREA_SIZE
 ・・・SORT_AREA_SIZEの値が大きい程、メモリ内で実行できるソートの数が多くなる。ソートを完了させるために、与えられた
   メモリー以上の領域が必要な場合、ディスク上の一時セグメントが、ソートの中間結果を保存するために使用される。
Cf) TEMPORARY表領域 UNIFORM SIZE
   ・・・(SORT_AREA_SIZE × n) + (DB_BLOCK_SIZE)

・DB_WRITER_PROCESSES・・・最大値20
cf) HP-UX11i DBWR1プロセス当り32 ~ 40MB(VM、実メモリは20MB程度)
DB_nK_CACHE_SIZE、DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZEを使用する場合、
オブジェクト単位での指定が必要。
DML_LOCKS
・既定値は4 × TRANSACTIONS
・パラレルDML中は、シリアル実行中より多くのロックが保持される。そのため、データベースが多くのパラレルDMLをサポートする場合、
 このパラメータの値を増やす必要がある。

LOCK_SGA
・・・SGA全体を物理メモリーの中にロックする。通常は、SGAを実(物理)メモリーにロックすることが推奨される。
→ HP-UX11i版手順
① rootアカウントでログイン
② /etc/privgroupファイルに、以下のエントリを追加
   dba MLOCK
③ 次のコマンドを実行
  # /usr/sbin/setprivgrp -f /etc/privgroup
④ rootアカウントよりログアウト
⑤ Oracle初期化ファイルにて、共有メモリロック機能を有効に設定する。
  LOCK_SGA = TRUE

・LOG_BUFFER
 ・・・一般に、LOG_BUFFERの値が大きいほど、REDOログファイルのI/Oは減少する。
   特に、トランザクションが長い場合や数が多い場合。
・LOG_PARALLELISM
 ・・・Oracle内でのREDO割り当ての並行性レベルを指定する。16個以上のプロセッサを持つハイエンドサーバー上でOracleを使用
    しており、REDO割り当てラッチの競合度が大きい場合、パラレルREDOを使用可能にすることを考慮する必要がある。
    2からはじめて8まで(REDO割り当てラッチの競合がなくなってアプリケーションのパフォーマンスが改善されるまで)
・redo_allocation_latchの複数化 → Redo Allocation時の競合を解消。
・65以上を設定すると、内部的には、LOG_PARALLELISM=1と同様の設定
・パラメータに指定した数=redo allocation latchの子ラッチの数
・SGA内Redoバッファサイズが大きくなる。

・OPEN_CURSORS
 ・・・1つのセッションで同時にオープンできるカーソル(プライベートSQL領域へのバンドル)の最大数を指定する。
   アプリケーションでオープン・カーソルが不足しないように十分な値を設定する。
・STATSPACK用表領域「SP_TS」・・・500M ~ 1GB程度
 ※ エクステント数 2400以上にすること。
CREATE MATERIALIZED VIEW LOG
 WITH句
 ・・・SEQUENCE
    SEQUENCEによって、追加の順序情報を提供する順序値をマテリアライズド・ビュー・ログに記録することを指定。
    更新操作後の高速リフレッシュには、順序番号が必要。
・OracleオンラインREDOログファイル
 サイズ・・・パフォーマンスに影響を与える。
 一般的に、大きなREDOログの方がパフォーマンスが向上する。小さなログファイルは、チェックポイント・アクティビティを増加し、
 パフォーマンスを低下させることがある。高度なパフォーマンスを目的としたI/O分散では、REDOログ・ファイル用に個別の
 ディスクを使用することが推奨されるため、REDOログ・ファイルのサイズを大きくすることが可能。
※REDOログ・ファイルのサイズは、LGWRのパフォーマンスに影響を与えないが、DBWR及びチェックポイントの動作に影響を
  与える可能性がある。
・Oracleマテリアライズド・ビュー 完全リフレッシュ
 ・SNAPSHOT単体のリフレッシュ・・・TRUNCATE → INSERT(RBS及びREDOエントリ発生せず)
 ・複数のSNAPSHOTを含むリフレッシュグループ全体の完全リフレッシュ
                     ・・・DELETE → INSERT(RBS及びREDOエントリは発生する)
・リフレッシュ処理中
 ・スナップショット・サイトでRBSが使用される。
 ・マスター・サイトでも大量にRBSが使用される。
・Oracleロールバックセグメント
 ・・・ローカル管理表領域にRBSを作成する場合、その表領域のエクステントサイズ(UNIFORM SIZE)は、
   DB_BLOCK_SIZE × 4以上に設定すること。
   (→ さもないと、ORA-03237が発生し、RBS作成は失敗する)
★集計を含むマテリアライズド・ビューの場合は、マテリアライズド・ビューで参照される表の全ての列、INCLUDING NEW VALUES句、
  及びSEQUENCE句を含む必要がある。
cf)集計を含むマテリアライズド・ビュー
・・・高速リフレッシュを可能にするには、SELECT構文のリストに全てのGROUP BY列(ある場合)を含める必要がある。
   また、集計列にcount(*)、及びcount(COLCHK)が必要。さらに、マテリアライズド・ビュー・ログは、マテリアライズド・ビューを
   定義する問合せで参照される全ての表に対して存在する必要がある。
   有効な集計関数は、SUM、COUNT(<列名>)、COUNT(*)、AVG、VARIANCE、STDDEV、MIN、MAX。また、任意のSQL値式を
   集計できる。

・DBMS_MVIEW.REFRESHプロシージャ
 ・list | tab ・・・リフレッシュするMVIEWの、カンマ区切りのリスト
 ・method・・・指定されたマテリアライズド・ビューのリフレッシュ方法を示す。
        リフレッシュ方法の文字列
        ?・・・強制リフレッシュ
        F・・・高速リフレッシュ
        C / A ・・・完全リフレッシュ
 ・rollback_seg・・・リフレッシュ時に使用する、MVIEWサイトのRBSを指定。
 ・atomic_refresh
  TRUE・・・リストで指定された全てのMVIEWが1つのトランザクションでリフレッシュ。全てのMVIEWが時間内のある一点で更新される。
       いずれかのMVIEWのリフレッシュに失敗すると、全てのMVIEWが更新されない。
  FALSE・・・各マテリアライズド・ビューは、それぞれ別個のトランザクションでリフレッシュされる。

・Oracleリモートミラーリング
 ・オンラインREDOログのみをリモートミラー
 ・DB全体(データファイル、制御ファイル、オンラインREDOログ)ミラーリング
(考慮点)
・DB全体のミラーリング
 ・プライマリDBに対し、性能面で大きな影響
 ・大きな通信用の帯域幅 → コスト増
 ・セカンダリサイトで、Crash Recoveryを待つのみ
 ・フェールバック時、スタンバイ → プライマリDBコピーが必要
・オンラインREDOログのみのミラーリング
 ・フェールオーバーには、アーカイブREDOログ適用にかかる時間が必要。
 ・フェールバック時、スタンバイ → プライマリDBコピーの必要なし。
(オンラインREDOログのミラーリング)
・スタンバイサイトDB構築後、オンラインREDOログ領域(VG)DEACTIVATE後、ミラーリング開始(Oracleインスタンスは停止しておくこと)
・フェイルオーバー手順
 ①プライマリ側"alter database backup control file to trace;"
  → CREATE CONTROLFILEスクリプトをリモートサイトに転送。(※災害発生前、定期的に行うこと!)
 ②アーカイブREDOログファイル リモートサイトに定期的に転送
 ③プライマリサイト災害発生
 ④スタンバイサイト ミラーリングOFF
 ⑤スタンバイ側オンラインREDOログ用VG ACTIVATE
 ⑥startup nomount → CREATE CONTROLFILE実行(スタンバイ)
 ⑦recover databaseを実行。さらにログが要求されたら、currentログを指定する。

・Oracleグラニュル大きさ
 SGA_MAX_SIZE   128M以下・・・4MB
              128M超(Windows)・・・8MB
               128M超(Unix)・・・16MB
・Oracle
 MVIEW LOG削除 → MVIEW削除
 (逆の順序では、MVIEW削除時にマスタTBL更新が発生した場合に、Oracleエラーが発生する可能性がある)
・Oracle9i DataGuard
 ・・・スタンバイDB構築後、プライマリDBフルバックアップを、スタンバイDBにリカバリしなければならない。
    (→ スタンバイ・データベースの基礎として使用)
 データ保護モード
 ・最大保護(Guaranteed Protection)
  ・・・プライマリ ~ スタンバイ間OracleNet使用回線が切断されるとインスタンス・ダウン。
 ・迅速保護(Rapid Protection)
  ・・・スタンバイ側コミット処理を保証。
 ・最大パフォーマンス(Delayed Protection)
  ・・・非同期送信(アーカイブREDOログ)

・Oracle・・・コンポジット索引
 ・・・問合せによって選択された列が全てコンポジット索引に含まれている場合、Oracleは表にアクセスすることなく、
   索引からこれらの値を戻すことができる。
Cf) SQL Server カバリングインデックス
・Oracle9iR2 opatch適用時、以下のメッセージが表示され、ハング状態になることがある。
 "Patch BUG#***** has been applied successfully"
 → javaプロセスがハングしてしまうため。
 <暫定対処>
 ハング状態になっているjavaプロセスをkillする。→ 「opatch lsinventory」を実行
  → 適用された個別パッチのBUG番号が出力されれば、問題なし。
  → BUG番号が出力されない場合、Oracleサポート殿へ問い合わせること。
 <本格対処(PSR9204適用後)>
 ① JDK1.3.1_10をインストール
 ② mv $ORACLE_BASE/jre/1.3.1/bin/java $ORACLE_BASE/jre/1.3.1/bin/java1.3.1_02
 ③ ln -s /opt/java1.3/bin/java $ORACLE_BASE/jre/1.3.1/bin/java
 ④ javaのバージョンを確認
   $ORACLE_BASE/jre/1.3.1/bin/java -version
 ⑤ opatch適用

 ⑥ rm $ORACLE_BASE/jre/1.3.1/bin/java
 ⑦ mv $ORACLE_BASE/jre/1.3.1/bin/java1.3.1_02 $ORACLE_BASE/jre/1.3.1/bin/java
 → Oracleサポート殿 要確認

・Oracle 索引向け容量見積
 ・一意索引・・・列長 + 6 (ROWID分)
 ・一意でない索引・・・列長 + 7 (ROWID + 1バイト)
・Oracle HASH_SJヒント(ハッシュ・セミ結合)
 ex) SELECT * FROM dept
   where exists ( SELECT /*+HASH_SJ*/ * FROM emp WHERE emp.deptno = dept.deptno AND sal > 200000);
 → empの行に対する複数の一致行がdept内に存在していても、empが戻されるのは、1度のみ。
・副問合せがセミ結合として評価されるのは、次の制限がある場合のみ。
 ・副問合せに1つしか表がない場合
 ・外部問合せブロックそのものは副問合せではない場合
 ・副問合せに等価述語と相互に関係している場合
 ・副問合せにGROUP BY、またはROWNUMの参照が含まれていない場合
★できるだけオンメモリで行うこと。




タグ一覧

ブログ一覧ページへもどる

まずはご相談ください!

0364573908

営業時間
10:00 ~ 18:00
定休日
土・日・祝日

関連記事

不動産売却

売却査定

お問い合わせ