我需要将大量数据从旧数据库中的两个表中移动到新数据库中的几个不同表中。数据库是SQL Server 2005,位于同一个盒子和sql服务器实例上。有人告诉我,如果我试图完成所有事务,那么事务日志将会填满。有没有办法禁用每个表的事务日志?如果不是,这样做的好方法是什么?光标会做到吗?这只是一次性转换。如何将旧数据库中的大量数据迁移到新的数据库
0
A
回答
1
1
使用SQL Server Management Studio中的导入/导出数据向导。这里的
- 多么正确的对象资源管理器中单击数据库
- 选择任务 - >导入数据
- 完成“选择源”窗口
- 完成“选择目标”窗口
- 选择
- “从一个或多个表或视图复制数据”选择你的表
不要使用游标,这将永远!
另一种替代方法是在循环中执行插入操作,以限制单个事务中包含的行数(从而防止事务日志增长太多)。
SET ROWCOUNT 10000
WHILE EXISTS(SELECT * FROM tblA LEFT JOIN tblB on tblA.ID = tblB.ID WHERE tblB.ID IS NULL)
BEGIN
BEGIN TRAN
INSERT tblB
SELECT * FROM tblA LEFT JOIN tblB on tblA.ID = tblB.ID WHERE tblB.ID IS NULL
COMMIT
PRINT CAST(@@ROWCOUNT AS VARCHAR) + ' rows have been inserted.'
END
SET ROWCOUNT 0 --to reset
0
一个非常大的INSERT INTO db2.t SELECT * FROM db1.t
确实可以填满你的事务日志 - 因为它需要大量的空间,在提交事务之前。但这个大小取决于很多东西 - 行数,行的大小,交易日志的大小等。
我知道这可能听起来很愚蠢,但取决于你的环境风险(以及它的真实可能性填写交易日志),我可能会为此付出代价。你所冒的所有风险都是事务日志的填满,你的事务回滚以及其他数据库用户稍微感到不便,直到这个空间再次被释放。如果是开发或新的数据库,人们可能不会注意到。
你可以将它分成“合理”大小的批量(同样,这取决于)。如果这太难了(没有好的分区策略),请使用SSIS并执行传输并设置批量提交限制。
无论在哪种情况下,如果操作中断,显然您只会对已提交的事务产生ACID。 有时根据实际需要多长时间(取决于索引和唯一键可用性)来确定哪些行已传输,哪些不是,更容易断开目标表并重新尝试整个传输。
相关问题
- 1. 将大数据迁移到新数据库
- 2. Rails 4.从旧数据库迁移(一些)旧数据库数据到现有的数据库DataBase
- 3. 如何将大型数据库迁移到新服务器
- 4. 将旧记录迁移到新数据库
- 5. 数据迁移到SQLSERVER数据库
- 6. Liquibase建议将生产数据从旧数据库模式迁移到新数据库模式吗?
- 7. 如何从MySQL数据库迁移到WordPress格式数据库
- 8. 数据库迁移
- 9. 数据库迁移
- 10. 数据库迁移
- 11. 数据库迁移
- 12. 如何将ArcGis Online数据迁移到外部数据库?
- 13. 将SQL Server数据库迁移到SQL Compact数据库
- 14. 如何将数据迁移到新的群集/数据中心?
- 15. 大规模WordPress的数据库迁移
- 16. 在现有大型数据库上迁移数据库
- 17. 将数据从非标准化数据库迁移到井设计数据库
- 18. 将数据从一个数据库迁移到另一个数据库
- 19. 将Mysql数据库迁移到Mssql
- 20. 将XAMPP数据库迁移到LAMP
- 21. 将数据库从Postgres迁移到MySQL
- 22. 将更改迁移到数据库
- 23. 将Wordpress(MySQL)数据库迁移到BigQuery
- 24. 将PostgreSQL数据库迁移到MySQL
- 25. 将Activerecord数据库迁移到Mongoid
- 26. 将数据库从Sybase迁移到MySQL
- 27. 将数据库SQL Server迁移到Sybase
- 28. 将Access数据库迁移到SharePoint 2007
- 29. 将Codeigniter数据库迁移到Wordpress
- 30. 将MySQL数据库迁移到Sql Server
在SSMS表/对象副本将默认为在一个事务中所做的操作。您可以保存包并在SSIS中打开它,并在目的地上修改它以设置批量提交。 – 2010-03-24 17:05:24
那么你发布的第二种方法是在事务日志中创建10000个条目然后清除它们? (对不起,我不太了解事务日志的工作原理。) – adam0101 2010-03-24 18:18:55
在默认配置下,事务日志自动增长以适应在事务处于打开状态时(如插入期间)积累的数据量。如果我们在每10000行后执行一次事务,那么事务日志一次只需要保存一行10000行。基本上,我们将插入分成更小的块。 – MikeZ 2010-03-24 19:11:13