我正在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
文件上的权限错误(但我真的不知道如何授予此权限)。
答案 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