--查看所有在线数据库的恢复模型
SELECT name, (SELECT DATABASEPROPERTYEX(name, 'RECOVERY')) RecoveryModel FROM master..sysdatabases ORDER BY name
--SQL Server 2005及以上版本也可以使用下面这条语句来查看:
SELECT name, recovery_model_desc FROM master.sys.databases ORDER BY name
如果想改变数据库的恢复模型,可以使用下面SQL语句:
简单恢复模型:ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE
完整恢复模型:ALTER DATABASE AdventureWorks SET RECOVERY FULL
批量日志恢复模型:ALTER DATABASE AdventureWorks SET RECOVERY BULK_LOGGED
如果想修改所有数据库的恢复模型就需要用T-SQL循环处理了,
为了上面的SET关键字,查了半天资料,特留个记号。
如果想处理所有的数据库,则执行:
declare @dbname varchar(50) --数据库名
declare @sql varchar(500) --执行备份时的sql
DECLARE dba_database CURSOR FOR --所有数据库的光标
select [name] from sysdatabases order by [name]
OPEN dba_database
FETCH NEXT FROM dba_database into @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@dbname <> 'tempdb')
BEGIN
SET @sql = 'alter database '+ @dbname + ' set RECOVERY simple'
PRINT @sql
EXEC (@sql)
END
FETCH NEXT FROM dba_database into @dbname
END
CLOSE dba_database
DEALLOCATE dba_database
注意:当一个数据库的数据文件不可用时(也许是硬件坏了),假如媒介依旧在线可用,那么你依然可以备份事务日志文件。但是你需要确定backup log命令一定要加上no_truncate选项。这样你就可以备份硬件毁坏前的事务日志了,这种方法常用来备份事务日志结尾。
然则,假如你的数据库使用批量日志恢复模型且事务日志包括最小化日志事务,那么包括被修改过的页的数据文件一定要可用,假如数据文件不可用了,也就意味着你将不能备份事务日志结尾。这也是使用批量日志恢复模型另一个需要考虑的地方。