【问题标题】:How do you upload SQL Server databases to shared hosting environments?如何将 SQL Server 数据库上传到共享托管环境?
【发布时间】:2008-10-28 23:26:53
【问题描述】:

我们在将开发 SQL 2005 数据库迁移到网站托管公司的共享网络服务器上时遇到了一个常见问题。

理想情况下,我们希望系统能够将数据库结构和数据作为精确副本进行传输。

这通常可以通过恢复备份来实现。但是因为它们是共享的 SQL 服务器,所以我们无法恢复备份——我们无法访问实际的机器。

我们可以生成一个脚本来创建数据库结构,但是我们不能通过菜单项任务/导入数据进行数据传输,因为我们可能会违反外键约束,因为表是按照与数据库冲突的顺序导入的架构。此外,如果将索引设置为自动生成,则它们可能不会被复制。

因此我们留下了一个混乱的操作:

  1. 在 SQL 2005 中创建一个脚本,以生成 SQL 2000 格式的数据库。
  2. 运行脚本以在 SQL 2000 中创建 SQL 2000 数据库。
  3. 在 SQL 2000 中创建一个脚本,生成没有索引和外键的数据库结构。
  4. 在生产服务器上运行此脚本。您现在有了一个可以将数据上传到的数据库结构。
  5. 使用 SQL 2005 将数据与任务/导入数据一起传输到生产服务器。
  6. 使用 SQL 2000 生成一个脚本,该脚本使用索引和键创建数据库。
  7. 仅复制生成索引和外键的命令。这些位于表创建命令之后。注意:在 SQL 2005 中,索引和外键是一体生成的,不能轻易分开。
  8. 在生产数据库上运行此脚本。

瞧!上载数据库时,所有数据和键/约束都已到位。多么混乱且容易出错的系统。

还有更好的吗?

【问题讨论】:

    标签: sql database upload


    【解决方案1】:

    Scott Gu 写了几篇关于这个主题的文章:

    SQL Server Database Publishing Toolkit for Web Hosting

    【讨论】:

    • 这看起来不错。我不知道数据库资源管理器中有一个选项可以发布到提供者。我们将在下一份工作中尝试一下。
    • 一位 GoDaddy 人员说它仅适用于 SQL Server 2005。
    【解决方案2】:

    生成脚本适用于创建数据库对象,但不适用于传输数据库信息。例如,开发人员需要预先填充一些数据的客户端特定数据库。

    我遇到的一个问题是 SQL Server 2005+ 中的新 MAX 类型。 (nvarchar(max)、varchar(max) 等)当然,当您实际使用 Sql Server Express 时,情况会更糟,除了创建自己的脚本来创建数据之外,它不允许导出。

    我会建议切换到允许您能够 FTP 备份文件并且不需要您使用自己的脚本的托管公司。这就是 SQL Server 的全部意义所在,对吧?提供更多使用更友好的工具。如果托管公司把它拿走,你还不如转移到 MySql 以方便倾销信息。

    WebHost4Life 是此类别的救生员。他们为数据库服务器提供 FTP 以上传您的备份文件或 MDF 和 LDF 文件以供附件!当我看到 GoDaddy 有你提到的类似限制时,我非常沮丧。他们的工具并没有告诉我这是一个错误的导入,而且我无法弄清楚为什么我的网站会返回 500 个错误。

    另一个注意事项:我不确定哪个被认为更安全。我在 GoDaddy 中启用了外部连接并与 Management Studio 连接,我能够看到该服务器上的每个数据库!我无法访问它们,但我现在有了这些信息。双重打击是 GoDaddy 要求 DB 的用户名与 DB 相同!现在您需要做的就是针对这数百个数据库发送垃圾密码!

    另一方面,Webhost4life 仅在 Management Studio 中显示您的特定数据库。他们让您选择自己的数据库名称和用户名,彼此独立。它们只在用户名和数据库名的末尾附加相同的唯一 ID,以防止它们与其他人发生冲突。

    【讨论】:

      【解决方案3】:

      您不应依赖恢复备份来复制/传输数据库。您需要使用脚本 - 相信我,您会做得更好。

      【讨论】:

        【解决方案4】:

        我已将 RedGate 比较工具与共享主机一起使用,效果很好。

        【讨论】:

          【解决方案5】:

          数据库生成脚本很混乱,但它们也有几个优点……嗯,让痛苦更容易忍受。

          首先,如果您将 DB 脚本本身视为真正的编程任务,您可以封装这些混乱。如果您生成一次脚本(使用数据库工具),您可以将表结构方面与约束方面(键、索引等)分开。同样,您可以将数据导出一次,但将其拆分为不经常更改但正确操作所必需的“系统”数据(税收或运费等数据)、易于识别的“测试”数据和“需要从旧数据库版本移动到新数据库版本的操作数据(上周的订单)。

          完成后的前 3 分钟,一切都很棒:您可以在几分钟内重新生成一个包含或不包含测试数据的新数据库。不幸的是,3 分钟后,数据库不同步了,至少在数据方面,如果在结构方面不那么频繁的话。

          我个人喜欢将每个表的结构作为一个单独的 SQL 文件(它是一个单独目录中的一个单独文件的约束,它在一个文件中是测试数据,在另一个文件中是系统数据,等等)。一方面,这意味着在进行更改时必须触及几个不同的文件,但另一方面,它可以更容易地查看更改的粒度:在版本控制日志中就可以了。 (我可能会相信多文件是一种错误的策略......)

          所有这些都是基于这样的假设,即您有一些工具可以实际运行涉及许多文件的复杂脚本,而不仅仅局限于某些基于 Web 的控制面板,这可能就是您所说的“我们无法访问实际的机器。”我觉得您不能进行自定义软件开发,并且在服务器上没有 某种 类型的 shell 访问权限;托管业务具有足够的竞争力,您当然可以轻松找到一个脚本友好的主机。

          【讨论】:

            【解决方案6】:

            查看webhsoting公司是否提供myLittleBackup 这绝对是将数据库从开发服务器“安装”到共享 sql 服务器的最简单的解决方案

            【讨论】:

              【解决方案7】:

              SQL Server 2008 用户的答案。

              我遇到了与 OP 完全相同的问题,但我使用的是 SQL Server 2008,而我的共享托管公司是 GoDaddy。这是将 DB + 数据复制到 GoDaddy 数据库的解决方案......

              在 Visual Studio 2010 中,转到服务器资源管理器(在 VS Express 中,我认为它称为数据库资源管理器)。右键单击数据库并选择发布到提供者...这将打开数据库发布向导...通过向导,它将在您的本地计算机上创建一个 xxx.sql 文件...

              打开 SQL Server Management Studio 并连接到 GoDaddy 数据库(您应该已经通过他们网站中的 GoDaddy 控制面板创建了它)...

              打开 Windows 资源管理器并找到 xxx.sql 文件并双击它。该脚本应在 SSMS 中打开。在“适当的数据库内”执行脚本……瞧,完成了。

              【讨论】:

                猜你喜欢
                • 2012-08-10
                • 1970-01-01
                • 1970-01-01
                • 2023-03-16
                • 2010-11-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多