我需要使用T-SQL在SQL Server 2005中删除一个特定的数据库。我知道删除数据库不能在数据库trnsaction中完成。那么,如果删除一个真正巨大的数据库时会发生一些意外的异常。超时例外。它会使我的数据库处于不稳定状态吗?如果是的话,我该如何避免这种情况?什么是以编程方式删除大型数据库的最佳方法
回答
取决于您如何运行t-sql,您可以在运行命令之前更改超时。 SSMS默认没有超时,但可以将SqlCommand的CommandTimeout更改为0(无超时)或较大的值。根据我个人的经验,“drop database”失败的运行并没有阻止它成功的后续运行,所以虽然你可能会让数据库进入一个糟糕的状态,但我不认为它会在那里仍然存在,但不可丢弃(但这只是我的经验,诚然)
根据是否要删除数据文件,我建议将数据库设置为single_user模式(如果要删除文件)或脱机(不要删除文件)并立即回滚,以防止其他连接阻止丢弃或导致失败。
所以:
- ALTER DATABASE [富]集SINGLE_USER与回滚立即
- 或
- ALTER DATABASE [富]与回滚立即
- DROP DATABASE [富]设置为脱机
请务必检查drop database的各种行为(如上所示)@http://msdn.microsoft.com/en-us/library/ms178613.aspx
删除所有记录在数据库中,同时使数据库结构到位,最好的办法是:
- 使数据库脱机;
- 禁用所有外键约束(如果强制执行参照完整性);
- 依次截断每个表;
- 启用所有外键约束(如果需要引用完整性);
- 刷新任何物化视图;
- 重新分析数据库(因为之前的统计数据不再相关);
- 使数据库重新联机。
这一切都可以通过编程方式完成,但会根据您的数据库供应商和版本而有所不同。对于SQL Server 2005(您的请求版本),请尝试How to: Truncate Multiple Tables In SQL Server and the magic of sp_MSforeachtable。
这不应该让数据库处于无法使用的状态,如果它失败了,因为它是以这样的方式完成的,如果它意外停止,您可以重新运行它,它会继续。
如果您尝试使用数据库,如果脚本过早完成,那么您的数据库完全有可能处于不一致的状态(这是您脱机执行它的一半原因;另一个原因是为了避免锁定) 。
更新:如果您只是想完全删除数据库,请参阅How do I drop a SQL Server database?。它涉及到一个DROP DATABASE
命令,但有时您需要有效地使数据库脱机。
分离数据库,然后删除文件。
重新连接之前,您无法访问分离的SQL Server数据库。 – 2009-12-29 09:11:42
正确,这不会有帮助,因为它需要以编程方式完成。您无法访问分离的SQL Server数据库。可能会给你一个运输级别的错误。 – 2009-12-29 09:33:28
- 1. 什么是以编程方式使用Gmail的最佳方式?
- 2. 以非编程方式处理SQL Server数据的最佳方式是什么?
- 3. 处理大型数据表的最佳方式是什么?
- 4. 编写访问数据库的方法的最佳方式是什么?
- 5. 什么是重构数据库程序的最佳方式?
- 6. 访问超大型数据库的.Net的最佳方法是什么?
- 7. 差异大数据列表的最佳方式,算法和方法是什么?
- 8. 以编程方式添加和删除视图及其控制器的最佳方式是什么?
- 9. 大量数据 - 发送它们的最佳方式是什么?
- 10. 创建大量虚拟数据的最佳方式是什么?
- 11. 什么是全球同步大量数据的最佳方式?
- 12. 建立我的数据库的最佳方式是什么
- 13. 什么是使用Delphi的Web数据库的最佳方式?
- 14. 以编程方式测试SQL Server连接的最佳方式是什么?
- 15. 以编程方式“涂抹”图像的最佳方式是什么?
- 16. 编辑XML文件数据的最佳方式是什么?
- 17. 翻译大量文本数据的最佳方法是什么?
- 18. 什么是制作字典数据库的最佳方式
- 19. 什么是“洗牌”数据库记录表的最佳方式?
- 20. 在Rails中建立数据库的最佳方式是什么?
- 21. 连接android和oracle数据库的最佳方式是什么?
- 22. 记录mysql数据库的最佳方式是什么?
- 23. 什么是归档postgres数据库的最佳方式?
- 24. 用PHP搜索MySQL数据库的最佳方式是什么?
- 25. 从silverlight访问oracle数据库的最佳方式是什么?
- 26. 什么是保护数据库查询的最佳方式?
- 27. 处理SQLite数据库的最佳方式是什么?
- 28. 什么是更新数据库列表的最佳方式?
- 29. 保持数据库版本的最佳方式是什么?
- 30. 什么是删除模型对象数组的最快方法?
如果在使用TRUNCATE TABLE时存在引用键,则只需禁用(或删除)约束,在这种情况下,如果表是关系中的父表,则重新启用/添加约束的尝试将失败。 – 2009-12-29 09:09:48
@OMG:澄清了约束部分。 – cletus 2009-12-29 09:11:45
我甚至不想在服务器上留下数据库结构,需要完全删除数据库。 – 2009-12-29 09:34:58