數(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ò)程(判斷盤符、路徑,錯(cuò)誤盤符返回,不存在
--路徑自動(dòng)創(chuàng)建)★★★★★★★★★★★★★
USE master
GO
--1.周期性備份數(shù)據(jù)庫(kù)代碼(保留原來(lái)備份的):
--備份文件名為:原數(shù)據(jù)庫(kù)名稱+'_'+備份日期.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
--如果指定盤符有誤不存在,則返回錯(cuò)誤提示:
IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)
BEGIN
RAISERROR(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ù)名稱.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
--如果指定盤符有誤不存在,則返回錯(cuò)誤提示:
IF EXISTS(SELECT 1 FROM @t WHERE id=1 AND c=0)
BEGIN
RAISERROR(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ù)有不---少幫助,歸類如下:
--一、DBCC 幫助類命令
* DBCC HELP('?')
--查詢所有的DBCC命令
* DBCC HELP('命令')
--查詢指定的DBCC命令的語(yǔ)法說(shuō)明
* DBCC USEROPTIONS
--返回當(dāng)前連接的活動(dòng)(設(shè)置)的SET選項(xiàng)
--二、DBCC 檢查驗(yàn)證類命令
* DBCC CHECKALLOG ('數(shù)據(jù)庫(kù)名稱')
--檢查指定數(shù)據(jù)庫(kù)的磁盤空間分配結(jié)構(gòu)的一致性
* DBCC CHECKCATALOG ('數(shù)據(jù)庫(kù)名稱')
--檢查指定數(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è)線程再等待運(yùn)行
--如果大于等于2,考慮CPU達(dá)到瓶頸
--三、DBCC 維護(hù)類命令
* 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
--顯示從客戶機(jī)發(fā)送到服務(wù)器的最后一個(gè)語(yǔ)句
* DBCC OPENTRAN (db_name)
--查詢某個(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) --查看線程消耗情況
--返回多種有用的統(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í)行其它磁盤 I/O 操作,例如磁盤備份。
--3、將 tempdb 放到單獨(dú)的磁盤系統(tǒng)或快速磁盤子系統(tǒng)中。
--4、允許 tempdb 在驅(qū)動(dòng)器上有足夠的擴(kuò)展空間。 使用帶有 ESTIMATE ONLY 的 DBCC
--估計(jì) tempdb 將需要多少空間。
--5、避免運(yùn)行占用大量 CPU 的查詢或批處理作業(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ù)器的名稱)
exec sp_dropserver 'jmsql9' (刪除原來(lái)的服務(wù)器名)
exec sp_addserver 'jmSQL9' ,LOCAL (改為新的服務(wù)器名)
ALTER DATABASE [jm] SET SINGLE_USER (改為單用戶模式)
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 (改為多用戶模式)
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ù)操作可以在用戶事務(wù)下完成以允許用戶回滾所做的更改。如果回滾修復(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,線程ID=kpid,塊進(jìn)程ID=blocked,數(shù)據(jù)庫(kù)ID=dbid,
數(shù)據(jù)庫(kù)名=db_name(dbid),用戶ID=uid,用戶名=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ǔ)上改寫的(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,線程ID=kpid,塊進(jìn)程ID=blocked,數(shù)據(jù)庫(kù)ID=dbid,
數(shù)據(jù)庫(kù)名=db_name(dbid),用戶ID=uid,用戶名=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)文章
SQL?Server忘記sa賬號(hào)密碼重新添加新管理賬號(hào)
這篇文章介紹了SQL?Server忘記sa賬號(hào)密碼重新添加新賬號(hào)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04淺述SQL Server的聚焦強(qiáng)制索引查詢條件和Columnstore Index
本文主要講了強(qiáng)制使用索引條件來(lái)進(jìn)行查詢,當(dāng)對(duì)于使用默認(rèn)創(chuàng)建索引進(jìn)行查詢計(jì)劃時(shí)覺(jué)得不是最優(yōu)解,可以嘗試使用強(qiáng)制索引來(lái)進(jìn)行對(duì)比找出更好得解決方案。簡(jiǎn)短的內(nèi)容,深入的理解.有興趣的朋友可以看下2016-12-12SQL server高并發(fā)生成唯一訂單號(hào)的方法實(shí)現(xiàn)
這篇文章主要介紹了SQL server高并發(fā)生成唯一訂單號(hào)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02SQLServer設(shè)置客戶端使用IP地址登錄的圖文詳解
這篇文章主要介紹了SQLServer設(shè)置客戶端使用IP地址登錄的圖文詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常想詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12詳解SQL Server數(shù)據(jù)庫(kù)狀態(tài)和文件狀態(tài)
本文通過(guò)實(shí)例給大家詳解sqlserver數(shù)據(jù)庫(kù)狀態(tài) (database states) 和文件狀態(tài) (database states),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-09-09將一個(gè)表中個(gè)某一列修改為自動(dòng)增長(zhǎng)的方法
如果表中沒(méi)有數(shù)據(jù)可以使用 drop column然后再add column,如果存在一部分?jǐn)?shù)據(jù)可以使用本文提供的第二種解決方法2014-09-09深入SQL Server中定長(zhǎng)char(n)與變長(zhǎng)varchar(n)的區(qū)別詳解
本篇文章是對(duì)SQL Server中定長(zhǎng)char(n)與變長(zhǎng)varchar(n)的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06