5

我们有一个常见的问题是将我们的开发 SQL 2005 数据库移动到网站托管公司的共享 Web 服务器上。

理想情况下,我们想要一个将数据库结构和数据作为精确副本传输的系统。

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

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

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

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

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

有更好的吗?

4

7 回答 7

4

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

用于 Web 托管的 SQL Server 数据库发布工具包

于 2008-10-28T23:30:15.563 回答
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,以防止它们与其他人发生冲突。

于 2009-03-11T09:12:46.293 回答
1

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

于 2008-10-28T23:33:06.913 回答
1

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

于 2008-10-28T23:56:02.140 回答
1

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

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

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

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

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

于 2008-10-29T01:03:56.123 回答
0

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

于 2011-04-15T08:00:51.750 回答
0

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-13T06:33:37.743 回答