作为一项规则,在删除数据库之前,我先设置离线 30 天,然后再删除它。如果遗漏了任何东西并且仍然需要数据库,我可以快速设置在线以进行完全恢复。
USE master
GO
ALTER DATABASE database_name
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
如果您在脱机时删除数据库,除非您有意清理它们,否则文件将永远保留在服务器上。假设您已经进行了所需的任何备份并且确定要完全删除服务器上的数据库,您可以将其重新联机然后删除它。
USE [master]
GO
ALTER DATABASE database_name
SET ONLINE
DROP DATABASE database_name
GO
数据库完全重新联机然后被删除。在下降之前设置紧急状态可能是更好的做法吗?根据许多变量,理论上,当您联机时,丢失的 OLTP 连接可以在 ONLINE 和 DROP 之间访问数据库。
使用 SET EMERGENCY,将“READ_ONLY”授予系统管理员成员,并使数据库足够在线,以便删除服务器上的文件。至少在我对 SQL2014 的有限测试中
USE [master]
GO
ALTER DATABASE database_name
SET EMERGENCY
DROP DATABASE database_name
GO
如果错过的 OLTP(或任何东西)设法在 ONLINE 和 DROP 之间连接到数据库,您将通过 drop 删除它的任何记录。
在删除之前使用 OFFLINE 数据库设置紧急状态可能是更好的做法吗?如果您使用的是 T-SQL,是否可以快速建立任何可能的连接?
如果您在 SSMS 上使用删除选项,即使是在线和删除之间最好的情况,也可以在几秒钟内完成。应该始终避免这种情况吗?
注意:确保在删除数据库之前对数据库进行了最终的完整备份,以防万一需要恢复。
通常,
EMERGENCY
模式用于使您的数据库免于损坏。你是对的,该
EMERGENCY
模式将只允许 sysadmin 成员,并且数据库将是只读的——没有任何内容被写入 T-LOG。我建议获取数据库
RESTRICTED USER
然后删除它。例如
ALTER DATABASE your_db_name SET RESTRICTED_USER
或READ_ONLY
注意:这只是我的偏好,它区分
EMERGENCY
模式 --> 用于将数据库从损坏中取出 vsRESTRICTED_USER
或READ_ONLY
--> 在你掉线之前给它喘息的机会!当您删除设置为
EMERGENCY
模式的数据库时,它将留下日志文件。 如果用户具有db_owner或dbcreator角色RESTRICTED_USER
,则无济于事。所以我也会一起去。ALTER DATABASE your_db_name SET READ_ONLY