Sql-Server

在 Linux 上使用全文還原 MsSQL 數據庫時出現權限錯誤

  • November 21, 2020

我正在嘗試將.bak在 Windows SQL Server 上創建的文件恢復到 MSSQL 的 Linux 版本,但出現如下錯誤:

Msg 7610, Level 16, State 1, Line 112
Access is denied to "/var/opt/mssql/data/sysft_Catalog.ndf", or the path is invalid. 
   
   Msg 3156, Level 16, State 50, Line 112
File 'sysft' cannot be restored to '/var/opt/mssql/data/sysft.ndf'. Use WITH MOVE to identify a valid location for the file. 
   
   Msg 3119, Level 16, State 1, Line 112
Problems were identified while planning for the RESTORE statement. Previous messages provide details. 
   
   Msg 3013, Level 16, State 1, Line 112
RESTORE DATABASE is terminating abnormally. 

我正在執行的命令如下(或我嘗試過的許多變體之一):

RESTORE DATABASE Imported_Database FROM
DISK = '/var/opt/mssql/backup/database_to_import.bak'
WITH
 MOVE 'Dat' TO '/var/opt/mssql/data/Dat.mdf',
 MOVE 'ftrow' TO '/var/opt/mssql/data/Catalog.ndf',
 MOVE 'Log' TO '/var/opt/mssql/data/Log.ldf',
 MOVE 'sysft_Catalog' TO '/var/opt/mssql/data/sysft_Catalog.ndf',
 STATS = 5 -- REPLACE, PARTIAL, etc.
GO

該數據庫託管在由 docker-compose 創建的容器中的 Ubuntu 20.04.1 LTS 上:

version: "3.2"
services:
 sql-server-db:
   container_name: mssql
   image: mcr.microsoft.com/mssql/server:2019-latest
   ports:
     - "1433:1433"
   environment:
     SA_PASSWORD: "{{ PASSWORD }}"
     ACCEPT_EULA: "Y"
   volumes:
     - ./imports:/var/opt/mssql/backup:ro

我注意到的是:

  • 錯誤消息不正確,因為恢復的路徑是可寫的(即touch /var/opt/mssql/data/sysft_Catalog.ndf使用者mssql工作正常)
  • 其他數據庫恢復正常,特別是如果它們沒有全文搜尋
  • .bak文件確實恢復到在 Windows 上執行的 MSSQL
  • 導入,然後從 Windows 重新導出到新備份並不能解決問題
  • 創建一個空數據庫並恢復到該空數據庫沒有幫助
  • 提前創建文件沒有幫助
  • 數據庫不會恢復到 Azure SQL Server(“未知錯誤”)或 Google Cloud SQL(相同)
  • 直接在 Ubuntu 上安裝 MSSQL(即沒有 Docker)時會出現完全相同的故障
  • MSSQLerrorlog似乎沒有其他資訊
  • 在 SSMS 中將數據庫從 Windows 複製到 Linux 不起作用
  • 安裝mssql-server-fts沒有幫助

一些看似相關問題的連結:

布賴恩在聊天中告訴我:

@FrancescoMantovani 導入數據庫,刪除目錄,然後重新導出看起來已經解決了問題。非常感謝您的幫助,這非常有價值。

這是根本原因: https: //support.microsoft.com/en-us/help/923355/error-message-when-you-perform-a-full-backup-of-a-database-in-sql-服務

@Brian,如果需要,請添加資訊

引用自:https://dba.stackexchange.com/questions/279981