欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

數(shù)據(jù)庫(kù)中經(jīng)常用到的操作和管理數(shù)據(jù)庫(kù)的語(yǔ)句總結(jié)第2/2頁(yè)

 更新時(shí)間:2010年06月09日 01:18:22   作者:  
數(shù)據(jù)庫(kù)中經(jīng)常用到的操作和管理數(shù)據(jù)庫(kù)的語(yǔ)句,感謝作者的辛勤勞動(dòng),很多。


--★★SQL Server 2005及以上版本數(shù)據(jù)庫(kù)批量備份存儲(chǔ)過(guò)程(判斷盤(pán)符、路徑,錯(cuò)誤盤(pán)符返回,不存在
--路徑自動(dòng)創(chuàng)建)★★★★★★★★★★★★★

USE master
GO
--1.周期性備份數(shù)據(jù)庫(kù)代碼(保留原來(lái)備份的):
--備份文件名為:原數(shù)據(jù)庫(kù)名稱(chēng)+'_'+備份日期.bak
IF OBJECT_ID('sp_backupdatabase') IS NOT NULL
DROP PROC sp_backupdatabase
GO
CREATE PROC sp_backupdatabase
@path NVARCHAR(100)--路徑
AS
--路徑名格式標(biāo)準(zhǔn)化
IF RIGHT(@path,1)<>'\' SET @path=@path+'\'
--獲取文件夾信息
DECLARE @t TABLE(id INT IDENTITY,a INT,b INT,c INT)
DECLARE @fpath NVARCHAR(3)
SET @fpath=LEFT(@path,3)
INSERT @t EXEC master..xp_fileexist @fpath
INSERT @t EXEC master..xp_fileexist @path
--如果指定盤(pán)符有誤不存在,則返回錯(cuò)誤提示:
IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)
BEGIN
RAISERROR(N'輸入的盤(pán)符不存在,請(qǐng)重新輸入!',16,1)
RETURN
END
--如果不存在指定的文件夾,則創(chuàng)建:
ELSE IF EXISTS(SELECT 1 FROM @t WHERE b=0 AND id=2)
BEGIN
DECLARE @mddir NVARCHAR(100)
SET @mddir='md '+@path
EXEC master..xp_cmdshell @mddir
END
--開(kāi)始備份數(shù)據(jù)庫(kù)到指定的目錄
DECLARE @s nvarchar(4000)
SELECT @s=ISNULL(@s+';','')
+N'BACKUP database ['+name+'] TO DISK = '''
+@path+name+'_'+CONVERT(NVARCHAR(8),getdate(),112)+N'.bak'''
FROM master..sysdatabases
WHERE name NOT IN('master','tempdb','model','msdb','pubs')--這里篩選不參加備份的數(shù)據(jù)庫(kù)
EXEC(@S)
GO
--調(diào)用方法:
EXEC sp_backupdatabase 'f:\Backup\tony'
/*
--返回信息:
已為數(shù)據(jù)庫(kù) 'mydb',文件 'mydb' (位于文件 1 上)處理了 312 頁(yè)。
已為數(shù)據(jù)庫(kù) 'mydb',文件 'mydb_log' (位于文件 1 上)處理了 1 頁(yè)。
BACKUP DATABASE 成功處理了 313 頁(yè),花費(fèi) 0.733 秒(3.336 MB/秒)。
已為數(shù)據(jù)庫(kù) 'test',文件 'test' (位于文件 1 上)處理了 208 頁(yè)。
已為數(shù)據(jù)庫(kù) 'test',文件 'test_log' (位于文件 1 上)處理了 1 頁(yè)。
BACKUP DATABASE 成功處理了 209 頁(yè),花費(fèi) 0.413 秒(3.951 MB/秒)。
--備份后的文件列表:
mydb_20100418.bak
test_20100418.bak
*/


--2.周期性備份數(shù)據(jù)庫(kù)代碼(自動(dòng)刪除原備份文件):
--備份文件名為:原數(shù)據(jù)庫(kù)名稱(chēng).bak
IF OBJECT_ID('sp_backupdatabase') IS NOT NULL
DROP PROC sp_backupdatabase
GO
CREATE PROC sp_backupdatabase
@path NVARCHAR(100)--路徑
AS
--路徑名格式標(biāo)準(zhǔn)化
IF RIGHT(@path,1)<>'\' SET @path=@path+'\'
--獲取文件夾信息
DECLARE @t TABLE(id INT IDENTITY,a INT,b INT,c INT)
DECLARE @fpath NVARCHAR(3)
SET @fpath=LEFT(@path,3)
INSERT @t EXEC master..xp_fileexist @fpath
INSERT @t EXEC master..xp_fileexist @path
--如果指定盤(pán)符有誤不存在,則返回錯(cuò)誤提示:
IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)
BEGIN
RAISERROR(N'輸入的盤(pán)符不存在,請(qǐng)重新輸入!',16,1)
RETURN
END
--如果不存在指定的文件夾,則創(chuàng)建:
ELSE IF EXISTS(SELECT 1 FROM @t WHERE b=0 AND id=2)
BEGIN
DECLARE @mddir NVARCHAR(100)
SET @mddir='md '+@path
EXEC master..xp_cmdshell @mddir
END
--開(kāi)始備份數(shù)據(jù)庫(kù)到指定的目錄
DECLARE @s nvarchar(4000)
SELECT @s=ISNULL(@s+';','')
+N'BACKUP database ['+name+'] TO DISK = '''
+@path+name+N'.bak'' WITH INIT'
FROM master..sysdatabases
WHERE name NOT IN('master','tempdb','model','msdb','pubs')--這里篩選不參加備份的數(shù)據(jù)庫(kù)
EXEC(@S)
GO
--調(diào)用方法:
EXEC sp_backupdatabase 'f:\Backup\tony2'
/*
--返回信息:
已為數(shù)據(jù)庫(kù) 'mydb',文件 'mydb' (位于文件 1 上)處理了 312 頁(yè)。
已為數(shù)據(jù)庫(kù) 'mydb',文件 'mydb_log' (位于文件 1 上)處理了 1 頁(yè)。
BACKUP DATABASE 成功處理了 313 頁(yè),花費(fèi) 0.599 秒(4.082 MB/秒)。
已為數(shù)據(jù)庫(kù) 'test',文件 'test' (位于文件 1 上)處理了 208 頁(yè)。
已為數(shù)據(jù)庫(kù) 'test',文件 'test_log' (位于文件 1 上)處理了 1 頁(yè)。
BACKUP DATABASE 成功處理了 209 頁(yè),花費(fèi) 0.351 秒(4.651 MB/秒)。
--備份后的文件列表:
mydb.bak
test.bak
*/

--★★DBCC是SQL Server提供的一組控制臺(tái)命令,功能很強(qiáng)大,掌握一些必要的語(yǔ)句,對(duì)操作數(shù)據(jù)庫(kù)有不---少幫助,歸類(lèi)如下:

--一、DBCC 幫助類(lèi)命令

* DBCC HELP('?')
--查詢(xún)所有的DBCC命令
* DBCC HELP('命令')
--查詢(xún)指定的DBCC命令的語(yǔ)法說(shuō)明
* DBCC USEROPTIONS
--返回當(dāng)前連接的活動(dòng)(設(shè)置)的SET選項(xiàng)

--二、DBCC 檢查驗(yàn)證類(lèi)命令

* DBCC CHECKALLOG ('數(shù)據(jù)庫(kù)名稱(chēng)')
--檢查指定數(shù)據(jù)庫(kù)的磁盤(pán)空間分配結(jié)構(gòu)的一致性
* DBCC CHECKCATALOG ('數(shù)據(jù)庫(kù)名稱(chēng)')
--檢查指定數(shù)據(jù)庫(kù)的系統(tǒng)表內(nèi)和系統(tǒng)表間的一致性
* DBCC CHECKCONSTAINTS ('tablename')
--檢查指定表上的指定約束或所有約束的完整性
* DBCC CHECKDB
--檢查數(shù)據(jù)庫(kù)中的所有對(duì)象的分配和結(jié)構(gòu)完整性
* DBCC CHECKFILEGROUP
--檢查指定文件組中所有表在當(dāng)前數(shù)據(jù)庫(kù)中的分配和結(jié)構(gòu)完整性
* DBCC CHECKTABLE
--檢查指定表或索引視圖的數(shù)據(jù)、索引及test、ntest和image頁(yè)的完整性
* DBCC CHECKIDENT
--檢查指定的當(dāng)前標(biāo)識(shí)值
* DBCC SQLPERF(UMSSTATS) undocumented in BOL
--可以用來(lái)檢查是否CPU使用達(dá)到瓶頸
--最關(guān)鍵的一個(gè)參考數(shù)據(jù)num runnable,表明當(dāng)前有多少個(gè)線(xiàn)程再等待運(yùn)行
--如果大于等于2,考慮CPU達(dá)到瓶頸

--三、DBCC 維護(hù)類(lèi)命令

* DBCC CLEANTABLE ('db_name','table_name')
--回收Alter table drop column語(yǔ)句刪除可變長(zhǎng)度列或text
* DBCC DBREINDEX
--重建指定數(shù)據(jù)庫(kù)的一個(gè)或多個(gè)索引
* DBCC INDEXDEFRAG
--對(duì)表或視圖上的索引和非聚集索引進(jìn)行碎片整理
* DBCC PINTABLE (db_id,object_id)
--將表數(shù)據(jù)駐留在內(nèi)存中
--查看哪些表駐留在內(nèi)存的方法是:
select objectproperty(object_id('tablename'),'tableispinned')
* DBCC UNPINTABLE (db_id,object_id)
--撤消駐留在內(nèi)存中的表
* DBCC SHRINKDATABASE(db_id,int)
--收縮指定數(shù)據(jù)庫(kù)的數(shù)據(jù)文件和日志文件大小
* DBCC SHRINKFILE(file_name,int)
--收縮相關(guān)數(shù)據(jù)庫(kù)的指定數(shù)據(jù)文件和日志文件大小

--四、DBCC 性能調(diào)節(jié)命令

* DBCC dllname(FREE)
sp_helpextendedproc 查看加載的擴(kuò)展PROC
--在內(nèi)存中卸載指定的擴(kuò)展過(guò)程動(dòng)態(tài)鏈接庫(kù)(dll)
* DBCC DROPCLEANBUFFERS
--從緩沖池中刪除所有緩沖區(qū)
* DBCC FREEPROCCACHE
--從過(guò)程緩沖區(qū)刪除所有元素
* DBCC INPUTBUFFER
--顯示從客戶(hù)機(jī)發(fā)送到服務(wù)器的最后一個(gè)語(yǔ)句
* DBCC OPENTRAN (db_name)
--查詢(xún)某個(gè)數(shù)據(jù)庫(kù)執(zhí)行時(shí)間最久的事務(wù),由哪個(gè)程序擁有
* DBCC SHOW_STATISTICS
--顯示指定表上的指定目標(biāo)的當(dāng)前分布統(tǒng)計(jì)信息
* DBCC SHOWCONTIG
--顯示指定表的數(shù)據(jù)和索引的碎片信息
* DBCC SQLPERF
(logspace) --查看各個(gè)DB的日志情況
(iostats) --查看IO情況
(threads) --查看線(xiàn)程消耗情況
--返回多種有用的統(tǒng)計(jì)信息
* DBCC CACHESTATS
--顯示SQL Server 2000內(nèi)存的統(tǒng)計(jì)信息
* DBCC CURSORSTATS
--顯示SQL Server 2000游標(biāo)的統(tǒng)計(jì)信息
* DBCC MEMORYSTATS
--顯示SQL Server 2000內(nèi)存是如何細(xì)分的
* DBCC SQLMGRSTATS
--顯示緩沖中先讀和預(yù)讀準(zhǔn)備的SQL語(yǔ)句

--五、DBCC 未公開(kāi)的命令

* DBCC ERRLOG
--初始化SQL Server 2000的錯(cuò)誤日志文件
* DBCC FLUSHPROCINDB (db_id)
--清除SQL Server 2000服務(wù)器內(nèi)存中的某個(gè)數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程緩存內(nèi)容
* DBCC BUFFER (db_name,object_name,int(緩沖區(qū)個(gè)數(shù)))
--顯示緩沖區(qū)的頭部信息和頁(yè)面信息
* DBCC DBINFO (db_name)
--顯示數(shù)據(jù)庫(kù)的結(jié)構(gòu)信息
* DBCC DBTABLE
--顯示管理數(shù)據(jù)的表(數(shù)據(jù)字典)信息
* DBCC IND (db_name,table_name,index_id)
--查看某個(gè)索引使用的頁(yè)面信息
* DBCC REBUILDLOG
--重建SQL Server 2000事務(wù)日志文件
* DBCC LOG (db_name,3) (-1--4)
--查看某個(gè)數(shù)據(jù)庫(kù)使用的事物日志信息
* DBCC PAGE
--查看某個(gè)數(shù)據(jù)庫(kù)數(shù)據(jù)頁(yè)面信息
* DBCC PROCBUF
--顯示過(guò)程緩沖池中的緩沖區(qū)頭和存儲(chǔ)過(guò)程頭
* DBCC PRTIPAGE
--查看某個(gè)索引頁(yè)面的每行指向的頁(yè)面號(hào)
* DBCC PSS (user,spid,1)
--顯示當(dāng)前連接到SQL Server 2000服務(wù)器的進(jìn)程信息
* DBCC RESOURCE
--顯示服務(wù)器當(dāng)前使用的資源情況
* DBCC TAB (db_id,object_id)
--顯示數(shù)據(jù)頁(yè)面的結(jié)構(gòu)

六、DBCC跟蹤標(biāo)記

--跟蹤標(biāo)記用于臨時(shí)設(shè)置服務(wù)器的特定特征或關(guān)閉特定行為,常用于診斷性能問(wèn)題或調(diào)試存儲(chǔ)過(guò)程或復(fù)雜的---計(jì)算機(jī)系統(tǒng)
* DBCC TRACEON (3604)
--打開(kāi)跟蹤標(biāo)記
* DBCC TRACEOFF
--關(guān)閉跟蹤標(biāo)記
* DBCC TRACESTATS
--查看跟蹤標(biāo)記狀態(tài)

--七、使用 DBCC 結(jié)果集輸出

  --許多 DBCC 命令可以產(chǎn)生表格格式的輸出(使用 WITH TABLERESULTS 選項(xiàng))。該信息可裝載到
--中以便將來(lái)使用。以下顯示一個(gè)示例腳本:

  
  CREATE TABLE DBCCResult (

  DBCCFlag INT,

  Result INT

  )



  INSERT INTO DBCCResult

  EXEC ('DBCC TRACESTATUS (-1) WITH NO_INFOMSGS')



  SELECT *

  FROM DBCCResult
--八、官方使用DBCC的建議
--1、在系統(tǒng)使用率較低時(shí)運(yùn)行 CHECKDB。
--2、請(qǐng)確保未同時(shí)執(zhí)行其它磁盤(pán) I/O 操作,例如磁盤(pán)備份。
--3、將 tempdb 放到單獨(dú)的磁盤(pán)系統(tǒng)或快速磁盤(pán)子系統(tǒng)中。
--4、允許 tempdb 在驅(qū)動(dòng)器上有足夠的擴(kuò)展空間。 使用帶有 ESTIMATE ONLY 的 DBCC
--估計(jì) tempdb 將需要多少空間。
--5、避免運(yùn)行占用大量 CPU 的查詢(xún)或批處理作業(yè)。
--6、在 DBCC 命令運(yùn)行時(shí),減少活動(dòng)事務(wù)。
--7、使用 NO_INFOMSGS 選項(xiàng)顯著減少處理和 tempdb 的使用。
--8、考慮使用帶有 PHYSICAL_ONLY 選項(xiàng)的 DBCC CHECKDB 來(lái)檢查頁(yè)和記錄首部
--的物理結(jié)構(gòu)。當(dāng)硬件導(dǎo)致的錯(cuò)誤被置疑時(shí),這個(gè)操作將執(zhí)行快速檢查。

--在發(fā)布,訂閱復(fù)制時(shí)要用服務(wù)器實(shí)名時(shí)可以這樣:

select * from sysservers (可以找到原來(lái)服務(wù)器的名稱(chēng))




exec sp_dropserver 'jmsql9' (刪除原來(lái)的服務(wù)器名)

exec sp_addserver 'jmSQL9' ,LOCAL (改為新的服務(wù)器名)

ALTER DATABASE [jm] SET SINGLE_USER (改為單用戶(hù)模式)

DBCC CHECKDB("databasename",REPAIR_REBUILD) WITH TABLOCK (修復(fù)數(shù)據(jù)庫(kù))

DBCC CHECKTABLE("tablename",repair_rebuild) with tablock (修復(fù)表)

DBCC DBREINDEX ('t_icitem' , ' ') 修復(fù)此表所有的索引。

ALTER DATABASE [jm] SET MULTI_USER (改為多用戶(hù)模式)

REPAIR_ALLOW_DATA_LOSS:執(zhí)行由REPAIR_REBUILD 完成的所有修復(fù),包括對(duì)行和頁(yè)進(jìn)行分配和取消分配以改正分配錯(cuò)誤、結(jié)構(gòu)行或頁(yè)的錯(cuò)誤,以及刪除已損壞的文本對(duì)象。這些修復(fù)可能會(huì)導(dǎo)致一些數(shù)據(jù)丟失。修復(fù)操作可以在用戶(hù)事務(wù)下完成以允許用戶(hù)回滾所做的更改。如果回滾修復(fù),則數(shù)據(jù)庫(kù)仍會(huì)含有錯(cuò)誤,應(yīng)該從備份進(jìn)行恢復(fù)。如果由于所提供修復(fù)等級(jí)的緣故遺漏某個(gè)錯(cuò)誤的修復(fù),則將遺漏任何取決于該修復(fù)的修復(fù)。修復(fù)完成后,備份數(shù)據(jù)庫(kù)。

REPAIR_FAST 進(jìn)行小的、不耗時(shí)的修復(fù)操作,如修復(fù)非聚集索引中的附加鍵。這些修復(fù)可以很快完成,并且不會(huì)有丟失數(shù)據(jù)的危險(xiǎn)。

REPAIR_REBUILD 執(zhí)行由REPAIR_FAST 完成的所有修復(fù),包括需要較長(zhǎng)時(shí)間的修復(fù)(如重建索引),執(zhí)行這些修復(fù)時(shí)不會(huì)有丟失數(shù)據(jù)的危險(xiǎn)。

dbcc shrinkdatabase (jm) 壓縮數(shù)據(jù)庫(kù)

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/fredrickhu/archive/2009/10/14/4669452.aspx

--★★獲得job執(zhí)行的步驟內(nèi)容★★★★★★★★★★★★★★★★

select j.name,s.step_id,s.step_name,s.command
from msdb.dbo.sysjobs_view j join msdb.dbo.sysjobsteps s
on j.job_id=s.job_id;

--★★查看死鎖和阻塞并殺死它們★★★★★★★★★★★★★★★★

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_lockinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_lockinfo]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


/*--處理死鎖

查看當(dāng)前進(jìn)程,或死鎖進(jìn)程,并能自動(dòng)殺掉死進(jìn)程

因?yàn)槭轻槍?duì)死的,所以如果有死鎖進(jìn)程,只能查看死鎖進(jìn)程
當(dāng)然,你可以通過(guò)參數(shù)控制,不管有沒(méi)有死鎖,都只查看死鎖進(jìn)程

感謝: caiyunxia,jiangopen 兩位提供的參考信息

--鄒建 2004.4--*/

/*--調(diào)用示例

exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=1, --是否殺掉死鎖的進(jìn)程,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒(méi)有死鎖的進(jìn)程,是否顯示正常進(jìn)程信息,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標(biāo)志,
進(jìn)程ID=spid,線(xiàn)程ID=kpid,塊進(jìn)程ID=blocked,數(shù)據(jù)庫(kù)ID=dbid,
數(shù)據(jù)庫(kù)名=db_name(dbid),用戶(hù)ID=uid,用戶(hù)名=loginame,累計(jì)CPU時(shí)間=cpu,
登陸時(shí)間=login_time,打開(kāi)事務(wù)數(shù)=open_tran, 進(jìn)程狀態(tài)=status,
工作站名=hostname,應(yīng)用程序名=program_name,工作站進(jìn)程ID=hostprocess,
域名=nt_domain,網(wǎng)卡地址=net_address
into #t from(
select 標(biāo)志='死鎖的進(jìn)程',
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select '|_犧牲品_>',
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2

select @count=@@rowcount,@i=1

if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 標(biāo)志='正常的進(jìn)程',
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end

if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@標(biāo)志 varchar(10)
while @i<=@count
begin
select @spid=進(jìn)程ID,@標(biāo)志=標(biāo)志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標(biāo)志='死鎖的進(jìn)程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(進(jìn)程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,進(jìn)程的SQL語(yǔ)句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

----------版本2: 我在鄒建的基礎(chǔ)上改寫(xiě)的(KILL 死鎖時(shí)間超過(guò)15秒的死鎖進(jìn)程 ---------------

/*
exec p_lockinfo 0,1;
*/
alter proc p_lockinfo
@kill_lock_spid bit=1, --是否殺掉死鎖的進(jìn)程,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒(méi)有死鎖的進(jìn)程,是否顯示正常進(jìn)程信息,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標(biāo)志,
進(jìn)程ID=spid,線(xiàn)程ID=kpid,塊進(jìn)程ID=blocked,數(shù)據(jù)庫(kù)ID=dbid,
數(shù)據(jù)庫(kù)名=db_name(dbid),用戶(hù)ID=uid,用戶(hù)名=loginame,累計(jì)CPU時(shí)間=cpu,等待時(shí)間=waittime,
登陸時(shí)間=login_time,打開(kāi)事務(wù)數(shù)=open_tran, 進(jìn)程狀態(tài)=status,
工作站名=hostname,應(yīng)用程序名=program_name,工作站進(jìn)程ID=hostprocess,
域名=nt_domain,網(wǎng)卡地址=net_address
into #t from(
select 標(biāo)志='死鎖的進(jìn)程',
spid,kpid,a.blocked,dbid,uid,loginame,cpu,waittime,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select '|_犧牲品_>',
spid,kpid,blocked,dbid,uid,loginame,cpu,waittime,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2

select @count=@@rowcount,@i=1

if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 標(biāo)志='正常的進(jìn)程',
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,waittime,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end

if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(4000))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@標(biāo)志 varchar(10), @等待時(shí)間 int
while @i<=@count
begin
select @spid=進(jìn)程ID,@標(biāo)志=標(biāo)志, @等待時(shí)間=等待時(shí)間 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標(biāo)志='死鎖的進(jìn)程' and @等待時(shí)間 >=15000 exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(進(jìn)程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,進(jìn)程的SQL語(yǔ)句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

相關(guān)文章

最新評(píng)論