时间:2021-07-01 10:21:17 帮助过:19人阅读
阅读目录(Content)
每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作。
日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种:
数据库里边,任何对数据库的读写都是在内存页中找到对应的数据也,再做修改,如果内存页中不存在数据页,则从磁盘加载如内存中。当一个修改操作发生时,修改的将是内存页中对应的数据页面,同时也会实时记录到日后文件ldf中。那么,什么时候数据会被同步到mdf文件呢,只有以下三种情况:
DB中的事务日志记录,可以给我们带来很多好处,它可以支持以下操作:
所有检查结束后,则会对数据库做一个checkpoint的表示,并写入事务日志中,表明日志文件跟数据文件已经同步结束,完成了recovery过程,数据库可正常提供使用。这里需要注意一点,如果你数据库最近一次checkpoint到现在的修改操作足够多,那么将会耗费相对较长时间来检查,同时也能够在 error log中看到百分比标识的recovery完成进展,避免漫无目的的等待。
Error Log的检查,可以通过图形界面(见下图)查看当前日志,也可以运行xp_readerrorlog 查询。
1 /* 2 xp_readerrorlog参数说明 3 1. 存档编号 4 2. 日志类型(1为SQL Server日志,2为SQL Agent日志) 5 3. 查询包含的字符串 6 4. 查询包含的字符串 7 5. LogDate开始时间 8 6. LogDate结束时间 9 7. 结果排序,按LogDate排序(可以为降序"Desc" Or 升序"Asc"),默认升序 10 */ 11 12 Exec xp_readerrorlog 0,1,Null,Null,‘2017-02-16 10:53:32.300‘,‘2017-02-16 12:53:32.300‘
假设出现这种情况,由于上线的重要程度远远重要过 数据丢失的情况,并且你跟所有部门沟通确认 可以承担 data file跟log file之间的差异数据的丢失,那么你可以按以下步骤操作,严重建议不要这么操作,因为会带来不可预估的数据丢失情况,如果你命悬一线,真打算放弃这部分数据,那么,可以按照以下操作:
1 #设置数据库单用户 2 alter database backupdb set single_user with rollback immediate 3 4 #设置数据库紧急状态 5 alter database backupdb set emergency with rollback immediate 6 7 #获取事务日志的物理名和逻辑名后,重建日志文件 8 select name,physical_name from sys.master_fiels where database_id=db_id(‘backupdb‘) 9 alter database backupdb rebuild log on (name=‘事务日志的逻辑名‘,filename=‘事务日志的物理名词‘) 10 11 #设置数据库online 12 alter database backupdb set online with rollback immediate 13 14 #设置数据库为多用户 15 alter database backupdb set multi_user with rollback immediate
回到顶部(go to top)
1 USE [master] 2 GO 3 ALTER DATABASE [backupdb] 4 ADD LOG FILE ( 5 NAME = N‘backupdb_log_1‘, 6 FILENAME = N‘D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backupdb_log_1.ldf‘ , 7 SIZE = 524288KB , 8 MAXSIZE = 1048576KB , 9 FILEGROWTH = 10240KB 10 ) 11 GO
1 #其行数及为VLF个数,status为0表示文件未用,为2表示已被使用,无法重用 2 dbcc loginfo 3 4 #备份日志 5 BACKUP LOG [backupdb] 6 TO DISK = N‘D:\data\20170215_backupdb_log.trn‘ WITH NOFORMAT, NOINIT, NAME = N‘backupdb-事务日志 备份‘, SKIP, NOREWIND, NOUNLOAD, STATS = 10 7 GO 8 9 #收缩日志文件,根据日志文件名来收缩500Mb,建议收缩大小是合理大小,参考上文的 初始大小 判断 10 USE [backupdb] 11 GO 12 SELECT name FROM sys.database_files WHERE type_desc=‘log‘ 13 DBCC SHRINKFILE (N‘jiankong_db_log‘ , 500) 14 GO 15 16 #其行数及为VLF个数,VLF文件减少 17 dbcc loginfo
事务日志是一种回绕的文件。假设,数据库backupdb只有一个ldf文件,且刚好分成了5个虚拟日志,当我们开始使用数据库的时候,逻辑日志从物理日志的最开始端向末端记录,如下图。