Windows 명령 셸을 생성하고 실행을 위해 문자열로 전달합니다. 모든 출력은 텍스트 행으로 반환됩니다.
구문
xp_cmdshell { 'command_string' } [ , no_output ] |
인수
- 'command_string'
-
운영 체제로 전달할 명령이 포함된 문자열입니다. command_string은 기본값 없이 varchar(8000) 또는 nvarchar(4000)입니다. command_string에는 두 쌍 이상의 큰 따옴표가 포함될 수 없습니다. command_string에서 참조하는 프로그램 이름이나 파일 경로에 공백이 있는 경우 한 쌍의 따옴표가 필요합니다. 포함 공백에 문제가 있으면 해결 방법으로 FAT 8.3 파일 이름을 사용하십시오.
- no_output
-
출력이 클라이언트에 반환되지 않도록 지정하는 선택적 매개 변수입니다.
반환 코드 값
0(성공) 또는 1(실패)
결과 집합
다음 xp_cmdshell
문을 실행하면 현재 디렉터리를 나열한 디렉터리를 반환합니다.
EXEC xp_cmdshell 'dir *.exe'; GO |
행은 nvarchar(255) 열에서 반환됩니다. no_output 옵션을 사용하면 다음이 반환됩니다.
The command(s) completed successfully. |
주의
xp_cmdshell로 생성된 Windows 프로세스는 SQL Server 서비스 계정과 같은 보안 권한을 갖습니다.
xp_cmdshell은 동기식으로 작업합니다. 명령 셸 명령이 완료되기 전에는 호출자에게 컨트롤이 반환되지 않습니다.
xp_cmdshell은 노출 영역 구성 도구를 사용하고 sp_configure를 실행하여 설정하고 해제할 수 있습니다. 자세한 내용은
중요: |
---|
xp_cmdshell을 일괄 처리 내에서 실행하여 오류가 반환되면 일괄 처리가 실패합니다. 이 동작은 기존 버전과 달라진 동작입니다. 이전 버전의 Microsoft SQL Server 에서는 일괄 처리가 계속 실행되었습니다. |
xp_cmdshell 프록시 계정
sysadmin 고정 서버 역할의 멤버가 아닌 사용자에 의해 호출되는 경우 xp_cmdshell은 ##xp_cmdshell_proxy_account##라는 자격 증명에 저장된 계정 이름과 암호를 사용하여 Windows에 연결합니다. 프록시 자격 증명이 없으면 xp_cmdshell이 실패합니다.
프록시 계정 자격 증명은 sp_xp_cmdshell_proxy_account를 실행하여 만들 수 있습니다. 이 저장 프로시저는 Windows 사용자 이름과 암호를 인수로 사용합니다. 예를 들어 다음 명령은 Windows 암호가 sdfh%dkc93vcMt0
인 Windows 도메인 사용자 SHIPPING\KobeR
에 대한 프록시 자격 증명을 만듭니다.
EXEC sp_xp_cmdshell_proxy_account 'SHIPPING\KobeR','sdfh%dkc93vcMt0' |
자세한 내용은
사용 권한
CONTROL SERVER 권한이 필요합니다.
예
1. 실행 파일의 목록 반환
다음 예에서는 디렉터리 명령을 실행하는 xp_cmdshell
확장 저장 프로시저를 보여 줍니다.
EXEC master..xp_cmdshell 'dir *.exe' |
2. Windows net 명령 사용
다음 예에서는 저장 프로시저에서 xp_cmdshell
을 사용하는 것을 보여 줍니다. 이 예에서는 net send
를 사용하여 SQL Server 인스턴스가 종료될 것을 사용자에게 알리고 net pause
를 사용하여 서버를 일시 중지한 다음 net stop
을 사용하여 서버를 종료합니다.
CREATE PROC shutdown10 AS EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down in 10 minutes. No more connections allowed.', no_output EXEC xp_cmdshell 'net pause sqlserver' WAITFOR DELAY '00:05:00' EXEC xp_cmdshell 'net send /domain: SQL_USERS ''SQL Server shutting down in 5 minutes.', no_output WAITFOR DELAY '00:04:00' EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server shutting down in 1 minute. Log off now.', no_output WAITFOR DELAY '00:01:00' EXEC xp_cmdshell 'net stop sqlserver', no_output |
3. 출력 반환 안 함
다음 예에서는 xp_cmdshell
을 사용하여 클라이언트에게 출력을 반환하지 않고 명령 문자열을 실행하는 것을 보여 줍니다.
USE master; EXEC xp_cmdshell 'copy c:\SQLbcks\AdvWorks.bck \\server2\backups\SQLbcks, NO_OUTPUT'; GO |
4. 반환 상태 사용
다음 예에서는 xp_cmdshell
확장 저장 프로시저 또한 상태를 반환하도록 제안합니다. 반환 코드 값은 @result
변수에 저장됩니다.
DECLARE @result int EXEC @result = xp_cmdshell 'dir *.exe' IF (@result = 0) PRINT 'Success' ELSE PRINT 'Failure' |
5. 파일에 변수 내용 기록
다음 예에서는 @var
변수의 내용을 현재 서버 디렉터리에 있는 var_out.txt
라는 파일에 기록합니다.
DECLARE @cmd sysname, @var sysname SET @var = 'Hello world' SET @cmd = 'echo ' + @var + ' > var_out.txt' EXEC master..xp_cmdshell @cmd |
6. 명령 결과를 파일로 캡처
다음 예에서는 현재 디렉터리의 내용을 현재 서버 디렉터리에 있는 dir_out.txt
라는 파일에 기록합니다.
DECLARE @cmd sysname, @var sysname SET @var = 'dir/p' SET @cmd = @var + ' > dir_out.txt' EXEC master..xp_cmdshell @cmd |
'SQL' 카테고리의 다른 글
IDENTITY 가 걸려있는 Table에 데이터 삽입 (0) | 2009.09.03 |
---|---|
xp_cmdshell 사용 (2) | 2009.08.12 |
sp_configure xp_cmdshell 옵션 (0) | 2009.08.12 |
SQL Server 2005 서버 구성 옵션 설정 (0) | 2009.08.12 |
프록시 자격 증명 설정 : sp_xp_cmdshell_proxy_account(Transact-SQL) (0) | 2009.08.11 |