MS-SQL / SQL Server

Lock(락) 자동으로 죽이기


-- 로그 테이블 생성


CREATE TABLE [dbo].[LogLockKill](
 [LogDate] [char](10) NOT NULL CONSTRAINT [DF_LogLockKill_LogDate]  DEFAULT (CONVERT([char](10),getdate(),(120))),
 [LogDateTime] [datetime] NOT NULL CONSTRAINT [DF_LogLockKill_LogDateTime]  DEFAULT (getdate()),
 [SpID] [int] NOT NULL,
 [Status] [nvarchar](30) NOT NULL,
 [LoginName] [nvarchar](128) NOT NULL,
 [HostName] [nvarchar](128) NOT NULL,
 [Blocked] [smallint] NOT NULL,
 [DbName] [varchar](30) NOT NULL,
 [Cmd] [nvarchar](16) NOT NULL,
 [WaitType] [binary](2) NOT NULL
) ON [PRIMARY]

GO

-- 인덱스 생성
CREATE NONCLUSTERED INDEX [IX_LogLockKill] ON [dbo].[LogLockKill] 
(
 [LogDate] DESC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]


CREATE NONCLUSTERED INDEX [IX_LogLockKill_1] ON [dbo].[LogLockKill] 
(
 [SpID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

 

 

 

-- 잡으로 1분 혹은 5분등 적당한 주기로 아래의 쿼리를 돌린다.

-- 아래의 쿼리 중간 정도 에 보면.. (IF (LEN(@spid) > 0 AND Rtrim(@loginame) = 'accountforweb')) 이라는 부분이 있습니다.

-- 혹시 특정 계정에 한해서 lock(락)이 걸리는걸 죽이고 싶으시다면 accountforweb 부분에 그 계정명을 적으시면 됩니다.

-- 개인적으로는 특정계정에 한해서 하는게 좋을것 같습니다.

-- 대용량 데이터베이스에서 잡에서 집계하는 데이터양이 많다거나 여러가지 이유로 끊겨버리면 안되니까요.

 

DECLARE @spid int, @status nvarchar(30), @loginame nvarchar(128), @hostname nvarchar(128), @blocked smallint, @dbname varchar(30), @cmd nvarchar(16), @waittype binary(2)
DECLARE @StrSql nvarchar(20)
DECLARE @IsOK bit

SET @IsOK = 0

DECLARE DB_Cursor CURSOR FOR 
 SELECT spid, status, loginame, hostname, blocked, db_name(dbid) dbname, cmd, waittype FROM master.dbo.sysprocesses WHERE spid IN (SELECT blocked FROM master.dbo.sysprocesses) AND blocked = 0
OPEN DB_Cursor

FETCH NEXT FROM DB_Cursor
INTO @spid , @status , @loginame , @hostname , @blocked , @dbname , @cmd , @waittype
WHILE @@FETCH_STATUS = 0
BEGIN

 
 
 BEGIN TRY
--  IF (LEN(@spid) > 0 AND Rtrim(@loginame) = 'accountforweb')

IF (LEN(@spid) > 0 )
  BEGIN
   
   SET @StrSql = 'KILL ' + CONVERT(VARCHAR, @spid)
   EXEC sp_executesql @StrSql    
   
   IF @@ERROR = 0
    SET @IsOK = 1
  END
 END TRY
 
 BEGIN CATCH
  SET @IsOK = 0

--  SELECT ERROR_NUMBER()
--  SELECT ERROR_MESSAGE()
 END CATCH


 IF (@IsOK = 1)
 BEGIN
  INSERT INTO dbo.LogLockKill (SpID, Status, LoginName, HostName, Blocked, DbName, Cmd, WaitType)
  VALUES (@spid , @status , Rtrim(@loginame) , Rtrim(@hostname) , @blocked , @dbname , @cmd , @waittype)

  SET @IsOK = 0
 END


 FETCH NEXT FROM DB_Cursor
 INTO @spid , @status , @loginame , @hostname , @blocked , @dbname , @cmd , @waittype

END

CLOSE DB_Cursor
DEALLOCATE DB_Cursor

MS-SQL / SQL Server

SQL Server 데이터 파일 축소


SQL Server 2005 에서 데이터(mdf,ndf) 파일을 축소하는 방법에 대해서 아래와 같이 정리하였습니다.

데이터 파일의 할당 정보는 DBCC SHOWFILESTATS 명령을 사용하여 확인할 수 있습니다. 트랜잭션 로그 파일의 현재 사용 가능한 빈공간을 조회할 때 DBCC SQLPERF(LOGSPACE) 명령을 사용하면 됩니다.


USE LAIGO

GO

DBCC SHOWFILESTATS



아래와 같이 LAIGO 데이터베이스의 데이터 파일 LAIGO 의 전체 크기와 사용량을 확인할 수 있습니다. 

Fileid FileGroup TotalExtents UsedExtents Name FileName

--------------------------------------------------------------------------------------------------------------

1 1 880 92 LAIGO D:\LAIGO.mdf


(1개 행 적용됨)



자, 산수시간입니다.

SQL Server 의 기본 저장 단위 Page 의 크기는 8KB, 이며 8개의 연속 페이지로 크기가 고정된 Extent 로 저장됩니다.

1MB = 1024KB = 128(1024/8) Page = 16(1024/64) Extents


TotalExtents 값이 880 Extents 면, 1MB가 16 Extents 이므로 880/16 = 55 MB 가 됩니다.

UsedExtents 값이 92 면, 92/16 = 5.75 MB 가 됩니다.


즉, 현재 할당된 데이터 파일의 크기는 55MB 입니다만 실제 사용량은 5.75MB 라는 것을 알 수 있습니다. 


불필요한 공간을 줄이기 위해 데이터 파일을 축소하는 방법은 아래와 같습니다. LAIGO 파일의 크기를 10MB 로 축소하라는 의미입니다. 실제 TotalExtents 가 160 즉, 10MB 로 줄었습니다.


DBCC SHRINKFILE (LAIGO, 10)


Fileid FileGroup TotalExtents UsedExtents Name FileName

--------------------------------------------------------------------------------------------------------------

1 1 160 92 LAIGO D:\LAIGO.mdf


(1개 행 적용됨)



TRUNCATEONLY 를 사용해 보면 어떨까요?


DBCC SHRINKFILE (LAIGO, TRUNCATEONLY)

DBCC SHOWFILESTATS


아직 사용되지 않은 뒷부분 빈공간이 싹뚝 잘려 나갔습니다.

Fileid FileGroup TotalExtents UsedExtents Name FileName

--------------------------------------------------------------------------------------------------------------

1 1 92 92 LAIGO D:\LAIGO.mdf


(1개 행 적용됨)


Single user 모드가 아니어도 작업은 가능합니다만 가능하면 Single User 모드가 아닌 상태에서 Deadlock 이 발생하는 사례가 있으므로 급한 상황이 아니라면 Single user 모드에서 작업하는 게 좋을 것 같다는 의견입니다. 만약 작업이 실패할 경우에는 SQL Error Log 을 살펴봐야 할 것 같습니다.

ALTER DATABASE LAIGO SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO


DBCC SHRINKFILE(LAIGO_DATA1, 3000) -- 3GB


ALTER DATABASE LAIGO SET MULTI_USER
GO



[참고자료]

DBCC SHRINKFILE(Transact-SQL)
http://msdn.microsoft.com/ko-kr/library/ms189493(SQL.90).aspx



일본생활 / 도쿄생활

AKB48 미네기시 미나미 (峯岸みなみ) 



어제 같이 AKB48 미네기시 미나미 (峯岸みなみ)랑 같이 전철타고 오면서...

 

그 이후로 미나미에 푹 빠졌다..

 

크하하핫~~

 

AKB48... 그다지 관심은 없었는데....

 

썩 좋은 이미지도 아니었고...

 

근데 실제로 보니.. 매력이 흘러 넘치더라...

 

위의 사진은 미나미 핸드폰으로 본 사진들...

 

내 옆에서 블로그 사진들을 하나씩 핸드폰으로 보는데...

 

전철에서 본 사진.. ^^

 

키는 좀 작았지만.... 아기자기한게 귀엽더라....

일본생활 / 도쿄생활

일본 걸그룹 AKB48의 미네기시 미나미와 같이 집으로 돌아왔다.





아... 오늘은 비가 온다...

 

헉!!!

 

야마노테센이 멈췄다.... 흠...

 

어쩔수 없지.. 둘러가자!!!

 

히비야센을 타고 히비야역에서 갈아타는데...

 

귀여운 여자아이 발견...

 

그냥 같은 전철에 탔다...

 

그러고 집에 오는 도중....

 

그 여자애가 핸드폰으로 블로그에 올린 사진들을 보고 있었다...

 

블로그의 내용을 보는데.... 사무실?? 멤버들??

 

흠...

 

그리고 사진들을 보는데... AKB 사진이....

 

으응???

 

연예인인가???

 

그렇게 사람많은 전철안에서 바로 옆에서서 같이 있었다...

 

동네는 우리 동네에 사는가보다..

 

같은 역에서 내렸다..

 

흠..

 

집으로 돌아와서... AKB48 검색!!

 

허걱!!!!

 

발견!!!

 

미네기시 미나미!!!

 

미나미의 블로그 발견!!

 

허걱!!!!

 

핸드폰으로 보던 사진들이 쭉~~~~ 나온다...

 

흐흐흐흐미....

 

전철타고 평범하게 다니길래...

 

그냥 일반인인줄 알았는데.....

 

AKB48 멤버라니......

 

크핫!!!!!!

MS-SQL / SQL Server

미러링 강제종료


alter database 데이터베이스명 Set Partner off

일본생활 / 도쿄생활

신주쿠의 MYLORD



신주쿠에 자주 놀러 간다...

 

오늘은 라면을 먹으러 MYLORD에 있는 라면가게를 도전...

 

음...

 

인기가 있는지... 줄이 조금 길었다...

 

기다리면서 한컷 찍어본다...

 

라면맛은 그저 그랬다... 흠..

 

무사시 라면도 좀 그랬고.... 흠....

MS-SQL / SQL Server

링크드서버(Linked Server) 리스트


SELECT * FROM sys.servers A JOIN sys.linked_logins B
ON A.server_id = B.server_id AND A.is_linked = 1

 

 

난 그냥 이정도로만...

-----------------------------------------------------

SELECT A.name, A.product, A.provider, A.data_source, location, provider_string, A.modify_date LinkedServerUpdateDate
, C.name, B.remote_name, B.modify_date UserUpdateDate
FROM sys.servers A JOIN sys.linked_logins B
ON A.server_id = B.server_id 
LEFT OUTER JOIN sys.server_principals C
ON B.local_principal_id = C.principal_id
ORDER BY A.name

MS-SQL / SQL Server

MS-SQL에서 대소문자 구분하기


ex) 값이 abc이고 비교값이

 1. 'abc'

 2. 'ABC'

 3. 'aBc'

 4. 'aBC'

 5. 'abc '

 

일 경우

 

기본적으로 설치시 어떤 설정을 하면 비교가 된다고 한다...

 

하지만 확인된 결과가 아니라서 이곳에 작성하지는 않았다.

 

Test1. 일반적으로 테스트 할 경우

 1. 같음   2. 같음   3. 같음   4. 같음   5. 같음

 

Test2. BINARY_CheckSum을 이용 할 경우

 1. 같음   2. 틀림   3. 틀림   4. 틀림   5. 같음

 

Test3. collate Latin1_General_CS_AI_KS_WS를 이용 할 경우

 1. 같음   2. 틀림   3. 틀림   4. 틀림   5. 같음

 

결론...

 BINARY_CheckSum와 collate Latin1_General_CS_AI_KS_WS를 이용하되

 빈칸이 안들어가도록 막으면...Ok...

 너무 간단한 결론인가...ㅡㅡ;;

도쿄 / 맛집 / 신주쿠 / 신주쿠 맛집 / 도쿄맛집 / 일본 맛집 / 일본여행 /  도쿄맛집 

ぱすたかん - 오코노미야키(お好み焼き) 전문점



JR 야마노테센 신주쿠역에 있는 오다큐 MYLORD 8층에 있는 오코노미야키, 몬자야키 전문점 ぱすたかん.

 

가끔씩 가는 곳이다..

 

맛도 괜찮고, 가격도 괜찮다...

 

야키소바도 메뉴에 있는데, 야키소바의 경우 주방에서 만들어서 가져오는것과

 

손님이 직접 자리에서 만들 수도 있다.

 

그 외에 오코노미야키와 몬자야키는 직접 만든다.


ぱすたかん의 밖에서 찍은 사진이다.

 

사람들이 꽤 많이 기다리고 있었다..

 

그래서 기다리면서 몇장 찍었다....



지금은 캐나다 밴쿠버 동계올림픽 중!!!

 

일본의 타카하시 선수가 동메달을 획득 기념으로 가게에서 20% 세일을 하고 있었다...

 

오오오오!!!!

 

모르고 갔는데... 럭키!!!

 

가게에 들어가보자..



사진이 좀 흐리게 나왔는데...

 

깔끔한 인테리어로 괜찮은 곳이다...

 

가족들, 친구들 많은 분들이 있었다.

 

아래의 사진은 내가 앉은 자리..



오코노미야키, 몬자야키, 야키소바를 만들기 위한 부가재료들이 정렬되어있다...

 

오늘은 오코노미야키와 야키소바, 생맥주를 주문!!!

 

일단, 생맥주가 나오고 다른 재료가 나올때까지 기다려본다...



위의 사진은 벌써 한모금 마시고 찍었다..

 

ㅎㅎ...

 

한모금 마시고 나니 사진 찍는게 생각이나서.. ^^

 

맥주를 마시면서, 옆에 이 가게 통신 이라는게 있어서 봤더니!!!

 


두둥!!!



이번 동계올림픽에서 금메달을 따면

오코노미야키 34종류가 50% OFF..

생맥주는 한잔에 원래 450엔 정도 인데, 100엔..

 

은메달이면 오코노미야키 30% OFF.. 생맥주 200엔

동메달이면 오코노미야키 20% OFF.. 생맥주 300엔..

 

이번에 타카하시선수가 동메달을 땄기 때문에...

오코노미야키 20% OFF 와 생맥주 300엔!!!

후후...

 

금메달땄으면 완전 후후...



그리고 오코노미야키, 몬자야키를 만드는 방법이 그림으로 잘 그려져 있어서...

 

저걸 보면서 만들면 된다.

 

드디어 오코노미야키 재료가 나왔다..



이번에 주문한건 믹스치즈 오코노미야키!!!

 

일반 오코노미야키는 그냥 재료를 한번에 다 넣으면 되지만...

 

치즈가 들어가는건...

 

일단, 반정도 올리고, 그 위에 치즈를 올리고...

 

그 위에 나머지 반의 오코노미야키 재료를 올리면 된다.



위의 사진은 치즈를 올리는 사진...

 

아래의 사진은 치즈 위에 나머지 반까지 올린 사진..



그리고 준비되어잇는 냄비뚜껑 같은걸로 덮고,

 

모래시계를 돌려놓는다..

 

4분간 저렇게 둔다.....



4분이 지나면... 오코노미야키를 한번 뒤집어준다...

 

뒤집은 후 다시 뚜껑을 덮고...

 

모래시계를 뒤집어, 4분을 기다린다..!!



4분이 지났으면, 다시 한번 더 뒤집는다...

 

그리고 소스를 뿌리고 마요네즈, 카쯔오부시 등등

 

자신의 입맛에 맞게 얹이면 끝!!!



완성작!!!

 

직접 만들어서 먹는 것도 재미있다....

 

야키소바도 주문했는데..

 

야키소바편은 나중에 다시 써보도록 하겠다...

 

주문서~~



주문한 메뉴에 20% 할인해서 가격이 적혀있었다....

 

2288엔!!!

 

후후...



그런데 예전에 크리스마스쯤에 왔을때,

 

추첨으로 500엔, 300엔 상품권 당첨!!!

 

이번달까지 써야하는거라서 이번에 2장을 다 냈더니..

 

2288엔 - 800엔 = 1488엔!!

 

싸게 맛있게 먹어서 기분 업!!!

MS-SQL / SQL Server

백업정보 얻기 - 백업한 데이터베이스에 대한 수행된 백업들의 정보를 얻는다.


USE msdb;

GO

 

SELECT backup_start_date, type, physical_device_name, backup_set_id

FROM backupset bs inner join backupmediafamily bm

ON bs.media_set_id = bm.media_set_id

WHERE database_name = '[데이터베이스 명]'

ORDER BY backup_start_date desc

+ Recent posts