关于SQL Server事务日志的问题汇总

SQL Server-查询事务日志 摘要:这段SQL代码用于查询SQL Server中所有数据库的关键恢复和事务日志状态信息,通过分析sys.databases视图中的recovery_model_desc(恢复模式)和log_reuse_wait_desc(日志重用等待状态)字段,可诊断日志文件增长问题。完整恢复模式下的数据库需定期日志备份,否则日志会无限增长;若出现ACTIVE_TRANSACTION状态则表明存在未提交事务。该查询是排查日志管理和性能问题的关键工具,可帮助DBA快速定位日志异常原因并采取相应措施。 阅读详情
关于SQL Server事务日志的问题汇总


1、用BACKUP LOG database WITH NO_LOG清除日志把数据库属性中的故障还原模型改为"简单"可以大大减慢日志增长的速度。
   如果把还原模型调到简单,这样就不支持时间点还原了,但是日志文件会很小,如果数据比较重要推荐还是把数据库的还原模型调为完全用BACKUP LOG database WITH NO_LOG命名后,会截断不活动日志,不减小物理日志文件的大小,但逻辑日志会减小,收缩数据库后会把不活动虚拟日志删除来释放空间,不会损坏数据。
  
  如果日志被截断并收缩数据库后,就不能直接用最近的一个全库备份做时间点还原,建议立即备份数据库,以防万一。
  
  2、sql server运行中,是否能删除主数据库事务日志文件
  
  步骤如下:
  (1)、分离数据库企业管理器--数据库--右击你要删除日志的数据库--所有任务--分离数据库
  (2)、然后删除日志文件
  (3)、然后再附加数据库
  
  企业管理器--数据库--右击数据库--所有任务--附加数据库这时候只附加。mdf就可以了。
  
  3、压缩SQL数据库及日志的详细方法
  
  SQL Server 2000基础教程--压缩数据库
  
   数据库在使用一段时间后,时常会出现因数据删除而造成数据库中空闲空间太多的情况,这时就需要减少分配给数据库文件和事务日志文件的磁盘空间,以免浪费 磁盘空间。当数据库中没有数据时,可以修改数据库文件属性直接改变其占用空间,但当数据库中有数据时,这样做会破坏数据库中的数据,因此需要使用压缩的方 式来缩减数据库空间。可以在数据库属性选项中选择"Auto shrink"选项,让系统自动压缩数据库,也可以用人工的方法来压缩。人工压缩数据库有以下两种方式:
  
  1、用 Enterprise Manager 压缩数据库在Enterprise Manager 中在所要压缩的数据库上单击右键,从快捷菜单中的"所有任务(All Tasks)"中选择"ShrinkDatabase(压缩数据库)"选项,就会出现如图6-10 所示的对话框。可以在图6-10 所示的对话框中选择数据库的压缩方式,也可以选择使用压缩计划或压缩单个文件单击图6-10 中的"Files"按钮,会出现如图6-11 所示的压缩数据库文件对话框,可以针对每个数据库文件进行不同的压缩设置。
  
  单击图6-10 中的"Change" 按钮,会出现如图6-12 所示的压缩计划编辑对话框,可以指定压缩计划的执行方式。单击图6-12中的"Change" 按钮,会出现如图6-13 所示的循环工作计划编辑对话框,可以编辑计划执行的周期或时间点。设置完成后单击"OK" 按钮就开始压缩数据库,在压缩结束后会显示一个压缩情况信息框。
  
  2、用Transact-SQL 命令压缩数据库
  
  可以使用DBCC SHRINKDATABASE 和DBCC SHRINKFILE 命令来压缩数据库。其中DBCC SHRINKDATABASE 命令对数据库进行压缩,DBCC SHRINKFILE 命令对数据库中指定的文件进行压缩。
  
  (1) DBCC SHRINKDATABASE
  DBCC SHRINKDATABASE 命令语法如下:
  DBCC SHRINKDATABASE (database_name [, target_percent]
  [, {NOTRUNCATE | TRUNCATEONLY}] )
  各参数说明如下:
  ·target_percent 指定将数据库压缩后,未使用的空间占数据库大小的百分之几。如果指定的百分比过大,超过了压缩前未使用空间所占的比例,则数据库不会被压缩。并且压缩后的数据库不能比数据库初始设定的容量小。
  ·NOTRUECATE
  将数据库缩减后剩余的空间保留在数据库,中不返还给操作系统。如果不选择此选项,则剩余的空间返还给操作系统。
  ·TRUNCATEONLY
  将数据库缩减后剩余的空间返还给操作系统。使用此命令时SQLServer 将文件缩减到最后一个文件分配,区域但不移动任何数据文件。选择此项后,target_percent 选项就无效了。

  
  例6-14: 压缩数据库mytest 的未使用空间为数据库大小的20%。
  dbcc shrinkdatabase (mytest, 20)
  运行结果如下:
  DBCC execution completed. If DBCC printed error
  
  messages, contact your system administrator.
  (2) DBCC SHRINKFILE
  DBCC SHRINKFILE 命令压缩当前数据库中的文件。其语法如下:
  DBCC SHRINKFILE ( {file_name | file_id }
  { [, target_size] |
  [, {EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}] } )
  各参数说明如下:
  ·file_id
  指定要压缩的文件的鉴别号(Identification number, 即ID)。文件的ID 号可以通过 FILE_ID()函数或如本章前面所讲述的Sp_helpdb 系统存储过程来得到。
  ·target_size
  指定文件压缩后的大小。以MB 为单位。如果不指定此选项,SQLServer 就会尽最大可能地缩减文件。
  ·EMPTYFILE
  指明此文件不再使用,将移动所有在此文件中的数据到同一文件组中的其它文件中去。执行带此参数的命令后,此文件就可以用ALTER DATABASE 命令来删除了。

  
  其余参数NOTRUNCATE 和TRUNCATEONLY 与DBCC SHRINKDATABASE
  
  命令中的含义相同。
  
  例6-15: 压缩数据库mydb 中的数据库文件mydb_data2 的大小到1MB。 use mydb dbcc shrinkfile (mydb_data2, 1)
  
  企业管理器里面的方法:
  1、打开企业管理器
  2、打开要处理的数据库
  3、点击最上面菜单>工具>SQL查询分析器,打开SQL查询分析器
  4、在输入窗口里面输入:
  
  Code:
  DUMP TRANSACTION [数据库名] WITH NO_LOG
  BACKUP LOG [数据库名] WITH NO_LOG
  DBCC SHRINKDATABASE([数据库名])
  
  点击绿色的小三角(或按F5)执行查询,等状态栏提示处理完成即可!
  
  程序里面的方法:
  压缩数据库日志
  --1.清空日志
  exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')
  --2.截断事务日志:
  exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')
  --3.收缩数据库文件(如果不压缩,数据库的文件不会减小
  exec('DBCC SHRINKDATABASE(['+@dbname+'])')
  
  4、减小日志的方法:
  
  一、用如下步做了:
  1、DUMP TRANSACTION 库名 WITH no_log
  2、dbcc shrinkfile(logfilename)
  3、收缩数据库
  4、设定自动收缩。
  
  二、
  分离数据库,删除日志文件,再附加,OK!
  右击数据库--所有任务--分离or 附加
  
  三、
  
  1、backup log 库名 WITH no_log
  2、dbcc shrinkfile(logfilename)
  3、收缩数据库
  4、设定自动收缩。

SQL Server事务日志中恢复数据 If this is your first visit to this SQL Server Transaction Log series, I recommend you first review the previous articles (see the TOC below), in order not to be familiar with the concepts that we... 阅读详情

相关推荐

SQL Server事物日志

文章目录一、事物日志作用二、事务日志原理三、事物日志管理3.1 事物日志监控3.2 事物日志收缩 一、事物日志作用 每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务数据库所做的修改。事物日志的作用主要如下: WAL事务预提交,减少了脏页刷盘的IO消耗,极大的提高了数据库性能 崩溃恢复,当数据库发生意外宕机,数据库启动时会进行崩溃恢复的流程,会先读取事务日志进行前滚,将数据恢复到崩溃前的状态;然后进行回滚操作,对事务日志中未提交的事务进行rollback,以此保证数据库中数据

三思的博客 3436

读取SQL Server事务日志

介绍 (Introduction) There has always been some debate as to whether or not there are real benefits to be gained from accessing the information in the transaction log. This article will endeavor to...

culuo4781的博客 2558

SQL Server遇到的错误和有用的tools

1.The target principal name is incorrect. Cannot generate SSPI context. 检查IIS的profile,可能是密码错误 2.The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unle...

weixin_30263277的博客 310

SQL Server事务日志终极攻略

1. 事务日志的简介 1.1什么是事务日志 SQL Server数据库日志文件也称为事务日志文件。每个 SQL Server 数据库都有至少有一个日志文件,用于记录所有事务以及每个事务数据库所做的修改。事务日志是每个数据库的重要组件,了解和管理此日志数据库管理员角色的重要组成部分。 1.2事务日志的物理体系结构 SQL Server 数据库引擎在内部将每一物理日志文件分成多个虚...

weixin_30411819的博客 3181

SQL SERVER 事务日志 解析

1 基本介绍     每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作。     日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种: 完整模式,完全记录事物日志,需要定期进行日志备份。 大容量日志模式,适用于批量操作的数据库,可以以更压缩的方式处理日志,需要定期进行日志备份。 简单模式,也有日志文件,只是该模式下可以通过checkpoin

zero的小纸条 3146

SQL Server事务日志截断

事务日志截断的本质是通过释放不活动的VLF来重用日志空间,从而避免日志文件无限增长。在简单恢复模式下,截断是自动进行的,而在完整恢复模式下,截断依赖于日志备份。如果需要释放磁盘空间,还需要执行日志文件的收缩操作。为了避免事务日志文件占用过多磁盘空间,建议定期进行事务日志备份(在完整恢复模式下),并在简单恢复模式下监控日志文件的大小。如果需要释放磁盘空间,可以考虑收缩日志文件,但需注意频繁收缩可能对性能产生负面影响。

喝醉酒的小白 1174
上一篇: Truncate Logs for SQL Server 2008
下一篇: SQL Server 2008 Books Online (November 2009)
envykok
博客等级 码龄19年 61粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值