검색 질의어: 대기유형 PAGEIOLATCH_EX

********** 튜닝의 절차
http://databaser.net/moniwiki/wiki.php/%ED%8A%9C%EB%8B%9D%EC%9D%98%EC%A0%88%EC%B0%A8

********** PageIOLatch 관한 짧은 내용
http://blog.naver.com/PostView.nhn?blogId=hrk007&logNo=60062365512&viewDate=&currentPage=1&listtype=0

출처 : http://www.databasejournal.com/features/mssql/article.php/3379901/Moving-the-Tempdb-and-Master-Database-in-SQL-Server.htm

use master
go
Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
go
Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
Go

SQL 서버를 설치하면 기본 설치 드라이브에 tempdb를 생성하는데,
tempdb를 많이 쓰는 프로그램에서 설치 드라이브의 공간을 모두 사용하게 되어, 시스템이 느려지는 등의 예기치 못한 상황이 발생함
=> 조치사항. 추가로 장착한 하드디스크에 tempdb를 옮겨주는 작업을 진행 함

암튼.. 위에처럼 작업 후, SQL서버를 재시작을 해주면 tempdb 위치가 변경됨
(단, 기존 tempdb 폴더에 있던 mdf/ldf는 삭제되지 않으므로 직접가서 삭제하세요.)

PS. 예전에 MS사 DB 서버의 셋팅 환경을 정보를 인터넷으로 본적이 있는데,
거기는 운영체제 Disk와 tempdb Disk, 실운영 DB가 있는 Disk를 별도로 구동하고 있었다.
각자 하는 용도가 다르니 Disk를 분리하여 운영함. 백업용 Disk도 별도 구성하여 사용한것으로 봄
MSSQL CTE 재귀, 트리구조 쿼리구현
http://programmers.tistory.com/339

ㅠㅠ 어렵다.

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

http://support.microsoft.com/kb/321185/ko

 문서에서는 현재 Microsoft SQL Server 버전 번호와 해당 제품 또는 서비스 팩(SP) 수준을 확인하는 방법을 설명합니다. 또한 Microsoft SQL Server 2000이나 Microsoft SQL Server 7.0을 사용 중인 경우 특정 에디션을 확인하는 방법도 설명합니다.

실행 중인 SQL Server 2005의 버전을 확인하는 방법

실행 중인 Microsoft SQL Server 2005의 버전을 확인하려면 SQL Server Management Studio를 사용하여 SQL Server 2005에 연결한 다음 아래 Transact-SQL 문을 실행합니다.
SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
실행 결과는 다음과 같습니다.
  • 제품 버전(예: "9.00.1399.06")
  • 제품 수준(예: "RTM")
  • 에디션(예: "Enterprise Edition")
예를 들어, 다음과 유사한 실행 결과가 나타납니다.
표 축소표 확대
9.00.1399.06 RTM Enterprise Edition
다음 표에는 Sqlservr.exe 버전 번호가 나열되어 있습니다.
표 축소표 확대
릴리스 Sqlservr.exe
RTM 2005.90.1399
SQL Server 2005 서비스 팩 1 2005.90.2047
SQL Server 2005 서비스 팩 2 2005.90.3042

실행 중인 SQL Server 2000의 버전을 확인하는 방법

실행 중인 SQL Server 2000의 버전을 확인하려면 쿼리 분석기를 사용하여 SQL Server 2000에 연결한 다음 아래 코드를 실행합니다.
SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
실행 결과는 다음과 같습니다.
  • 제품 버전(예: 8.00.534)
  • 제품 수준(예: "RTM" 또는 "SP2")
  • 에디션(예: "Standard Edition") 예를 들어, 다음과 유사한 실행 결과가 나타납니다.

    8.00.534 RTM Standard Edition
다음 표에는 Sqlservr.exe 버전 번호가 나열되어 있습니다.
표 축소표 확대
릴리스 Sqlservr.exe
RTM 2000.80.194.0
SQL Server 2000 SP1 2000.80.384.0
SQL Server 2000 SP2 2000.80.534.0
SQL Server 2000 SP3 2000.80.760.0
SQL Server 2000 SP3a 2000.80.760.0
SQL Server 2000 SP4 2000.8.00.2039

실행 중인 SQL Server 7.0의 버전을 확인하는 방법

실행 중인 SQL Server 7.0의 버전을 확인하려면 쿼리 분석기를 사용하여 SQL Server 7.0에 연결한 다음 아래 코드를 실행합니다.
SELECT @@VERSION
다음과 유사한 실행 결과가 나타납니다.
Microsoft SQL Server  7.00 - 7.00.623 (Intel X86)
        Nov 27 1998 22:20:07
        Copyright (c) 1988-1998 Microsoft Corporation
        Desktop Edition on Windows NT 5.1 (Build 2600: )
참고 이 예제에서 버전 번호는 7.00.623입니다.

다음 표의 버전 번호를 사용하여 제품 또는 서비스 팩 수준을 확인합니다.
표 축소표 확대
버전 번호 서비스 팩
7.00.1063 SQL Server 7.0 서비스 팩 4(SP4)
7.00.961 SQL Server 7.0 서비스 팩 3(SP3)
7.00.842 SQL Server 7.0 서비스 팩 2(SP2)
7.00.699 SQL Server 7.0 서비스 팩 1(SP1)
7.00.623 SQL Server 7.0 RTM(Release To Manufacturing)
@@VERSION에서 보고하는 버전 번호가 이 표에 없으면 SQL Server에 핫픽스나 보안 업데이트 빌드가 실행 중인 것입니다. 예를 들어, @@VERSION이 7.00.859의 버전 번호를 보고하면 핫픽스가 설치된 SQL Server 7.0 SP2를 실행 중인 것입니다. 버전 번호는 Sqlservr.exe 실행 파일의 새 버전이 나올 때마다 증가합니다. 자세한 내용은 핫픽스나 보안 업데이트에 대한 Readme.txt 파일을 참조하십시오.

실행 중인 SQL Server 6.5의 버전을 확인하는 방법

실행 중인 Microsoft SQL Server 6.5의 버전을 확인하려면 Isql_w를 사용하여 SQL Server 6.5에 연결한 다음 아래 코드를 실행합니다.
SELECT @@VERSION
다음 표의 버전 번호를 사용하여 제품 또는 서비스 팩 수준을 확인합니다.
표 축소표 확대
버전 번호 서비스 팩
6.50.479 SQL Server 6.5 서비스 팩 5a(SP5a) 업데이트
6.50.416 SQL Server 6.5 서비스 팩 5a(SP5a)
6.50.415 SQL Server 6.5 서비스 팩 5(SP5)
6.50.281 SQL Server 6.5 서비스 팩 4(SP4)
6.50.258 SQL Server 6.5 서비스 팩 3(SP3)
6.50.240 SQL Server 6.5 서비스 팩 2(SP2)
6.50.213 SQL Server 6.5 서비스 팩 1(SP1)
6.50.201 SQL Server 6.5 RTM
@@VERSION에서 보고하는 버전 번호가 이 표에 없으면 SQL Server에 핫픽스나 보안 업데이트 빌드가 실행 중인 것입니다. 버전 번호는 Sqlservr.exe 실행 파일의 새 버전이 나올 때마다 증가합니다. 자세한 내용은 핫픽스나 보안 업데이트에 대한 Readme.txt 파일을 참조하십시오.

실행 중인 SQL Server의 에디션을 확인하는 방법

실행 중인 SQL Server의 에디션을 잘 모를 경우 @@VERSION에서 반환하는 출력의 마지막 줄에서 연결한 에디션을 보고합니다. 다음 예제는 Windows NT 5.0에 설치된 SQL Server 2000의 Standard Edition(빌드 2195: 서비스 팩 2)입니다.

참고 앞에 제공된 빌드와 서비스 팩 정보는 SQL Server가 아니라 운영 체제에 대한 것입니다.
Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 2)

본문보러가기 : Mass SQL Injection 일괄 삭제하기 - VBScript

MASS SQL Injection 으로 고통받는 분들을 위해  zasfe 님께서 올려주신, VBScript를 보았습니다.

저는 SQL Injection으로 고생한건 아니지만,
SQL DB에서 TEXT 필드의 일부내용을 UPDATE하려고 했지만..

하루종일 updatetext 명령으로 되지도 않았던 삭제가..
(주소값인가 참조값이.. 계속 다른값을 삭제하면서 헛다리 짚었는데..)

포기하기 직전..
zasfe님의 VBScript에서 제가 삭제하고 싶은 문구로 변경하고..

cscript..덜덜덜..
단, 10초만에.. 문구가 깔끔히 제거가 되었습니다.

정말... 감사드립니다. _(__)_
  1. Favicon of http://zasfe.com BlogIcon Zasfe 2009.04.05 23:50

    도움이 되셨다니 다행입니다
    다만 사용에는 주의해주세요 기본적으로 디비상의 모든 문자를 비교, 삭제하는 스크립트 입니다
    Text 필드뿐 아니라 char 필드의 내용도 지워버릴수 있습니다

http://ttongfly.net/zbxe/?mid=database&document_srl=45402

-- 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 상태 크기로 돌아가 있을 겁니다.

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

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

  1. Favicon of http://offree.net/ BlogIcon 도아 2007.10.08 12:19

    최근 글은 모두 SQL에 대한 글이군요. 저도 한때는 자주 사용했었는데 요즘은 거의 사용하지 않고 있습니다.

    제 블로그에 답글을 달아 주신 분들(http://offree.net/entry/Greetings-Reply )을 순회하고 있습니다. 소중한 댓글 감사합니다.

과다한 DB 로그 지우기
이거 써서 어떤 문제가 생길지도 난 모른다.. -_-

우선 DB백업 후 하기!

backup log DB명 with no_log  -- 로그지우기....
dbcc shrinkfile(DB명_LOG,10) -- 10M로 로그파일 축소...
순서대로 해야 한다
SP_HELPDB DB명으로 확인

------- 예 -------
backup log MyDB with no_log -- MyDB로그지우기
dbcc shrinkdatabase(MyDB,1) -- MyDB로그 파일을 1MB

--exec SP_REBUILD_INDEX
--go
backup log MyDB with truncate_only -- MyDB변경
dbcc shrinkdatabase (MyDB) -- MyDB변경
DBCC SQLPERF (LOGSPACE)

+ Recent posts