【问题标题】:Managing multiple customer databases in ASP.NET MVC application在 ASP.NET MVC 应用程序中管理多个客户数据库
【发布时间】:2010-04-20 22:59:23
【问题描述】:

我正在构建一个应用程序,该应用程序需要为每个客户提供单独的 SQL Server 数据库。

为此,我需要能够创建一个新的客户文件夹,将原型数据库的副本放在文件夹中,更改数据库的名称,并将其作为新的“数据库实例”附加到 SQL Server .原型数据库包含所有必需的表、字段和索引定义,但没有数据记录。我将使用 SMO 来管理附加、分离和重命名数据库。

在创建原型数据库的过程中,我尝试使用 Sql Server Management Studio 将数据库的副本(伴侣 .MDF、.LDF 对)附加到 SQL Server,发现 SSMS 期望数据库驻留在

c:\program files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabaseName.MDF

这是 SQL Server 的“功能”吗?有没有办法在单独的目录中管理单个数据库?还是我必须将所有客户数据库放在同一个目录中? (我希望有比这更好的控制)。

注意:我目前使用的是 SQL Server Express,但仅​​用于测试目的。生产数据库将是 SQL Server 2008,企业版。所以“用户实例”不是一个选项。

【问题讨论】:

  • 此目录可能是您的实例的基本目录,但您可以从当前登录的 sql server 用户有权访问的每个位置添加 mdf 文件。如果您无法从 SSMS 中看到文件,则可能是文件权限存在问题。尝试以管理员身份运行 SMSS,看看一切正常,然后对文件权限进行 wrk,以便普通用户可以访问。
  • @LukLed:我可以访问他们新目录中的文件,但是当我尝试使用 SSMS 附加它们时,它给我的错误是它在基目录中找不到这些文件。
  • 如何登录 SSMS? Windows 身份验证?从每个位置附加文件都没有技术障碍,因此您可能必须在其他地方找到解决方案。

标签: c# sql-server linq-to-sql multi-tenant


【解决方案1】:

MDF 中有一个表,其中包含所有数据库文件的物理路径,因为它们位于与其分离的实例上。您可以在附加操作期间覆盖位置:

CREATE DATABASE <dbname>
 ON (name=dbfilelogicalname, filename='c:\myNewPath\dbfilename.mdf'),
 (name=dbfile2logicalname, filename='c:\myNewPath\dbfilename2.ndf'),
 (name=dbloglogicalname, filename='c:\myNewPath\dblogfilename.ldf')
 FOR ATTACH;

【讨论】:

  • 所以你认为问题只是SSMS,如果我使用SMO附加,我不会有同样的问题?
  • SSMS 和 SMO 能够在任意位置附加数据库文件。您需要在附加对话框中添加所有数据库文件:MDF、所有 NDF 和 LDF。
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 2016-09-13
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 2011-10-22
  • 2018-07-13
相关资源
最近更新 更多