還原Sql server數據庫失敗提示“數據庫正在使用,無法獲得對數據庫的獨占訪問權”的解決辦法
[重要通告]如您遇疑難雜癥,本站支持知識付費業務,掃右邊二維碼加博主微信,可節省您寶貴時間哦!
錯誤詳細:
標題: Microsoft SQL Server Management Studio
------------------------------
還原數據庫“XXXXXX”時失敗。 (Microsoft.SqlServer.Management.RelationalEngineTasks)
------------------------------
其他信息:
System.Data.SqlClient.SqlError: 因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權。 (Microsoft.SqlServer.SmoExtended)
原因分析:
在SqlServer2008r2中在還原數據庫時,在執行備份操作的時候,如果有正在訪問的用戶或者沒有關閉的數據庫鏈接,則還原失敗。
解決方案
解決方案1.
如果你使用管理工具還原數據庫并且在Microsoft SQL Server Management Studio 2016或以上版本的話,可以在還原的時候勾選"關閉到目標數據庫的現有鏈接"
解決方案2.
如果你的SqlServer Management Studio的版本比較低,可以設置數據庫為單用戶模式,執行完還原操作后,恢復為多用戶模式
設置方式:選中要還原的數據庫-->屬性-->選項-->限制訪問
該值從MULTI_USER修改為SINGLE_USER,此時該數據庫就會顯示為單用戶模式
這是GUI的模式,語句的辦法比較簡單
---設置數據庫為單用戶模式
USE MASTER
GO
ALTER DATABASE eol_tcgroup SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
---設置數據庫為多用戶模式
USE MASTER
GO
ALTER DATABASE eol_tcgroup SET MULTI_USER WITH ROLLBACK IMMEDIATE;
GO
圖文教程:
1.選中無法還原的數據庫,右鍵屬性
2.選擇選項-狀態-限制訪問-SINGLE_USER
解決方案3:
完全使用T-Sql的方式,執行備份數據庫操作
use master
go
---聲明變量
declare @dbName nvarchar(max)='Mvc_HNHZ';
declare @dbFullName nvarchar(max)='E:\NewWork\Web\backup\test1.bak';
--1.1修改為單用模式
exec(N'ALTER DATABASE '+@dbName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE');
--1.2結束鏈接進程
DECLARE @kid varchar(max)
SET @kid=''
SELECT @kid=@kid+'KILL '+CAST(spid as Varchar(10)) FROM master..sysprocesses
WHERE dbid=DB_ID(@dbName) ;
EXEC(@kid) ;
--2.執行還原語句
restore database @dbName from disk=@dbFullName
with replace --覆蓋現有的數據庫
--3.重置數據庫為多用戶模式
exec(N'ALTER DATABASE '+@dbName+' SET MULTI_USER WITH ROLLBACK IMMEDIATE');
解決方案四:
出現這一問題的原因很可能是因為原始文件的行數據和日志文件沒有更改,需要更改。
1.在還原數據庫期間,從選項界面修改原始文件的行數據和日志文件。
點擊右側“…”按鈕,選擇路徑。根據界面上顯示的路徑找到具體位置。
此為博主博主電腦上的路徑舉例:“C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA”
2.根據數據庫對應的名稱,選擇.mdf文件和.ldf文件
問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!