彩票走势图

Devart数据库工具【教程】:如何使用SQL Complete删除丢失的事务第1部分(上)

翻译|使用教程|编辑:吴园园|2020-03-18 09:35:08.317|阅读 361 次

概述:本文讨论了使用SQL Complete工具删除丢失的事务。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

dbForge SQL Complete是一款用于Microsoft SQL Server Management Studio和Microsoft Visual Studio的功能强大的插件。SQL代码格式化程序(免费版和高级付费版)能够提供可以取代原生的Microsoft T-SQL Intellisense特性的T-SQL代码自动实现和格式化功能。

点击下载dbForge SQL Complete最新试用版

通常,MS SQL Server事务未完成,因此它们的启动者会忘记它们。这是常规数据库开发中经常遇到的情况。最引人注目的示例是当使用SQL Server Management Studio运行脚本以使用BEGIN TRANSACTION语句启动显式事务时,然后在事务中间取消该批处理而没有发出COMMIT或ROLLBACK语句来完成事务的情况并且交易保持打开状态。

这导致在该交易期间获得的锁继续被持有的情况。同时,发起交易的人要么忘记了交易,要么将其搁置了一段时间。结果,持有大量的锁,并且用户被阻止。

本文讨论了使用SQL Complete工具删除丢失的事务。

所述丢失的交易术语用于指活性(运行)事务不具有任何活动(正在运行)的查询进行足够长的时间T的周期

删除丢失的交易。通用算法

请按照以下步骤删除丢失的交易。

1.首先,我们创建两个表:一个表用于保存和分析有关当前丢失交易的信息,第二个表将从第一个表交易中选择的数据存档以进行进一步分析。

2.收集有关没有查询的事务及其会话的信息(在一定时间段T内已启动且未完成的事务)。

3.更新包含步骤1中当前丢失的事务列表的表(如果未完成的事务获得了活动请求,则不再将其视为丢失,必须将其从表中删除)。

4.确定要终止的会话(一个会话在步骤1的表中至少有一个未完成的事务,并且该会话没有查询在运行)。

5.存档要删除的数据(有关将被杀死的事务,会话和连接的信息)。

6.终止会话。

7.删除已处理的条目以及那些不能删除的条目,这些条目已经在步骤1中存在很长时间了。

以下是该算法实现的工作示例。

如何实现删除丢失交易的算法

创建一个表以列出并检查丢失的交易

应用代码格式

借助dbForge SQL Complete,我们可以快速轻松地创建一个表来存储有关当前丢失的事务的信息。

1.该工具通过针对T-SQL代码的多个嵌入式提示来帮助您加快常规编码的速度。只需单击几下即可创建表格。

2.字符串中的字母将转换为大写字母。

这样,我们继续完善表创建脚本:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [srv].[SessionTran](
[SessionID] INT NOT NULL,
[TransactionID] BIGINT NOT NULL,
[CountTranNotRequest] TINYINT NOT NULL,
[CountSessionNotRequest] TINYINT NOT NULL,
[TransactionBeginTime] DATETIME NOT NULL,
[InsertUTCDate] DATETIME NOT NULL,
[UpdateUTCDate] DATETIME NOT NULL,
 CONSTRAINT [PK_SessionTran] PRIMARY KEY CLUSTERED 
(
[SessionID] ASC,
[TransactionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [srv].[SessionTran] ADD  CONSTRAINT [DF_SessionTran_Count] DEFAULT ((0)) FOR [CountTranNotRequest]
GO

ALTER TABLE [srv].[SessionTran] ADD  CONSTRAINT [DF_SessionTran_CountSessionNotRequest]  DEFAULT ((0)) FOR [CountSessionNotRequest]
GO

ALTER TABLE [srv].[SessionTran] ADD  CONSTRAINT [DF_SessionTran_InsertUTCDate]  DEFAULT (getutcdate()) FOR [InsertUTCDate]
GO

ALTER TABLE [srv].[SessionTran] ADD  CONSTRAINT [DF_SessionTran_UpdateUTCDate]  DEFAULT (getutcdate()) FOR [UpdateUTCDate]
GO

在此脚本中:

1) SessionID 标识一个会话

2)TransactionID标识丢失的交易

3)CountTranNotRequest代表交易记录为丢失的次数

4)CountSessionNotRequest代表将会话记录为没有活动查询并包含丢失的事务的次数

5)TransactionBeginTime是指丢失交易的开始日期和时间

6) InsertUTCDate 标识创建记录的日期和时间(UTC)

7) UpdateUTCDate 标识记录更新的日期和时间(UTC)。

如何使用SQL Complete格式化文档

将格式应用于当前文档

使用哪个编辑器来创建SQL文档都没有关系,您仍然可以借助SQL Complete Format Document选项对它进行格式化。

格式化之前,脚本如下所示:

create table [srv].[SessionTran](
[SessionID] int not null, [TransactionID] bigint not null, [CountTranNotRequest] tinyint not null, [CountSessionNotRequest] tinyint not null,
[TransactionBeginTime] datetime not null, [InsertUTCDate] datetime not null, [UpdateUTCDate] datetime not null,
 constraint [PK_SessionTran] primary key clustered ([SessionID] asc, [TransactionID] asc)
 with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on, fillfactor = 95) ON [PRIMARY]
) on [PRIMARY]
GO
以下是应用格式后获得的脚本:

CREATE TABLE [srv].[SessionTran] (
[SessionID] INT NOT NULL
   ,[TransactionID] BIGINT NOT NULL
   ,[CountTranNotRequest] TINYINT NOT NULL
   ,[CountSessionNotRequest] TINYINT NOT NULL
   ,[TransactionBeginTime] DATETIME NOT NULL
   ,[InsertUTCDate] DATETIME NOT NULL
   ,[UpdateUTCDate] DATETIME NOT NULL
   ,CONSTRAINT [PK_SessionTran] PRIMARY KEY CLUSTERED ([SessionID] ASC, [TransactionID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]
) ON [PRIMA
GO

差别可以看到:

  • 压痕已被采用
  • T-SQL关键字大写
  • 在每个列名称之前添加了换行符。

这大大提高了代码的可读性和可理解性,从而导致更准确的感知和决策。

将格式应用于外部文档

SQL Complete工具还允许仅将格式应用于脚本的选定片段。请注意,只有在使用鼠标或光标选择要格式化的片段之后,才会启用“ 格式选择”选项。

下图显示了格式化之前的脚本片段。

研究下图,查看格式化后的代码片段外观。

在SQL格式化功能也应该被提及。借助它的帮助,您可以无缝格式化先前编写的脚本。

从“ SQL完整”菜单中选择“ SQL格式化程序”命令后,将出现选择格式化模式的窗口。您可以选择格式化选定文件或特定文件夹中的所有文件的格式。在我们的示例中,我们选择Files。单击下一步按钮继续。

现在,您需要选择要格式化的文件。

编译好要格式化的文件列表后,单击“ 格式”按钮。


因此,启动了格式化。

格式化过程完成后,将出现一个窗口,其中显示了已修改的文件数,并且这些文件在SQL Server Management Studio中打开。

以同样的方式,我们可以重构Scripts目录中所有文件的代码。要格式化指定文件夹中的所有文件,请在“ SQL Formatter向导”中选择“目录”选项。

选择目录模式后,单击下一步按钮继续。在下一个窗口中,单击添加按钮以选择所需的文件夹。值得一提的是,在“ SQL Formatter向导”中,您可以指定要格式化的文件扩展名,还可以选择在格式化后保持修改后的文件打开并包含子文件夹。

在这种情况下,格式化过程完成后,已修改的文件也会在SSMS中打开。

请注意,默认情况下,这些文件不会保存,而是以修改后的格式打开。如果要更改此设置,则需要清除“ 格式化后保持打开的已修改文件 ”复选框。取消选中该复选框后,修改后的文件将不会在Management Studio中打开,并且更改将立即应用并保存。

更多内容欢迎持续关注我们后续的教程

想了解更多产品信息或想要购买产品正版授权请点击


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP