当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server事务日志的几个常用操作

MSSQL
在SQL Server 2005数据库中更改数据架构
建立适当的索引是实现查询优化的首要前提
巧用一条SQL 实现其它进制到十进制转换
处理SQL Server 2000的命名实例和多实例
解析:怎样掌握SQL Server中的数据查询
教你轻松掌握常用的子句、关键词和函数
如何获取SQL Server数据库元数据的方法
分析SQL Server中数据库的快照工作原理
汇总数据库备份 还原 压缩与数据库转移的方法
完全讲解 使用MSCS建立SQL Server集群
SQL Server 2005 内置工具建审查系统
在SQL Server计算机上运行病毒扫描软件
教你如何升级SQL Server数据库系统
SQL Server中处理空值时涉及的三问题
教你为SQL Server数据库构造安全门
在SQL Server中编写通用数据访问方法
针对SQL Server中业务规则链接的分析
运行SQL Server的计算机间移动数据库
怎样在不同版本SQL Server中存储数据
认识那些被忽略的SQL Server注入技巧

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 211 ::
收藏到网摘: n/a

我们知道,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 中,完整恢复模式能使数据库恢复到故障时间点。

大容量日志恢复模式

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

大容量日志恢复提高大容量操作的性能,常用作完整恢复模式的补充。大容量日志恢复模式支持所有的恢复形式,但是有一些限制,备份包含大容量日志记录操作的日志时,需要访问数据库内的所有数据文件。如果数据文件不可访问,则无法备份最后的事务日志,而且该日志中所有已提交的操作都将丢失。