topimg.jpg


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Linux/UNIXでddコマンドを使ってディスクダンプを取得する

●ディスクイメージのフルバックアップ
#dd if=[バックアップしたいデバイスファイルのパス] of=[出力先のファイルのパス]

ディスクhdaをカレントディレクトにdiskdump.ddという名前で保存
#dd if=/dev/hda of=./diskdump.dd

●ディスクイメージのリストア

#dd if=[入力元のファイルのパス] of=[リストアしたいデバイスファイルのパス]

ダンプファイルdiskdump.ddをディスクhdaへリストア
#dd if=./diskdump.dd of=/dev/hda

●指定したサイズのデータ作成
#dd if=/dev/zero of=[出力先のファイルのパス] bs=[1回あたりに入力・出力するファイルのブロックサイズ(byte)] count=[コピーする入力ファイルのブロック数] 
・/dev/zeroは読み込む内容が全てNULL(ASCIIコードで0x00)で返されるデバイスファイル
・出力されるファイルのサイズはbs×count(byte)になる

データ全てnull値のサイズ50MBのファイルをカレントディレクトにdiskdump.ddという名前で保存
#dd if=/dev/zero of=./diskdump.dd bs=1M count=50

●指定したディスクのデータを破壊(ゼロフィル)する
#dd if=/dev/zero of=[データを破壊したいデバイスファイルのパス] 

ディスクhdaのデータを全部0で埋めてやる!!(使用には細心の注意を)
#dd if=/dev/zero of=/dev/hda

参考
ファイルの変換・コピー
http://www.k-tanaka.net/unix/dd.html
ddを使ったテストファイルの作り方
http://www.server-memo.net/server/tips/test-data.html
スポンサーサイト
  1. 2010/03/29(月) 01:53:33|
  2. Linux/Unix
  3. | トラックバック:0
  4. | コメント:0

Oracleクライアントとリスナーの動作

●Oracleのソケット動作
①データベース側は、リスナーがlistenすべきポート番号等の情報をlistener.oraから読み込み、listen状態になる
 ⇒lsnrctlというツールを利用して起動する。OSプロンプト上で、lsnrctl startで
  デフォルトのリスナーを起動できる。
②アプリケーション側は、Oracleクライアント(Oracle Net等)を通して、tnsnames.oraからリスナーへ接続するために必要な情報(アドレス、ポート番号、サービス名等)を読み込み、Oracleクライアントへ引き渡す
 ⇒アプリケーション側は、tnsnames.oraに記述された接続識別子のみをソースコードで
  記述してさえいればよい。ただし、JDBC Thinドライバの場合は、tnsnames.oraを使用しないため、 
  接続のために必要な情報を直接記述する必要がある(アドレス、ポート番号、サービス名)。
③Oracleクライアントが指定された接続先のリスナーとの間にソケットを確立する
④リスナーがサーバプロセスを生成し、ソケットを引き継ぐ
⑤サーバプロセスがOracleクライアントからのリクエストを処理する



参考
Oracle Database概要 11gリリース2(11.2)
16 アプリケーションおよびネットワークのアーキテクチャ
http://download.oracle.com/docs/cd/E16338_01/server.112/b56306/dist_pro.htm

  
  1. 2010/03/21(日) 03:53:46|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

強力なファイル復旧ソフト

ファイル復旧ソフトは世の中にいろいろある。

だが、有料のソフトでも、ほとんどはゴミ箱から消してしまったファイルを復旧する程度で、
パーティションをぶっ壊した状態からファイルを復旧できるソフトは少ないであろう。

「R-Studio データレスキュー 」は、パーティションをぶっ壊しても、前のパーティションで使ってたファイルを復旧できる程の力を持つすげえ奴。これで復旧できなかったらもうあきらめるしかない。

(そもそもパーティション誤ってぶっ壊すなんてシチュエーションがまずありえないのだが、アホな俺はWindosのインストーラで、間違って意図しないパーティションを削除してしまったwまじ凹んだ)

有料だが、体験版も下記からダウンロードできる。
http://www.vector.co.jp/swreg/catalogue/rstudio/
体験版の制限は、復旧できるファイルのサイズに上限があるものの、スキャンは制限なく行うことができる。


俺が復旧したかったファイルはただひとつ、重要な情報が記述されている「メモ.txt」という、1MBほどのテキストファイルだ。さっそく「R-Studio データレスキュー 体験版」を使って、テキストファイルの復旧を試みた。

結果として、「メモ.txt」の情報の8割ほどを復旧できた。

なぜ8割かというと、「R-Studio データレスキュー 体験版」では、テキストファイルの場合、オリジナルのファイル本体ごと復旧されることは少なく、ほとんどが複数のファイルにまたがって断片的に復旧されるからだ。俺が欲しかった「メモ.txt」も、オリジナルのファイル名では存在せず、任意の英数字のファイル名で、複数のファイルにまたがって復旧されていた。だから、一部内容が欠損した状態でなんとか復旧できたという次第だ。(ちなみに、「メモ.txt」の内容を、復旧した数万のテキストファイルの中から探すときは、sakuraエディタのgrep機能を使った。便利。)

でも、ほとんどのソフトでは全く復旧できなかったファイルを、「R-Studio データレスキュー 体験版」は8割も復旧してくれたのでやっぱりすごい。


ということで、結論として、「R-Studio データレスキュー 体験版」を使えばなんとかデータ復旧できるが、パーティションをぶっ壊してしまうと完全な復旧は難しいということだ。


後から知ったが、「TestDisk」というツールを使えば、パーティションをぶっ壊しても、元のパーティション構造を復元できるらしい。
もう、パーティション新たに作ってフォーマットしてしまったから遅えよ・・・



  1. 2010/03/20(土) 15:25:09|
  2. Windowsアプリ
  3. | トラックバック:0
  4. | コメント:0

パフォーマンスモニタを利用してのリソース情報取得

●Windowsのリソース情報を手動で取得するときの手順

①パフォーマンスモニタを起動
ファイル名を指定して実行>perfmon

②新しいログを設定
パフォーマンスログと警告>カウンタログ>右クリック>新しいログの設定>任意のログ名を入力

③必要な情報のカウンタを追加
追加>パフォーマンスオブジェクト>追加(オブジェクトの全情報を追加する)
もしくは
カウンタの追加>一覧からカウンタを選ぶ>追加(各オブジェクトの必要なカウンタのみをつ追加する)
↓ではメモリ、物理ディスク、CPUに関する全ての情報を取得している。

blg.jpg


↓Hyper-VやVMWareをインストールすると、アプリケーション固有のカウンタも追加されている
vmcount.jpg

④ログファイルの形式を選択
ログファイル>ログファイルの種類
デフォルトはバイナリ形式だが、テキストのCSV形式でも出力可能

バイナリ形式の~.blgで出力してしまった場合でも、下記コマンドで後からCSVに変換可能
コマンドプロンプト上で
>relog [バイナリのファイル名.blg] -f csv -o [出力するファイル名]


⑤ログ取得の開始
プロパティを閉じて、②で設定したログを選択し
右クリック>開始
もしくは
上の三角の再生ボタンを押下

⑥ログの停止
右クリック>停止
もしくは
上の四角の停止ボタンを押下
  1. 2010/03/20(土) 14:49:05|
  2. Windows
  3. | トラックバック:0
  4. | コメント:0

WindowsXPのインストールでエラー

家のメインマシンS70SDにWindowsXP 64bit版をインストールしようとしたら、ドライバ読み込み後の画面でブルースクリーンになった。WindowsXP 32bit版でも同じ結果になった。WindowsVista 32bit版、Windows7 32/64bit版では特に問題なくインストールできた。

ブルースクリーンの様子は↓。「A problem has been detected and windows has been shut down to prevent damage to your computer」というエラーメッセージがでている。


IMG_0101.jpg


結論として、上記の原因は単にAHCIのドライバが入ってなかったという初歩的なミスであった。


インテルマトリクス・ストレージ・マネージャー・ドライバーのダウンロードから、フロッピーに入れるドライバを入手できる。


一番はじめにちゃんとフロッピー経由でAHCI/RAIDのドライバをインストールさせていたが、誤ってICH10用のドライバを入れていた。S70SDのチップセットはICH9だ。このせいで、原因がなかなか特定できず、結構この問題に苦労してしまった・・・


しかし、AHCI/RAIDドライバがないせいでこんなエラーがでるとは思わなかった。ドライバがなければ、「ハードディスクがありません」的なメッセージが出るはずなのに・・・・


よくわからん
  1. 2010/03/20(土) 14:11:38|
  2. Windows
  3. | トラックバック:0
  4. | コメント:0

トランザクションエントリ(ITL)について

●トランザクションエントリ(ITL)
・ブロックを変更するトランザクションは、ITLを獲得する必要がある
・ITLはブロックヘッダに存在する(空き領域に存在することもある)
・ITLはデータブロック内の変更情報を管理する(この変更情報はUNDO表領域で使用される)
・ITLはトランザクションの行ロック排他制御にも利用される
INITRANSでITL数の初期値が設定される
MAXTRANSでITL数の最大値が設定される
 ⇒10gでは常に255で設定されている
 ⇒ITL が不足すると MAXTRANS まで自動的に拡張する
 ⇒最大値が255だからといって、1ブロックに255個のITLを作れるわけではない
  →空き領域による制限
   1エントリ毎に可変トランザクションヘッダ(KTBIT)で使用する24Byteの容量を必要とする。
   ブロック内の容量が足りなくなれば、ITLを作ることができなくなる。
  →ブロックサイズによる制限
   ブロックサイズによって、ITLの最大数はあらかじめ決められている。
   ブロックサイズ:ITLの最大値
   2KB : 41
   4KB :  84
   8KB : 169
   16KB : 255
   32KB : 255

参考
ITL (Interested Transaction List)
http://www.shift-the-oracle.com/table/ITL.html
トランザクションエントリに関する検証 その1
http://www.insight-tec.com/mailmagazine/ora3/vol143.html
索引の使い分けでパフォーマンスを向上できるケース
http://www.atmarkit.co.jp/fdb/rensai/orasql09/orasql09_4.html
  1. 2010/03/20(土) 04:23:13|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

Oracleのデータ構造について


データ構成


●テーブルスペース(表領域)
・複数のセグメントから構成される
・OS側では1つ以上の物理ファイルで構成される
・代表的な表領域として、下記①~⑤が挙げられる。
 ①システム表領域(SYSTEM)
 ⇒データディクショナリ表が格納される
  →データディクショナリには、オブジェクトの管理情報や
   ストアドサブプログラムのコンパイル済みコード等が格納される
 ②システム補助表領域(SYSAUX)
 ⇒OEM等のOracleコンポーネント製品で利用される表が格納される
 ③UNDO表領域(UNDOTBS1等)
 ⇒1つ以上のUNDOセグメントが格納される
 ④一時表領域(TEMP等)
 ⇒PGAのソート領域が足りなかった場合、この領域にもソート処理に必要な情報が格納される
 ⑤ユーザ表領域
 ⇒アプリケーションで使用される表や索引を格納するユーザ用の表領域
・表領域の管理方法には以下の2種類がある
 ①ローカル管理
 ⇒データファイルのヘッダにエクステント管理情報を格納する
  →データディクショナリ表へのIOが発生しないため、若干性能がいい
  →表領域のエクステントサイズの変更ができない
  →更新処理のほとんどがダイレクトパスインサートである等、特殊な事情
   がない限り、ローカル管理方式を採用することがメジャー
 ②ディクショナリ管理
 ⇒データディクショナリにエクステント管理情報を格納する
  →データディクショナリ表へのIOが発生するため、若干性能が悪い
  →表領域のエクステントサイズの変更ができる
  →大量のエクステントを解放する処理が行われた場合(TRUNCATEやコアレス等)、
   STエンキュー(領域管理トランザクションのキュー取り出し処理)が大量に発生し、
   一時的に大幅な性能劣化を招く
  

●セグメント
・複数のエクステントから構成される
・表や索引のオブジェクト=セグメント
・ソート用やUNDO用のようなOracleが自動的に管理するセグメントもある
・セグメントの空きエクステントがなくなった場合、表領域から新たにエクステントが割り当てられる
・代表的なセグメントとして、下記①~⑨が挙げられる。
 ①表
 ②表パーティション
 ③索引
 ④索引パーティション
 ⑤UNDOセグメント
 ⑥一時セグメント
 ⑦LOB
 ⑧LOBパーティション
 ⑨クラスタ表(異なる表で共通の列があった場合、複数の表間で同じデータブロック共有する)
ハイウィータマーク(HWM)によって、セグメント内でどこまでのブロックが使用済みになっているかを認識している。あるセグメントに新しいトランザクションによって新規に行が挿入されるとき、HWMより下に十分な容量の未使用ブロックが存在していなかった場合、新しいエクステントがそのセグメントに割り当てられる。
 ⇒HWMより上のブロック(新しく割り当てられるエクステント)
  →未フォーマットかつ未使用
 ⇒HWMより下のブロック(現在まで獲得しているエクステント)
  →割り当て済みだが未フォーマットかつ未使用
  →フォーマット済みかつデータが格納されている
  →フォーマット済みだがデータが削除されたため未使用
  のいずれか
  

●エクステント
・複数のブロックから構成される
・表や索引を作成する際、エクステントサイズを指定できる。
・エクステントの数が多すぎるとパフォーマンスが低下する可能性もある
 ⇒目安としては100以上のエクステント数を持つセグメントが多数あれば、パフォーマンスに
  悪影響を与えることがあります。特に索引のエクステントが多いと、RangeScanで検索する
  SQL処理でのパフォーマンスが低下します。

  引用
  表領域とディスクI/Oの要注意ポイント
  http://www.atmarkit.co.jp/fdb/rensai/oraobstacle08/oraobstacle08_1.html
・エクステントの数とサイズは記憶域パラメータでセグメントごとに設定される。優先順位は下記①~③において、①>②>③の順。
 ①セグメントのSTORAGE句
 ②表領域のSTORAGE句
 ③Oracle Databaseのデフォルト
 

●Oraleブロック
・Oracleが扱うデータの最小単位
・1つ以上のOSブロックで構成される
・ブロックサイズは表領域作成時に指定でき、2KB、4KB、8KB、16KB、32KBのいずれかを指定できる
・ブロックの構成として、下記①~③で主に構成される
 ①オーバーヘッド
  ⇒下記3つの情報が格納される
   →ブロックヘッダ
    データブロックのディスクアドレスやセグメントタイプ、トランザクション履歴情報等など、
    一般的な情報が格納される。また、トランザクションエントリ用の領域も確保される。
   →表ディレクトリ
    このブロックに行を持つ表についての情報が格納される
   →行ディレクトリ 
    このブロックの行データの中に実際に存在する各行個別の情報(アドレス情報等)が格納される
  ⇒オーバーヘッドは上から順に書き込まれていく
 ②空き領域
 ⇒オーバーヘッドと行データを格納するために、事前に確保している
 ⇒下記2つのパラメータによって、ブロック内の空き領域は調整される
   →PCTFREE
   空き領域をブロック内でどれだけ確保するかの閾値。PCTFREE=10だと、ブロック内
   の90%まではオーバーヘッドと行データで使用でき、90%を超えると新規行データを
   追加できなくなる。残りの10%は既存行データ更新のために空き領域にしておく。
   →PCTUSED
   PCTFREEで指定した限界使用量に一度達したブロックが、次に新規行データを使用
   できるようになるまでの閾値。PCTFREE=10、PCTUSED=40だと、オーバーヘッド
   と行データの使用量が一度90%以上になったブロックに対して、再び新規行データ
   を追加できるようになるには、使用量が40%未満に下がらなくてはならない。
 ③行データ
  ⇒表データまたは索引データが格納される
  ⇒レコード長が長い場合は、1レコードが複数のブロックに渡って格納される場合もある。
   また、LOB型のデータ(大きなサイズのデータ型)をカラムに持つレコードは、
   ロケータ( LOB の格納先のポインタを格納する構造体)を利用してLOB専用の領域に
   実データが格納される。
  ⇒ブロックの下から順に書き込まれていく






参考
Oracle Database概要 11gリリース2(11.2)
12 論理記憶域構造
http://download.oracle.com/docs/cd/E16338_01/server.112/b56306/logical.htm
システム表領域
http://www.shift-the-oracle.com/tablespace/system-tablespace.html
ローカル管理表領域
http://www.shift-the-oracle.com/tablespace/local-management-tablespace.html
ディクショナリ管理表領域
http://www.shift-the-oracle.com/tablespace/dictionary-management-tablespace.html
ブロック、エクステント、セグメント
http://www.shift-the-oracle.com/oracle/datablock-extent-segment.html
ORACLE MASTER Silver DBAポイント解説
第4回 Oracleの表領域の管理
http://jibun.atmarkit.co.jp/lskill01/rensai/omsdb04/omsdb01.html
ORACLE MASTER Silver DBAポイント解説
第5回 記憶領域構造とUNDOデータの管理
http://jibun.atmarkit.co.jp/lskill01/rensai/omsdb05/omsdb01.html
LOB 型の格納方式
http://www.shift-the-oracle.com/table/lob-storage.html
  1. 2010/03/20(土) 03:43:30|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

Oracleのキャッシュ構成

キャッシュ

●システムグローバル領域(SGA)
 下記①~⑥の情報を、全てのサーバプロセス、バックグラウンドプロセスで共有する。

 SGA_TARGETにて自動管理の有無、SGA_MAX_SIZEにて最大値を設定できる。自動管理にした場合は、DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE、JAVA_POOL_SIZE、STREAMS_POOL_SIZEが自動でサイズが調整されるが、LOG_BUFFERは自動管理の対象外である。

①データベースバッファキャッシュ
 データファイルから読み込んだブロックを保持する。また、サーバプロセスによって更新されたデータを、データファイルに反映するまで保持する。
②共有プール
・ライブラリキャッシュ(共有SQL領域)
 SQLのハード解析結果や実行計画を保持する。
・データディクショナリキャッシュ
 データベースのオブジェクトに関する構成情報や統計情報を保持する
・サーバ結果キャッシュ
 SQLの問い合わせ結果セットを保持する
・予約プール
 5KBより大きいデータをOracleが利用する際、それらのデータを連続したチャンクとして保持する
③REDOログバッファ
 REDOエントリを、REDOログに書き込むまで保持する。
④ラージプール
 「共有サーバのセッション情報」「I/Oスレーブ(OSの非同期IOをシミュレートすることによって、データファイルへの書き込みを非同期で行うプロセス)」「Recovery Manager(RMAN)」に関連する情報を保持する。
⑤Javaプール
 javaのストアドプロシージャ等、JVM内の全セッションで利用するデータを保持する
⑥ストリームプール
 Oracle Streams(メッセージキューイングやデータレプリケーションを提供する機能)で使用するデータを保持する


●プログラムグローバル領域(PGA)
 下記①~③の情報を、各サーバプロセス、バックグラウンドプロセス個別で利用する。
 PGA_AGGREGATE_TARGETを指定することによって自動管理の有無と最大値を設定できる。自動管理にした場合は、SORT_AREA_SIZE、HASH_AREA_SIZEなどが自動でサイズ調整される。

①SQL作業領域(※1)
・ソート領域
 ORDER BY、GROUP BY等のソート処理や、ソート/マージ結合に必要な作業領域を保持する
・ハッシュ領域
 ハッシュ結合でハッシュ表を作成する際に必要な作業領域を保持する
・ビットマップマージ領域
 ビットマップ索引スキャンで取得したビットマップをマージする際に必要な情報を保持する
②プライベートSQL領域(≒カーソル)(※2)
 カーソルは「SQL問合せ結果を一時的に蓄えておく領域」のようなものである。カーソルが保有するポインタ情報を元に、アプリケーションがSQL問合せ結果をより詳細な形で(複数結果のセットに対して1行ずつ等)取得することが可能になる。
 1セッションが利用できるプライベートSQL領域の数は初期化パラメータOPEN_CURSORSによって指定する。また、初期化パラメータCURSOR_SHARINGにて、同じカーソルを共有する為のSQL文の判定基準を指定することによって、バインド変数を使用していないSQLでもバインド変数と同等の効果を得ることができる。
 プライベートSQL領域は、下記2種類の領域を保持する。
・ランタイム領域
 SQLの実行状態情報を保持する。フルスキャンが現在何行まで行われたか等、リアルタイムのSQL情報が格納される。SQL文が完了すると、ラインタイム領域は解放される。
・持続領域
 SQLのバインド情報を保持する。カーソルがクローズするまで情報が保持される。
③セッションメモリ(※3)
 ユーザグローバル領域(UGA)と呼ばれる、ユーザのセッションに関する情報を保持する

(※1)専用サーバ接続のときのみPGAに格納される。共有サーバ接続の際は、(SORT_AREA_SIZEとSORT_AREA_RETAINED_SIZEを同じ値に設定することによって)ラージプールに格納される。
(※2)持続領域の位置に関しては、専用サーバ接続の場合のみPGAに格納される。共有サーバ接続の場合は、SGAの中に確保される。ランタイム領域に関しては、いずれの場合もPGAに格納される。
(※3)専用サーバ接続のときのみPGAに格納される。共有サーバ接続の際は、SGAにに格納される。



参考
Oracle Database概要 11gリリース2(11.2)
14 メモリー・アーキテクチャ
http://download.oracle.com/docs/cd/E16338_01/server.112/b56306/memory.htm
SGAのメモリ自動管理(SGA_TARGET)
http://oracle.se-free.com/tuning/B3_sga_target.html
PGAのメモリ自動管理(PGA_AGGREGATE_TARGET)
http://oracle.se-free.com/tuning/B3_pga_aggregate_target.html
最大カーソル数( OPEN_CURSORS )
http://oracle.se-free.com/tuning/B6_open_cursors.html
カーソル共有方式( CURSOR_SHARING )
http://oracle.se-free.com/tuning/B6_cursors_sharing.html
12.2. カーソル
http://www.techscore.com/tech/sql/12_02.html


  1. 2010/03/14(日) 10:26:50|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

REDOログ概要

●REDOログ
・ロールフォワードに使用
・COMMITされた変更履歴データをREDOログファイルとしてデータファイルに保存
・メンバを多重化することによって、冗長化されている
・グループを多重化することによって、LGWRプロセスの書き込み処理が遅延しないようにしている
 (グループが一巡後のREDOログ書き込み時、上書きするREDOログがアーカイブ中だとLGWRはアーカイブが完了するまで待つ)
・UNDO表領域の更新情報も格納されている

REDOログ



●アーカイブログモード
・ARCHIVE LOGモード
オンラインバックアップと合わせて運用されることが多い
・NO ARCHIVE LOGモード
オフラインバックアップと合わせて運用されることが多い。オンラインREDOログの情報のみでロールフォワードできなくなった場合、オフラインバックアップ直後からしかリカバリできない

●UNDO
・ロールバックに使用
・UNDO表領域には複数のUNDOセグメントが作られる。処理中のトランザクションとUNDOセグメントが1:1で対応している。
・UNDOセグメント上の未COMMITのデータは上書きされないが、COMMIT後や一定時間経過後は上書きされる
・未COMMIT時の過去のデータを参照する必要がある場合、UNDOセグメント上のUNDO情報を利用する。ただし、処理中にUNDO情報が上書きされてしまうと、ORA-1555エラーが発生する。対策としては、UNDO情報の保持期間を長く設定する。

参考
6 REDOログの管理
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19224-02/onlineredo.htm
7 アーカイブREDOログの管理
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19224-02/archredo.htm
ORACLE MASTER Silver DBAポイント解説:第3回 制御ファイルとREDOログ・ファイルの管理
http://jibun.atmarkit.co.jp/lskill01/rensai/omsdb03/omsdb01.html

  
  1. 2010/03/07(日) 09:13:07|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

Oracleの書き込み処理による待機イベント

●ディスクIO処理に起因する主要な待機イベント
・DBWRプロセスが遅延した場合の待機イベント
①free buffer waits(バッファキャッシュに空きがないときに発生する待機イベント)
DBWRプロセスがバッファキャッシュ上のデータを利用中のため、サーバプロセスが新たにディスクから読み込もうとしているデータをバッファキャッシュに載せることができず待ちが発生する
②buffer busy waits(同じブロックに対して同時アクセスがあった場合の競合による待機イベント)
③write complete waits(サーバプロセスがアクセスしようとしたブロックがDBWRプロセスによってディスクへ書き出し中だった際に発生する待機イベント)
DBWRプロセスがダーティバッファ(メモリ上の変更はされているが、ディスクには書き込まれていないバッファ)を書き出している最中に、サーバプロセスからダーティバッファ上のブロックに対してアクセスがあった場合、サーバプロセスはDBWRプロセスが該当ブロックの書き込みが完了するまで待たされる

・LGWRプロセスが遅延した場合の待機イベント
①log file paralle write(LGWRプロセスがディスク上のREDOログへ書き込む際に発生する待機イベント)
LGWRプロセスがディスクへの書き込み処理にかかる時間。サーバプロセスが待った時間ではないことに注意。
②log file sync(サーバプロセスがLGWRプロセスの書き込み処理待ちにより発生する待機イベント)
サーバプロセスがCOMMITする際にLGWRプロセスがディスクへREDOログを書き出している最中だった場合、LGWRプロセスの書き込み処理が完了するまでサーバプロセスは待つことになる。
③log buffer space(REDOログバッファへの書き込み)
サーバプロセスがREDO情報をメモリ上のREDOログバッファへ書き出す際に、REDOログバッファのサイズが不足している場合書き込めず待たされる。通常は10MBくらいあれば十分、らしい。



参考
データベースキャッシュの競合
http://www.slideshare.net/kesnke/ss-455490
第8章 手動によりI/Oを分散してみよう
http://perfopy.ashisuto.co.jp/oracle_performance_educ/8IO.html
  1. 2010/03/07(日) 06:27:32|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

Oracleのバックアップ

●オンラインバックアップ(ホットバックアップ、非一貫性バックアップ)
・バックアップ時のデータベースの状態
OPEN状態で行う
・データファイルの状態
整合性がとれていないのデータファイル(非一貫性ファイル)
・バックアップ方法
「ALTER DATABASE BEGIN BACKUP,ALTER DATABASE END BACKUP」や「ALTER TABLESPACE [表領域名] BEGIN BACKUP,ALTERTABLESPACE [表領域名] END BACKUP」コマンドでバックアップを実行
・リストア後の流れ
リカバリ(REDOログを利用してCOMMITされた内容をデータファイルに反映)が必須

●オフラインバックアップ(コールドバックアップ、一貫性バックアップ)
・バックアップ時のデータベースの状態
SHUTDOWN状態で行う
・バックアップ対象
チェックポイント済みのデータファイル(一貫性ファイル)
・バックアップ方法
データファイルをそのままコピー
・リストア後の流れ
データファイルの一貫性が保たれているため、そのままデータベースをOPENできる

参考
第6回 運用計画による効果的なバックアップ法
http://www.atmarkit.co.jp/flinux/rensai/oracle06/oracle06.html
  1. 2010/03/07(日) 05:41:06|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

RAWデバイスについて

●RAWデバイス
RAWデバイスは、OSのバッファキャッシュを経由せずにIO処理を行う特殊なパーティションである。fdiskコマンドによってRAWデバイス専用のパーティションを作成できる。

・RAWデバイスのメリット
①OSのバッファキャッシュを経由せずにIO処理を行うため、ファイルシステムに比べ書き込み性能が高い
 →追加、更新が多いデータに適している
・RAWデバイスのデメリット
①ファイルシステムではないため、データの管理が面倒
 →(対策)ASM(Automatic Storage Management) の利用
②OSのバッファキャッシュを利用しないため、ファイルシステムに比べ参照などの読み込み性能は低くなる可能性がある
 →参照が多いデータに適している
  →(対策)Oracleにもバッファキャッシュがあるため、そこである程度の領域を確保しておけば・・・
 


参考
Linux技術トレーニング 基本管理コース II 1.RAWデバイス
http://www.miraclelinux.com/technet/document/linux/training/2_2_1.html
Oracle新人のRACインストール その5
http://www.insight-tec.com/mailmagazine/ora3/vol295.html
Oracle新人のRACインストール その6
http://www.insight-tec.com/mailmagazine/ora3/vol296.html
  1. 2010/03/07(日) 05:37:20|
  2. Linux/Unix
  3. | トラックバック:0
  4. | コメント:0

Oracleの同期IOと非同期IOについて

●同期IO
・例
Oracle内で、
①プロセス1のCPU処理
②プロセス1のIO処理
③プロセス2のCPU処理
④プロセス2のIO処理
の4つの処理あると仮定すると、同期IOでは①→②→③→④の順でしか処理ができない。なぜならば、ディスクへの書き込みが完了するまでプロセスはスリープ状態になり、次のプロセスを開始できないためだ。この方式の場合、CPU、IOの処理に余裕があるときに、一方の処理が開始できないため、効率的にリソースを利用できない。

・特徴
通常のプロセスのディスクへの書き込み処理は、
プロセス→OSのバッファキャッシュ→ファイル
の順で行われ、書き込み処理自体はOSのバッファキャッシュへの書き込みが完了した時点で結果がプロセスへ返される。

Oracleの場合、プロセス(DBWRプロセスやLGWRプロセス)のディスクへの書き込み処理は、
Oracleのバッファキャッシュ→プロセス→OSのバッファキャッシュ→データファイル
の順で行われるが、プロセス(DBWRプロセスやLGWRプロセス)のディスクへの書き込み処理は、データファイルに物理的に書き込みが完了しないと処理が完了しない。

そのため、Oracleのディスク書き込み処理は、通常のプロセスの処理に比べ、時間がかかる方式となっている。このような方式になっている理由は、メモリ上のデータとディスク上のデータの整合性を保つ必要があるからだ。Oracleは、ディスク上のデータファイルをオープンするときO_SYNCフラグ(ファイルを同期IOモードでオープンし、write()処理が完了するまでプロセスに結果を返さない)を用いてwrite()を実行している。




●非同期IO
・例
Oracle内で、
①プロセス1のCPU処理
②プロセス1のIO処理
③プロセス2のCPU処理
④プロセス2のIO処理
の4つの処理あると仮定すると、非同期IOでは①→②、③→④が並行して処理される。非同期IOモードでは、ディスクへの書き込みが完了する前に、次のプロセス処理を先に実行することができる。この方式の場合、CPU、IO処理をそれぞれ連続で実行できるため、効率的にリソースを利用できる。

・特徴
Linux版Oracleは、9i R2より非同期IOのサポートを開始している。デフォルトでは非同期IOを利用する設定になっていない。
(非同期IOの対応・デフォルト設定に関しては、OSやOracleのバージョンによって異なるため、上記は一概には言えない。)

非同期IOによって、IO処理が完了する前にどんどん次の書き込み命令を出すことができるので、プロセスのCPU処理とディスクIO処理を並行して行うことが可能になる。そのため、Oracleの処理全体も効率化され性能の向上につながる。
(非同期IOのメモリとディスクのデータ整合性担保の問題は、どう対応したのだろうか・・・)

当然OS側での非同期IOの対応も必要だが、Oracleインストール時にlibaioパッケージをちゃんと入れているから大丈夫、多分。
(OS側でなんらかの設定変更必要なのだろうか?)

●Direct IO
同期IO処理における、
Oracleのバッファキャッシュ→プロセス→OSのバッファキャッシュ→データファイル
の中で、「OSのバッファキャッシュ」への書き込み(いわゆる、プロセスとOSカーネル間とのデータのやりとり)は余計な部分であり、その分オーバヘッドになっている。
Direct IOモードでは、
Oracleのバッファキャッシュ→プロセス→データファイル
のように、OSのバッファキャッシュへ書き込みをすることなく、プロセスが直接データファイルに書き込み可能になる。それによって、性能の若干の向上と、メモリ使用量の抑制につながる。

Direct IOは、O_DIRECTフラグを使ってファイルをオープンしているので、RAWデバイスのようなOS側での設定変更は不要。

参考
りなっくす奮闘記 その17 非同期I/OとDirectI/Oを使ってみよう
http://www.oracle.co.jp/2shin/ora83/22_23.html
openとO_SYNC
http://rarfaxp.riken.go.jp/~baba/tips/opensync.html
Linux上のOracle Real Application Clustersの記憶領域オプション
http://otndnld.oracle.co.jp/tech/linux_win/pdf/rac_wp.pdf




なお、非同期IOとDirect IOは同時設定可能である。

FILESYTEMIO_OPTIONSは、次のいずれかの値に設定できます。
ASYNCH: ファイル・システム・ファイル上の非同期I/Oを有効にします。非同期I/Oでは、転送に対する時間的な要件はありません。
DIRECTIO: ファイル・システム・ファイル上の直接I/Oを有効にします。直接I/Oでは、バッファ・キャッシュがバイパスされます。
SETALL: ファイル・システム・ファイル上の非同期および直接I/Oを有効にします。
NONE: ファイル・システム・ファイル上の非同期および直接I/Oを無効にします。


引用
Oracle Database パフォーマンス・チューニング・ガイド10gリリース2(10.2)9 オペレーティング・システム・リソース
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19207-02/ch23_os.htm
  1. 2010/03/07(日) 05:32:24|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

Oracleの起動と停止

●Oracleの起動(①~④の順の状態で推移)
①SHUTDOWN 
インスタンス(バックグランドプロセス群+共有メモリ)が停止した状態。
②NOMOUNT 
初期化パラメータファイルを読み込み、インスタンスが立ち上がった状態。SHUTDOWN状態からstartup nomountで起動
③MOUNT 
制御ファイル、データファイル、REDOログファイル等のファイルを読み込んだ状態。NOMOUNT状態からalter database mountで起動。
④OPEN 
データファイル、REDOログの検査が問題なく完了し、SQLを受け付け可能な状態。MOUNT状態からalter database openで起動。通常は、startupでSHUTDOWN状態から一気にOPNE状態になる。


●Oracleの停止
OPEN状態のデータベースをSHUTDOWN状態にするには、shutdownコマンドを実行する。起動時と逆で、データベースがクローズされてからインスタンスが停止する(MOUNT→NOMOUNTの順番)。なお、オプションにabortを付けた場合以外は、インスタンスリカバリ(次回起動時にREDOログを利用してデータファイルに書き込まれなかった変更済みデータを書き込む)によってデータの復旧が行われる。
 ・オプションなし(デフォルト) 全ての接続が終了してからSHUTDOWN状態にする。
 ・transactional トランザクションが終了したら接続を切り、SHUTDOWN状態にする。
 ・immediate 接続の終了を待たずにSHUTDOWN状態にする。そのため、コミットされていないデータは失われる。
 ・abort 接続の終了を待たずにSHUTDOWN状態にする。そのため、コミットされていないデータは失われる。
 

参考
  
  1. 2010/03/01(月) 03:47:23|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

Oracleの主要なバックグラウンドプロセス一覧

最近、いろいろとOracleの勉強をし始めたので、その覚書。


Oracleの主要なバックグラウンドプロセス一覧

●DBWR(DBWn)
・役割
→更新済みのデータ(ダーティバッファ)をバッファキャッシュからデータファイルへ書き出す
・動作タイミング
→ディスクの負荷状況を見て定期的に書き出す
→チェックポイントが実行された時

●LGWR
・役割
→REDOログバッファの内容をディスク上のREDOログへ書き出す
・動作タイミング
→トランザクションがCOMMITされた時点
→REDOログバッファの使用量が1/3を超えた時点
→タイムアウト発生時
→DBWRが動作する直前
→前回の書き込みから3秒経過時

●ARCH(ARCn)
・役割
→アーカイブ(REDOログファイルをアーカイブログファイルとして保管する)を実行する
・動作タイミング
→ログスイッチ(LGWRが書き出し先のREDOロググループを切り替える作業)発生時

●PMON
・役割
→サーバプロセスが何らかの原因で異常終了した際に、サーバプロセスのリカバリを実行する
→サーバプロセスが利用していたメモリ等のリソースを解放する
→リスナーにインスタンス情報や現在のプロセス数の情報等を登録する
・動作タイミング
→1分間に1回ほどのペースで、必要に応じて定期的に動作する


●SMON
・役割
→クラッシュリカバリを実行
・動作タイミング
→データベースをOPENするとき
・役割
→コアレス処理(一時セグメントのクリーンアップ)を実行し、空き領域を確保する
・動作タイミング
→5分周期で定期的に動作する

●CKPT
・役割
→チェックポイント(REDOエントリとデータファイルの同期をとる)を実行する
→チェックポイントの際、DBWRにシグナルを送る
・動作タイミング
→ログスイッチ発生時
→インスタンスがABORT以外で停止した時
→手動コマンドによってある表領域がオフラインにされた時

ORACLE MASTER Silver DBAポイント解説:第3回 制御ファイルとREDOログ・ファイルの管理
http://jibun.atmarkit.co.jp/lskill01/rensai/omsdb03/omsdb01.html


参考
  



  1. 2010/03/01(月) 03:37:25|
  2. oracle
  3. | トラックバック:0
  4. | コメント:0

iphoneから新規PCへの同期方法

ipod touchのデータが全部消えた\(^o^)/のエントリでも紹介したとおり、OSをクリーンインストールした直後のPCとiphoneを同期すると、データが何も入っていないPCの方にiphoneが同期されてしまう。対策としては、事前にアプリ等のデータのバックアップをするということが考えられる。しかし、私は、ついつい、またバックアップをせずにOSをクリーンインストールしてしまった・・・・。

そこで、今回はそんなときの対処法として、iphone側から空のPCに対して確実に同期させる方法の覚書を載せる。下記の方法で、自分はうまくiphoneのデータをPCに同期させることができた。

●新しいPCにiphoneにある既存データを同期させる方法
①iTunesをPCで起動
②iTunesの上部メニューにある[Store(S)]>[コンピュータの認証]を選択
③いつも使っているApple IDとパスワードを入力し、コンピュータの認証を行う
④iphoneをPCにUSB経由で接続
⑤iTunesの上部メニューにある[ファイル(F)]>[購入したものを[○○のiPhone]から転送]を選択
⑥iphone→PCへ同期が行われる

参考
iTuneのバックアップ(iTunes Store で購入したアプリケーション編)
http://d.hatena.ne.jp/nadesico39/20080926/1222440342
  1. 2010/03/01(月) 01:40:28|
  2. モバイル
  3. | トラックバック:0
  4. | コメント:8
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。