작업 단계에서 토큰 사용Use Tokens in Job Steps

SQL ServerSQL Server 에이전트를 사용하면 Transact-SQLTransact-SQL 작업 단계 스크립트에 토큰을 사용할 수 있습니다. Agent allows you to use tokens in Transact-SQLTransact-SQL job step scripts. 작업 단계를 작성할 때 토큰을 사용하면 소프트웨어 프로그램 작성 시 변수를 사용하는 것과 같은 유연성이 있습니다.Using tokens when you write your job steps gives you the same flexibility that variables provide when you write software programs. 작업 단계 스크립트에 토큰을 삽입하면 SQL ServerSQL Server 하위 시스템에서 해당 작업 단계를 실행하기 전에 Transact-SQLTransact-SQL 에이전트가 런타임 시 토큰을 바꿉니다.After you insert a token in a job step script, SQL ServerSQL Server Agent replaces the token at run time, before the job step is executed by the Transact-SQLTransact-SQL subsystem.

중요

SQL Server 2005SQL Server 2005 서비스 팩 1부터 SQL ServerSQL Server 에이전트 작업 단계의 토큰 구문이 변경되었습니다.Starting with SQL Server 2005SQL Server 2005 Service Pack 1, the SQL ServerSQL Server Agent job step token syntax changed. 그러므로 작업 단계에서 사용되는 모든 토큰에 이스케이프 매크로를 사용해야 하며 그렇지 않으면 작업 단계가 실패합니다.As a result, an escape macro must now accompany all tokens used in job steps, or else those job steps will fail. 이스케이프 매크로 사용 및 토큰을 사용하는 SQL ServerSQL Server 에이전트 작업 단계 업데이트에 대해서는 다음에 나오는 "토큰 사용 이해", " SQL ServerSQL Server 에이전트 토큰 및 매크로" 및 "매크로를 사용하도록 작업 단계 업데이트" 섹션에서 설명합니다.Using escape macros and updating your SQL ServerSQL Server Agent job steps that use tokens are described in the following sections, "Understanding Using Tokens," " SQL ServerSQL Server Agent Tokens and Macros," and "Updating Job Steps to Use Macros." 또한 대괄호를 사용하여 SQL Server 2000SQL Server 2000 에이전트 작업 단계 토큰을 호출한 SQL ServerSQL Server 구문(예: "[DATE]")이 변경되었습니다.In addition, the SQL Server 2000SQL Server 2000 syntax, which used square brackets to call out SQL ServerSQL Server Agent job step tokens (for example, "[DATE]") has also changed. 이제 토큰 이름을 괄호로 묶고 토큰 구문의 시작 부분에 달러 기호($)를 사용해야 합니다.You must now enclose token names in parentheses and place a dollar sign ($) at the beginning of the token syntax. 예를 들어For example:

$(ESCAPE_macro name(DATE))$(ESCAPE_macro name(DATE))

토큰 사용 이해Understanding Using Tokens

중요

Windows 이벤트 로그에 대한 쓰기 권한이 있는 모든 Windows 사용자는 SQL ServerSQL Server 에이전트 경고 또는 WMI 경고로 활성화되는 작업 단계에 액세스할 수 있습니다.Any Windows user with write permissions on the Windows Event Log can access job steps that are activated by SQL ServerSQL Server Agent alerts or WMI alerts. 이러한 보안상 위험을 방지하기 위해 경고로 활성화되는 작업에 사용할 수 있는 SQL ServerSQL Server 에이전트 토큰은 기본적으로 해제됩니다.To avoid this security risk, SQL ServerSQL Server Agent tokens that can be used in jobs activated by alerts are disabled by default. 이러한 토큰에는 A-DBN, A-SVR, A-ERR, A-SEV, A-MSGWMI(property)가 있습니다.These tokens are: A-DBN, A-SVR, A-ERR, A-SEV, A-MSG., and WMI(property). 이번 릴리스에서는 모든 경고에 토큰을 사용할 수 있습니다.Note that in this release, use of tokens is extended to all alerting.

이러한 토큰을 사용해야 하는 경우 먼저 Administrators 그룹과 같은 트러스트된 Windows 보안 그룹의 멤버만 SQL ServerSQL Server 가 설치된 컴퓨터의 이벤트 로그에 대한 쓰기 권한이 있는지 확인합니다.If you need to use these tokens, first ensure that only members of trusted Windows security groups, such as the Administrators group, have write permissions on the Event Log of the computer where SQL ServerSQL Server resides. 그런 다음 개체 탐색기에서 SQL Server 에이전트 를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택하고 경고 시스템 페이지에서 경고에 대한 모든 응답 작업에 대해 토큰 바꾸기 를 선택하여 이러한 토큰을 설정합니다.Then, right-click SQL Server Agent in Object Explorer, select Properties, and on the Alert System page, select Replace tokens for all job responses to alerts to enable these tokens.

SQL ServerSQL Server 에이전트에서는 토큰이 간단하고 효율적으로 바뀝니다. SQL ServerSQL Server 에이전트에서 토큰을 해당하는 리터럴 문자열 값으로 바꿉니다. Agent token replacement is simple and efficient: SQL ServerSQL Server Agent replaces an exact literal string value for the token. 모든 토큰은 대/소문자가 구분되며All tokens are case-sensitive. 작업 단계에서 이를 고려하여 사용하는 토큰을 따옴표로 올바르게 묶거나 교체 문자열을 올바른 데이터 형식으로 변환해야 합니다.Your job steps must take this into account and correctly quote the tokens you use or convert the replacement string to the correct data type.

예를 들어, 다음 문을 사용하여 작업 단계에서 데이터베이스 이름을 인쇄할 수 있습니다.For example, you might use the following statement to print the name of the database in a job step:

PRINT N'Current database name is $(ESCAPE_SQUOTE(A-DBN))' ;

이 예에서 ESCAPE_SQUOTE 매크로는 A-DBN 토큰과 함께 삽입됩니다.In this example, the ESCAPE_SQUOTE macro is inserted with the A-DBN token. 런타임 시 A-DBN 토큰은 해당 데이터베이스 이름으로 바뀝니다.At run time, the A-DBN token will be replaced with the appropriate database name. 이스케이프 매크로는 토큰 교체 문자열에 실수로 전달될 수 있는 작은따옴표를 모두 이스케이프합니다.The escape macro escapes any single quotation marks that may be inadvertently passed in the token replacement string. SQL ServerSQL Server 에이전트는 최종 문자열에서 작은따옴표 하나를 작은따옴표 두 개로 바꿉니다. Agent will replace one single quotation mark with two single quotation marks in the final string.

예를 들어, 토큰을 바꾸기 위해 전달된 문자열이 AdventureWorks2012'SELECT @@VERSION --이면 SQL ServerSQL Server 에이전트 작업 단계에서 실행되는 명령은 다음과 같습니다.For example, if the string passed to replace the token is AdventureWorks2012'SELECT @@VERSION --, the command executed by the SQL ServerSQL Server Agent job step will be:

PRINT N'Current database name is AdventureWorks2012''SELECT @@VERSION --' ;

이 경우 삽입된 SELECT @@VERSION문은 실행되지 않습니다.In this case, the inserted statement, SELECT @@VERSION, does not execute. 대신 추가 작은따옴표로 인해 서버에서 삽입된 문을 문자열로 구문 분석합니다.Instead, the extra single quotation mark causes the server to parse the inserted statement as a string. 토큰 교체 문자열에 작은따옴표가 없으면 문자가 이스케이프되지 않으며 토큰이 포함된 작업 단계가 예상대로 실행됩니다.If the token replacement string does not contain a single quotation mark, no characters are escaped and the job step containing the token executes as intended.

작업 단계에서의 토큰 사용을 디버깅하려면 PRINT N'$(ESCAPE_SQUOTE(SQLDIR))' 과 같은 PRINT 문을 사용하고 작업 단계 출력을 파일이나 테이블에 저장합니다.To debug token usage in your job steps, use print statements such as PRINT N'$(ESCAPE_SQUOTE(SQLDIR))' and save job step output to a file or table. 작업 단계 속성 대화 상자의 고급 페이지에서 작업 단계 출력 파일이나 테이블을 지정할 수 있습니다.Use the Advanced page of the Job Step Properties dialog box to specify a job step output file or table.

SQL Server 에이전트 토큰 및 매크로SQL Server Agent Tokens and Macros

다음 표에서는 SQL ServerSQL Server 에이전트에서 지원되는 토큰 및 매크로를 나열하고 설명합니다.The following tables list and describe the tokens and macros that SQL ServerSQL Server Agent supports.

SQL Server 에이전트 토큰SQL Server Agent Tokens

토큰Token DescriptionDescription
(A-DBN)(A-DBN) 데이터베이스 이름입니다.Database name. 작업이 경고로 실행되면 이 토큰은 작업 단계에서 자동으로 데이터베이스 이름 값으로 대체됩니다.If the job is run by an alert, the database name value automatically replaces this token in the job step.
(A-SVR)(A-SVR) 서버 이름입니다.Server name. 작업이 경고로 실행되면 이 토큰은 작업 단계에서 자동으로 서버 이름 값으로 대체됩니다.If the job is run by an alert, the server name value automatically replaces this token in the job step.
(A-ERR)(A-ERR) 오류 번호입니다.Error number. 작업이 경고로 실행되면 이 토큰은 작업 단계에서 자동으로 오류 번호 값으로 대체됩니다.If the job is run by an alert, the error number value automatically replaces this token in the job step.
(A-SEV)(A-SEV) 오류 심각도입니다.Error severity. 작업이 경고로 실행되면 이 토큰은 작업 단계에서 자동으로 오류 심각도 값으로 대체됩니다.If the job is run by an alert, the error severity value automatically replaces this token in the job step.
(A-MSG)(A-MSG) 메시지 내용입니다.Message text. 작업이 경고로 실행되면 이 토큰은 작업 단계에서 자동으로 메시지 텍스트 값으로 대체됩니다.If the job is run by an alert, the message text value automatically replaces this token in the job step.
(JOBNAME)(JOBNAME) 작업의 이름입니다.The name of the job.
(STEPNAME)(STEPNAME) 단계 이름입니다.The name of the step.
(DATE)(DATE) 현재 날짜(YYYYMMDD 형식)입니다.Current date (in YYYYMMDD format).
(INST)(INST) 인스턴스 이름입니다.Instance name. 기본 인스턴스의 경우 이 토큰에는 기본 인스턴스 이름인 MSSQLSERVER를 가집니다.For a default instance, this token will have the default instance name: MSSQLSERVER.
(JOBID)(JOBID) 작업 ID입니다.Job ID.
(MACH)(MACH) 컴퓨터 이름입니다.Computer name.
(MSSA)(MSSA) 마스터 SQLServerAgent 서비스 이름입니다.Master SQLServerAgent service name.
(OSCMD)(OSCMD) CmdExec 작업 단계를 실행하는 데 사용되는 프로그램의 접두사입니다.Prefix for the program used to run CmdExec job steps.
(SQLDIR)(SQLDIR) SQL ServerSQL Server 가 설치된 디렉터리입니다.The directory in which SQL ServerSQL Server is installed. 기본적으로 C:\Program Files\Microsoft SQL Server\MSSQL에 설치됩니다.By default, this value is C:\Program Files\Microsoft SQL Server\MSSQL.
(SQLLOGDIR)(SQLLOGDIR) SQL Server 오류 로그 폴더 경로의 대체 토큰입니다. 예를 들면 $(ESCAPE_SQUOTE(SQLLOGDIR))입니다.Replacement token for the SQL Server error log folder path – for example, $(ESCAPE_SQUOTE(SQLLOGDIR)).
(STEPCT)(STEPCT) 해당 단계가 실행된 횟수(다시 시도 제외)입니다.A count of the number of times this step has executed (excluding retries). 단계 명령이 다중 단계 루프를 강제로 종료하기 위해 사용할 수 있습니다.Can be used by the step command to force termination of a multistep loop.
(STEPID)(STEPID) 단계 ID입니다.Step ID.
(SRVR)(SRVR) SQL ServerSQL Server를 실행 중인 컴퓨터의 이름입니다.Name of the computer running SQL ServerSQL Server. SQL ServerSQL Server 인스턴스가 명명된 인스턴스이면 이 이름에는 해당 인스턴스 이름이 포함됩니다.If the SQL ServerSQL Server instance is a named instance, this includes the instance name.
(TIME)(TIME) 현재 시간(HHMMSS 형식)입니다.Current time (in HHMMSS format).
(STRTTM)(STRTTM) 작업이 실행을 시작하는 시간(HHMMSS 형식)입니다.The time (in HHMMSS format) that the job began executing.
(STRTDT)(STRTDT) 작업이 실행을 시작하는 날짜(YYYYMMDD 형식)입니다.The date (in YYYYMMDD format) that the job began executing.
(WMI(property))(WMI(property)) WMI 경고에 대한 응답으로 실행되는 작업의 경우 property에 의해 지정되는 속성 값입니다.For jobs that run in response to WMI alerts, the value of the property specified by property. 예를 들어 $(WMI(DatabaseName)) 는 경고를 실행시킨 WMI 이벤트에 대한 DatabaseName 속성 값을 제공합니다.For example, $(WMI(DatabaseName)) provides the value of the DatabaseName property for the WMI event that caused the alert to run.

SQL Server 에이전트 이스케이프 매크로SQL Server Agent Escape Macros

이스케이프 매크로Escape Macros DescriptionDescription
$(ESCAPE_SQUOTE(token_name))$(ESCAPE_SQUOTE(token_name)) 토큰 교체 문자열에서 작은따옴표(')를 이스케이프합니다.Escapes single quotation marks (') in the token replacement string. 작은따옴표 하나를 작은따옴표 두 개로 바꿉니다.Replaces one single quotation mark with two single quotation marks.
$(ESCAPE_DQUOTE(token_name))$(ESCAPE_DQUOTE(token_name)) 토큰 교체 문자열에서 큰따옴표(")를 이스케이프합니다.Escapes double quotation marks (") in the token replacement string. 큰따옴표 하나를 큰따옴표 두 개로 바꿉니다.Replaces one double quotation mark with two double quotation marks.
$(ESCAPE_RBRACKET(token_name))$(ESCAPE_RBRACKET(token_name)) 토큰 교체 문자열에서 오른쪽 대괄호(])를 이스케이프합니다.Escapes right brackets (]) in the token replacement string. 오른쪽 대괄호 하나를 오른쪽 대괄호 두 개로 바꿉니다.Replaces one right bracket with two right brackets.
$(ESCAPE_NONE(token_name))$(ESCAPE_NONE(token_name)) 문자열에서 아무 문자도 이스케이프하지 않고 토큰을 바꿉니다.Replaces token without escaping any characters in the string. 이 매크로는 신뢰할 수 있는 사용자만 토큰 교체 문자열을 제공할 수 있는 환경에서 이전 버전과의 호환성을 지원하기 위해 제공됩니다.This macro is provided to support backward compatibility in environments where token replacement strings are only expected from trusted users. 자세한 내용은 이 항목의 뒷부분에 나오는 "매크로를 사용하도록 작업 단계 업데이트"를 참조하십시오.For more information, see "Updating Job Steps to Use Macros," later in this topic.

매크로를 사용하도록 작업 단계 업데이트Updating Job Steps to Use Macros

SQL Server 2005SQL Server 2005 서비스 팩 1부터 이스케이프 매크로 없이 토큰이 포함된 작업 단계는 실패하고 작업을 실행하기 전에 매크로를 사용하여 작업 단계에 포함된 하나 이상의 토큰을 업데이트해야 한다는 오류 메시지가 반환됩니다.Beginning with SQL Server 2005SQL Server 2005 Service Pack 1, job steps that contain tokens without escape macros will fail and return an error message indicating the job step contains one or more tokens that must be updated with a macro before the job can run.

MicrosoftMicrosoft 기술 자료 문서 915845: 토큰을 사용하는 SQL Server 에이전트 작업 단계가 SQL Server 2005 서비스 팩 1에서 실패합니다. 이 스크립트를 통해 토큰을 사용하는 모든 작업 단계를 ESCAPE_NONE 매크로로 업데이트할 수 있습니다.A script is provided with MicrosoftMicrosoft Knowledge Base article 915845: SQL Server Agent Job Steps That Use Tokens Fail in SQL Server 2005 Service Pack 1.You can use this script to update all of your job steps that use tokens with the ESCAPE_NONE macro. 이 스크립트를 사용한 다음 토큰을 사용하는 작업 단계를 가능한 한 빨리 검토하여 ESCAPE_NONE 매크로를 작업 단계 컨텍스트에 맞는 이스케이프 매크로로 바꾸는 것이 좋습니다.After using this script, we recommend that you review your job steps that use tokens as soon as possible, and replace the ESCAPE_NONE macro with an escape macro that is appropriate for the job step context.

다음 표에서는 SQL ServerSQL Server 에이전트에서 토큰 바꾸기를 처리하는 방법에 대해 설명합니다.The following table describes how token replacement is handled by SQL ServerSQL Server Agent. 경고 토큰 바꾸기를 설정하거나 해제하려면 개체 탐색기에서 SQL Server 에이전트 를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택하고 경고 시스템 페이지에서 경고에 대한 모든 응답 작업에 대해 토큰 바꾸기 확인란을 선택하거나 선택을 취소합니다.To turn alert token replacement on or off, right-click SQL Server Agent in Object Explorer, select Properties, and on the Alert System page, select or clear the Replace tokens for all job responses to alerts check box.

토큰 구문Token syntax 경고 토큰 바꾸기 설정Alert token replacement on 경고 토큰 바꾸기 해제Alert token replacement off
ESCAPE 매크로가 사용됨ESCAPE macro used 작업에 있는 모든 토큰이 성공적으로 바뀝니다.All tokens in jobs are successfully replaced. 경고로 활성화된 토큰이 바뀌지 않습니다.Tokens activated by alerts are not replaced. 이러한 토큰에는 A-DBN, A-SVR, A-ERR, A-SEV, A-MSGWMI(property)가 있습니다.These tokens are A-DBN, A-SVR, A-ERR, A-SEV, A-MSG, and WMI(property). 다른 정적 토큰은 성공적으로 바뀝니다.Other static tokens are replaced successfully.
ESCAPE 매크로가 사용되지 않음No ESCAPE macro used 토큰이 포함된 모든 작업이 실패합니다.Any jobs containing tokens fail. 토큰이 포함된 모든 작업이 실패합니다.Any jobs containing tokens fail.

토큰 구문 업데이트 예Token Syntax Update Examples

1.A. 비중첩 문자열에 토큰 사용Using tokens in non-nested strings

다음 예에서는 간단한 비중첩 스크립트를 적절한 이스케이프 매크로로 업데이트하는 방법을 보여 줍니다.The following example shows how to update a simple non-nested script with the appropriate escape macro. 업데이트 스크립트를 실행하기 전에 다음 작업 단계 스크립트는 작업 단계 토큰을 사용하여 해당 데이터베이스 이름을 인쇄합니다.Before running the update script, the following job step script uses a job step token to print the appropriate database name:

PRINT N'Current database name is $(A-DBN)' ;

업데이트 스크립트를 실행하고 나면 ESCAPE_NONE 토큰 앞에 A-DBN 매크로가 삽입됩니다.After running the update script, an ESCAPE_NONE macro is inserted before the A-DBN token. 작은따옴표를 사용하여 인쇄 문자열을 구분하기 때문에 다음과 같이 ESCAPE_SQUOTE 매크로를 삽입하여 작업 단계를 업데이트해야 합니다.Because single quotation marks are used to delimit the print string, you must update the job step by inserting the ESCAPE_SQUOTE macro as follows:

PRINT N'Current database name is $(ESCAPE_SQUOTE(A-DBN))' ;

2.B. 중첩 문자열에 토큰 사용Using tokens in nested strings

중첩 문자열이나 문에 토큰이 사용되는 작업 단계 스크립트에서는 적절한 이스케이프 매크로를 삽입하기 전에 중첩 문을 여러 개의 문으로 다시 작성해야 합니다.In job step scripts where tokens are used in nested strings or statements, the nested statements should be rewritten as multiple statements before inserting the appropriate escape macros.

예를 들어, A-MSG 토큰을 사용하며 이스케이프 매크로로 업데이트되지 않은 다음 작업 단계를 가정해 보십시오.For example, consider the following job step, which uses the A-MSG token and has not been updated with an escape macro:

PRINT N'Print ''$(A-MSG)''' ;

업데이트 스크립트를 실행하고 나면 토큰과 함께 ESCAPE_NONE 매크로가 삽입됩니다.After running the update script, an ESCAPE_NONE macro is inserted with the token. 그러나 이 경우 다음과 같이 중첩 없이 스크립트를 다시 작성한 다음 ESCAPE_SQUOTE 매크로를 삽입하여 토큰 교체 문자열에 전달될 수 있는 구분 기호를 올바르게 이스케이프해야 합니다.However, in this case, you would have to rewrite the script without using nesting as follows and insert the ESCAPE_SQUOTE macro to properly escape delimiters that may be passed in the token replacement string:

DECLARE @msgString nvarchar(max)  
SET @msgString = '$(ESCAPE_SQUOTE(A-MSG))'  
SET @msgString = QUOTENAME(@msgString,'''')  
PRINT N'Print ' + @msgString ;

이 예에서 QUOTENAME 함수는 인용 문자도 설정합니다.Note also in this example that the QUOTENAME function sets the quote character.

3.C. 토큰에 ESCAPE_NONE 매크로 사용Using tokens with the ESCAPE_NONE macro

다음 예는 job_id 테이블에서 sysjobs 를 검색하고 JOBID 토큰을 사용하여 스크립트의 앞부분에서 binary 데이터 형식으로 선언된 @JobID 변수를 채우는 스크립트의 일부입니다.The following example is part of a script that retrieves the job_id from the sysjobs table and uses the JOBID token to populate the @JobID variable, which was declared earlier in the script as a binary data type. binary 데이터 형식에는 구분 기호가 필요하지 않으므로 ESCAPE_NONE 토큰에 JOBID 매크로가 사용됩니다.Note that because no delimiters are required for binary data types, the ESCAPE_NONE macro is used with the JOBID token. 이 작업 단계는 업데이트 스크립트를 실행한 후에 업데이트하지 않아도 됩니다.You would not need to update this job step after running the update script.

SELECT * FROM msdb.dbo.sysjobs  
WHERE @JobID = CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID))) ;

관련 항목:See Also

작업 구현Implement Jobs
작업 단계 관리Manage Job Steps