sql server 無法覆蓋文件 'xxxx' 數據庫 'xxx' 正在使用該文件。

一、sql server 無法覆蓋文件 'xxxx' 數據庫 'xxx' 正在使用該文件。

sqlserver 還原時候經常遇到這個問題

解決方案:

使用SSMS工具操作時候,還原是選擇 關閉現有數據庫鏈接

二、如果使用 restore database命令操作時候,則先分離數據庫,然後執行還原操作

--1.定義數據庫
declare @dbName nvarchar(1000)='[QL.MiniMall.HA_AM07]';
declare @dbFullName nvarchar(1000)='F:\xxx\xxxx.bak';
--2 t-sql 分離數據庫
exec(N'SP_DETACH_DB '+@dbName+',TRUE');
--3 .執行還原語句
restore database @dbName from  disk=@dbFullName 
with replace  --覆蓋現有的數據庫

知識點: 分離數據庫

分離數據庫(TSQL)

EXEC sp_detach_db '數據庫名稱', 'true';  

 

 

更靠譜的語句

--1.定義數據庫
declare @dbName nvarchar(1000)='QL.MiniMall.HA_AM07';
declare @dbFullName nvarchar(1000)='F:\zzy\QL.MiniMall.HA_AM07\Api\wwwroot\file\backup\QL.MiniMall.HA_AM07_2021_01_04_055951.bak';
  --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 t-sql 分離數據庫
declare @sql nvarchar(1000)=N'SP_DETACH_DB  @dbName,TRUE';
exec sp_executesql 
     @stmt=@sql,
	 @params=N'@dbName as nvarchar(100)',
	 @dbName=@dbName;

--3 .執行還原語句
restore database @dbName from  disk=@dbFullName 
with replace  --覆蓋現有的數據庫

 

更多參考:

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver15

https://blog.csdn.net/weixin_30555753/article/details/96618675

 SqlServer 遊標(一)

 SqlServer數據查找距離指定座標附近的數據(一)

 sqlserver計算時間差DATEDIFF 函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章