フィールドを比較するトリガーを作成し、他のテーブルのフィールドと
-
16-10-2019 - |
質問
私には3つのデータベース(1つの校長、1つのミラー、証人)があり、このシステムを可能な限り最も障害のあるシステムにしようとしています。
それで、私は、場合によっては証人の喪失から私を守るためにいくつかの余分な読み書きをすることを考えていました。
sys.database_mirroringデータベースのmirroring_state_descを追跡したいので、同期から切断されるように変更された場合に備えて、プリンシパルに促進することは安全ではないことがわかりますが、同期から切断されるまで変更すると促進することは問題ありません(私は高い安全モードで働いています)
私の最初のアプローチは、このテーブルを監視するカスタムWindowsサービスを持つことでした...しかし、それを行うことで、私はデータベースに対して多くの不要な選択をしています。
だから私は、たぶんトリガーは私が探しているものになるでしょう...しかし私はただ立ち往生しています
CREATE TRIGGER modify_state ON SYS.database_mirroring FOR INSERT, UPDATE
構文の残りの部分については助けが必要です。
2つの列(last_stateとcurrent_state)を備えたState_dbデータベースがあり、State_dbの現在の状態を確認できる必要があります。それらが違う場合は、current_stateとcurrent_stateでlast_stateをsys.database_mirroringから読んで変更したい
私の質問は、sys.database_mirroringの最後の2つの状態で補助データベースを保持するために挿入と変更にトリガーを使用できますか?はいの場合、どうすればできますか?
解決
システムオブジェクトにトリガーを作成することはできません。だから、あなたが考えている道を下ることは不可能です。
フォールトトレランスを増やすための最善の策は、証人データベースを独自のサーバーハードウェアに移動することです(SQLサーバーがそのように設定することを許可している場合でも、同じボックス上の別のインスタンスだけではありません)。 。
そうすれば、校長データベースとミラーデータベースの両方を同時に排除する障害が発生する可能性は非常に低いです。