3

この質問をする方法さえわかりません。SQL Server 2008 R2 を実行しています。私は管理者ではなく、プログラマーです。夜間にデータベースを更新するアプリケーションを作成する必要があります。データベースへのログインを無効にするフラグを設定しますが、誰かが既にデータベースにログインしている場合でも、特定のデータベースを私以外は利用できないようにしたいと考えています。私のプログラムは、おそらく管理者権限で、バッチファイルとして毎晩実行されます。

SQL コマンドのスクリプトのようなものを作成することを期待しています。自分で変更する必要がある場合を除いて、データベースをオフラインにすることができます。これを処理する最善の方法がわからない。

4

2 に答える 2

5

基本的には、データベースを「シングルユーザー」モードに設定して排他的に使用できます。このT-SQLは次のことを行います。

USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

(もちろんAdventureWorks2012、独自のデータベース名に置き換えてください!)

これにより、データベースは「シングルユーザー」になります。たとえば、データベースにアクセスできるのはあなただけです。現在オンラインになっているすべてのユーザーが起動し、開いているすべてのトランザクションがロールバックされます。

MSDNでシングルユーザーモードの詳細を読んでください

この例では、データベースをSINGLE_USERモードに設定して、排他的アクセスを取得します。終了オプションは、最初のステートメントWITH ROLLBACK IMMEDIATEで指定されています。ALTER DATABASEこれにより、すべての不完全なトランザクションがロールバックされ、AdventureWorks2012データベースへの他の接続がすぐに切断されます。

于 2012-10-23T12:41:15.213 に答える
1

管理者アカウントを使用して更新を実行しているため、アカウントは次のいずれかの役割にあると想定します:db_owner、、。構文を使用して、DML操作中のデータベースアクセスを制御します。dbcreatorsysadminALTER DATABASE SET ...

ロックアウトするデータベースユーザーは、上記の役割を担っていないことが前提です。

USE master;

-- only allow members of db_owner, dbcreator, or sysadmin roles to access
-- database, allowing current transactions time to complete. if you want to
-- drop access immediately, add WITH ROLLBACK IMMEDIATE
ALTER DATABASE SET RESTRICTED_USER;

-- data load

-- return database to normal operating state
ALTER DATABASE SET MULTI_USER;
于 2012-10-23T12:45:22.497 に答える