SQL Server生成的.MDF/.LDF文件无法在SQL Operations Studio显示,如何附加?
我之前也碰到过SQL Operations Studio不自动识别已放入data目录的MDF/LDF文件的情况,别慌,咱们换几个更可靠的方式来搞定它,顺便排查下容易踩的权限坑:
方法1:用T-SQL命令手动附加(最推荐)
绕过GUI的自动检测逻辑,直接用命令强制附加,步骤很简单:
- 打开SQL Operations Studio的查询窗口,确保已经连接到你的SQL Server实例。
- 把下面的代码里的占位符替换成你的实际信息,然后执行:
CREATE DATABASE YourDatabaseName -- 替换成你想要的数据库名称 ON (FILENAME = '/var/opt/mssql/data/YourDatabase.mdf'), -- 替换成你的MDF文件名 (FILENAME = '/var/opt/mssql/data/YourDatabase.ldf') -- 替换成你的LDF文件名 FOR ATTACH;
- 如果执行时弹出“文件访问被拒绝”的错误,那十有八九是Linux下的权限问题,直接看方法2。
方法2:修复文件权限(Linux下必查)
SQL Server在Linux上是用*mssql*用户运行的,如果你直接把文件复制到/var/opt/mssql/data目录,这个用户很可能没有读写权限,导致数据库引擎读不到文件:
- 打开终端,用sudo执行下面的命令(替换文件名):
# 修改文件所有者为mssql用户和组 sudo chown mssql:mssql /var/opt/mssql/data/YourDatabase.mdf sudo chown mssql:mssql /var/opt/mssql/data/YourDatabase.ldf # 设置合适的读写权限 sudo chmod 660 /var/opt/mssql/data/YourDatabase.mdf sudo chmod 660 /var/opt/mssql/data/YourDatabase.ldf
- 权限修改完成后,回到SQL Operations Studio,要么重新执行方法1的T-SQL命令,要么右键刷新数据库列表,应该就能看到附加好的数据库了。
方法3:用sqlcmd命令行工具附加
如果SQL Operations Studio的查询窗口有问题,也可以直接用终端的sqlcmd工具操作:
- 终端里输入命令连接到SQL Server(替换SA密码):
sqlcmd -S localhost -U SA -P YourSAPassword
- 进入sqlcmd交互环境后,输入和方法1一样的
CREATE DATABASE语句,最后输入GO回车执行即可。
额外情况:如果LDF文件丢失或损坏
要是你的LDF文件找不到或者损坏了,还可以用FOR ATTACH_REBUILD_LOG参数让SQL Server自动重建日志文件(前提是MDF文件完好):
CREATE DATABASE YourDatabaseName ON (FILENAME = '/var/opt/mssql/data/YourDatabase.mdf') FOR ATTACH_REBUILD_LOG;
内容的提问来源于stack exchange,提问作者Faramarz Qoshchi
相关产品推荐
相关产品推荐

