SQL Server-聚焦事务对本地变量、临时表、表变量影响以及日志文件存满时如何收缩(三十一)
前言
接下来我们将SQL Server基础系列还剩下最后几节内容结束,后续再来讲解SQL Server性能调优,我们开始进入主题。
SQL Server事务对本地变量影响
事务对变量影响具体是指什么意思呢,换句话说就是当我们回滚事务和提交事务之后对本地变量是否起作用呢,下面我们来看下具体例子。
PRINT '回滚事务之后测试'
DECLARE @FlagINT INT
SET @FlagInt =
PRINT @FlagInt ---- 此时变量值为1
BEGIN TRANSACTION
SET @FlagInt = ---- 设置变量值为2
PRINT @FlagInt
ROLLBACK TRANSACTION
PRINT @FlagInt ---- 此时变量值为多少?
GO
PRINT '--------------------'
PRINT '提交事务之后测试'
DECLARE @FlagINT INT
SET @FlagInt =
PRINT @FlagInt ---- 此时变量值为1
BEGIN TRANSACTION
SET @FlagInt = ---- 设置变量值为2
PRINT @FlagInt
COMMIT TRANSACTION
PRINT @FlagInt ---- 此时变量值为多少?
GO

通过上述图我们能够很清晰的知道:通过改变本地变量值,但是在回滚后和提交后对变量根本不起作用,所以我们得出结论:本地变量不受事务所影响,因为其作用范围受到限制。
SQL Server事务对临时变量影响
我们首先创建一个临时并插入一条数据,再来开启事务插入一条数据并回滚事务看其结果如何,具体示例如下:
USE AdventureWorks2012
GO
-- 创建临时表并插入一行数据
CREATE TABLE #TempTable (Col1 VARCHAR())
INSERT INTO #TempTable (Col1)
VALUES('Temp Table - Outside Tran'); --查询临时表插入的值
SELECT Col1 AS TempTable_BeforeTransaction
FROM #TempTable; BEGIN TRAN
-- 插入一行数据
INSERT INTO #TempTable (Col1)
VALUES('Temp Table - Inside Tran'); ROLLBACK
-- 查询临时表中的值
SELECT Col1 AS TempTable_AfterTransaction
FROM #TempTable; GO
-- 删除临时表
DROP TABLE #TempTable
GO

从上图观察到当默认插入一条为 Temp Table - Outside Tran 的数据时,接下来我们开启事务再插入一条为 Temp Table - Inside Tran 的数据,然后进行事务回滚,此时回滚之后的数据和默认插入的数据一致,基于此我们得出结论:临时表受事务影响。
SQL Server事务对表变量影响
USE AdventureWorks2012
GO -- 创建表变量并插入一行数据
DECLARE @TableVar TABLE(Col1 VARCHAR())
INSERT INTO @TableVar (Col1)
VALUES('Table Var - Outside Tran'); --查询未开启事务之前数据
SELECT Col1 AS TableVar_BeforeTransaction
FROM @TableVar; BEGIN TRAN
-- 开启事务并插入一行数据
INSERT INTO @TableVar (Col1)
VALUES('Table Var - Inside Tran'); ROLLBACK --查询开启事务之后数据
SELECT Col1 AS TableVar_AfterTransaction
FROM @TableVar;
GO

当默认插入一条为 Table Var - Outside Tran 的数据后,我们开启事务插入一条为 Table Var - Inside Tran 的数据,接下来再来进行回滚发现其结果仍为 Table Var - Inside Tran ,至此我们得出结论:表变量不受事务所影响。
收缩日志文件
当日志文件占满时,我们可能需要收缩日志文件到最小,那么我们该如何做呢?我们可以通过如下三种方式收缩日志文件,请继续往下看。
收缩方式一(通过新建查询语句执行)
在SQL Server 2005之前我们可以通过如下做
USE AdventureWorks2012
GO
DBCC SHRINKFILE('TruncateLog', )
BACKUP LOG AdventureWorks2012 WITH TRUNCATE_ONLY
DBCC SHRINKFILE('TruncateLog', )
GO
如果在SQL Server 2005下运行上述命令则会出现如下错误:

此时我们应该运行如下查询。
USE [AdventureWorks2012]
GO
ALTER DATABASE [AdventureWorks2012] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(AdventureWorks2012_Log, )
ALTER DATABASE [AdventureWorks2012] SET RECOVERY FULL WITH NO_WAIT
GO
此时运行成功将得到如下结果:

此时我们再右键数据库属性将得到我们收缩后最小的日志文件大小,如下:

收缩日志文件方式二(在正确时间收缩日志文件)
通过右键你要收缩的日志文件对应的数据库的任务->收缩->文件,如下:

收缩日志文件方式三(完全移除日志文件)
有时候我们完全不需要大日志文件,此时我们需要完全移除日志文件来释放硬盘空间,我们通过以下四步即可达到我们所需。
(1)分离数据库
(2)重命名日志文件
(3)重新附加不带日志文件的数据库
(4)删除日志文件
演示如下:

总结
本节我们详细讲解了事务对本地变量和表变量不起作用,而对临时表起作用以及当日志文件占满时我们采取几种方式来收缩日志,我们下节开始进入SQL Server基础系列中有关死锁的最后几篇。
SQL Server-聚焦事务对本地变量、临时表、表变量影响以及日志文件存满时如何收缩(三十一)的更多相关文章
- SQL SERVER 分布式事务(DTC)
BEGIN DISTRIBUTED TRANSACTION指定一个由 Microsoft 分布式事务处理协调器 (MS DTC) 管理的 Transact-SQL 分布式事务的起始. 语法BEGIN ...
- 第十七周翻译-SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志
SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志 作者:Tony Davis,2012/01/27 翻译:赖慧芳 译文: 该系列 本文是Stairway系列的一部分:SQL ...
- SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志(译)
SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志 作者:Tony Davis,2012/01/27 系列 本文是进阶系列的一部分:SQL Server中事务日志管理的步骤 当事情 ...
- SQL server 查看什么语句在使用临时表
SQL server 查询那些语句在使用临时表 最近在日常的性能测试工作中发现,数据库端的IO读写比较大,有规律的2-8M的波动,数据库的版本为 SQL server 2008 sp3. 这些IO操作 ...
- SQL Server中事务、锁定和阻塞
事务是什么 在SQL Server中事务是构成一个工作逻辑单元的一系列任务,也就说多个任务放在一起执行,这些任务要么全部执行成功,要么全部执行失败. 通过事务我们可以保证数据的完整性,例如:用户A给用 ...
- SQL Server提高事务复制效率优化(一)总体概述
随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...
- (转)SQL Server 的事务和锁(一)
SQL Server 的事务和锁(一) 最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁: 1 2 3 4 5 6 7 8 9 1 ...
- 如何读懂SQL Server的事务日志
简介 本文将介绍SQL Server的事务日志中记录了哪一些信息,如何来读懂这些事务日志中信息.首先介绍一个微软没有公开的函数fn_dblog,在文章的接下来的部分主要用到这个函数来读取事务日志. f ...
- SQL Server 之 事务与隔离级别实例讲解
SQL Server 之 事务与隔离级别实例讲解 SQL Server 实现了6个隔离级别来防止并发情况下,类似企图并发的访问或修改同一数据时问题的发生.本文将带你体验全部6个隔离级别.正如你接下来将 ...
随机推荐
- ZOJ 3537 Cake
区间DP. 首先求凸包判断是否为凸多边形. 如果是凸多边形:假设现在要切割连续的一段点,最外面两个一定是要切一刀的,内部怎么切达到最优解就是求子区间最优解,因此可以区间DP. #include< ...
- js去除字符串空格
str.replace(/\s+/g,""); str.replace(/\s|\xA0/g,""); empName=empName.replace(/^\s ...
- DDR工作原理(转)
源:DDR工作原理 DDR SDRAM全称为Double Data Rate SDRAM,中文名为“双倍数据流SDRAM”.DDR SDRAM在原有的SDRAM的基础上改进而来.也正因为如此,DDR能 ...
- CSharp笔记>>>多语言,注册
C#多语言 方案1:http://blog.csdn.net/suncherrydream/article/details/43234059 http://blog.itpub.net/1263917 ...
- iOS开发——缩放图片
捏合图片,在原imageView中放大缩小图片. 懒得多说,直接上代码: // // ViewController.m // Demo-hehehe // // Created by yyt o ...
- readln
常用于暂停程序的运行!可以不带参数,read必须带参数; 使用原则: 1.没有特殊需要,一个程序中避免同时使用read 和readln: 2.尽量使用readln语句来输入数据,一个数据行对应一个re ...
- S3C2440硬件连接解析
S3c2440是三星公司推出的一款基于ARM920T的处理器,采用ARM内核,不同于单片机,无片上rom与ram,必须搭配相应的外围电路进行使用,现在,让我们从零开始进行这一块MCU的学习,为了入门简 ...
- 关于jquery的$.ajax发接口的同步与异步问题
1.在使用$.ajax发接口时想对返回数据做一些处理后拿到其他方法中使用 发请求函数如下: function getProjectName(projectId){ project.projectNam ...
- 谈谈线程同步Lock和unLock
Lock可以使用Condition进行线程之间的调度,它有更好的灵活性,而且在一个对象里面可以有多个Condition(即对象监视器),则线程可以注册在不同的Condition,从而可以 有选择性的调 ...
- UVa 10718 - Bit Mask
题目大意:给一数N,在区间[L, U]上找到一个数M使得M| N的值最大,如果有M有多个可能值,取最小的那个值. 从最高位开始逐位判断,如果N的该位为0,为使M | N的值最大,M的该位应考虑置为1, ...