【问题标题】:Preparing to move to a single database准备迁移到单个数据库
【发布时间】:2009-03-10 21:32:49
【问题描述】:

我们有一个包含 1000 多个数据库和 600 多个存储过程的应用程序。每个数据库代表一个不同的客户。

问题:我们需要将其移至单个数据库,同时尽可能减少对 ui 的影响,这意味着不要一次更改所有 sproc 签名。

连接字符串当前设置数据库属性,建议将其移至用户属性。此属性(使用 SYSTEM_USER)可用于确定将在 where 子句中使用的站点标识符。

上述不是最终的解决方案,但允许我们以缓慢的可控速度更改存储过程签名。完成所有操作后,我们可以更正 connstring 并获得一些连接池。

我们在 sqlserver 2005/8 上可以拥有的登录名/用户数是否有任何限制。或者有没有人沿着这条路走下去,可以为更好的选择提供一些启示。

【问题讨论】:

    标签: sql-server database database-design


    【解决方案1】:

    在这里查看我的答案 Ideas for Combining Thousand Databases into One Database

    听起来你们两个在做同一个项目。您需要先更改每个 proc,然后才能移至一个数据库,否则每个客户端都会看到其他客户端的数据。

    【讨论】:

    • 不,如果您将数据放入单独的模式(每个客户一个)并应用适当的权限,客户将不会看到彼此的数据。
    • 我不确定模式是否会有所帮助。在组合数据库中,有一组表和一个站点标识符列,显示每行属于谁,而不是多个表,每个表都属于一个客户。
    • 嗯,好吧,在这种情况下,您可能可以为每个客户设计视图,并限制对这些视图的访问并禁止对基础基表的访问。
    【解决方案2】:

    关于 SQL Server 2005 / 08 上的登录次数 - 我认为没有人在这里遇到过硬限制。几千个不会有任何问题。

    对于这种情况,您可以考虑的可能是每个客户在单个数据库中的一个架构,例如客户“Miller”有一个“miller”架构,里面有它的对象,而客户“Brown”将有一个“brown”架构。

    与 HLGEM 刚刚回应的相反 - 不,客户不会看到彼此的数据,如果您指定适当的权限 - 每个客户(及其用户)仅进入其自己的架构 - 应该可以正常工作。

    马克

    【讨论】:

      【解决方案3】:

      您还可以考虑在连接字符串中设置一个独特的应用程序名称,而不是使用一个独特的用户,您可以使用 APP_NAME() 进入您的 where 子句。我确信 SQL Server 不会有数千次登录的问题,但您可能更愿意不必创建它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 2011-06-25
        • 2018-09-30
        • 2014-06-12
        • 2020-02-28
        • 2017-04-04
        相关资源
        最近更新 更多