翻譯|使用教程|編輯:吳園園|2020-03-18 09:35:08.317|閱讀 436 次
概述:本文討論了使用SQL Complete工具刪除丟失的事務(wù)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
dbForge SQL Complete是一款用于Microsoft SQL Server Management Studio和Microsoft Visual Studio的功能強(qiáng)大的插件。SQL代碼格式化程序(免費(fèi)版和高級(jí)付費(fèi)版)能夠提供可以取代原生的Microsoft T-SQL Intellisense特性的T-SQL代碼自動(dòng)實(shí)現(xiàn)和格式化功能。
點(diǎn)擊下載dbForge SQL Complete最新試用版
通常,MS SQL Server事務(wù)未完成,因此它們的啟動(dòng)者會(huì)忘記它們。這是常規(guī)數(shù)據(jù)庫(kù)開發(fā)中經(jīng)常遇到的情況。最引人注目的示例是當(dāng)使用SQL Server Management Studio運(yùn)行腳本以使用BEGIN TRANSACTION語句啟動(dòng)顯式事務(wù)時(shí),然后在事務(wù)中間取消該批處理而沒有發(fā)出COMMIT或ROLLBACK語句來完成事務(wù)的情況并且交易保持打開狀態(tài)。
這導(dǎo)致在該交易期間獲得的鎖繼續(xù)被持有的情況。同時(shí),發(fā)起交易的人要么忘記了交易,要么將其擱置了一段時(shí)間。結(jié)果,持有大量的鎖,并且用戶被阻止。
本文討論了使用SQL Complete工具刪除丟失的事務(wù)。
所述丟失的交易術(shù)語用于指活性(運(yùn)行)事務(wù)不具有任何活動(dòng)(正在運(yùn)行)的查詢進(jìn)行足夠長(zhǎng)的時(shí)間T的周期
刪除丟失的交易。通用算法
請(qǐng)按照以下步驟刪除丟失的交易。
1.首先,我們創(chuàng)建兩個(gè)表:一個(gè)表用于保存和分析有關(guān)當(dāng)前丟失交易的信息,第二個(gè)表將從第一個(gè)表交易中選擇的數(shù)據(jù)存檔以進(jìn)行進(jìn)一步分析。
2.收集有關(guān)沒有查詢的事務(wù)及其會(huì)話的信息(在一定時(shí)間段T內(nèi)已啟動(dòng)且未完成的事務(wù))。
3.更新包含步驟1中當(dāng)前丟失的事務(wù)列表的表(如果未完成的事務(wù)獲得了活動(dòng)請(qǐng)求,則不再將其視為丟失,必須將其從表中刪除)。
4.確定要終止的會(huì)話(一個(gè)會(huì)話在步驟1的表中至少有一個(gè)未完成的事務(wù),并且該會(huì)話沒有查詢?cè)谶\(yùn)行)。
5.存檔要?jiǎng)h除的數(shù)據(jù)(有關(guān)將被殺死的事務(wù),會(huì)話和連接的信息)。
6.終止會(huì)話。
7.刪除已處理的條目以及那些不能刪除的條目,這些條目已經(jīng)在步驟1中存在很長(zhǎng)時(shí)間了。
以下是該算法實(shí)現(xiàn)的工作示例。
如何實(shí)現(xiàn)刪除丟失交易的算法創(chuàng)建一個(gè)表以列出并檢查丟失的交易
應(yīng)用代碼格式
借助dbForge SQL Complete,我們可以快速輕松地創(chuàng)建一個(gè)表來存儲(chǔ)有關(guān)當(dāng)前丟失的事務(wù)的信息。
1.該工具通過針對(duì)T-SQL代碼的多個(gè)嵌入式提示來幫助您加快常規(guī)編碼的速度。只需單擊幾下即可創(chuàng)建表格。
這樣,我們繼續(xù)完善表創(chuàng)建腳本:
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 標(biāo)識(shí)一個(gè)會(huì)話
2)TransactionID標(biāo)識(shí)丟失的交易
3)CountTranNotRequest代表交易記錄為丟失的次數(shù)
4)CountSessionNotRequest代表將會(huì)話記錄為沒有活動(dòng)查詢并包含丟失的事務(wù)的次數(shù)
5)TransactionBeginTime是指丟失交易的開始日期和時(shí)間
6) InsertUTCDate 標(biāo)識(shí)創(chuàng)建記錄的日期和時(shí)間(UTC)
7) UpdateUTCDate 標(biāo)識(shí)記錄更新的日期和時(shí)間(UTC)。
如何使用SQL Complete格式化文檔將格式應(yīng)用于當(dāng)前文檔
使用哪個(gè)編輯器來創(chuàng)建SQL文檔都沒有關(guān)系,您仍然可以借助SQL Complete Format Document選項(xiàng)對(duì)它進(jìn)行格式化。
格式化之前,腳本如下所示:
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以下是應(yīng)用格式后獲得的腳本:
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
差別可以看到:
這大大提高了代碼的可讀性和可理解性,從而導(dǎo)致更準(zhǔn)確的感知和決策。
將格式應(yīng)用于外部文檔SQL Complete工具還允許僅將格式應(yīng)用于腳本的選定片段。請(qǐng)注意,只有在使用鼠標(biāo)或光標(biāo)選擇要格式化的片段之后,才會(huì)啟用“ 格式選擇”選項(xiàng)。
下圖顯示了格式化之前的腳本片段。
研究下圖,查看格式化后的代碼片段外觀。
在SQL格式化功能也應(yīng)該被提及。借助它的幫助,您可以無縫格式化先前編寫的腳本。
從“ SQL完整”菜單中選擇“ SQL格式化程序”命令后,將出現(xiàn)選擇格式化模式的窗口。您可以選擇格式化選定文件或特定文件夾中的所有文件的格式。在我們的示例中,我們選擇Files。單擊下一步按鈕繼續(xù)。
現(xiàn)在,您需要選擇要格式化的文件。
編譯好要格式化的文件列表后,單擊“ 格式”按鈕。
格式化過程完成后,將出現(xiàn)一個(gè)窗口,其中顯示了已修改的文件數(shù),并且這些文件在SQL Server Management Studio中打開。
以同樣的方式,我們可以重構(gòu)Scripts目錄中所有文件的代碼。要格式化指定文件夾中的所有文件,請(qǐng)?jiān)凇?SQL Formatter向?qū)А敝羞x擇“目錄”選項(xiàng)。
選擇目錄模式后,單擊下一步按鈕繼續(xù)。在下一個(gè)窗口中,單擊添加按鈕以選擇所需的文件夾。值得一提的是,在“ SQL Formatter向?qū)А敝校梢灾付ㄒ袷交奈募U(kuò)展名,還可以選擇在格式化后保持修改后的文件打開并包含子文件夾。
請(qǐng)注意,默認(rèn)情況下,這些文件不會(huì)保存,而是以修改后的格式打開。如果要更改此設(shè)置,則需要清除“ 格式化后保持打開的已修改文件 ”復(fù)選框。取消選中該復(fù)選框后,修改后的文件將不會(huì)在Management Studio中打開,并且更改將立即應(yīng)用并保存。
更多內(nèi)容歡迎持續(xù)關(guān)注我們后續(xù)的教程
想了解更多產(chǎn)品信息或想要購(gòu)買產(chǎn)品正版授權(quán)請(qǐng)點(diǎn)擊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: