簡體   English   中英

從 .bak 文件恢復 sql server 無法獲得獨占訪問權限

[英]restore sql server from .bak file Exclusive access could not be obtained

我正在嘗試使用 bak 文件恢復我的 sql

我收到錯誤

無法獲得獨占訪問權限,因為數據庫正在使用中

我試過了

USE [master]
ALTER DATABASE myDB
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

並運行查詢

USE [master] RESTORE DATABASE  myDB
   FROM DISK = 'C:\MyDatabase.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 10

我也嘗試從恢復向導獲得相同的結果。

無法獲得獨占訪問權限,因為數據庫正在使用中。

方法一

    declare @sql as varchar(20), @spid as int

    select @spid = min(spid)  from master..sysprocesses  where dbid = db_id('<database_name>')  and spid != @@spid    

    while (@spid is not null)

    begin

    print 'Killing process ' + cast(@spid as varchar) + ' ...'

    set @sql = 'kill ' + cast(@spid as varchar)

exec (@sql)

select 

    @spid = min(spid)  

from 

    master..sysprocesses  

where 

    dbid = db_id('<database_name>') 

    and spid != @@spid
 end 

 print 'Process completed...'

方法二

  alter database database_name
  set offline with rollback immediate
  alter database database_name
  set online

不需要編寫任何查詢來解決這個問題。 我多次遇到同樣的問題並通過這種方法解決它:當您恢復數據庫時

  1. 轉到“還原數據庫”窗口中的“選項”選項卡
  2. 檢查(覆蓋現有數據庫(WITH REPLACE))
  3. 檢查(關閉與目標數據庫的現有連接)
  4. 然后點擊確定

恢復數據庫正在開始...

任何遇到上面列出的問題的人,沒有任何建議有效..只需關閉“選項”下的 Taillog 備份..

設置(或保留)此選項將嘗試獲取源數據庫本身的尾日志(即使您的還原源只是一個文件)。 因此,如果源數據庫正在使用中(如果您正在制作生產數據庫的副本,通常就是這種情況),那么恢復將失敗。

當我嘗試將生產備份恢復到已經有數據庫的開發服務器時,我遇到了這個問題。 我想恢復為副本,這是通過更改目標數據庫名稱來實現的,但問題實際上出在文件上。 默認情況下,它試圖覆蓋已經存在的文件。 我通過檢查恢復對話框的“文件”頁面中的“將所有文件重定位到文件夾”並選擇一個新目錄來解決這個問題,這樣就不會出現文件沖突。

以上解決方案都沒有對我有用。 經過多次試驗和錯誤,我停止了 SQL Server Browser,然后恢復成功完成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM