PS. SQL Server 2005 Database 에서도 테스트 하였습니다.
쿼리결과를 "텍스트로 결과 표시"로 하셔서 보시기 바랍니다.

[출처 : http://cafe.naver.com/devcore/70]

어떤 프로세스에 락(lock)이 걸려있는지, 그 프로세스에 대한 정보 및 어떤 테이블이 블록킹
당했는지 등을 보여주는 스크립트이다. 이 스크립트는 SQL 서버 7.0과 2000에서 테스트되었다.
이 SQL 스크립트는 다음과 같다.

 
Print 'Server and datetime of report'
select @@servername, getdate()
 
Print 'This will tell you which processes are causing the database blocking on the server.'
Print ''
Print 'If you need to kill any processes, use these spid''s. Make sure you save the report before killing any processes.'
Print ''
set nocount on
SELECT * FROM master..sysprocesses where spid IN (select blocked from master..sysprocesses) and blocked = 0
 
Print 'Below this is a snapshot of all the SQL processes on the server.'
Print 'Save the report and send to the whole database group.'
Print ''
SELECT * FROM master..sysprocesses
 
Print 'These are the queries are causing the blocks.'
Print ''
 
DECLARE @spid int
DECLARE SPID_CURSOR CURSOR FOR 
SELECT spid
FROM master..sysprocesses 
WHERE spid IN ( select blocked 
                from master..sysprocesses) 
AND blocked = 0
FOR READ ONLY
 
OPEN SPID_CURSOR
 
FETCH SPID_CURSOR INTO @spid
 
WHILE @@fetch_status <> -1
BEGIN
        IF @@fetch_status <> -2
        BEGIN
        SELECT '@spid = ' + CONVERT(varchar(20),@spid)
        DBCC INPUTBUFFER (@spid)
        END
        FETCH SPID_CURSOR INTO @spid
END
CLOSE SPID_CURSOR
 
DEALLOCATE SPID_CURSOR
Print 'These are the processes that are being blocked:'
Print ''
SELECT spid FROM master..sysprocesses where blocked <> 0
 
SELECT @spid = NULL
 
Print 'This is the lock info for the blocking processes.'
Print ''
 
        select  convert (smallint, req_spid) As spid, 
                rsc_dbid As dbid, 
                rsc_objid As ObjId,
                
                rsc_indid As IndId,
                substring (v.name, 1, 4) As Type,
                substring (rsc_text, 1, 16) as Resource,
                substring (u.name, 1, 8) As Mode,
                substring (x.name, 1, 5) As Status
        into #BlockerLockInfo
        
        from    master.dbo.syslockinfo,
                master.dbo.spt_values v,
                master.dbo.spt_values x,
                master.dbo.spt_values u
        where   master.dbo.syslockinfo.rsc_type = v.number
                        and v.type = 'LR'
                        and master.dbo.syslockinfo.req_status = x.number
                        and x.type = 'LS'
                        and master.dbo.syslockinfo.req_mode + 1 = u.number
                        and u.type = 'L'
                        and req_spid in (select spid from master..sysprocesses where blocked = 0 and spid IN (select blocked from master..sysprocesses))
 
DECLARE @dbid int,
        @sqlstring nvarchar(255)
 
DECLARE DBIDcursor CURSOR FOR 
SELECT DISTINCT dbid 
FROM #BlockerLockInfo
order by dbid
--SELECT *
--FROM #BlockerLockInfo
 
OPEN DBIDcursor
 
FETCH DBIDcursor INTO @dbid
 
WHILE @@fetch_status <> -1
BEGIN
        IF @@fetch_status <> -2
        BEGIN
        
        SELECT @sqlstring = N'SELECT #BlockerLockInfo.*, a.name FROM #BlockerLockInfo , '+name+'..sysobjects a  WHERE dbid =@dbid AND #BlockerLockInfo.ObjID = a.id ORDER BY spid' from master..sysdatabases where dbid = @dbid
        --SELECT @sqlstring     
        EXEC sp_executesql @sqlstring, N'@dbid int', @dbid
        END
        FETCH DBIDcursor INTO @dbid
 
END
CLOSE DBIDcursor
DEALLOCATE DBIDcursor
drop table #BlockerLockInfo

[출처 : http://korea.internet.com - 테크]

sp_tables
select name from sysobjects where type='U'

-- 테이블 리스트
select * from information_schema.tables

-- 컬럼 상세 정보
select * from information_schema.columns
where table_name = '테이블명'
order by 5

-- 테이블 용량체크하기
SELECT TABLE_NAME = CONVERT(VARCHAR(30), MIN(O.NAME))
     , TABLE_SIZE = LTRIM(STR(SUM(RESERVED) * 8192 / 1024.,15,0) + 'KB')
FROM SYSINDEXES I
 INNER JOIN SYSOBJECTS O ON (O.ID = I.ID)
        WHERE I.INDID IN (0, 1, 255) AND O.XTYPE = 'U'
GROUP BY I.ID
ORDER BY TABLE_NAME ASC

'공부할것들' 카테고리의 다른 글

Microsoft Supoort 사이트  (0) 2008.11.17
Manually uninstall LogMein?  (0) 2008.11.10
무료 소프트웨어야~  (0) 2008.08.16
ActiveX 컨트롤러 설치하기  (0) 2008.08.12
복합기 토너가격 비교  (0) 2008.08.08

-- Database 분리하기
/*
EXEC sp_detach_db glonets
*/

-- Database 연결하기
/*
EXEC sp_attach_db @dbname = N'GLONETS',
   @filename1 = N'C:\uniLITE5\DataBase\GLONETS.MDF',
   @filename2 = N'C:\uniLITE5\DataBase\GLONETS_LOG.LDF'
*/

-- 응급복구모드를 통하여 복원하기
/*
CREATE DATABASE GLONETS
go
sp_configure 'allow updates', 1
go
reconfigure with override
go
UPDATE SYSDATABASES SET STATUS=STATUS|32768 WHERE NAME ='GLONETS'
go
DBCC REBUILD_LOG('GLONETS', 'C:\Program Files\Microsoft SQL Server\MSSQL\data\GLONETS_LOG.LDF')
go
UPDATE SYSDATABASES SET STATUS=24 WHERE NAME ='GLONETS'
go
sp_configure 'allow updates', 0 
go
reconfigure with override
go
*/

-- 자세한 내용은 아래에서 확인해주세요
-- http://faq.hostway.co.kr/zbxe/698

   - Enterprise Manager
     1) 자료를 백업해둡니다. 만일의 사태에 대비해서...
     2) truncate log 해서 자료를 정리해줍니다.

   - Query Analyzer
     1)sp_detach_db pub
       : pub를 데이터베이서에서 분리 시킵니다. drop과는 완전히 다르지요
         drop은 데이터와 로그파일을 모두 지는데 반해 sp_detach_db는
         데이터와 로그파일은 살려둔 상태에서 등록된 DB만 분리시킵니다.

     2)이 상태에서 자료가있는 폴더로 가서 pub.ldf파일을 지웁니다.

     3)sp_attach_single_file_db 'pub', 'c:\mssql7\data\pub.mdf'
       : 이렇게하시면 작업은 다하신거네요.
         Enterprise Manager에 가서 리프래쉬 시키시면 pub database가
         다시 올라와있는 것이 보이실겁니다.
         탐색기로 가셔서 log 파일의 용량을 확인해 보시면..
         최초의 log 상태 크기로 돌아가 있을 겁니다.

- 아마도 로그파일이 너무 커졌을때, 대처방법에 대해서 찾다가 알아낸듯...

출처는 까먹었습니다. 알려주시면 바로 올릴게요.
죄송합니다.

+ Recent posts