快捷搜索:

SQL Server事务日志的几个常用操作

我们知道,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 中,完备规复模式能使数据库规复到故障光阴点。

大年夜容量日志规复模式

此模式大略地记录大年夜多半大年夜容量操作(例如,索引创建),完备地记录其他事务。

大年夜容量日志规复前进大年夜容量操作的机能,常用作完备规复模式的弥补。大年夜容量日志规复模式支持所有的规复形式,然则有一些限定,备份包孕大年夜容量日志记录操作的日志时,必要造访数据库内的所稀有据文件。假如数据文件弗成造访,则无法备份着末的事务日志,而且该日志中所有已提交的操作都将损掉。

 

您可能还会对下面的文章感兴趣: