おぎわらさんの記事

[記事リンク]【超重要】データベースミラーリング (DBM) 利用時のアプリケーション設計・実装の注意点(PDF)

を読ませていただいて、ざっとだけ(自分に関係しそうな所だけ^^;)PDF読んでみました。

忘れない為にメモしとこう

■同期を取る為に、内部で下記動作を行っている
 1. ログ情報の転送(プリンシパル -> ミラー)
  2. ログ情報の反映(ミラー -> プリンシパル)

■DBM仕様による制限事項をうけないアプリケーション構成は下記
 1. ローカルトランザクションである
     (単一のSQLServer2005インスタンスに対してのみ処理を行う)
  2. 単一データベース内のテーブル郡のみを処理する
  3. マニュアルトランザクション(DBトランザクション含む)である
  上記の構成以外であれば、
  DBMフェイルオーバー時に原子性の破損、
  AP/DBで不整合が発生する可能性がある

■ローカル型DTCトランザクションの注意
  ~TransactionScope + TableAdapterの組み合わせパターンで開発する場合~
 ○上記パターンでの開発時、
    アプリとDBの間で「アプリ側はコミット完了、DB側はロールバック」という
    不整合が発生する可能性がある。
    ※DB間の不整合は発生しない
  ○不整合が発生するシーケンス
  a)MS-DTCがコミットを決定、
    SQLServerに"非同期"でコミット要求を発行し、
    アプリにはコミット応答を返す
  b)直後にSQLServer側で障害が発生し、
    DBMファイルオーバーが発生すると、
    DB側のトランザクションはロールバックされる
  ○コードの例
  using (TransactionScope scope = 
         new TransactionScope(TransactionScopeOption.RequiresNew))
  {
      TableAdapter.GetData();     ・・・※1
    
      ~処理~
    
      TableAdapter.Update();      ・・・※2
    
      scope.Complete();
  }
  ※1と※2ではTableAdapterにより自動的に
  ConnectionのOpen/Closeが行われる為、
  Connectionが異なりMS-DTCが利用される

 ○回避作
  a)コネクション変更によるLCTの利用(コード変更要)
    ・MS-DTCにならないようにする方法
    ・上記コード例を変更すると下記のようにする
      using (TransactionScope scope = 
             new TransactionScope(TransactionScopeOption.RequiresNew))
      {
          try
          {
              TableAdapter.Connection.Open();    ・・・※1
              TableAdapter.GetData();
              ~処理~
              TableAdapter.Update();
          }
          finally
          {
              TableAdapter.Connection.Close();
          }
          scope.Complete();
      }
      ※1 事前にConnectionを開いて置く事により、
          TableAdapter内でのConnectionOpen操作を抑制し、
          MS-DTCを利用しないようにする。
          (MS-DTCは、下記条件であれば利用されない)
         ・利用するデータベースサービスが単一
         ・スコープ内で単一の接続しか利用されない
          ・スコープ内で単一の接続のOpen/Closeを繰り返しても駄目
  b)ServiceDomainの利用によるSPC最適化(コード変更要)
  c)セントラルMS-DTCサーバーによるSPC最適化
  d)(非回避策)アプリケーションログによる運用対処

 

やばい・・・今のプロジェクトTableAdapterの自動Open/Closeとか使ってるような気がする・・・

しかもミラーリングも使ってる・・・

-- 11/01 15:00 追記 --

フレームワーク開発担当の方に聞くと、

MS-DTCへ昇格しないようにしているとの事。

さすがです(´▽`)

フィードバック

# 十郎さんご加盟

2006/11/01 17:13 by 中の技術日誌ブログ
十郎さんご加盟

# re: データベースミラーリングご使用上の注意・・・

2006/11/01 17:20 by アクア
#お題目とはぜんぜん違いますが…

アクアと申します。よろしくお願いいたします。

# re: データベースミラーリングご使用上の注意・・・

2006/11/01 18:03 by 黒龍
ようやく参戦ですな(今まで気付きませんでした^^;;)
盛り上げていきましょー^^

# re: データベースミラーリングご使用上の注意・・・

2006/11/01 19:08 by ognac
ognac@わんくま@神戸です。宜しく願います。

# re: データベースミラーリングご使用上の注意・・・

2006/11/01 20:38 by 刈歩 菜良
はじめまして、かるぼ@全治3週間 です。
よろしくお願いします。
_(_^_)_

# re: データベースミラーリングご使用上の注意・・・

2006/11/01 22:17 by ひろえむ
はじめまして、ひろえむと申します。
よろしくお願いします。

# re: データベースミラーリングご使用上の注意・・・

2006/11/01 23:09 by 十郎
こっそり開始の予定が、皆様にさっそく拝見して頂き、
恐縮の極みでございますです・・・

>>中様
トラバありがとうございます。
わんくまBlog新着にあがる事も忘れて、
こっそり開始してしまいました・・・
ふつつか者の私ですが、
今後ともよろしくお願い致します。

>>アクア様
はじめまして、十郎と申します。
一度飲み会の席でお会いした事があるような、
ないような感じでございます^^
今後ともよろしくお願い致します。

>>黒龍様
黒龍様とのアヤシイ関係がばれるとご迷惑と思い、
こっそり開始しましたが、さっそくばれてしまいました・・・

>>ognac様
はじめまして、十郎と申します。
神戸にご在住との事で、
またお会いさせて頂く機会もあるかもしれません。
今後ともよろしくお願い致します。

>>刈歩 菜良様
はじめまして、十郎と申します。
全治3週間ですか (((( ;゚Д゚)))
大丈夫なのでしょうか。心配です。
この頃寒くなってまいりましたので、
ご自愛ください。
今後ともよろしくお願い致します。

>>ひろえむ様
はじめまして、十郎と申します。
びびりプルグラマな私ですが、
今後ともよろしくお願い致します。

# re: データベースミラーリングご使用上の注意・・・

2006/11/02 2:04 by おぎわら
はじめまして、おぎわらです~。
記事読んでいただいてありがとうございます~

おぉ。メモが参考になりますね~
φ(..)メモメモ

# re: データベースミラーリングご使用上の注意・・・

2006/11/03 13:23 by taka
どうも戦時はコメントありがとうございます。
ほぼ同じタイミングで加盟したと思われるtakaと申します。

宜しくお願いします。

# re: データベースミラーリングご使用上の注意・・・

2006/11/04 14:36 by Zee
はじめまして
よろしくお願いします。

# re: データベースミラーリングご使用上の注意・・・

2006/11/04 15:48 by 十郎
>>おぎわら様
はじめまして、十郎と申します。
いきなりリンク貼らせて頂きましてすみません。
今の仕事にドンピシャなトピックでついリンクさせて頂きました。
今度ともよろしくお願い致します。

>>taka様
はじめまして、十郎と申します。
禁煙、こんな事して何になるんだと
考える事もありますが、
セキもでなくなるし、何より体は綺麗になった気がします。
頑張りましょう☆-(ノ゚Д゚)八(゚Д゚ )ノ
今後ともよろしくお願い致します。

>>Zee様
はじめまして、十郎と申します。
ご訪問感激でございます。
今後ともよろしくお願い致します。
コメントの入力
タイトル
 
名前
 
Url
コメント