블로그 이미지
vicjung

프로그래밍이나 컴퓨터 관련 위주 블로그

Rss feed Tistory
카테고리 없음 2011. 9. 22. 20:11

DB상의 모든 인덱스 정보를 보이는 저장프로시저

은근히 DB의 인덱스를 전체적으로 체크해야 할 일이 근근히 있다.

그 때 마다 정보를 수집해서 체크하는 것이 만만치 않앗는데 ㅍ.ㅍ

보통은 SqlCompare 를 이용하거나 Generate를 해서 text 비교 및 검색을 이용해서 처리를 했는데 쿼리로 처리가 가능하네.

출처: DB상의 모든 인덱스 정보를 보이는 저장프로시저

--DB상의모든인덱스정보를보이는저장프로시저

--

--출처: http://www.swynk.com

--

--내용: DB상의모든색인에대해색인의유형, 색인이사용되는컬럼을보여줍니다.

--

--개인적으로현재참유용하게사용하고있는저장프로시져입니다.

--

--많은도움되시길바랍니다. 그럼이만.

create procedure psp_help_allidx7

as

/* Purpose: to list all indexes for each table

   Author : Eddy Djaja, Publix Super Markets, Inc.

   Revision: 12/07/1999 born date

*/

   

-- SET UP SOME CONSTANT VALUES FOR OUTPUT QUERY

declare @empty varchar(1)

select @empty = ''

declare @des1       varchar(35), -- 35 matches spt_values

       @des2        varchar(35),

       @des4        varchar(35),

       @des32       varchar(35),

       @des64       varchar(35),

       @des2048     varchar(35),

       @des4096     varchar(35),

       @des8388608  varchar(35),

       @des16777216 varchar(35)

select @des1 = name from master.dbo.spt_values where type = 'I' andnumber = 1

select @des2 = name from master.dbo.spt_values where type = 'I' andnumber = 2

select @des4 = name from master.dbo.spt_values where type = 'I' andnumber = 4

select @des32 = name from master.dbo.spt_values where type = 'I' andnumber = 32

select @des64 = name from master.dbo.spt_values where type = 'I' andnumber = 64

select @des2048 = name from master.dbo.spt_values where type = 'I'and number = 2048

select @des4096 = name from master.dbo.spt_values where type = 'I'and number = 4096

select @des8388608 = name from master.dbo.spt_values where type ='I' and number = 8388608

select @des16777216 = name from master.dbo.spt_values where type ='I' and number = 16777216

select        o.name,

       i.name,

       'index description' = convert(varchar(210), --bits 16 off, 1, 2, 16777216 on, located on group

                           case when (i.status & 16)<>0 then 'clustered' else 'nonclustered' end

                           + case when (i.status & 1)<>0 then ', '+@des1 else @empty end

                           + case when (i.status & 2)<>0 then ', '+@des2 else @empty end

                           + case when (i.status & 4)<>0 then ', '+@des4 else @empty end

                           + case when (i.status & 64)<>0 then ', '+@des64 else

                                        case when (i.status & 32)<>0 then ', '+@des32 else @empty end end

                           + case when (i.status & 2048)<>0 then ', '+@des2048 else @empty end

                           + case when (i.status & 4096)<>0 then ', '+@des4096 else @empty end

                           + case when (i.status & 8388608)<>0 then ', '+@des8388608 else @empty end

                           + case when (i.status & 16777216)<>0 then ', '+@des16777216 else @empty end),

       'index column 1' = index_col(o.name,indid, 1),

       'index column 2' = index_col(o.name,indid, 2),

       'index column 3' = index_col(o.name,indid, 3)

from sysindexes i, sysobjects o

where i.id = o.id

             and indid > 0

             and indid < 255

             and o.type = 'U'

             --exclude autostatistic index

             and (i.status & 64) = 0

             and (i.status & 8388608) = 0

             and (i.status & 16777216)= 0

             order by o.name

go

--사용방법

exec psp_help_allidx7

go

,
카테고리 없음 2011. 9. 22. 20:07

전체 프로시저에서 특정 문자열 찾기

흠. DB 에 있는 오브젝트로 쿼리를 이용해서 찾는 군요 ㅠ.ㅠ

전 그냥 스크립트 전체를 generate해 버려서 그 안에서 찾아버렸는데 ^^;;;

출처:전체 프로시저에서 특정 문자열 찾기

전체 데이터베이스의 각 프로시저에서 원하는 특정 문자열을 찾기 위한 쿼리입니다. xp_cmdshell 확장 프로시저가 포함된 저장 프로시저를 찾기 위해서 아래와 같이 테스트를 하였습니다.


다음은 SysComments 를 사용하여 지정된 문자열을 찾는 방법입니다.

전체 데이터베이스에 포함된 각각의 프로시저에 포함된 특정 문자열을 찾기 위해 SysComments 의 Text 열에 저장되어 있는 원본 SQL 정의 문을 비교하여 찾는 방법입니다.

EXEC sp_MSForEachDB 'Use [?];
SELECT DISTINCT DB_NAME() AS [DATABASE NAME], A.NAME
FROM dbo.SysObjects A JOIN dbo.SysComments B ON A.ID = B.ID
WHERE A.TYPE = ''P'' AND B.TEXT LIKE ''%xp_cmdshell%''
ORDER BY A.NAME;'



sys.syscomments 가 추후 없어질 것을 대비해서 sys.all_sql_modules 를 사용한 쿼리는 다음과 같습니다.

EXEC sp_MSForEachDB 'Use [?];
SELECT DISTINCT DB_NAME(), o.name FROM sys.sysobjects o
JOIN sys.all_sql_modules m ON o.id = m.object_id

WHERE o.type = ''P'' AND m.definition LIKE ''%xp_cmdshell%''
ORDER BY o.name;'




[실행결과]

1514EF354DA82831346346




[참고자료]
sys.syscomments (Transact-SQL)

,
카테고리 없음 2011. 9. 21. 00:03

간만에 asp 를 만지니 예전에 겪은 문제의 재체험 ㅠ.ㅠ

특성 ‘type’을 인식할 수 없습니다 ~~  어쩌구 저쩌구는

 

IIS 서버쪽 셋팅에서 ASP가 1.x로 되어있었다.

 

이것의 문제는 예전에 사용하던 서버라 당연히 2.x로 되어있을거라 생각하는 바람에 ㅍ.ㅍ

 

두번째 Service unavailable는 IIS서버가 다운된 듯

 

다시 켜고 나니 정상 동작

 

세번째 

 

    allowDefinition='MachineToApplication  ~~

 

는 서브폴더 만든 것이 응용프로그램으로 설정이 안되어 있어서 발생

 

이러다 보니 벌써 한두시간이 훌쩍 ㅋ

,
Programming 2011. 9. 18. 23:38

아파치 웹브라우저에서 디렉토리 리스트 보이는 설정관련

출처 : http://www.fduser.org/blog/

웹브라우저에서 디렉토리 리스트가 보일때

리눅스_웹서버 2006/06/21 16:38

인터넷으로 홈페이지를 접속하면, 기본적으로 홈 디렉토리 내의 Index.html 파일을 보여주게 됩니다.
아파치 설정 파일(httpd.conf) 파일에 아래와 같이 DirectoryIndex 설정이 아래와 같이 되어 있기 때문입니다.
아래와 같이 설정이 되어 있는 경우, 도메인으로 접속시에 홈 디렉토리내의 Index.html 파일을 출력하며, Index.html 파일이 존재하지 않는 경우 index.htm -> index.php의 순서로 찾아서 출력하게 됩니다. 만약 홈 디렉토리내의 main.html파일로 홈페이지가 뜨게 하려면, 아래의 DirectoryIndex 부분을 main.html 로 변경하면 되겠죠.?? ^^

<IfModule dir_module>
   DirectoryIndex index.html index.htm index.php
</IfModule>

웹브라우저에서 디렉토리 리스트가 보이게 되는 경우는 아래와 같이 가상호스트 디렉토리의 Options 부분에 Indexes 설정이 되어 있는 경우에 홈 디렉토리의 리스트가 출력되게 됩니다.
단, 모든 경우에 디렉토리의 리스트가 출력되는것이 아니라, 위의 DirectoryIndex 부분에 설정된 index.html index.htm index.php 파일이 모두 존재 하지 않을때에만, 디렉토리 리스트가 출력되게 됩니다.

<Directory "/home/*/public_html">
~
   Options Indexes FollowSymLinks
~
</Directory>

index 파일이 없을때 디렉토리 리스트가 뜨지않고 에러페이지를 출력하게 하려면, 아래와 같이 Options 부분의 Indexes를 삭제하고 아파치 데몬을 리스타트 하면 됩니다.

<Directory "/home/*/public_html">
~
   Options FollowSymLinks
~
</Directory>

'Programming' 카테고리의 다른 글

인코딩 타입 알아내기  (0) 2011.10.04
64비트 포팅에 주의 사항  (0) 2011.10.04
IIS에 Ruby 사용  (0) 2011.09.18
윈도우 바로가기 관련  (0) 2011.09.16
WaitForMultipleObjects  (0) 2009.07.28
,
Programming 2011. 9. 18. 23:18

IIS에 Ruby 사용

우선 준비물

FastCGI 설치본   

RubyInstaller

RoR extensions for IIS

흠 실패당 ㅠ.ㅠ

위에 준비물들이 Ruby 는 1.9가 되었는데 나머지는 1.8 시절것들만 있이서 호환이 잘 안된다. ㅍ.ㅍ

시간을 좀 들여서 수정을 하거나 최신본을 찾아야 될듯하다 ㅠ.ㅠ

우선 배보다 배꼽이 큰 상황이라 연기

,
카테고리 없음 2011. 9. 17. 17:03

win32 에서 console 보기

가끔씩 아쉬워서 찾는 경우가 있는 코드랑 메모

void RedirectIOToConsole(); 이것만 main() 초반에 실행시켜 주면

Win32 Windows 프로그램에서 콘솔 띄울 수 있습니다.

http://www.parkpd.x-y.net/moniwiki/wiki.php/AddingConsoleToWin32GUI


참조:http://parkpd.egloos.com/1590289

,
카테고리 없음 2011. 9. 17. 00:28

아이피 충돌시 유용한 명령어

서버의 IP를 누군가가 사용하는 경우가 일어 났다. 즉 IP 충돌이 일어난 것이다.

어떤 컴퓨터인지 확인하고자 알아본 결과 nbtstat 라는 명령을 통하여 확인할 수 있었다.

[root@C:\Documents and Settings\SUN]#nbtstat -a xxx.xxx.xxx.xxx (충돌나는 IP 주소)

로컬 영역 연결:
Node IpAddress: [123.456.789.123] Scope Id: []

   NetBIOS Remote Machine Name Table

   Name Type Status
---------------------------------------------
XXXXXX1    <00> UNIQUE    Registered
AAAAA <1C> GROUP Registered
AAAAA <00> GROUP Registered
XXXXXX1    <20> UNIQUE    Registered
AAAAA <1B> UNIQUE    Registered
AAAAA <1E> GROUP Registered
AAAAA <1D> UNIQUE    Registered
..__MSBROWSE__.<01> GROUP Registered

MAC Address = 00-30-48-2B-35-93

첫번째 XXXXX1이 현재 IP를 점거하고 있는 컴퓨터의 NetBIOS 명이다. 이를 바탕으로 어느정도 누가 컴퓨터를 점거하고 있는지 확인할 수 있다.

nbtstat 는 다양한 기능을 가지고 있는데 다음과 같다.

  • nbtstat -a 지정한 컴퓨터 이름을 사용하는 원격 컴퓨터의 이름 테이블을 표시한다.
  • nbtstat -A 지정한 IP 주소를 사용하는 원격 컴퓨터의 이름 테이블을 표시한다.
  • nbtstat -c IP 주소를 포함한 NetBIOS 이름 캐시의 내용을 표시한다.
  • nbtstat -n 로컬 NetBIOS 이름 목록을 표시한다.
  • nbtstat -R NetBIOS 이름 캐시에서 모든 이름을 제거한후 LMHOSTS 파일을 다시 읽어 들인다.
  • nbtstat -r   윈도우 네트워킹 이름 해석에 대한 통계를 표시한다.
  • nbtstat -S 원격 컴퓨터를 IP 주소로 나열한 클라이언트와 서버 세션을 표시한다.
  • nbtstat -s 클라이언트와 서버 세션을 모두 표시한다.

이상입니다.
,
Programming 2011. 9. 16. 20:22

윈도우 바로가기 관련

자주 바뀌는 shortcut 를 쉽게 만들려고 찾아보다가

 

<초심플 shortcut 만들기>

http://www.codeproject.com/KB/dotnet/shelllink.aspx

http://www.codeproject.com/KB/shell/StartupFolderShortcut.aspx

 

둘다 WSH 를 이용한다.

 

바로가기 구조에 대한 자세한 설명은

 

http://ezbeat.tistory.com/342

 

이 좋다.

 

윈도우 포렌식이라는 책에서 봤다는데 유사한 책이 몇권있네..

윈도우쪽 문서는 이거 =>

'Programming' 카테고리의 다른 글

인코딩 타입 알아내기  (0) 2011.10.04
64비트 포팅에 주의 사항  (0) 2011.10.04
아파치 웹브라우저에서 디렉토리 리스트 보이는 설정관련  (0) 2011.09.18
IIS에 Ruby 사용  (0) 2011.09.18
WaitForMultipleObjects  (0) 2009.07.28
,
카테고리 없음 2011. 9. 15. 16:39

[Tip] VS에서 소스코드 매칭 체크하는 옵션 제거

'Visual Studio에서 디버깅을 하다 보면 가끔씩 브레크 포인트가 잡히지 않을 때가 있습니다.
F9로 설정을 한다고 해도 디버깅 실행 시 설정이 해제되어버리는 경우인데요. 이때 해당 브레이크
포인트에 가면 "the breakpoint will not currently be hit" 메시지를 보이며, 지나쳐 버립니다.
이때 빌드를 다시하거나 더미 코드를 잠시 넣으면 될때도 있지만, 그래도 않된다면 아래의 방법을...
임시적이지만 디버깅이 가능...

Tools->Options->Debugging->General 에서
Require source files to exactly match the orginal version을 체크 해제해주면 됨.

,
Tools 관련 2011. 9. 15. 16:08

Robocopy 사용법

Robust File Copy(robocopy) 사용법

기본 사용법

  • robocopy 원본디렉터리 대상디렉터리 복사할파일 옵션

자주쓰는 Option

  • /E : 하위 디렉터리 포함
  • /COPY:DAT : CopyFlags (D=데이터, A=특성, T=타임스탬프)
  • /R:10 : 실패한 복사본에 대한 다시 시도 횟수
  • /W:30 : 실패후 다시 시도하기 위한 대기시간

자주사용하는 사용예) robocopy D:\Folder F:\Folder *.* /E /COPY:DAT /R:10 /W:3

wikipedia 설명보기


-------------------------------------------------------------------------------
ROBOCOPY :: Windows용 견고한 파일 복사
-------------------------------------------------------------------------------
사용법 :: ROBOCOPY 원본 대상 [파일 [파일]...] [옵션]
원본 :: 원본 디렉터리(드라이브:\경로 또는 \\서버\공유\경로)
대상 :: 대상 디렉터리(드라이브:\경로 또는 \\서버\공유\경로)
파일 :: 복사할 파일입니다. 이름/와일드카드: 기본값은 "*.*"입니다.
::
:: 복사 옵션:
::
/S :: 비어 있는 디렉터리는 제외하고 하위 디렉터리를 복사합니다.
/E :: 비어 있는 디렉터리를 포함하여 하위 디렉터리를 복사합니다.
/LEV:n :: 원본 디렉터리 트리의 최상위 n개 수준만 복사합니다.
/Z :: 다시 시작 모드에서 파일을 복사합니다.
/B :: 백업 모드에서 파일을 복사합니다.
/ZB :: 다시 시작 모드를 사용합니다. 액세스가 거부된 경우 백업 모드를 사용합니다.
/EFSRAW :: EFS RAW 모드에서 암호화된 모든 파일을 복사합니다.
/COPY:copyflag[s] :: 파일에 대해 복사할 내용입니다. 기본값은 /COPY:DAT입니다.
(copyflags : D=데이터, A=특성, T=타임스탬프).
(S=보안=NTFS ACL, O=소유자 정보, U=감사 정보).
/DCOPY:T :: 디렉터리 타임 스탬프를 복사합니다.
/SEC :: 보안된 파일을 복사합니다. /COPY:DATS와 동일합니다.
/COPYALL :: 모든 파일 정보를 복사합니다. /COPY:DATSOU와 동일합니다.
/NOCOPY :: 파일 정보를 복사하지 않습니다. /PURGE와 사용하면 좋습니다.
/SECFIX :: 건너뛴 파일도 포함하여 모든 파일의 파일 보안을 수정합니다.
/TIMFIX :: 건너뛴 파일도 포함하여 모든 파일의 파일 시간을 수정합니다.
/PURGE :: 원본에 없는 대상 파일/디렉터리를 삭제합니다.
/MIR :: 디렉터리 트리를 미러링합니다./ E plus /PURGE와 동일합니다.
/MOV :: 파일을 이동합니다. 복사한 다음 원본에서 삭제합니다.
/MOVE :: 파일 및 디렉터리를 이동합니다. 복사한 다음 원본에서 삭제합니다.
/A+:[RASHCNET] :: 제공된 특성을 복사된 파일에 추가합니다.
/A-:[RASHCNET] :: 제공된 특성을 복사된 파일에서 제거합니다.
/CREATE :: 디렉터리 트리와 길이가 0인 파일만 만듭니다.
/FAT :: 8.3 FAT 파일 이름만 사용하여 대상 파일을 만듭니다.
/256 :: 256자를 초과하는 매우 긴 경로에 대한 지원을 사용하지 않습니다.
/MON:n :: 원본을 모니터링합니다. n개 이상의 변경 내용이 표시된 경우 다시 실행합니다.
/MOT:m :: 원본을 모니터링합니다. 변경 내용이 있으면 m분 후에 다시 실행합니다.
/RH:hhmm-hhmm :: 실행 시간 - 새 복사본을 시작할 수 있는 시간입니다.
/PF :: 통과 기준이 아닌 파일당 기준으로 실행 시간을 확인합니다.
/IPG:n :: 패킷 간 간격(ms), 저속 회선에서 사용 가능한 대역폭을 확보합니다.
/SL:: 대상에 대한 심볼 링크를 복사합니다.
::
:: 파일 선택 옵션:
::
/A :: 보관 특성 집합이 있는 파일만 복사합니다.
/M :: 보관 특성이 있는 파일만 복사하고 보관 특성을 해제합니다.
/IA:[RASHCNETO] :: 지정된 특성을 가진 파일만 포함합니다.
/XA:[RASHCNETO] :: 지정된 특성을 가진 파일을 제외합니다.
/XF file [file]... :: 지정된 이름/경로/와일드카드와 일치하는 파일을 제외합니다.
/XD dirs [dirs]... :: 지정된 이름/경로와 일치하는 디렉터리를 제외합니다.
/XC :: 변경된 파일을 제외합니다.
/XN :: 새 파일을 제외합니다.
/XO :: 오래된 파일을 제외합니다.
/XX :: 추가 파일 및 디렉터리를 제외합니다.
/XL :: 고립된 파일 및 디렉터리를 제외합니다.
/IS :: 같은 파일을 포함합니다.
/IT :: 조정된 파일을 포함합니다.
/MAX:n :: 최대 파일 크기 - n바이트를 초과하는 파일을 제외합니다.
/MIN:n :: 최소 파일 크기 - n바이트 미만의 파일을 제외합니다.
/MAXAGE:n :: 최대 파일 사용 기간 - n일/날짜보다 오래된 파일을 제외합니다.
/MINAGE:n :: 최소 파일 사용 기간 - n일/날짜보다 최신 파일을 제외합니다.
/MAXLAD:n :: 최대 마지막 액세스 날짜 - n 이후에 사용되지 않은 파일을 제외합니다.
/MINLAD:n :: 최소 마지막 액세스 날짜 - n 이후에 사용된 파일을 제외합니다.
n이 1900보다 크면 n은 n일과 같고 그렇지 않으면 n은 YYYYMMDD 날짜입니다.
/XJ :: 연결 지점을 제외합니다. 일반적으로 기본값으로 포함됩니다.
/FFT :: FAT 파일 시간(2초 단위)을 가정합니다.
/DST :: 1시간의 DST 시간 차이를 보완합니다.
/XJD :: 디렉터리의 연결 지점을 제외합니다.
/XJF :: 파일의 연결 지점을 제외합니다.
::
:: 다시 시도 옵션:
::
/R:n :: 실패한 복사본에 대한 다시 시도 횟수입니다. 기본값은 1백만입니다.
/W:n :: 다시 시도 간 대기 시간입니다. 기본값은 30초입니다.
/REG :: /R:n 및 /W:n을 레지스트리에 기본 설정으로 저장합니다.
/TBD :: 정의할 공유 이름을 기다립니다(다시 시도 오류 67).
::
:: 로깅 옵션:
::
/L :: 목록 전용 - 파일을 복사 또는 삭제하거나 타임스탬프를 만들지 않습니다.
/X :: 선택된 파일을 제외하고 모든 추가 파일을 보고합니다.
/V :: 자세한 정보 표시를 출력하고 건너뛴 파일을 표시합니다.
/TS :: 출력에 원본 파일 타임스탬프를 포함합니다.
/FP :: 출력에 파일의 전체 경로 이름을 포함합니다.
/BYTES :: 바이트 크기로 인쇄합니다.
/NS :: 크기 없음 - 파일 크기를 기록하지 않습니다.
/NC :: 클래스 없음 - 파일 클래스를 기록하지 않습니다.
/NFL :: 파일 목록 없음 - 파일 이름을 기록하지 않습니다.
/NDL :: 디렉터리 목록 없음 - 디렉터리 이름을 기록하지 않습니다.
/NP :: 진행률 없음 - 복사율(%)을 표시하지 않습니다.
/ETA :: 복사하는 파일의 예상 도착 시간을 표시합니다.
/LOG:file :: 상태를 로그 파일에 출력합니다. 기존 로그를 덮어씁니다.
/LOG+:file :: 상태를 로그 파일에 출력합니다. 기존 로그에 추가합니다.
/UNILOG:file :: 상태를 유니코드로 로그 파일에 출력합니다. 기존 로그를 덮어씁니다.
/UNILOG+:file :: 상태를 유니코드로 로그 파일에 출력합니다. 기존 로그에 추가합니다.
/TEE :: 로그 파일과 콘솔 창에 출력합니다.
/NJH :: 작업 헤더가 없습니다.
/NJS :: 작업 요약이 없습니다.
/UNICODE :: 상태를 유니코드로 출력합니다.
::
:: 작업 옵션:
::
/JOB:jobname :: 명명된 작업 파일에서 매개 변수를 가져옵니다.
/SAVE:jobname :: 명명된 작업 파일에 매개 변수를 저장합니다.
/QUIT :: 매개 변수를 볼 수 있도록 명령줄을 처리한 후에 끝냅니다.
/NOSD :: 원본 디렉터리가 지정되어 있지 않습니다.
/NODD :: 대상 디렉터리가 지정되어 있지 않습니다.

/IF :: 다음 파일을 포함합니다.

'Tools 관련' 카테고리의 다른 글

VMPlayer에서 네트워크 설정  (0) 2009.08.17
,
TOTAL TODAY