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个隔离级别.正如你接下来将 ...
随机推荐
- Linux开发IDE打造
一直以来都是在windows下做开发的,微软提供的IDE vs开发起来确实快捷高效,接触linux也很久了通常都是使用vim进行一些基础文件的编译,现在突然要转到linux做开发还是不太适应的,网上 ...
- MPU6050程序(转)
源:MPU6050程序 初始化定义 #ifndef _MPU6050_H #define _MPU6050_H #define PORT_USED 0 #define MPU6050_ADDRESS_ ...
- Android与JNI(三) ---- c++调用java(转载)
源码下载:JniDemo JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活 ...
- mongodb 导入数据库文件
吐槽一下: 这个导入现有数据文件弱爆了... 直接将要导入的数据文件放到mongodb下的db目录下就完事了...O(∩_∩)O哈哈~ 例如: 将shop_suning (shopdb_suning ...
- IOS开发中各种型号的分辨率及软件图标的制作
IOS中各手机的分辨率为: 5.5寸: 1242*2208;4.7寸: 750*1334;4.0寸: 640*1136;3.5寸: 640*960; 软件的图标有以下需求(注意选中右侧红色框中这一条) ...
- bzoj2628: JZPSTR
Description 问题描述 你要对一个字符串进行三种操作: 0. 在位置x_i处插入一个字符串y_i 1. 删除位置[x_i, y_i)的字符串 2. 查询位置[x_i, y_i)的字符串包含多 ...
- bzoj3289
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3289 题目大意:Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n ...
- Win10還原成最乾淨的狀態 不必重灌
系統不穩定時我們想到的第一個選擇就是重灌,如果你的作業系統是win10將會有另外一個新選擇,就是透過程式進行還原,讓你的電腦回到剛安裝時的清爽. 工具資訊 [軟體名稱]微軟 Refresh Windo ...
- Js把IE COM数组列表转换成数组
今天写组件的时候遇到一个问题,就是当我需要对获取到的对象列表进行删减的时候,发现没有合适的方法,比如: //获取图片列表 var imgs = document.getElementsByTagNam ...
- 创建 Web 前端开发环境(node和npm)
Web 前端开发涉及多种工具,这里将常用工具的安装和配置进行说明,提供了详细的说明,为后继的开发创建一个坚实的基础. 本文介绍的工具有:NodeJS, NPM, Bower, Git 和 Grunt. ...