我需要使用T-SQL在SQL Server 2005中删除一个特定的数据库。我知道在数据库trnsaction中无法完成丢弃数据库。那么如果在删除真正庞大的数据库时会发生一些意外的异常,例如。超时例外。它会使我的数据库处于不稳定状态吗?如果是,我该如何避免这种情况?
答案 0 :(得分:3)
在保留数据库结构的同时删除数据库中所有记录的最佳方法是:
这可以以编程方式完成,但会根据您的数据库供应商和版本而有所不同。对于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
命令,但有时您也需要有效地使数据库脱机。
答案 1 :(得分:2)
取决于您运行t-sql的方式,您可以在运行命令之前更改超时。 SSMS默认为无超时,但您可以将SqlCommand的CommandTimeout更改为0(无超时)或大型。根据我的个人经验,失败的“drop database”运行并没有阻止它以后的运行成功,所以当你可能让数据库进入一个糟糕的状态时,我不相信它会在那里仍然存在但是不可挽回(但这只是我的经验,不可否认)
根据您是否要删除数据文件,我建议将数据库设置为single_user模式(如果要删除文件)或脱机(不删除文件)并立即回滚以帮助防止其他连接阻止掉落或导致其失败。
所以:
确保检查drop database的各种行为(如上所述)@ http://msdn.microsoft.com/en-us/library/ms178613.aspx
答案 2 :(得分:0)
分离数据库,然后删除文件。