web-dev-qa-db-ja.com

SQL Server 2008 R2でデータベースの名前を変更する際のエラー

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

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

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

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

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

143
Vikram Bose

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

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
282
Squid
  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
    
49
Samiey Mehdi

最初にデータベースへのすべての接続を閉じてみてください。

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

here から取得

19
Andrey Gordeev

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

19

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

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
4
t_plusplus

これは、他の誰かがデータベースにアクセスしているためです。データベースをシングルユーザーモードにして、名前を変更します。

このリンクは問題の解決に役立つ場合があります:http://msdn.Microsoft.com/en-IN/library/ms345378(v = sql.105).aspxおよびこのリンク:http://msdn.Microsoft.com/en-us/library/ms345378.aspx =

3
Dhwani

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

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

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

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に置き換えます

2
slayernoah

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

1
K GANGA

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

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

「SQL Server(MSSQLSERVER)」サービスの停止/開始

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

ALTER DATABASE dbName SET SINGLE_USER WITH ROLLBACK IMMEDIATE

このsqlステートメントは、データベースのアクセス制御を複数のユーザーから単一のユーザー(つまり、あなた)に変更し、dbの唯一のユーザーになります。これで、データベースの名前を変更できます。

2.データベースの名前を変更します:

ALTER DATABASE dbName MODIFY NAME = NewName

このsqlステートメントは、db名を希望する名前に変更するという重要な作業を行います。

3.データベースをマルチユーザーモードに設定します。

ALTER DATABASE NewName SET MULTI_USER WITH ROLLBACK IMMEDIATE

Db名を変更した後、アクセス制御を変更して、デフォルトのMulti_userに戻しました。

注:それでもエラーが発生する場合は、この記事を参照して詳細を参照してください 方法:データベースの名前を変更する(Sql Server Management Studio)

0
Tahir77667
use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER
0
KamalDeep