Bob*_*sen 7 sql-server transaction-log
我有一个设置为“完整”恢复模式的数据库。数据库没有显示曾经备份过事务日志。 backup_finish_date我的日志显示为空。
我每晚都备份完整的数据库(仅复制)。备份似乎会截断事务日志。事务日志大约40GB。在备份之前,它已满 75%。备份运行时,只有 1% 已满。使用DBCC SQLPERF(logspace).
该sys.databases显示:recovery_model_desc FULL,log_reuse_wait 0,log_reuse_wait_desc NOTHING。
我在另一台服务器上有一个该数据库的副本,设置相同,但事务日志没有被截断。只是成长。
该sys.database副本上的表演FULL,2,LOG_BACKUP。这是我所期望的。
我知道我的数据库副本是事情应该工作的方式。但想知道为什么/如何在我的生产环境中截断日志。
无镜像,无事务日志传送。
Jam*_*ins 11
我建议您使用两个现有答案之一中的代码来验证是否未采用 t-log。根据您用户的访问权限,有人可能会在您不知情的情况下进行备份。
丹尼斯·鲁巴什金 (Denis Rubashkin) 发表了一条评论和链接,谈论伪简单 SQL Server 恢复模型本质上,它说如果您处于完全恢复状态并且从未进行过完全备份(或以其他方式破坏 LSN 链),SQL 知道没有办法恢复,它不保存 t 日志。
但是根据你的描述:
备份似乎截断了事务日志。事务日志大约40GB。在备份之前,它已满 75%。当备份运行时,它只有 1% 已满。
我认为上述两种可能性中的任何一种都不是您问题的原因。
我怀疑您的备份作业SIMPLE在此过程中的某个时刻将数据库设置为恢复,这将清除 t 日志。然后它将数据库设置回FULL恢复状态。这种情况会产生您所看到的症状。
查看备份代码,如果您发现正在发生更改SIMPLE和返回FULL,您将想要更改某些内容。要么让数据库一直处于SIMPLE恢复状态,要么定期进行 t-log 备份。您做出的选择是一项业务决策,取决于您的恢复目标。
如果您不进行 t-log 备份,则没有充分的理由进行完全恢复。
编辑我刚刚注意到你的问题中的另一个线索。
每晚数据库已满(仅复制)。
你为什么要Full (Copy Only)备份?这样做的唯一原因是当您依靠差异备份进行恢复时,您正在执行单个备份并希望保留备份链。请参阅仅复制备份
这条线索表明存在您不知道的完整、差异和 t-log 备份,这表明编写您的夜间备份作业的copy only人知道差异并希望保留备份链。如果是这种情况,我希望每天记录数次 t-log,正常情况是每周一次 Fulls,每周其他 6 天的差异,以及全天定期记录 t-log。
或者这可能意味着更改SIMPLE和返回更改的人FULL只是随机添加它,因为他们不知道其中copy only任何一个的原因或影响。
我对如何获取备份和恢复开始和结束时间的回答?包含一个脚本,该脚本将检索 SQL Server 实例上所有数据库的备份信息。
---------------------------------------------------------------------------------
-- Database Backups for all databases For Previous Week
---------------------------------------------------------------------------------
SELECT
/* Columns for retrieving information */
-- CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS SRVNAME,
msdb.dbo.backupset.database_name,
msdb.dbo.backupset.backup_start_date,
msdb.dbo.backupset.backup_finish_date,
msdb.dbo.backupset.expiration_date,
CASE msdb..backupset.type
WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Diff'
WHEN 'L' THEN 'Log'
END AS backup_type,
-- msdb.dbo.backupset.backup_size / 1024 / 1024 as [backup_size MB],
-- msdb.dbo.backupmediafamily.device_type,
msdb.dbo.backupmediafamily.physical_device_name,
-- msdb.dbo.backupmediafamily.logical_device_name,
-- msdb.dbo.backupset.name AS backupset_name,
msdb.dbo.backupset.description,
msdb.dbo.backupset.is_copy_only,
msdb.dbo.backupset.is_snapshot,
msdb.dbo.backupset.first_lsn,
msdb.dbo.backupset.last_lsn,
msdb.dbo.backupset.database_backup_lsn,
msdb.dbo.backupset.checkpoint_lsn,
msdb.dbo.backupset.differential_base_lsn,
msdb.dbo.backupset.fork_point_lsn,
msdb.dbo.backupmediaset.name,
msdb.dbo.backupmediaset.software_name,
msdb.dbo.backupset.user_name,
'EOR'
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset
ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
INNER JOIN msdb.dbo.backupmediaset
on msdb.dbo.backupmediaset.media_set_id = backupmediafamily.media_set_id
/* ----------------------------------------------------------------------------
Generic WHERE statement to simplify selection of more WHEREs
-------------------------------------------------------------------------------*/
WHERE 1 = 1
AND msdb.dbo.backupset.database_name = 'YOUR_DATABASE'
ORDER BY
2 desc, -- backup start
1, -- database name
3 desc -- backup end
Run Code Online (Sandbox Code Playgroud)
替换YOUR_DATABASE为您的数据库名称。
针对您的 SQL Server 实例运行此脚本。您可以添加附加WHERE条件来限制搜索您的数据库和其他信息。
现在,如果该msdb.dbo.backupmediafamily.physical_device_name列包含除您用于copy_only备份的设备之外的其他信息,则表明其他解决方案正在执行备份。
在生产环境中,我希望看到类似于287899b2-d08e-40c3-a83d-677d898b6671(这是虚拟磁带驱动器的备份解决方案标识符)的企业解决方案条目。
一些工具会在msdb.dbo.backupset.description列中放置注释,这可能会提示正在发生的事情。
查看您可以从备份历史记录中检索的内容。
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |