2009-11-16 109 views
1

我想知道我的选项用于复制SQL Server数据库。如果这是重复的,我会删除我的问题,但在使用搜索时找不到答案。如何复制SQL Server数据库

这是我已经尝试过:

- 写入数据库的SQL脚本。
当我这样做时,我似乎总是遇到一个问题,我必须手动调整东西。像键或排序规则冲突问题一样。

此外,这似乎很慢。我的最后一个脚本文件是1.5Mb,但需要1小时才能运行。在90%时出现错误也很烦人。

我主要是使用sql脚本来工作,但感觉就像我浪费了很多时间试图修复一些小错误并等待sql执行。

- 使用微软SQL Server Management Studio中
导出功能。如果我是正确的,这并不拷贝存储过程,视图和/或键。

-detach /连接
是否正确地认为这多半是不可能的共享hostings,你只能得到一个数据库?尝试此操作时遇到权限问题。

这就是我试过的一切。

由于提前,

Pickels

+0

您是否尝试过备份和恢复? – 2009-11-16 18:21:13

+0

似乎我的2个共享主机不喜欢我做备份。除非我错过了非常明显的东西。 – Pickels 2009-11-16 20:48:00

回答

5

这取决于你的托管服务提供商允许。有些允许附加/恢复,有些则不允许,有些则允许附加/恢复,但每次事件收费。即使在允许的情况下,数据库版本也非常重要,因为引擎能够升级数据库,但不能降级版本,所以您的开发版本最多只能是提供者的版本,而不能更新。

但最终这是一个发展过程的问题。您不应该通过修改数据库来开发,而应该创建在源代码管理下的脚本来应用任何应用程序模式更改(包括所有过程和所有目录数据)。应用程序应该能够从这些脚本升级数据库模式,包括初始部署。我的建议是在扩展属性中使用应用程序定义的版本,并使用脚本来更新应用程序模式版本:Version Control and your Database

但是现在猫已经不在行囊,而且您已经做了不好的练习,您最好的选择是一个很好的第三方脚本/比较实用程序,如SQL Compare

+0

我正在写关于版本控制,持续集成和可重复过程的内容。但你之前得到了:D +1 – 2009-11-16 18:33:44

+0

我想要开始使用版本控制,所以这个答案真的很棒,谢谢。 – Pickels 2009-11-16 20:47:16

5

我觉得最简单的方法是使用备份/恢复选项。备份数据库,将文件复制到新服务器,然后进行恢复。您需要先在第二台服务器上创建一个空白数据库,但不需要定义任何表或任何其他内容。然后,右键单击新的空白数据库,然后从您在第一台服务器上备份的文件中选择还原和还原。

当您执行还原时,如果原始数据库文件存储在新服务器上不存在的路径中,或者您想要还原到另一路径,则可能需要转到“选项”页面并设置“还原为”路径一个不同的位置。默认情况下,它会尝试将数据库恢复到与原始服务器上相同的路径。

+0

为什么你需要在第二台服务器上创建一个空白数据库?您可以发出RESTORE DATABASE命令,而不首先存在空的外壳。 – 2009-11-16 18:23:15

+0

您仍然需要选择目标数据库,不是吗?据我所知,你不能在同一步创建一个新的数据库,至少不能通过SQL Server管理。你可能是对的,但我认为数据库需要先存在。 – TLiebe 2009-11-16 18:28:05

+0

不,恢复屏幕允许您为恢复的数据库手动输入名称并选择备份文件的位置。无需通过现有的空白区域进行恢复。 – MartW 2009-11-16 18:37:08

0

尝试完整备份和恢复。

3

如果您要迁移到MS SQL Server 2008,您可以选择“复制数据库”,您可以选择复制所有或选定的数据库。

右键单击数据库 - >任务 - >复制数据库。通过向导并选择“分离并附加” - 方法或“SQL管理方法”(如果您希望数据库保持联机状态)。

但要注意的是,如果你的目标SQL这只能是MSSQL 2008

0

尝试DBSourceTools。 http://dbsourcetools.codeplex.com
它的开放源码,专门设计用于脚本整个数据库 - 表,视图,过程到磁盘。
然后,您只需创建一个部署目标即可。
点击部署 - 该工具会将您的数据库复制到新的目标。
通过使用SQL批量复制来上传数据,它可以在几秒钟内完成10000条记录。

玩得开心