如何将SQL Server数据库上传到共享托管环境?

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 将数据传输到生产服务器中,使用 Tasks/Import data 菜单项。 6. 使用 SQL 2000 生成一个创建具有索引和键的数据库的脚本。 7. 只复制生成索引和外键的命令,这些命令位于表创建命令之后。注意:在 SQL 2005 中,索引和外键是一起生成的,不容易分开。 8. 在生产数据库中运行此脚本。
完成!我们上传了具有所有数据、键和约束的数据库。但是这是一个复杂且容易出错的系统,有更好的方法吗?
7个回答

4

这看起来不错。 我之前不知道在数据库浏览器中有一个发布到提供程序的选项。我们下次工作会试一下。 - Petras
一位GoDaddy的人说这只适用于SQL Server 2005。 - Blaise

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的双重打击是,他们要求数据库的用户名与数据库名称相同!现在,您只需要针对这些数百个数据库进行密码垃圾邮件攻击!
另一方面,Webhost4life仅在Management Studio中显示特定的数据库。而且,他们允许您选择自己的DB名称和用户名,彼此独立。他们只追加相同的唯一ID到用户和DB名称的结尾,以避免与其他人冲突。

1

你不应该依赖于恢复备份来复制/传输数据库。你需要使用脚本 - 相信我,你会变得更擅长。


1

我曾经在共享主机上使用过RedGate Compare工具,效果很好。


1

生成数据库脚本虽然比较混乱,但是也有许多优点,使得这种痛苦更加容易承受。

首先,如果您将数据库脚本视为实际编程任务本身,则可以封装混乱。如果您使用数据库工具生成一次脚本,则可以从表结构方面和约束方面(键、索引等)进行拆分。同样,您可以将数据导出一次,但将其拆分为“系统”数据和“测试”数据以及需要从 DB 版本旧​​移动到 DB 版本新​​的“运营”数据(上周的订单)。

在完成此操作后的前 3 分钟,情况非常好:您可以在几分钟内重新生成具有或不具有测试数据的新数据库。不幸的是,过了 3 分钟后,数据库就会不同步,至少在数据方面是如此,尽管在结构方面可能并不那么频繁。

我个人喜欢将每个表的结构作为单独的SQL文件(它的约束条件在另一个目录的单独文件中,测试数据在一个文件中,系统数据在另一个文件中等等)。一方面,这意味着在进行更改时必须触及多个不同的文件,但另一方面,它使得更容易看到所做更改的细节:所有内容都在版本控制日志中。 (我可能会被说服认为许多文件是一种错误的策略...)

所有这些都建立在一个前提之上,即您有一些能够实际运行涉及多个文件的复杂脚本的设施,并且不仅仅局限于某个基于Web的控制面板,这可能是您描述的情况:“我们无法访问实际机器。” 我认为,您不能进行自定义软件开发而没有服务器上的某种shell访问权限;托管业务足够竞争激烈,您肯定可以轻松找到一个友好于脚本的主机。


0

检查一下网站托管公司是否提供myLittleBackup。这绝对是从开发服务器“安装”数据库到共享SQL服务器的最简单解决方案。


0

针对SQL Server 2008用户的答案。

我与发帖者遇到了完全相同的问题,但我使用的是SQL Server 2008,我的共享主机公司是GoDaddy。以下是将数据库及其数据复制到GoDaddy数据库的解决方案...

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

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

打开Windows资源管理器,找到xxx.sql文件,然后双击它。脚本应该在SSMS中打开。在“正确的数据库”中执行脚本...完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接