彩票走势图

在SQL Server中查找和删除不完整的未完成交易9(第1部分上)

转帖|行业资讯|编辑:鲍佳佳|2020-07-13 11:39:21.680|阅读 461 次

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

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

dbForge Studio for SQL Server为有效的探索、分析SQL Server数据库中的大型数据集提供全面的解决方案,并设计各种报表以帮助作出合理的决策。

点击下载dbForge Studio for SQL Server最新试用版

有时人们在 SQL Server打开的事务处理到一半的情况下会忘记它们。这是常规数据库开发中经常遇到的情况。比如当使用SQL Server Management Studio运行脚本和使用BEGIN TRANSACTION语句启动显式事务时,却在事务中间取消了该批处理而没有发出COMMIT或ROLLBACK语句来完成事务并且使得交易保持打开状态。

本文主要讨论了如何使用SQL Complete工具删除丢失的事务。
请按照以下步骤查找未完成的未完成的事务并将其删除:
  1. 首先,我们创建两个表:一个表用于保存和分析有关当前未结交易的信息,第二个表将从第一个表交易中选择的归档以进行进一步分析。
  2. 收集有关没有查询的事务及其会话的信息(在一定时间段T内已启动事务且未完成的事务)。
  3. 更新包含步骤1中当前活动事务列表的表(如果获得了活动请求的未完成的事务,则不再认为它丢失,必须将其从表中删除)。
  4. 确定要终止的会话(一个任务框在步骤1的表中至少有一个未完成的事务,并且该任务框没有查询在运行)。
  5. 存档要删除的数据(有关将被杀死的事务,会话和连接的信息)。
  6. 终止会话。
  7. 删除已处理的条目以及那些不能删除的条目,这些条目已经存在于步骤1中很长时间了。

下面演示如何实现该算法第1步,我们将演示如何创建表以列出和归档未完成的事务。

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

应用代码格式
借助dbForge SQL Complete,我们可以快速轻松地创建一个表来存储有关当前丢失的交易的信息。
1.该工具通过根据T-SQL代码的多个嵌入式提示来帮助您加快常规编码的速度。只需单击几下即可创建表格。
应用格式化之前的代码片段
图1.自动完成下拉列表
2.字符串中的字母将转换为大写。
小写命令转换为大写
图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”选项的帮助下对其进行格式化。
格式化文档命令
图3. 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

采用以下方法我们可以看出一半的差异:
  1. 采用缩进的方法
  2. T-SQL关键字大写
  3. 在每个列名称之前添加了换行符。
这大大提高了代码的可读性和可理解性,从而导致更准确的感知和决策。
将格式应用于外部文档
SQL Complete工具还允许仅将格式应用于脚本的选定片段。请注意,只有在使用鼠标或光标选择要格式化的片段之后,才会启用“ 格式选择”选项。
格式选择命令
图4. SQL Complete菜单中的Format Selection命令

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

格式选择命令
图5.应用格式化之前的代码片段

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

图6.格式化的代码片段

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

SQL格式化程序
图7. SQL Formatter命令

从“ SQL完整”菜单中选择“ SQL格式化程序”命令后,将出现用于选择格式化模式的窗口。您可以选择格式化选定文件或特定文件夹中的所有文件的格式。在我们的示例中,我们选择Files。单击下一步按钮继续。
SQL格式化程序向导
图8. SQL Formatter向导
现在,您需要选择要格式化的文件。
添加文件以格式化
图9.添加文件以格式化
编译好要格式化的文件列表后,单击“ 格式”按钮。
开始格式化过程
图10.开始格式化过程
因此,启动了格式化。

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

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

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

图14. SQL Formatter向导的Folder列表窗口
在这种情况下,格式化过程完成后,已修改的文件也会在SSMS中打开。

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


标签:

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


为你推荐

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


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP