我需要将一大堆(100+)大表(数百万行)从一个SQL2008数据库移动到另一个数据库。
我最初只是使用了导入/导出向导,但是所有的目标表都丢失了主键、外键、索引、约束、触发器等(标识列也被转换为普通的in,但我认为向导中漏掉了一个复选框)。
怎么做才是对的?
如果这只是几个表,我将返回源代码,编写表定义(包含所有索引等),然后在目标上运行脚本的索引创建部分。但是有这么多桌子,这似乎是不切实际的。
如果没有那么多的数据,我可以用“创建脚本.”向导脚本源,包括数据,但7200万行脚本似乎不是一个好主意!
发布于 2011-02-03 18:44:53
实际上,我们使用了大量的手动脚本与导入向导结合使用,但今天早上,我找到了一个更好的答案,多亏了Tibor Karaszi的博客文章。
我们在这里感到沮丧的部分原因是SQL 2000 "DTS导入/导出向导“实际上通过选择”复制对象和数据“使这一操作变得非常简单:

第三个选项包含包含索引/触发器的能力,等等:

此选项已从SQL 2005/2008导入向导中删除。为什么?不知道:

在2005/2008年,您显然必须在投标中手动创建SSIS包,并使用传输服务器对象任务,其中包含2000年向导中的所有相同选项:

发布于 2011-02-03 02:08:38
写出表,然后使用SSIS传输数据将是将数据移动到新数据库的最可靠和最有效的方法。
发布于 2011-02-03 07:36:12
我会考虑将表脚本化,或者使用比较工具(如generate )来生成目标数据库中的表。还没有索引或约束。
然后考虑在同一台服务器上用不同的名称恢复数据库,然后执行
INSERT newdb.dbo.newtable SELECT * FROM olddb.dbo.oldtable。。对于每个表,如果需要,则使用SET插入
然后在加载数据之后添加索引和约束。
这取决于您对SSIS (mrdenny的回答)的舒适度,或者您是否喜欢原始SQL。
https://dba.stackexchange.com/questions/1038
复制相似问题