SQL Server 2008 R2でのデータベース名の変更に関するエラー


164

このクエリを使用してデータベースの名前を変更しています。

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

ただし、実行時にエラーが表示されます。

メッセージ5030、レベル16、状態2、行1
データベースは、操作を実行するために排他的にロックできませんでした。

クエリに問題はありますか?


4
クエリに問題はありません。エラーは、他の接続がデータベースに接続されていることを示しているため、現時点では名前を変更することはできません。
Damien_The_Unbeliever 2013年

1
これをSSMSから行う場合は、そのdbに対してクエリウィンドウを開いていないことを確認してください。これは、dbをロックする個別の接続であるためです。
jleach '19

回答:


329

データベースをシングルユーザーモードに設定してみてください。

https://stackoverflow.com/a/11624/2408095

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE    
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

1
であるWITH ROLLBACK IMMEDIATE必要。まったく使用しない場合、問題が発生しますか?
user13892

パーティーに少し遅れますが、この質問に答えるために:はい、WITH ROLLBACK IMMEDIATE他のユーザーが操作している可能性のあるデータベースを変更しながら、これらの操作の整合性を確保するために使用する必要があります。ただし、データベースを再度MULTI_USERモードに戻す場合、データベースはすでにSINGLE_USERモードであり、トランザクションを実行できる唯一のユーザーであるため、これは実際には必要ありません。
Hakan Yildizhan

61
  1. データベースをシングルモードに設定します。

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
  2. データベースの名前を変更してみてください:

    ALTER DATABASE dbName MODIFY NAME = NewName
  3. データベースをマルチユーザーモードに設定します。

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE

@SamieyMehdi WITH ROLLBACk IMMEDIATEマルチユーザーに使用する必要がありますか?
BendEg

29

SQL Server Management Studioを(SSMS)

あなたはまた、右でデータベースをクリックすることができ、オブジェクトエクスプローラとに行くのプロパティ。そこから、オプションに移動します。一番下までスクロールして、[ アクセス制限]SINGLE_USERに設定します。データベース名を変更してから、戻ってMULTI_USERに戻します。


早くて簡単!
ani627

それは最高です。SQL Server 2017の操作
AdamMacierzyński19年

19

最初にデータベースへのすべての接続を閉じるようにしてください:

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

ここから撮影


4

これは私のためにそれをしました:

USE [master];
GO
ALTER DATABASE [OldDataBaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
EXEC sp_renamedb N'OldDataBaseName', N'NewDataBaseName';


-- Add users again
ALTER DATABASE [NewDataBaseName] SET MULTI_USER
GO


2

他の回答に示されているように、データベースをシングルユーザーモードに変更します

場合によっては、シングルユーザーモードに変換した後でも、データベースに許可されている唯一の接続が使用されていることがあります。

シングルユーザーモードに変換した後でも接続を閉じるには、以下を試してください:

select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
  and dbid = DB_ID('BOSEVIKRAM')

結果を見て、問題のデータベースへの接続のIDを確認します。

次に、以下のコマンドを使用してこの接続を閉じます(データベースがシングルユーザーモードになっているため、接続は1つだけです)。

KILL connection_ID

最初のクエリの結果で、connection_idをIDに置き換えます


1

1.データベースセットの最初のシングルユーザーモード

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE

2.データベースの名前を変更する

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

3.DATABAE SET MULIUSERモード

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER WITH ROLLBACK IMMEDIATE


0

すべての接続を閉じる別の方法:

管理ツール>ローカルサービスの表示

「SQL Server(MSSQLSERVER)」サービスを停止/開始します


-1
use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

これはSquidとまったく同じ答えです
reggaeguitar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.