본문 바로가기

프로그래밍/MSSQL

MSSQL에서 도스 명령어 실행

MSSQL에서 파일 복사 및 삭제등 처리를 위한 외부 명령을 호출 할 수 있다.


기본적으로 "master..xp_cmdshell" 명령을 사용 하는데 "xp_cmdshell"은 MSSQL 환경설정옵션에서 비활성 되어 있다.

따라서 비활성된 "xp_cmdshell"을 활성화 해 주어야만 하는데 이 기능을 활성화 하게 되면 시스템 명령어 외부에서 연결된

사용자가 쿼리를 이용하여 중요 파일을 변경 및 삭제가 가능해 지는 심각한 보안에 문제가 생길 수 있으니

보안이 담보되지 않은 경우는 활성화를 안 하는 것이 정신 건강에 유익하다..


그렇더라도 꼭 필요한 경우

로컬에 백업된 DB백업 파일을 원격 경로에 복사(직접 UNC 방식으로 백업을 할 수 있지만 마음대로 안될때도 있다.... ㅠ.ㅠ)

할 경우에 스케쥴러에 로컬 백업 이후 다음 단계에서 백업된 파일을 강제로 복사해 줄 수 있다..


- xp_cmdshell을 활성화 하는 방법

  . 전체 환경설정 값을 보면

    exec sp_configure

    마지막 라인에 xp_cmdshell 항목이 있는데 config_value / run_value 값이 "0" 으로 비활성 되어 있다.


  . xp_cmdshell을 활성화 하려면

    exec sp_configure 'xp_cmdshell', 1;

    reconfigure



- xp_cmdshell을 이용하여 파일을 복사하는 예)

  declare @cmdstring varchar(1000)


  set @cmdstring = 'copy S:\TESTDB.BAK \\BACKUP\DB'

  exec master..xp_cmdshell @cmdstring