具體步驟如下:
10年積累的成都做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有興安盟烏蘭浩特免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1.首先使用下面的命令,將有關(guān)的跟蹤標(biāo)志啟用。
SQL codeDBCC TRACEON (3605,1204,1222,-1)
說明:
3605
將DBCC的結(jié)果輸出到錯(cuò)誤日志。
1204 返回參與死鎖的鎖的資源和類型,以及受影響的當(dāng)前命令。
1222
返回參與死鎖的鎖的資源和類型,以及使用了不符合任何 XSD 架構(gòu)的 XML 格式的受影響的當(dāng)前命令(比1204更進(jìn)一步,SQL
2005及以上可用)。
-1 以全局方式打開指定的跟蹤標(biāo)記。
以上跟蹤標(biāo)志作用域都是全局,即在SQL
Server運(yùn)行過程中,會(huì)一直發(fā)揮作用,直到SQL Server重啟。
如 果要確保SQL Server在重啟后自動(dòng)開啟這些標(biāo)志,可以在SQL
Server服務(wù)啟動(dòng)選項(xiàng)中,使用 /T 啟動(dòng)選項(xiàng)指定跟蹤標(biāo)志在啟動(dòng)期
間設(shè)置為開。(位于SQL Server配置管理器-SQL
Server服務(wù)-SQL Server-屬性-高級(jí)-啟動(dòng)參數(shù))
在運(yùn)行上面的語句后,當(dāng)SQL
Server中發(fā)生死鎖時(shí),已經(jīng)可以在錯(cuò)誤日志中看到了,但還不夠直觀(和其它信息混在一起)。(SSMS
- SQL Server實(shí)例 -
管理 - SQL Server日志)
2.建表,存放死鎖記錄
SQL codeUSE [Cole] --Cole是我的示例數(shù)據(jù)庫(kù),你可以根據(jù)實(shí)際情況修改。 GO
CREATE TABLE DeadLockLog ( id int IDENTITY (1, 1) NOT NULL, LogDate DATETIME, ProcessInfo VARCHAR(10), ErrorText VARCHAR(MAX) )
GO
3.建立JOB
新建一個(gè)JOB(假設(shè)名稱為DeadLockJob),在"步驟"中新建一步驟,隨便寫一個(gè)步驟名稱,數(shù)據(jù)庫(kù)為"Cole",在"命令"欄中輸入以下語句:
SQL code--新建臨時(shí)表 IF OBJECT_ID('tempdb.dbo.#ErrorLog') IS Not Null
DROP TABLE #ErrorLog
CREATE TABLE #ErrorLog (Id int IDENTITY (1, 1) NOT NULL, a DATETIME, b VARCHAR(10), c VARCHAR(MAX)) --將當(dāng)前日志記錄插入臨時(shí)表
INSERT INTO #ErrorLog EXEC master.dbo.sp_readerrorlog --將死鎖信息插入用戶表
insert DeadLockLog
select a, b, c from #ErrorLog where id = (select MAX(id) from #ErrorLog WHERE c Like '%Deadlock encountered%')
DROP TABLE #ErrorLog
4.新建警報(bào)
在"新建警報(bào)"窗體的"常規(guī)"選項(xiàng)卡中,進(jìn)行以下設(shè)置:
名稱:可根據(jù)實(shí)際自行命名,這里我用DeadLockAlert
類型:選擇"SQL
Server性能條件警報(bào)"
對(duì)象:SQLServer:Locks
計(jì)數(shù)器:Number of
Deadlocks/sec
實(shí)例:_Total
計(jì)數(shù)器滿足以下條件時(shí)觸發(fā)警報(bào):高于
值:0
在"響應(yīng)"選項(xiàng)卡中,選中"執(zhí)行作業(yè)",并選擇步驟3中我們新建的作業(yè)(即DeadlockJob)
到這里為止,我們已經(jīng)完成了全部步驟,以后,你就可以隨時(shí)查詢DeadLockLog表,來顯示死鎖信息了。
--查看死鎖
select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name?
from sysprocesses?
where spid in?
( select blocked from sysprocesses where blocked 0 ) or (blocked 0)?
--解鎖
kill 進(jìn)程號(hào)(spid)
詳細(xì)步驟如下:
1、點(diǎn)擊【新建查詢】按鈕,打開SQL命令編輯框,對(duì)數(shù)據(jù)庫(kù)表的操作以及維護(hù)都可以通過編輯SQL命令實(shí)現(xiàn)。
2、在編輯框內(nèi)編輯創(chuàng)建數(shù)據(jù)庫(kù)表的代碼,確認(rèn)代碼無誤后,單擊【執(zhí)行】按鈕,創(chuàng)建數(shù)據(jù)表。
3、創(chuàng)建數(shù)據(jù)表的源代碼如下:
use test go
if exists(select name from sys.tables where name='Student')
drop table Student go
create table Student
(sname nchar(10) primary key,
sex nchar(2) not null,
bir datetime)
數(shù)據(jù)庫(kù)管理系統(tǒng),database management system,簡(jiǎn)稱dbms,是一種操縱和管理數(shù)據(jù)庫(kù)的大型軟件,用于建立、使用和維護(hù)數(shù)據(jù)庫(kù)。用戶通過dbms訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù),數(shù)據(jù)庫(kù)管理員也通過dbms進(jìn)行數(shù)據(jù)庫(kù)的維護(hù)工作。它可使多個(gè)應(yīng)用程序和用戶用不同的方法在同時(shí)或不同時(shí)刻去建立,修改和詢問數(shù)據(jù)庫(kù)。
提供數(shù)據(jù)定義語言(ddl)。用它書寫的數(shù)據(jù)庫(kù)模式被翻譯為內(nèi)部表示。數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)、完整性約束和物理儲(chǔ),存結(jié)構(gòu)保存在內(nèi)部的數(shù)據(jù)字典中。數(shù)據(jù)庫(kù)的各種數(shù)據(jù)操作(如查找、修改、插入和刪除等)和數(shù)據(jù)庫(kù)的維護(hù)管理都是以數(shù)據(jù)庫(kù)模式為依據(jù)的。
死鎖,簡(jiǎn)而言之,兩個(gè)或者多個(gè)trans,同時(shí)請(qǐng)求對(duì)方正在請(qǐng)求的某個(gè)對(duì)象,導(dǎo)致雙方互相等待。簡(jiǎn)單的例子如下:\x0d\x0a trans1 trans2\x0d\x0a ------------------------------------------------------------------------\x0d\x0a 1.IDBConnection.BeginTransaction 1.IDBConnection.BeginTransaction\x0d\x0a 2.update table A 2.update table B\x0d\x0a 3.update table B 3.update table A\x0d\x0a 4.IDBConnection.Commit 4.IDBConnection.Commit \x0d\x0a 那么,很容易看到,如果trans1和trans2,分別到達(dá)了step3,那么trans1會(huì)請(qǐng)求對(duì)于B的X鎖,trans2會(huì)請(qǐng)求對(duì)于A的X鎖,而二者的鎖在step2上已經(jīng)被對(duì)方分別持有了。由于得不到鎖,后面的Commit無法執(zhí)行,這樣雙方開始死鎖。\x0d\x0a 好,我們看一個(gè)簡(jiǎn)單的例子,來解釋一下,應(yīng)該如何解決死鎖問題。\x0d\x0a -- Batch #1\x0d\x0a CREATE DATABASE deadlocktest\x0d\x0a GO\x0d\x0a USE deadlocktest\x0d\x0a SET NOCOUNT ON\x0d\x0a DBCC TRACEON (1222, -1)\x0d\x0a -- 在SQL2005中,增加了一個(gè)新的dbcc參數(shù),就是1222,原來在2000下,我們知道,可以執(zhí)行dbcc \x0d\x0a --traceon(1204,3605,-1)看到所有的死鎖信息。SqlServer 2005中,對(duì)于1204進(jìn)行了增強(qiáng),這就是1222。\x0d\x0a GO \x0d\x0a \x0d\x0a IF OBJECT_ID ('t1') IS NOT NULL DROP TABLE t1\x0d\x0a IF OBJECT_ID ('p1') IS NOT NULL DROP PROC p1\x0d\x0a IF OBJECT_ID ('p2') IS NOT NULL DROP PROC p2\x0d\x0a GO\x0d\x0a CREATE TABLE t1 (c1 int, c2 int, c3 int, c4 char(5000)) \x0d\x0a GO\x0d\x0a DECLARE @x int\x0d\x0a SET @x = 1\x0d\x0a WHILE (@x = [@p1] AND [t1].[c2] = [@p1] AND [deadlocktest].[dbo].[t1].[c2]
回答于?2022-11-16
死鎖檢測(cè)
use master
Select * from sysprocesses where blocked0
--找到SPID
exec sp_lock
--根據(jù)SPID找到OBJID
select object_name(85575343)
--根據(jù)OBJID找到表名
sqlserver的數(shù)據(jù)庫(kù)文件是什么?
以 .MDF結(jié)尾的是數(shù)據(jù)庫(kù)文件,以 .LDF結(jié)尾的是日志文件 ;
在企業(yè)管理器中選擇您的要導(dǎo)入數(shù)據(jù)的數(shù)據(jù)庫(kù),然后點(diǎn)擊右鍵,選擇所有任務(wù)-附加數(shù)據(jù)庫(kù)-選擇MDF文件,就可以了 ;
對(duì)于數(shù)據(jù)庫(kù)的還原,最好的備份數(shù)據(jù)庫(kù)后,再還原數(shù)據(jù)庫(kù)??梢允褂枚ㄆ趥浞?;