我最近处理了一个由应用程序存储 MSSQL .ldf 和 .mdf 文件错误位置导致的问题。SQL Server 是 2005。
应用程序正在查找以下位置的文件:\server\app root\database\data 和 \server\app root\database\log,但文件位于 \server\mssql\data 和 \server\mssql\logs。我将数据库文件移动到应用程序期望的位置,从而解决了问题。
我不明白为什么应用程序需要知道这些文件在哪里,它只应该关心 ODBC 名称或 OLE 访问(主机名、凭据)。有人知道为什么应用程序需要这些信息吗?
答案1
SQL Express(仅限 Express)允许一项名为“用户实例”的功能,您可以在其中使用 SqlClient 托管提供程序在应用程序的连接字符串中指定 .mdf 文件的位置,并将其作为数据库附加到服务器上。这有一些限制:
- 您只能使用本地连接(即 SQL Express 必须是 Web 服务器本地的)
- 没有分布式查询
- 无复制
使用此功能时,服务器管理员不会在服务器上创建数据库。连接到应用程序时,SQL 会附加 .mdf 文件。
您最常在一些(无脑和/或廉价的)网络主机上看到这种情况,并且当 SQL Express 用作本地用户应用程序的数据库引擎时也会看到这种情况。
从 Web 应用程序的角度来看,它使您的数据库具有相当的可移植性,并且在您无法通过托管控制面板或其他方式运行数据库备份时提供了替代方案。否则,我发现它最大的用途是在本地应用程序领域。
答案2
除非我们谈论的是软件,无论出于什么原因,需要直接访问这些文件,否则它没有理由知道这些文件。即便如此,对这些细节做出假设或抱有不切实际的期望也只是糟糕且不体贴的编程。如果软件无法自行找到文件,它至少应该询问您文件在哪里。我完全同意 Sim 的观点,程序员肯定需要用线索棒敲几下。您真的不得不想想应用程序还有什么问题。