私が作業している場所には、.NET WebインターフェイスとFoxProインターフェイスという2つの異なるユーザーインターフェイスを持つバックエンドとして機能するSQL Serverデータベース(Microsoft SQL Server 2008 R2)があります。
毎月、WebクライアントとFoxProクライアントの両方に更新を適用する必要があります。これを行う前に、更新プロセス中に誰もデータベースにアクセスしていないことを確認することをお勧めします。
データベースの更新中にデータベースへのアクセスを防止する最も簡単な方法は何ですか?フォローアップの質問:更新中にアクセスを禁止するbest方法は何ですか?
データベースへのアクセスを制限する方法はいくつかあります。
を使用してデータベースをシングルユーザーモードで保持します(データベースへの他の接続がある場合、接続が待機するか拒否される可能性があるため、これは危険です。)
alter database databasename
set single_user with rollback immediately
メンテナンス期間中に、安全で計画的なアップグレードとしてオプション2を使用することをお勧めします。
編集:
制限付きユーザー-データベースに対するdbo権限を持つユーザーのみが許可されます(例:db_owner、dbcreator、sysadmin)。つまり、DBOである限り、複数のユーザーがデータベースにログインできます。
シングルユーザー-許可される接続は1つだけです。つまり、先着順です。
シングルユーザーが先着順であるため、エラーが発生したり、何らかの理由で接続が終了したりすると、リスクが高くなります。
@AaronBertrandが指摘したように、ログオントリガーを処理する場合、既存のセッションでは機能しませんが、最初にすべてのセッションを強制終了してからトリガーを有効にすることで、すべての新しい着信接続を通過させる必要があります。引き金。
データベースへの接続を制限する他の方法は考えられません。
データベースを制限付きユーザーモードにすると、固定サーバーロールsysadmin
またはdbcreator
のメンバー、または固定データベースロールdb_owner
のメンバーのみがデータベースにアクセスできます。
ALTER DATABASE my_app_db SET RESTRICTED_USER
既存の接続を強制的に閉じたい場合:
ALTER DATABASE my_app_db SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
そして、物事を通常の状態に戻す準備ができたら:
ALTER DATABASE my_app_db SET MULTI_USER
ソース: http://www.blackwasp.co.uk/SQLRestrictedUser.aspx
これらの場合、アプリケーションの更新プロセスで複数の接続を同時に開く必要があるため、シングルユーザーモードはお勧めしません。
データベースにアクセスする一連のユーザーグループ、またはデータベース接続を行う1つまたは2つのアプリケーションアカウントがある場合は、ログインを無効にしてすべての接続を終了し、ログインを再度有効にするだけです。あなたが終わったとき。
SQL Serverが、アクセスしているアプリと同じマシン上にあるかどうかわかりません。
そうでない場合は、すべての受信トラフィックに対してSQL Serverのファイアウォールポートを無効にするだけで問題ありません。別のオプションは、サーバーへのアクセスに使用されるSQL Server構成マネージャーでIPアドレスを無効にすることです(ローカルIP 127.0.0.1のみを残します)。