翻譯|使用教程|編輯:吳園園|2020-03-18 09:35:08.317|閱讀 436 次
概述:本文討論了使用SQL Complete工具刪除丟失的事務。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
dbForge SQL Complete是一款用于Microsoft SQL Server Management Studio和Microsoft Visual Studio的功能強大的插件。SQL代碼格式化程序(免費版和高級付費版)能夠提供可以取代原生的Microsoft T-SQL Intellisense特性的T-SQL代碼自動實現和格式化功能。
通常,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代碼的多個嵌入式提示來幫助您加快常規編碼的速度。只需單擊幾下即可創建表格。
這樣,我們繼續完善表創建腳本:
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
差別可以看到:
這大大提高了代碼的可讀性和可理解性,從而導致更準確的感知和決策。
將格式應用于外部文檔SQL Complete工具還允許僅將格式應用于腳本的選定片段。請注意,只有在使用鼠標或光標選擇要格式化的片段之后,才會啟用“ 格式選擇”選項。
下圖顯示了格式化之前的腳本片段。
研究下圖,查看格式化后的代碼片段外觀。
在SQL格式化功能也應該被提及。借助它的幫助,您可以無縫格式化先前編寫的腳本。
從“ SQL完整”菜單中選擇“ SQL格式化程序”命令后,將出現選擇格式化模式的窗口。您可以選擇格式化選定文件或特定文件夾中的所有文件的格式。在我們的示例中,我們選擇Files。單擊下一步按鈕繼續。
現在,您需要選擇要格式化的文件。
編譯好要格式化的文件列表后,單擊“ 格式”按鈕。
格式化過程完成后,將出現一個窗口,其中顯示了已修改的文件數,并且這些文件在SQL Server Management Studio中打開。
以同樣的方式,我們可以重構Scripts目錄中所有文件的代碼。要格式化指定文件夾中的所有文件,請在“ SQL Formatter向導”中選擇“目錄”選項。
選擇目錄模式后,單擊下一步按鈕繼續。在下一個窗口中,單擊添加按鈕以選擇所需的文件夾。值得一提的是,在“ SQL Formatter向導”中,您可以指定要格式化的文件擴展名,還可以選擇在格式化后保持修改后的文件打開并包含子文件夾。
請注意,默認情況下,這些文件不會保存,而是以修改后的格式打開。如果要更改此設置,則需要清除“ 格式化后保持打開的已修改文件 ”復選框。取消選中該復選框后,修改后的文件將不會在Management Studio中打開,并且更改將立即應用并保存。
更多內容歡迎持續關注我們后續的教程
想了解更多產品信息或想要購買產品正版授權請點擊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: