如何将所有数据库的数据库恢复模式设置为完整?

Bil*_*ill 4 sql-server

使用类似于以下的命令:

ALTER DATABASE test0402er2Y8 SET RECOVERY FULL
GO
Run Code Online (Sandbox Code Playgroud)

如何在现在处于简单模式的服务器中的所有数据库上自动执行此操作(使用 SQL Server 2012)?

谢谢

Kin*_*hah 8

如何在现在处于简单模式的服务器中的所有数据库上自动执行此操作(使用 SQL Server 2012)?

下面的 T-SQL 会帮助你。它将检查ONLINE具有SIMPLE 恢复模式的数据库,并将打印 TSQL 以将其更改为完全恢复模式。在文本模式下运行以下代码 - SSMS CTRL+T。满意后,运行从另一个会话生成的输出:

set nocount on
go

if exists (
        select 1
        from sys.databases
        where recovery_model_desc = 'SIMPLE'
            and state_desc = 'ONLINE'
        )
begin
    print '-- You are setting up database to FULL recovery mode. '
    print '-- Make sure you take first full backup and then schedule LOG BACKUPS for proper transaction log maintenance !'

    select 'ALTER DATABASE ' + QUOTENAME(name) + ' SET RECOVERY FULL with ROLLBACK IMMEDIATE;'
    from sys.databases
    where recovery_model_desc = 'SIMPLE' -- since you only want SIMPLE recovery model databases to get changed to FULL recovery.
            and state_desc = 'ONLINE'
end
else
    select 'ALL the databases are in FULL RECOVERY MODE - Make sure you take proper LOG BACKUPS !!'
Run Code Online (Sandbox Code Playgroud)

注意:对于任何新创建的数据库,最好将model数据库的恢复模型更改为 FULL,以便创建的新数据库继承模型数据库的 FULL 恢复设置。

值得一提:为什么事务日志不断增长或空间不足?,因为您要切换到完全恢复,如果您不注意事务日志,那么最终会得到一个臃肿的事务日志。阅读链接的答案以获取更多详细信息。


小智 1

如果你使用sp_msforeachdb

exec sp_msforeachdb 'alter database ? set recovery full'
Run Code Online (Sandbox Code Playgroud)

这是一个使用光标编写的漂亮脚本

  • 不,[请不要使用或推荐`sp_msforeachdb`](https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/)。它没有文档记录,不受支持,并且有一个错误,可以跳过数据库而没有警告或错误消息。 (9认同)