現如今 Redis 變得越來越流行,幾乎在很多項目中都要被用到,不知道你在使用 Redis 時,有沒有思考過,Redis 到底是如何穩定、高性能地提供服務的? 我使用 Redis 的場景很簡單,只使用單機版 Redis 會有什麼問題嗎? 我的 Redis 故障宕機了,數據丟失了怎麼辦?如何能保證我的... ...
一.Sql server還原失敗(資料庫正在使用,無法獲得對資料庫的獨占訪問權)
本次測試使用資料庫實例SqlServer2008r2版
錯誤詳細:
標題: Microsoft SQL Server Management Studio
還原資料庫“Mvc_HNHZ”時失敗。 (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
解決方案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’);
————————————————
版權聲明:本文為CSDN博主「吖蘇哥哥好」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/a826193310/article/details/99560739