如何读懂SQL Server的事务日志
2个回答
展开全部
您好,很高兴为您解答。
SQL Server事务日志主要是用来记录所存在事务对数据库所做的修改,可能系统出现故障,它用成为最新数据的唯一来源。日志的操作常存在下面几个应用:
一、事务日志文件LDF的丢失
当不小卸载或者LDF文件丢失的时候,数据库只剩下MDF文件,这种时候直接通过附加MDF是不可以恢复数据库的,那大家怎么样才能恢复数据库呢?大家可以把SQL Server的日志文件分为两种形式:一类是无活动事务的日志,另一类是存在活动事务的日志,大家分别参考两种情况来进行数据库恢复。
1、无活动事务的日志恢复 当文件并无发生活动性的日志,大家就可以很简单的使用MDF文件就可以直接恢复数据库了,具体操作做法如下:
1)数据库要是无日志,就会处于臵疑的状态,大家先可以通过企业管理器中在对应数据库中点击右键,接下来在‚所存在任务‛下选择‚分离数据库‛把数据库进行分离;
2)使用MDF文件附加数据库生成新的日志文件,可用企业管理器中数据库点击右键选择‚所存在任务‛下的‚附加数据库‛把数据库附加上。
这种就可以直接恢复好数据库了,而可能数据库的日志文件中含存在活动事务,使用此做法就不可以恢复数据库,所以得使用下面的做法。
2、存在活动事务的日志恢复 当日志发生了事务的记录,丢失的时候,大家采取如下的做法来做的更好:
1)新建一个同名的数据库,如原数据库名为MYDB,接下来停止SQL Server服务器,再把数据库主数据MDF文件移走,接下来重新启动SQL Server服务器,新建一个同名的数据库MYDB,接下来再停止SQL Server服务器,把移走的MDF文件再覆盖回来,接下来再重新启动SQL Server服务器,在默认的情况下,系统表是不允许被修改的,大家就得运行下面语句才可以,在查询分析器中,选择Master数据库,接下来执行: Sp_configure 'allow updates',1 Reconfigure With Override 接着运行下面语句,把Sysdatabases表中MYDB数据库的status属性设为‘37268’,把MYDB数据库设臵为紧急模式。 update sysdatabases set status=32768 where name=’MYDB’ 接下来再把数据库MYDB设臵为单网民模式,接下来重新启动SQL Server服务器,并把数据库MYDB设为单网民模式 Sp_dboption 'MYDB','single user', 'true' 再运行下面语句,检查数据库MYDB DBCC CHECKDB(‘MYDB’) 2)还原数据库的状态 运行下面语句,就可以把数据库的状态还原: Update Sysdatabases Set status=28 Where name=’MYDB’ Sp_Configure ’allow updates’,0 Reconfigure With Override 这种时候的数据库仍不可以工作,还要进行下面的操作,才能恢复。
3)使用DTS的导入导出向导,把数据库MYDB导入到一个新建数据库
MYDBNEW中,接下来新建一个数据库MYDBNEW,右键点击MYDBNEW,选择‚所存在任务‛下的‚导出数据‛功能,打开导入向导,把表结构、数据视图和存储过程导入到MYDBNEW中,接下来再用此功能把MYDBNEW库替换成原来的MYDB库就好。
可以知道,恢复一个存在活动事务的日志是麻烦多了,所以在数据库维护的时候,切不可以小看事务日志。
二、事务在不断增大的时候如何缩小日志
当数据如在频繁修改或者卸载的同时,事务的日志就会不断的增加,甚至超过了碰盘的大小,这时候就不可以所以而直接卸载了事务日志的LDF文件,不然的话可能会带着很大的麻烦。为了避免这种情况,就得存在如下的操作:
1) 尽量避免tempdb 日志与网民数据库日志放在同一磁盘上,tempdb 数据库和事务日志拥存在足够的空间来处理索引操作。不可以在索引操作完成之前截断 tempdb 事务日志。
2) 通过执行下列命令来缩小事务日志 DBCC SHRINKDATABASE DBCC SHRINKFILE
操作会立即尝试用物理日志文件收缩为所需要的大小。
可能虚拟日志文件中的逻辑日志无超出 target_size 标记,则释放 target_size 标记之后的虚拟日志文件,并成功完成 DBCC 语句,不显示每一个信息。
可能虚拟日志中的逻辑日志超出了 target_size 标记,SQL Server Database Engine 用释放尽可能多的空间并显示一个信息性消息。该消息告诉您必须执行什么操作来参考文件尾部的虚拟日志中卸载逻辑日志。执行完该操作后,可以重新发出 DBCC 语句以释放剩余的空间。 DBCC SHRINKFILE 语句还显示一个信息性消息,指出它不可以释放所需要的所存在空间,并告诉您可以执行 BACKUP LOG 语句来释放剩余的空间。
三、事务日志的还原
事务日志在还原的时候可以选择三种恢复模式:简单模式、完整模式和大空间日志模式。
简单恢复模式
此模式简略地记录大多数事务,所记录的信息只是为了确保在系统崩溃或还原数据备份之后数据库的一致性。
因为旧的事务已提交,已不会就得其日志,因而日志用被截断。截断日志用卸载备份和还原事务日志。可就是,这种简化是存在代价的,在灾难事件中存在丢失数据的可能。无日志备份,数据库只可恢复到前几天的数据备份时间。可能您使用的是 SQL Server Enterprise Edition,就得考虑此疑问。还存在,该模式不支持还原单个数据页。
完整恢复模式
此模式完整地记录了所存在的事务,并保留所存在的事务日志记录,直到用它们备份。在 SQL Server Enterprise Edition 中,完整恢复模式能使数据库恢复到故障时间点。
大空间日志恢复模式
此模式简略地记录大多数大空间操作(打个比方,索引创建),完整地记录别的事务。
大空间日志恢复提高大空间操作的能力,经常使用作完整恢复模式的补充。
大空间日志恢复模式支持所存在的恢复形式,可就是存在多数限制,备份包含大空间日志记录操作的日志时,就得访问数据库内的所存在数据文件。可能数据文件不可访问,则不可以备份最后的事务日志,何况该日志中所存在已提交的操作总用丢失。
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
SQL Server事务日志主要是用来记录所存在事务对数据库所做的修改,可能系统出现故障,它用成为最新数据的唯一来源。日志的操作常存在下面几个应用:
一、事务日志文件LDF的丢失
当不小卸载或者LDF文件丢失的时候,数据库只剩下MDF文件,这种时候直接通过附加MDF是不可以恢复数据库的,那大家怎么样才能恢复数据库呢?大家可以把SQL Server的日志文件分为两种形式:一类是无活动事务的日志,另一类是存在活动事务的日志,大家分别参考两种情况来进行数据库恢复。
1、无活动事务的日志恢复 当文件并无发生活动性的日志,大家就可以很简单的使用MDF文件就可以直接恢复数据库了,具体操作做法如下:
1)数据库要是无日志,就会处于臵疑的状态,大家先可以通过企业管理器中在对应数据库中点击右键,接下来在‚所存在任务‛下选择‚分离数据库‛把数据库进行分离;
2)使用MDF文件附加数据库生成新的日志文件,可用企业管理器中数据库点击右键选择‚所存在任务‛下的‚附加数据库‛把数据库附加上。
这种就可以直接恢复好数据库了,而可能数据库的日志文件中含存在活动事务,使用此做法就不可以恢复数据库,所以得使用下面的做法。
2、存在活动事务的日志恢复 当日志发生了事务的记录,丢失的时候,大家采取如下的做法来做的更好:
1)新建一个同名的数据库,如原数据库名为MYDB,接下来停止SQL Server服务器,再把数据库主数据MDF文件移走,接下来重新启动SQL Server服务器,新建一个同名的数据库MYDB,接下来再停止SQL Server服务器,把移走的MDF文件再覆盖回来,接下来再重新启动SQL Server服务器,在默认的情况下,系统表是不允许被修改的,大家就得运行下面语句才可以,在查询分析器中,选择Master数据库,接下来执行: Sp_configure 'allow updates',1 Reconfigure With Override 接着运行下面语句,把Sysdatabases表中MYDB数据库的status属性设为‘37268’,把MYDB数据库设臵为紧急模式。 update sysdatabases set status=32768 where name=’MYDB’ 接下来再把数据库MYDB设臵为单网民模式,接下来重新启动SQL Server服务器,并把数据库MYDB设为单网民模式 Sp_dboption 'MYDB','single user', 'true' 再运行下面语句,检查数据库MYDB DBCC CHECKDB(‘MYDB’) 2)还原数据库的状态 运行下面语句,就可以把数据库的状态还原: Update Sysdatabases Set status=28 Where name=’MYDB’ Sp_Configure ’allow updates’,0 Reconfigure With Override 这种时候的数据库仍不可以工作,还要进行下面的操作,才能恢复。
3)使用DTS的导入导出向导,把数据库MYDB导入到一个新建数据库
MYDBNEW中,接下来新建一个数据库MYDBNEW,右键点击MYDBNEW,选择‚所存在任务‛下的‚导出数据‛功能,打开导入向导,把表结构、数据视图和存储过程导入到MYDBNEW中,接下来再用此功能把MYDBNEW库替换成原来的MYDB库就好。
可以知道,恢复一个存在活动事务的日志是麻烦多了,所以在数据库维护的时候,切不可以小看事务日志。
二、事务在不断增大的时候如何缩小日志
当数据如在频繁修改或者卸载的同时,事务的日志就会不断的增加,甚至超过了碰盘的大小,这时候就不可以所以而直接卸载了事务日志的LDF文件,不然的话可能会带着很大的麻烦。为了避免这种情况,就得存在如下的操作:
1) 尽量避免tempdb 日志与网民数据库日志放在同一磁盘上,tempdb 数据库和事务日志拥存在足够的空间来处理索引操作。不可以在索引操作完成之前截断 tempdb 事务日志。
2) 通过执行下列命令来缩小事务日志 DBCC SHRINKDATABASE DBCC SHRINKFILE
操作会立即尝试用物理日志文件收缩为所需要的大小。
可能虚拟日志文件中的逻辑日志无超出 target_size 标记,则释放 target_size 标记之后的虚拟日志文件,并成功完成 DBCC 语句,不显示每一个信息。
可能虚拟日志中的逻辑日志超出了 target_size 标记,SQL Server Database Engine 用释放尽可能多的空间并显示一个信息性消息。该消息告诉您必须执行什么操作来参考文件尾部的虚拟日志中卸载逻辑日志。执行完该操作后,可以重新发出 DBCC 语句以释放剩余的空间。 DBCC SHRINKFILE 语句还显示一个信息性消息,指出它不可以释放所需要的所存在空间,并告诉您可以执行 BACKUP LOG 语句来释放剩余的空间。
三、事务日志的还原
事务日志在还原的时候可以选择三种恢复模式:简单模式、完整模式和大空间日志模式。
简单恢复模式
此模式简略地记录大多数事务,所记录的信息只是为了确保在系统崩溃或还原数据备份之后数据库的一致性。
因为旧的事务已提交,已不会就得其日志,因而日志用被截断。截断日志用卸载备份和还原事务日志。可就是,这种简化是存在代价的,在灾难事件中存在丢失数据的可能。无日志备份,数据库只可恢复到前几天的数据备份时间。可能您使用的是 SQL Server Enterprise Edition,就得考虑此疑问。还存在,该模式不支持还原单个数据页。
完整恢复模式
此模式完整地记录了所存在的事务,并保留所存在的事务日志记录,直到用它们备份。在 SQL Server Enterprise Edition 中,完整恢复模式能使数据库恢复到故障时间点。
大空间日志恢复模式
此模式简略地记录大多数大空间操作(打个比方,索引创建),完整地记录别的事务。
大空间日志恢复提高大空间操作的能力,经常使用作完整恢复模式的补充。
大空间日志恢复模式支持所存在的恢复形式,可就是存在多数限制,备份包含大空间日志记录操作的日志时,就得访问数据库内的所存在数据文件。可能数据文件不可访问,则不可以备份最后的事务日志,何况该日志中所存在已提交的操作总用丢失。
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
仁科信息
2024-07-24 广告
2024-07-24 广告
Oracle EBS运维是确保企业资源规划系统稳定、高效运行的关键环节。它涵盖了系统监控、性能优化、故障排查与恢复等多方面内容。通过持续的监控和数据分析,运维团队能够及时发现并解决潜在问题,保障系统的稳定性和安全性。同时,他们还需要与业务部...
点击进入详情页
本回答由仁科信息提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询