无法附加数据库,错误='发生文件激活错误...'

时间:2019-04-30 15:49:50

标签: sql-server docker

我正在Docker容器中运行SQL Server 2017,但无法将数据库附加到它。

首先,我将.MDF, .NDF, .LDF文件复制到运行中的容器

docker cp /local/folder/of/my/files/db.mdf my-container:db.mdf

(与3个文件相同),因此所有3个文件都位于容器的根目录中。

此后,我对文件(chmod 777给予了完全许可。

我已连接到容器(docker exec -it my-container "bash")并运行ls以查看3个文件是否确实存在,然后运行sqlcmd并连接至数据库。

我跑步:

CREATE DATABASE PEDIDOS ON
( FILENAME = N'DB.MDF' ),
( FILENAME = N'DB_INDEX.NDF' ),
( FILENAME = N'DB_LOG.NDF' )
FOR ATTACH;
GO

并获得以下错误消息:

  

5105消息,级别16,状态2,第1行
  发生文件激活错误。物理文件名“ DB.MDF”可能不正确。诊断并更正其他错误,然后重试该操作。

我尝试了很多alt形式,例如不带N,在文件名前加上/(例如(FILENAME = N'/DB.MDF')),不带.NDF文件,但没有任何效果。

此文件由SQL Server 2016生成,这是兼容性错误吗?就像,我读了很多问题,都遇到了相同的错误,而所有的答案都是.mdf文件上的权限错误(但我真的不知道如何授予此权限)。

1 个答案:

答案 0 :(得分:1)

marc_s先生的查询结果很好,因此,如果遇到同样的错误,查询结果也将是

将文件移动到数据文件夹(默认为/var/opt/mssql/data)并运行

USE master;
GO

CREATE DATABASE U_DB ON
(FILENAME = N'/var/opt/mssql/data/db.MDF'),
(FILENAME = N'/var/opt/mssql/data/dbLOG.LDF'),
(FILENAME = N'/var/opt/mssql/data/dbINDEX.NDF')
FOR ATTACH;
GO