今天发现一个问题,就是公司开发服务器上的SQL Server,还原一个数据库bak文件老是报错,错误如下:
TITLE: Microsoft SQL Server Management Studio ------------------------------ Restore of database 'Fraud' failed. (Microsoft.SqlServer.Management.RelationalEngineTasks) ------------------------------ ADDITIONAL INFORMATION: System.Data.SqlClient.SqlError: Directory lookup for the file "C:Program FilesMicrosoft SQL ServerMSSQL12.DAMSSQLDATAFraud.mdf" failed with the operating system error 3(The system cannot find the path specified.). (Microsoft.SqlServer.SmoExtended) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=14.0.17199.0+((SSMS_Rel).171004-0254)&LinkId=20476 ------------------------------ BUTTONS: OK ------------------------------
可以看到这个错误是SQL Server在文件夹C:Program FilesMicrosoft SQL ServerMSSQL12.DAMSSQLDATA下无法生成数据库文件Fraud.mdf。
后来经过调查发现,原来C:Program FilesMicrosoft SQL ServerMSSQL12.DAMSSQLDATA这个文件夹路径在SQL Server所在服务器上根本不存在。。。
这个错误的原因是,默认情况下使用SQL Server Management Studio(SSMS)来还原数据库时,还原地址是备份数据库前的原始地址,如下所示:
可以看到,数据库Fraud由于备份前是在路径(Original File Name)C:Program FilesMicrosoft SQL ServerMSSQL12.DAMSSQLDATA下的,而这个路径是数据库Fraud备份前所在服务器的地址。但是现在SQL Server Management Studio(SSMS)还原这个数据库时,也将数据库文件Fraud.mdf和日志文件Fraud_log.ldf还原到路径(Restore As)C:Program FilesMicrosoft SQL ServerMSSQL12.DAMSSQLDATA下,那肯定是错误的,因为这个路径是备份前数据库Fraud所在服务器的地址,并不是当前我们还原这个数据库所在服务器的地址。
所以我们要在还原时,将上面的复选框Relocate all files to folder勾选上:
这样我们就可以将数据库文件Fraud.mdf和日志文件Fraud_log.ldf还原到我们指定的文件夹路径下,从而避免了SQL Server Management Studio(SSMS)将数据库还原到一个不存在的文件夹路径下,导致报错。