SQL Server 2012 restore數據庫時在文件夾下看不到.bak文件的解決辦法

問題描述
有兩臺SQL Server 2012 分別稱爲ServerA、ServerB,目標是利用backup/restore的方法將ServerA上的數據庫db1轉移到ServerB上。步驟如下:

  1. 使用sa用戶登錄到ServerA的Management Studio,選擇Object Explorer|ROOT|databases|db1右鍵單擊db1,彈出右鍵菜單選擇Tasks|back up… 將數據庫備份到文件db1.bak中。
  2. 將db1.bak複製到ServerB的機器上
  3. 使用sa用戶登錄到ServerB的Management Studio,選擇Object Explorer|ROOT|databases 右鍵單擊databases彈出右鍵菜單選擇Tasks|restore|databases…,彈出對話框,在對話框中加入db1.bak

但是在第3步的時候遇到了一個問題,db1.bak原本copy後放在D:\backups文件夾中,但是restore添加備份文件時在backups文件夾下看不到任何文件。將db1.bak複製到其他目錄下就可以看到了。

問題調查
首先我們比較兩個文件夾的區別,發現唯一的區別就是backups文件夾局域網中有共享其他文件夾沒有共享,初步懷疑問題和這個有關係。於是將backups文件夾的共享屬性去掉,再試還是不行。於是一通試驗,發現新建的沒有共享過的文件夾可以工作,文件夾只要共享過(共享後取消共享也不行)就不行了。問題至此確定了重現的步驟即copy sqlserver的backup文件到一個共享過的文件夾中,則無法使用restore從這個文件夾中讀取備份文件。

問題的解決
既然找到了重現的步驟那麼解決的辦法就很直接了,如下的方法一和方法二都是直接規避“共享過”的文件夾而產生的方法。雖然直接但不夠優雅,不夠本質,所以有了方法三。
方法一,新建一個沒有共享過的文件夾存放備份文件
方法二,將備份文件放到磁盤根目錄下
方法三,以上兩個方法都可以解決這個問題,但是不夠完美。於是繼續在網上搜索,果然搜到一個帖子,http://dba.stackexchange.com/questions/47304/bak-file-not-visible-in-any-directory-in-ssms
這個帖子的解決辦法是將NT SERVICE\MSSQLSERVER這個用戶加入文件的訪問列表中並賦予相應的權限,如下圖:
這裏寫圖片描述

問題總結
看過這個帖子可以清楚這個問題的本質是MSSQLSERVER這個用戶是否有權限訪問備份文件所在的文件夾,默認情況下新建的文件夾是可以訪問的,但是共享破壞了授權,即使取消共享也無法恢復對MSSQLSERVER用戶的授權,所以只要是共享過的文件夾MSSQLSERVER用戶都無法訪問。解決的辦法就是顯式將MSSQLSERVER加入文件夾的訪問列表中。

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