Ascmd 명령줄 유틸리티 예제 추가 정보
업데이트: 2006년 12월 12일
ascmd 명령줄 유틸리티를 사용하면 데이터베이스 관리자가 Microsoft SQL Server 2005 Analysis Services(SSAS) 인스턴스에 대해 XMLA 스크립트, MDX 쿼리 또는 DMX 문을 실행할 수 있습니다. 이 명령줄 유틸리티에는 SQL Server 2005에 포함된 sqlcmd 유틸리티와 비슷한 Analysis Services의 기능이 포함되어 있습니다. 자세한 내용은 SQL Server 2005의 sqlcmd 유틸리티 항목을 참조하십시오. 스크립트, 쿼리 또는 문의 실행 결과는 해당 SQL Server 프로파일러 추적 정보와 함께 파일에 저장할 수 있습니다. ascmd 명령줄 유틸리티의 기본 설치 위치는 다음과 같습니다.
<system_drive>\Program Files\Microsoft SQL Server\90\Samples\Analysis Services\Administrator\ascmd
시나리오
다음 시나리오에서는 ascmd 명령줄 유틸리티 사용 예를 제공합니다.
타사 도구에서 파티션 처리
데이터베이스 관리자가 야간 ETL(추출, 변환 및 로드) 프로세스의 일부로 파티션과 차원을 처리해야 합니다. ETL 도구는 SQL Server 도구가 아니므로 데이터베이스 관리자는 SQL Server 에이전트의 XMLA 스크립트 기본 제공 지원을 사용하거나 SQL Server 2005 Integration Services(SSIS) 패키지를 실행할 수 없습니다. 데이터베이스 관리자에게는 타사 도구를 사용하는 자동화된 솔루션이 필요합니다. 이 솔루션은 XMLA 스크립트를 실행하는 명령줄 유틸리티이며 이 유틸리티는 타사 도구에서 호출됩니다. 데이터베이스 관리자는 ascmd 명령줄 유틸리티 예제를 다운로드하여 컴파일합니다. 컴파일한 후에는 데이터베이스 관리자가 ascmd 명령줄 유틸리티를 사용하여 파티션 및 차원을 처리하는 XMLA 스크립트를 실행할 수 있습니다.
타사 도구에서 OLAP 데이터베이스 백업
같은 회사의 다른 데이터베이스 관리자가 Analysis Services 데이터베이스 백업을 자동화해야 합니다. 또한 회사에서 사용하는 일정 소프트웨어는 SQL Server 도구가 아니므로 명령줄에서 작업을 실행해야 합니다. 데이터베이스 관리자는 해당 XMLA 스크립트(SQL Server Management Studio 사용)를 생성합니다. 그런 다음 타사 일정 소프트웨어에서 XMLA 스크립트를 실행하는 ascmd 명령줄 유틸리티를 사용하여 OLAP 데이터베이스를 백업합니다.
설치 중에 XMLA 사용
독립 소프트웨어 공급업체의 개발자가 XMLA 스크립트 실행을 이 회사의 제품 설치에 직접 통합해야 합니다. Analysis Services 데이터베이스가 올바로 생성되었는지 확인하려면 개발자가 XMLA 스크립트를 실행하고 상태 및 추적 이벤트를 검색해야 합니다. 개발자는 ascmd 명령줄 유틸리티를 사용하여 이 작업을 수행할 수 있습니다.
언어
- C# - ascmd 자체가 코딩된 언어입니다.
- 배치 파일 명령 - ascmd 명령줄 유틸리티를 시작합니다.
필수 구성 요소
ascmd 명령줄 유틸리티를 효과적으로 사용하려면 다음 소프트웨어 중 일부 또는 모두가 설치되어 있어야 합니다.
- Microsoft SQL Server 2005 Analysis Services(SSAS)
ascmd 명령줄 유틸리티는 Analysis Services 인스턴스에 연결하여 MDX 쿼리, XMLA 스크립트 및 DMX 문을 실행하는 데 사용되기 때문에 Analysis Services 인스턴스가 설치되어 실행되고 있어야 합니다.
- SQL Server Management Studio 및 Business Intelligence Development Studio
두 작업 환경에서는 Analysis Services 관련 작업을 완료할 수 있는 지원 인프라를 제공합니다. 사용자 인터페이스를 사용하거나 프로그래밍 방식을 사용하여 지정된 작업을 구현할 수 있습니다.
- AMO(Analysis Management Objects)
Analysis Services가 설치되지 않은 컴퓨터에서 ascmd 명령줄 유틸리티를 실행하려면 AMO가 필요합니다. AMO는 Microsoft 다운로드 센터(https://www.microsoft.com/downloads)에서 다운로드할 수 있는 SQL Server 2005 기능 팩을 통해 설치할 수 있습니다.
- .NET Framework 2.0
ascmd 명령줄 유틸리티를 실행하려면 .NET Framework 2.0이 필요합니다. 이 소프트웨어는 Microsoft 다운로드 센터(https://www.microsoft.com/downloads)에서 다운로드할 수 있습니다.
- Microsoft Visual Studio 2005 또는 .NET Framework SDK 2.0
ascmd 예제 응용 프로그램을 빌드하거나 사용자 지정할 때는 Visual Studio 2005를 사용하는 것이 좋습니다. Visual Studio 2005을 사용할 수 없는 경우에는 .NET Framework SDK 2.0을 사용합니다. .NET Framework SDK에는 MSBuild.exe가 포함되어 있습니다. 이 문서의 뒤에 나오는 "예제 컴파일" 설치를 참조하십시오.
SQL Server 2005에 포함된 Adventure Works DW 데이터베이스
데이터베이스 예제는 ascmd 명령줄 유틸리티를 시험하는 데 유용합니다. 자세한 내용은 SQL Server 2005 온라인 설명서의 AdventureWorks 예제 및 예제 데이터베이스 설치를 위해 설치 프로그램 실행을 참조하십시오.업데이트된 버전의 AdventureWorks 데이터베이스를 SQL Server Developer Center 웹 페이지에서도 다운로드할 수 있습니다.
또한 업데이트된 버전의 SQL Server 2005 데이터베이스 엔진 예제를 SQL Server Developer Center 웹 페이지에서 다운로드할 수 있습니다.
인수
ascmd에 대해 명령줄에서 지원되는 인수는 다음과 같습니다.
-Ulogin_id
대/소문자를 구분하지 않는 사용자 로그인 ID입니다.[!참고] sqlcmd와 ascmd에서 login_id는 서로 다른 방식으로 사용됩니다. sqlcmd에서 login_id는 SQL Server 로그인을 나타내고 ascmd에서는 Windows 로그인을 나타냅니다.
TCP/IP 액세스의 경우 Analysis Services는 트러스트된 연결만 지원합니다. -P 매개 변수를 사용하여 일치하는 암호와 함께 -U 매개 변수를 지정하면 ascmd 명령줄 유틸리티는 지정한 계정을 사용하여 Windows 운영 체제에 로그온한 다음 XMLA 스크립트, MDX 쿼리 또는 DMX 문을 실행할 때 계정을 가장합니다. 로그인 ID는 <domain>\<username> 형식이어야 하며 도메인을 지정해야 합니다. -U를 지정하지 않으면 ascmd 명령줄 유틸리티를 실행하는 사용자의 Windows 계정을 기반으로 인증됩니다.
-S 매개 변수에서 http(또는 https) 연결을 지정하면 ascmd 명령줄 유틸리티는 Windows 운영 체제에 로그온하지 않습니다. 대신 -U 및 -P 매개 변수(있는 경우)는 IIS(인터넷 정보 서비스) 서버에 대한 연결 문자열의 일부로 포함됩니다. IIS 구성 방법에 따라 -U 및 -P 매개 변수를 기본 인증에 사용할 수도 있습니다. "UID" 연결 문자열 매개 변수에 대한 자세한 내용은 SQL Server 2005 온라인 설명서의 AdomdConnection 클래스를 참조하십시오.
-Ppassword
-U 매개 변수에 일치하는 사용자 지정 암호입니다. -U 매개 변수를 지정하고 -P 매개 변수를 지정하지 않으면 암호는 공백(길이가 0인 빈 문자열)으로 가정됩니다. -P 매개 변수를 지정하고 -U 매개 변수를 지정하지 않으면 -P 매개 변수는 무시됩니다.보안 정보: 빈 암호를 사용하지 마십시오. 강력한 암호를 사용하십시오. 자세한 내용은 SQL Server 2005 온라인 설명서의 강력한 암호를 참조하십시오. -P 매개 변수 암호는 스크립트, 쿼리 또는 문 파일에 일반 텍스트로 저장되므로 컴퓨터 모니터를 보거나 파일 자체를 읽을 수 있는 모든 사용자에게 표시됩니다. 이 기능을 사용하는 경우 파일에 ACL을 설정하거나 다른 보안 기술을 사용하여 신뢰할 수 있는 사용자만 파일을 읽을 수 있도록 해야 합니다.
- -Sserver\instance 또는 -Shttp[s]://server[:port]/virtualdirectory/msmdpump.dll
ascmd 명령줄 유틸리티가 연결하여 실행할 Analysis Services 인스턴스를 지정합니다. -P 매개 변수를 지정하지 않으면 ascmd 명령줄 유틸리티는 TCP를 실행하는 로컬 컴퓨터에 있는 Analysis Services의 기본 인스턴스에 연결(localhost에 연결)한 다음 XMLA 스크립트, MDX 쿼리 또는 DMX 문을 실행합니다.
- -ddatabase
MDX 쿼리 또는 DMX 문이 실행될 데이터베이스를 지정합니다. XMLA 스크립트 내에 데이터베이스 이름이 포함되어 있으므로 ascmd 명령줄 유틸리티가 XMLA 스크립트를 실행할 때 -d 매개 변수는 무시됩니다.
- -tquery-timeout
XMLA 스크립트, MDX 쿼리 또는 DMX 문 실행 제한 시간이 초과되기까지의 시간(초)을 지정합니다. ascmd 명령줄 유틸리티는 연결 문자열에 TIMEOUT =<query-timeout> 절을 추가합니다.
- -tcconnect-timeout
Analysis Services 인스턴스에 대한 ascmd 연결 제한 시간이 초과되기까지의 시간(초)을 지정합니다. ascmd 명령줄 유틸리티는 연결 문자열에 CONNECT TIMEOUT = <connect-timeout> 절을 추가합니다.
-iinput-file
XMLA 스크립트, MDX 쿼리 또는 DMX 문이 포함된 파일을 식별합니다. ascmd 명령줄 유틸리티를 사용하는 경우 -i 또는 -Q 매개 변수에 값을 지정해야 합니다. -i 또는 -Q 매개 변수를 지정하지 않거나 두 매개 변수를 모두 지정하면 오류가 생성됩니다.[!참고] 여러 개의 입력 파일을 처리할 수 있는 sqlcmd 명령줄 유틸리티와 달리 ascmd 명령줄 유틸리티는 한 번에 하나의 입력 파일만 처리할 수 있습니다. 입력 파일이 여러 개 있는 경우 각 파일을 개별적으로 호출하여 실행해야 합니다.
-i 또는 -Q 매개 변수를 사용하여 지정한 입력 파일은 올바른 XML 구조여야 하며 특수 문자가 HTML로 인코딩되어 있어야 합니다. 예를 들어 텍스트에 앰퍼샌드(&)를 사용하는 경우
&
처럼 인코딩해야 합니다. 따라서 [Product].&[1922]는 [Product].&[1922]로 인코딩해야 합니다. 마찬가지로 보다 작음 부호(<)는<
로, 보다 큼 부호(>)는>
로, 큰따옴표(")는"
로 인코딩해야 합니다. 이는 멤버 키의 구문에서 앰퍼샌드 문자(&)를 사용하는 MDX 쿼리와 DMX 문에 중요합니다.[!참고] 입력 텍스트를 XMLA 스크립트처럼 표시하지 않으면, 즉 <Statement> 또는 <Create>(이 문서의 뒤에 나오는 전체 목록 참조)와 같은 유효한 XMLA 명령으로 시작하지 않으면 ascmd 명령줄 유틸리티에서는 이 텍스트를 <문>으로 간주하고 텍스트를 HTML로 인코딩하여 <Statement> … </Statement> XML 요소 태그로 묶습니다. 이것은 MDX 쿼리 및 DMX 문을 더 쉽게 실행하기 위해 수행되는 작업입니다. 원한다면 <Statement> 요소를 사용하여 HTML 텍스트를 직접 작성할 수 있습니다. ascmd 명령줄 유틸리티에서는 유효한 모든 XMLA 명령을 사용할 수 있습니다.
입력 파일은 GO 명령으로 구분된 다중 일괄 처리를 포함할 수 있습니다. 입력 파일 내의 각 일괄 처리는 XMLA 스크립트, MDX 쿼리 또는 DMX 문을 포함할 수 있습니다. 각 GO 명령은 한 줄에 표시되어야 합니다. GO 명령을 찾으면 시스템은 GO 명령 앞의 입력을 서버로 보냅니다. 암시적 GO 명령은 입력 스트림의 끝에 있습니다. 생성된 출력 파일은 반환된 XML 스트림을 <multiple-batches> 요소로 래핑하여 서식이 지정됩니다. 다중 일괄 처리를 포함하는 입력 파일의 예는 시나리오 11을 참조하십시오.
각 일괄 처리는 그 자체로 실행되고 성공하거나 실패합니다. 각 일괄 처리의 반환 상태는 출력 파일에 기록되며, 이 파일을 구문 분석하여 각 일괄 처리의 성공 또는 실패를 확인해야 합니다.
-ooutput-file | NUL | NUL:filename
XMLA 스크립트의 결과나 MDX 쿼리 또는 DMX 문에서 반환된 셀 집합을 XML로 받는 파일을 식별합니다. 지정한 파일이 이미 있으면 기존 파일을 자동으로 덮어씁니다. 공백이 포함된 파일 이름은 따옴표("")로 묶어야 합니다. 파일 이름이 잘못된 경우 오류 메시지가 생성되고 ascmd 명령줄 유틸리티가 종료됩니다.ascmd 명령줄 유틸리티는 여러 개의 ascmd 프로세스를 같은 파일에 동시에 쓰는 것을 지원하지 않으므로 이 작업을 시도하면 파일 출력이 손상되거나 잘못됩니다.
지정한 출력 파일이 NUL 또는 NUL:filename인 경우 -T 매개 변수로 추적 파일을 지정하여 실행 결과가 추적 파일에 저장되지 않으면 실행 결과는 무시됩니다. -T 매개 변수로 NUL 출력 파일을 지정하는 것은 -Tl 매개 변수로 Duration 추적 수준을 지정할 때 가장 유용합니다.
예를 들어 ascmd 명령줄 유틸리티를 사용하여 일련의 MDX 쿼리를 만들어 실행하고 매우 커질 수도 있는 출력을 무시하고 쿼리 기간을 추적 파일에 기록한 다음 추적 파일의 쿼리 기간 값을 데이터베이스에 로드할 수 있습니다. 이렇게 하면 시간에 따른 성능 차이를 평가할 수 있습니다. 또는 -Tl 매개 변수에 Duration-result 추적 수준을 사용하여 추적 파일에 기간과 실행 결과를 모두 포함시킬 수 있습니다.
[!참고] ascmd 명령줄 유틸리티는 국가별 인코딩을 지원합니다. 입력 및 출력 파일은 BOM(Byte-Order Marker)이 설정된 UTF-8 인코딩을 사용합니다. 텍스트 편집기에서 UTF-8을 지원하지 않으며 MDX 쿼리, XMLA 스크립트 또는 DMX 문에 국가별 문자가 있는 경우 메모장을 사용하여 입력 파일을 UTF-8 형식으로 변환할 수 있습니다. 입력 파일을 UTF-8로 변환하려면 메모장에서 파일을 열고 파일 메뉴에서 다른 이름으로 저장을 선택한 다음 인코딩 상자에서 UTF-8을 선택합니다. 그런 다음 -i 매개 변수와 함께 이 파일을 사용할 수 있습니다. 출력 파일과 추적 파일(-o 및 -T)은 유니코드 문자가 유지되도록 항상 UTF-8 인코딩과 BOM(Byte-Order Marker)을 사용하여 기록됩니다.
-Ttrace-file
XMLA 스크립트, MDX 쿼리 또는 DMX 문을 실행하는 ascmd 명령줄 유틸리티에서 Analysis Services 추적 이벤트를 받는 파일을 식별합니다. 파일이 이미 있으면 기존 파일을 자동으로 덮어씁니다. 단, -TlDuration 및 -TlDuration-result 매개 변수 설정을 사용하여 만든 추적 파일은 예외입니다. 공백이 포함된 파일 이름은 따옴표("")로 묶어야 합니다. 파일 이름이 잘못된 경우 오류 메시지가 생성되고 ascmd 명령줄 유틸리티가 종료됩니다.ascmd 명령줄 유틸리티는 여러 개의 ascmd 프로세스를 같은 파일에 동시에 쓰는 것을 지원하지 않으므로 이 작업을 시도하면 파일 출력이 손상되거나 잘못됩니다. -T 매개 변수를 지정하지 않으면 추적 출력이 캡처되지 않으며 -Tf, -Tl, Td 및 -Tt 매개 변수는 무시됩니다.
[!참고] http 또는 https 액세스를 사용할 때는 -T 매개 변수를 사용할 수 없습니다. -S 매개 변수를 지정하여 일반 클라이언트/서버 연결을 사용해야 합니다.
-xcextended-connect-string
값이 검사되지 않고 연결 문자열에 바로 삽입되는 확장 연결 문자열을 지정합니다. 문자열에 선행 또는 후행 세미콜론(;)이 포함되지 않아야 합니다. 예를 들어 다음 확장 연결 문자열은 서버와 ascmd 프로세스 간에 사용되는 네트워크 패킷 크기를 4096에서 16384로 변경하고 클라이언트 로캘을 en-US(미국 영어)로 설정하도록 요청합니다.-xc "Packet Size=16384;LocaleIdentifier=1033"
ascmd 명령줄 유틸리티는 기본적으로 확장 연결 문자열 정보를 추가하지 않습니다. 예를 들어 Database=*<database name>*을 직접 설정하는 것과 같이 ascmd 명령줄 유틸리티의 많은 옵션을 확장 연결 문자열 설정으로 구현할 수 있지만 가능하면 표준 ascmd 옵션을 사용하고 다른 메커니즘을 사용할 수 없는 경우에만 확장 연결 문자열 설정을 사용하는 것이 좋습니다.
-Tftext | csv
-T 매개 변수(지정한 경우)의 파일 형식을 지정합니다. 기본값은 csv입니다. 다음과 같은 옵션을 사용할 수 있습니다.- 텍스트를 선택하면 파일이 텍스트 형식으로 기록됩니다. 형식의 예로는
<current time> <event-class>.<event-subclass>, [name=value] 등이 있습니다. - csv를 선택하면 파일이 쉼표로 구분된 형식으로 기록됩니다. 기본 열 구분 기호는 |(파이프 또는 세로 막대)입니다. -Td 매개 변수를 사용하여 csv 파일의 기본 구분 기호를 변경할 수 있습니다. 파일의 첫 번째 줄은 값의 열 제목을 지정합니다.
- 텍스트를 선택하면 파일이 텍스트 형식으로 기록됩니다. 형식의 예로는
- -Tddelim-char
-Tf 매개 변수를 사용하는 추적 파일 형식으로 csv를 지정할 때 단일 문자를 추적 파일 구분 기호로 지정합니다. 기본값은 |(파이프 또는 세로 막대)입니다.
- -Tttrace-timeout
-T 매개 변수를 지정한 경우 추적을 끝낼 때까지 Analysis Services 엔진이 대기해야 하는 시간(초)을 지정합니다. 지정한 기간 동안 추적 메시지가 기록되지 않으면 추적은 완료된 것으로 간주됩니다. 기본 추적 제한 시간 값은 5초입니다.
-Tltrace-level
추적 파일에 수집되고 기록되는 데이터 종류를 지정합니다. 이 매개 변수에 사용할 수 있는 5개 값은 다음과 같습니다.- High - 모든 추적 이벤트를 기록합니다. 이 값이 기본 설정입니다.
- Medium - ProgressReportCurrent 및 알림 이벤트를 제외한 모든 추적 이벤트를 기록합니다.
- Low - 이벤트에 "End" 또는 "Error"가 포함된 추적 이벤트만 기록합니다.
- Duration - 추적 이벤트를 기록하는 대신 ascmd 프로세스에 의한 스크립트, 쿼리 또는 문 실행 기간을 확인합니다. 현재 시간, 기간, 실행 텍스트, 데이터베이스 및 서버 이름을 포함하는 추적 파일에 단일 항목을 기록합니다.
- Duration-result - 기간 설정과 동일한 정보를 기록하며 추적 파일의 마지막 열에 실행 결과도 기록합니다.
[!참고] Duration 및 Duration-result 설정을 사용하여 생성된 추적 파일은 High, Medium 및 Low 설정을 사용하여 생성된 추적 파일의 경우와 같이 실행될 때마다 덮어쓰지 않습니다. 대신 Duration 및 Duration-result 설정을 사용하면 기존 추적 파일이 있을 경우 해당 파일이 열리고 파일의 끝에 새 값이 추가됩니다. 추적 파일이 없으면 새로 생성됩니다.
-Q*"cmdline query or script"*
파일 대신 명령줄에서 실제 스크립트, 쿼리 또는 문을 직접 지정합니다.[!참고] sqlcmd 명령줄 유틸리티는 -q 매개 변수를 사용하여 입력 쿼리를 지정하는 또 다른 방법을 지원합니다. 단, 이 옵션은 sysinput에서 값을 읽기 때문에 다른 언어를 생성하여 추가하지 않으면 입력 쿼리를 쓸 수 없습니다. 예를 들어 sqlcmd는 "go" 및 "exit"를 사용하여 sysinput 명령을 제어합니다. ascmd 명령줄 유틸리티에서는 쿼리 입력을 지정하는 이러한 추가적인 방법을 지원하지 않습니다.
-v var=value...
추가 스크립팅 변수를 지정합니다. 각 변수는 한 개의 var = value 쌍입니다. 값에 중간 공백이나 제어 문자가 있으면 해당 문자를 큰따옴표(")로 묶어야 합니다. 예를 들면 다음과 같습니다.-v maxparallel=4 option= "degree of freedom"
var = value 쌍을 지정하지 않거나 한 개 이상 지정할 수 있습니다.
- -? 또는 /?
ascmd 명령줄 유틸리티 옵션에 대한 구문 요약을 표시합니다.
키 암호화 및 예제 컴파일
강력한 이름 키 파일을 생성하지 않았다면 다음 지침에 따라 해당 키 파일을 생성합니다.
강력한 이름 키 파일을 생성하려면
Microsoft Visual Studio 2005 명령 프롬프트를 엽니다. 시작을 클릭하고 모든 프로그램, Microsoft .NET Framework SDK 2.0을 차례로 가리킨 다음 SDK 명령 프롬프트를 클릭합니다.
-- 또는--
Microsoft .NET Framework 명령 프롬프트를 엽니다. 시작을 클릭하고 모든 프로그램, Microsoft .NET Framework SDK 2.0을 차례로 가리킨 다음 SDK 명령 프롬프트를 클릭합니다.
디렉터리 변경 명령(CD)을 사용하여 명령 프롬프트 창의 현재 디렉터리를 예제가 설치된 폴더로 변경합니다.
[!참고] 예제가 있는 폴더를 확인하려면 시작 단추를 클릭하고 모든 프로그램, Microsoft SQL Server, 설명서 및 자습서를 차례로 가리킨 다음 예제 디렉터리를 클릭하십시오. 기본 설치 위치가 사용된 경우 예제는 <system_drive>:\Program Files\Microsoft SQL Server\100\Samples에 있습니다.
명령 프롬프트에서 다음 명령을 실행하여 키 파일을 생성합니다.
sn -k SampleKey.snk
중요: 강력한 이름 키 쌍에 대한 자세한 내용은 MSDN의 .NET Development Center에서 "Security Briefs: Strong Names and Security in the .NET Framework"를 참조하십시오.
다음 두 가지 방법 중 하나를 사용하여 예제를 컴파일할 수 있습니다.
Visual Studio 2005 사용 -<install_path>\Samples\Analysis Services\Administrator\ascmd\cs 폴더에 제공된 Visual Studio 솔루션을 사용하여 예제를 컴파일합니다.
.NET Framework SDK 2.0에 포함된 MSBuild 사용 - 명령 프롬프트에서 다음 명령을 실행하여 예제를 컴파일합니다.
cd Analysis Services\Administrator\ascmd\CS\ascmd msbuild ascmd.csproj /nologo /v:quiet /p:Configuration=Debug;Platform=<platform>
[!참고] Microsoft x86 및 x64 기반 컴퓨터에서는 Visual Studio를 완전히 지원하지만 Itanium 기반 컴퓨터에서는 지원하지 않습니다. ascmd 명령줄 유틸리티를 컴파일하면 모든 x86, x-64, Itanium 기반 컴퓨터에서 ascmd 명령줄 유틸리티를 실행할 수 있습니다.
이전 코드에서 <platform> 매개 변수 값은 32비트 컴퓨터의 경우 x86, x64 기반 컴퓨터의 경우 x64, IA-64 기반 컴퓨터의 경우 Itanium일 수 있습니다. 64비트 컴퓨터에서 32비트 코드를 실행하면 성능이 저하될 수 있으므로 ascmd 명령줄 유틸리티에 맞는 버전을 컴파일하는 것이 가장 좋습니다.
[!참고] 대상 컴퓨터와 아키텍처가 다른 컴퓨터에서 ascmd 명령줄 유틸리티를 컴파일하는 경우(예: x64 또는 Itanium 매개 변수 값을 사용하여 32비트 컴퓨터에서 ascmd 명령줄 유틸리티를 컴파일하는 경우) 각각의 시스템 DLL 3개를 각각 사용할 수 없다는 경고 메시지 3개가 표시됩니다("...다른 프로세서를 대상으로 합니다"). 이것은 일반적이며 예상된 동작입니다. ascmd 명령줄 유틸리티를 컴파일한 다음 컴파일된 실행 파일을 대상 서버로 복사하여 해당 DLL을 사용할 수 있는 대상 서버에서 실행하면 됩니다.
스크립팅 및 환경 변수 사용
ascmd 명령줄 유틸리티는 XMLA 스크립트, MDX 쿼리 및 DMS 문에 사용할 수 있는 시스템 예약 스크립팅 변수 및 사용자 정의 스크립팅 변수를 지원합니다. 이러한 변수의 값은 환경 변수에 값을 지정하거나 명령줄 매개 변수에 값을 지정하여 채울 수 있습니다.
사용자 정의 스크립팅 변수와 환경 변수에는 다음 규칙이 적용됩니다.
- 변수에 소문자, 대문자, 숫자, 대시(-) 또는 밑줄(_)을 개수에 관계없이 사용할 수 있습니다.
- 변수에 포함 문자나 제어 문자(예: CR, LF, TAB)는 사용할 수 없습니다.
시스템 예약 스크립팅 변수
시스템 예약 스크립팅 변수는 ascmd 명령줄 유틸리티에서 각 명령줄 매개 변수에 연결된 값을 보유하도록 정의한 스크립팅 변수입니다. 환경 변수를 사용하여 시스템 예약 스크립팅 변수의 값을 보유할 수 있는 경우도 있습니다. 환경 변수와 명령줄 매개 변수 모두에서 채우거나 파생될 수 있는 시스템 예약 스크립팅 변수의 경우 명령줄 매개 변수에 지정한 값(지정한 경우)이 지정한 환경 변수 값을 모두 덮어씁니다.
다음 표에서는 시스템 예약 스크립팅 변수, 관련 명령줄 매개 변수 및 해당되는 경우 관련 환경 변수에 대해 설명합니다.
[!참고] 시스템 예약 스크립팅 변수 중 3개는 명령줄 매개 변수(-i, -o 및 -T 매개 변수)를 사용하여 설정해야 합니다. 이러한 3개의 명령줄 매개 변수에 해당하는 시스템 예약 스크립팅 변수를 채우는 데 사용할 수 있는 해당 ASCMD 환경 변수는 없습니다.
시스템 예약 스크립팅 변수 | 매개 변수 | 환경 변수(있는 경우) |
---|---|---|
ASCMDUSER |
-U |
ASCMDUSER |
ASCMDDOMAIN |
-U |
ASCMDUSER |
ASCMDPASSWORD |
-P |
ASCMDPASSWORD |
ASCMDSERVER |
-S |
ASCMDSERVER |
ASCMDINSTANCE |
-S |
ASCMDSERVER |
ASCMDHTTPCONNECTION |
-S |
ASCMDSERVER |
ASCMDDBNAME |
–d |
ASCMDDBNAME |
ASCMDINPUTFILE |
-i |
|
ASCMDOUTPUTFILE |
-o |
|
ASCMDQUERYTIMEOUT |
-t |
ASCMDQUERYTIMEOUT |
ASCMDCONNECTTIMEOUT |
-tc |
ASCMDCONNECTTIMEOUT |
ASCMDTRACEFILE |
-T |
|
ASCMDTRACEFORMAT |
-Tf |
ASCMDTRACEFORMAT |
ASCMETRACEDELIM |
-Td |
ASCMDTRACEDELIM |
ASCMDTRACELEVEL |
-Tl |
ASCMDTRACELEVEL |
ASCMDTRACETIMEOUT |
-Tt |
ASCMDTRACETIMEOUT |
ASCMDEXTENDEDCONNECTION |
-xc |
ASCMDEXTENDEDCONNECTSTRING |
앞의 표에서 볼 수 있듯이 단일 매개 변수나 환경 변수에서 여러 개의 시스템 예약 스크립팅 변수가 파생되는 경우가 있습니다. 다음 예에서는 3개의 시스템 예약 스크립팅 변수가 ASCMDSERVER 환경 변수 설정에서 파생됩니다.
- C:\>SET ASCMDSERVER=http://myserver/my_virtual_dir/msmdpump.dll
ASCMDSERVER 환경 변수의 값을 지정하는 위의 SET 문은 다음 3개의 시스템 예약 스크립팅 변수에 값을 설정합니다.
- ASCMDSERVER="http://myserver/my_virtual_dir/msmdpump.dll"
- ASCMDINSTANCE=""
- ASCMDHTTPCONNECTION="true"
다음 예에서는 다른 SET 문을 사용하여 동일한 3개의 시스템 예약 스크립팅 변수에 다른 값을 채웁니다.
- C:\>SET ASCMDSERVER=myserver\myinstance
ASCMDSERVER 환경 변수의 값을 지정하는 위의 SET 문은 다음 3개의 시스템 예약 스크립팅 변수에 값을 설정합니다.
- ASCMDSERVER="myserver"
- ASCMDINSTANCE="myinstance"
- ASCMDHTTPCONNECTION="false"
명령 프롬프트에서 시스템 예약 스크립팅 변수 사용
시스템 예약 스크립팅 변수에 일치하는 환경 변수가 있으면(일치 시 대/소문자 구분 안 함) 해당 환경 변수의 값이 시스템 예약 스크립팅 변수 및 관련 명령줄 매개 변수의 기본값으로 사용됩니다. 예를 들어 실행된 다음 SET 문을 사용하여 ASCMDDBNAME 환경 변수를 설정할 수 있습니다.
- C:\>SET ASCMDDBNAME="Adventure Works DW"
이 경우 명령줄에서 다른 값을 지정하지 않으면 ascmd 명령줄 유틸리티를 실행할 때 "Adventure Works DW"가 기본 데이터베이스(-d 매개 변수)로 사용됩니다.
스크립트, 쿼리 또는 문에 시스템 예약 스크립팅 변수 사용
XMLA 스크립트, MDX 쿼리 또는 DMX 문에 시스템 정의 스크립팅 변수를 사용할 수도 있습니다. 다음 예에서는 스크립팅 변수를 사용하는 ascmd 명령줄 유틸리티의 명령줄 호출 예제를 보여 줍니다. 이 문서의 뒤에 사용 시나리오를 보여 주는 더 많은 예가 있습니다.
- C:\>ascmd -S <server name> -i process.xmla -v cube=<CubeID>
process.xmla(간단한 형식)
<Batch>
<Parallel>
<Process>
<Object>
<DatabaseID>$(ASCMDDBNAME)</DatabaseID>
<CubeID>($CUBE)</CubeID>
. . .
</Process>
</Parallel>
</Batch>
사용자 정의 스크립팅 변수
사용자 정의 스크립팅 변수는 명령줄에서 -v 매개 변수를 사용하여 정의되거나 환경 변수로 정의되는 스크립팅 변수입니다. ascmd 명령줄 유틸리티는 XMLA 스크립트, MDX 쿼리 또는 DMX 문에서 변수를 발견하고 해당 변수가 -v 매개 변수를 사용하여 채워지지 않은 경우 같은 이름의 환경 변수를 확인하여 해당 변수의 값을 사용합니다. ascmd 명령줄 유틸리티에서 일치하는 환경 변수를 찾지 못하면 이 스크립팅 변수는 빈 문자열("")로 대체되어 제거됩니다.
명령줄에서 -v 매개 변수를 사용하여 정의된 사용자 정의 스크립팅 변수에는 다음 규칙이 적용됩니다.
- 변수의 "value" 섹션에서 선행 및 후행 공백이 제거됩니다.
- 변수는 "ascmd" 문자열로 시작할 수 없습니다.
입력 파일에 MDX, XMLA 및 DMX 사용
ascmd 명령줄 유틸리티는 입력 파일 내의 MDX 쿼리, XMLA 스크립트 및 DMX 문 실행을 지원합니다. ascmd 명령줄 유틸리티에 전달하는 입력 스크립트는 실제로 XMLA 명령 요소입니다.
명령 요소는 다음과 같습니다.
- Alter
- Backup
- Batch
- BeginTransaction
- Cancel
- ClearCache
- CommitTransaction
- Create
- Delete
- DesignAggregations
- Drop
- Insert
- Lock
- MergePartitions
- NotifyTableChange
- Process
- Restore
- RollbackTransaction
- Statement(MDX 쿼리 및 DMX 문을 실행하는 데 사용)
- Subscribe
- Synchronize
- Unlock
- Update
- UpdateCells
한 번에 여러 개체에 명령을 수행하려면 <Batch> 명령을 사용합니다. MDX 쿼리 및 DMX 문에 대해 실행하려면 <Statement> 명령을 사용합니다. 자세한 내용은 SQL Server 2005 온라인 설명서의 Command Element (XMLA)를 참조하십시오. 다음 예에서는 MDX 쿼리, DMX 문 및 XMLA 스크립트의 구성 방법을 보여 줍니다.
중요: |
---|
모든 XML 구조와 마찬가지로 명령은 대/소문자를 구분합니다. 따라서 예를 들어 모든 MDX 쿼리를 <Statement> .... </Statement> 태그로 묶어야 하며 명령은 "Statement"여야 합니다. 이때 "statement" 또는 "STATEMENT"를 사용할 수 없습니다. |
XMLA 명령 외에 ascmd 명령줄 유틸리티를 사용하여 XMLA에서 표현할 수 있는 모든 요청을 가상으로 실행하라는 사용자 지정 XMLA 요청을 실행할 수도 있습니다. 예를 들어 ascmd 명령줄 유틸리티를 사용하여 다음 XMLA 요청 중 하나를 실행할 수 있습니다.
- Analysis Services 메타데이터를 쿼리하기 위한 XMLA 요청을 검색합니다. 이 메타데이터에는 다음에 대한 정보가 포함됩니다.
- Analysis Services 데이터베이스에 저장된 개체(예: 서버에 정의된 큐브)
- 사용 중인 리소스(서버에 열려 있는 연결)
- 속성 목록 및 매개 변수 목록을 지정하여 명령을 실행하면서도 명령을 수정하라는 요청을 실행합니다. 이러한 유형의 요청에 대한 예는 이 문서의 뒤에 나와 있습니다. 실행 예를 참조하십시오.
입력 텍스트가 XMLA 명령, 검색 요청 또는 실행 요청 형식으로 지정되지 않으면 ascmd 명령줄 유틸리티는 입력 텍스트를 MDX 쿼리나 DMX 문으로 간주합니다. 이 경우 ascmd 명령줄 유틸리티는 텍스트를 HTML로 인코딩하고 <Statement> … </Statement> 요소로 둘러싼 다음 XMLA 명령으로 처리합니다. 이 방법을 통해 MDX 쿼리나 DMX 문을 쉽게 입력할 수 있습니다. 이 기능을 사용하는 방법에 대한 예는 이 문서의 뒤에 나오는 시나리오 1 "Analysis Services 큐브 쿼리"를 참조하십시오.
MDX 예
<Statement>
SELECT NON EMPTY
[Employees].Members ON ROWS,
[Measures].[Internet Gross Profit] ON COLUMNS
FROM [Adventure Works]
</Statement>
이 예는 XMLA 문에서 MDX 쿼리를 사용하여 Adventure Works 큐브에서 비어 있지 않은 Employees 특성 계층의 각 멤버에 대한 Internet Gross Profit 측정값을 반환합니다.
DMX 예
<Statement>
ALTER MINING STRUCTURE [Bike Buyer]
ADD MINING MODEL [Decision Tree]
(
[Customer Key],
[Age],
[Bike Buyer] PREDICT,
[Commute Distance],
[Education],
[Gender],
[House Owner Flag],
[Marital Status],
[Number Cars Owned],
[Number Children At Home],
[Occupation],
[Region],
[Total Children],
[Yearly Income]
) USING Microsoft_Decision_Trees
WITH DRILLTHROUGH
</Statement>
이 예는 XMLA 문의 DMX 쿼리를 사용하여 새 마이닝 모델을 추가하는 방법으로 [Bike Buyer] 마이닝 구조를 변경합니다.
XMLA 예
<Batch xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Parallel>
<Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Object>
<DatabaseID>Adventure Works DW</DatabaseID>
<CubeID>Adventure Works DW</CubeID>
<MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
<PartitionID>Internet_Sales_2001</PartitionID>
</Object>
<Type>ProcessFull</Type>
<WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>
</Parallel>
</Batch>
이 예는 XMLA 문을 사용하여 Internet_Sales_2001 파티션을 완전히 처리합니다.
검색 예
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
<RequestType>MDSCHEMA_CUBES</RequestType>
<Restrictions>
<RestrictionList>
<CATALOG_NAME>Adventure Works DW</CATALOG_NAME>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<Catalog>Adventure Works DW</Catalog>
<Format>Tabular</Format>
</PropertyList>
</Properties>
</Discover>
이 예는 XMLA 검색 요청을 사용하여 Adventure Works DW 데이터베이스에서 사용할 수 있는 큐브를 반환합니다. 큐브 뷰가 큐브인 것처럼 응용 프로그램에 반환되므로 실제로 반환된 데이터에는 큐브와 큐브 뷰가 함께 포함됩니다.
실행 예
<Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
<Command>
<Statement>
SELECT [Measures].MEMBERS ON COLUMNS FROM [Adventure Works]
</Statement>
</Command>
<Properties>
<PropertyList>
<Catalog>Adventure Works DW</Catalog>
<Format>Tabular</Format>
<AxisFormat>ClusterFormat</AxisFormat>
</PropertyList>
</Properties>
</Execute>
이 예는 XMLA 문에서 MDX 쿼리를 사용합니다. 그러나 XMLA 요청의 속성 목록 부분에서 반환 유형을 Multidimensional이 아니라 Tabular로 지정합니다. Multidimensional 형식은 XMLA 문 명령의 기본 형식입니다. 결과 형식이 Tabular(행 집합) 형식이므로 셀 집합이 아닌 xsd 일반 행 집합을 인식하는 응용 프로그램에서 해당 출력 파일을 사용할 수 있으며, 일반 행 집합은 이제 테이블 형식으로 지정되므로 SQL 관계형 데이터베이스로 더 쉽게 로드할 수 있습니다.
ASCMD 시나리오 예
다음 시나리오에서는 ascmd 명령줄 유틸리티의 사용을 보여 줍니다.
시나리오 1: Analysis Services 큐브 쿼리
이 시나리오에서는 MDX 쿼리에 사용자 정의 스크립팅 변수(큐브)가 포함된 MDX 쿼리가 있는 입력 파일(query.mdx 파일)을 만듭니다. 그런 다음 ascmd 명령줄 유틸리티에서 이 입력 파일을 호출하고 -v 매개 변수를 사용하여 명령줄에서 이 변수에 값을 지정합니다.
query.mdx 파일
형식 1:
<Statement>
/* THIS IS AN MDX COMMENT */
SELECT [Measures].[Internet Sales Amount] ON COLUMNS
FROM $(cube)
WHERE [Customer].[Country].&[United States]
</Statement>
형식 2:
/* THIS IS AN MDX COMMENT */
SELECT [Measures].[Internet Sales Amount] ON COLUMNS
FROM $(cube)
WHERE [Customer].[Country].&[United States]
명령줄 예
C:\>ascmd -S myserver -d "Adventure Works DW" -i query.mdx -o result.xml -v cube="[Adventure Works]"
형식 1을 사용하면 멤버 키일 뿐 이름은 아님을 나타내는 MDX "&"를 HTML 인코딩에 필요한 &로 바꾸는 방법으로 United States에 대한 키를 처리하며 <Statement> 요소가 지정됩니다. 형식 2를 사용하면 HTML 인코딩이나 <Statement> 요소가 필요하지 않습니다. 입력 텍스트가 유효한 XMLA 명령으로 시작하지 않으므로 ascmd 명령줄 유틸리티에서 입력 텍스트를 문으로 간주하고 실행하기 전에 자동으로 이 입력 텍스트를 HTML로 인코딩하여 <Statement> 요소로 둘러싸기 때문입니다.
시나리오 2: 트러스트되지 않은 도메인의 데이터베이스 백업
이 시나리오에서는 ascmd 명령줄 유틸리티를 사용하여 트러스트되지 않은 도메인의 서버에 있는 데이터베이스를 백업합니다. 데이터베이스가 신뢰할 수 없는 도메인에 있으므로 이 시나리오에서는 http 액세스가 필요합니다. 이 시나리오에서 "myserver"라는 원격 서버에는 인터넷 정보 서비스(IIS)와 Analysis Services가 모두 실행되고 있으며 BASIC 인증을 사용하여 구성된 "olapadmin"이라는 IIS 가상 디렉터리가 있습니다. 또한 이 원격 서버에는 적절한 백업 권한을 가진 "olapadmin"이라는 로컬 계정이 있습니다. 명령줄에서 ascmd 명령줄 매개 변수를 사용하여 데이터베이스 이름, 액세스 방법, 사용자 이름, 암호 및 백업 파일을 지정한 다음 데이터베이스와 백업 파일에 대한 스크립팅 변수가 포함된 XMLA 입력 파일(backup.xmla)을 지정합니다.
backup.xmla 파일
<Backup xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>$(ascmddbname)</DatabaseID>
</Object>
<File>$(backupfile).abf</File>
</Backup>
명령줄 예
C:\>ascmd -S https://myserver/msolap90/msmdpump.dll -U myserver\olapadmin -P #1PWD -d "Adventure Works DW" -i backup.xmla -v backupfile="AdvWorks"
명령줄 예에서는 네트워크를 통해 원격 서버로 암호를 전송할 때 암호를 암호화하기 위해 https를 사용합니다.
시나리오 3: 여러 파티션 처리
이 시나리오에서는 ascmd 명령줄 유틸리티를 사용하여 여러 파티션을 처리합니다. XMLA 처리 스크립트(process.xmla)에 스크립팅 변수를 사용하여 병렬 처리 수준, 데이터베이스 및 큐브 이름, 프로세스 유형을 지정합니다. 또한 이 XMLA 스크립트는 XMLA 스크립트 내의 명령 사용을 보여 줍니다. ascmd 명령줄 유틸리티에서 process.xmla 처리 스크립트를 호출하는 경우 배치 파일(process.bat)에 서버 및 데이터베이스 이름, XMLA 결과용 출력 파일, 추적 이벤트용 추적 파일, 추적 수준 및 병렬 처리 수준을 지정합니다. 처리하는 동안 관리자가 시스템을 모니터링한 경우에 SQL Server 프로파일러에서 반환하는 것과 동일한 이벤트와 정보가 추적 파일에 포함됩니다.
process.xmla 파일
<Batch xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<Parallel maxparallel="$(MAXPARALLEL)">
<!-- SEE ABOVE FOR HOW MANY PARITIONS PROCESSED IN PARALLEL -->
<Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Object>
<DatabaseID>$(ASCMDDBNAME)</DatabaseID>
<CubeID>$(ASCMDDBNAME)</CubeID>
<!-- Just so happens CubeID=DatabaseID=Database name :-) -->
<MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
<PartitionID>Internet_Sales_2001</PartitionID>
</Object>
<Type>$(PROCESSTYPE)</Type>
<WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>
<Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Object>
<DatabaseID>$(ASCMDDBNAME)</DatabaseID>
<CubeID>$(ASCMDDBNAME)</CubeID>
<MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
<PartitionID>Internet_Sales_2002</PartitionID>
</Object>
<Type>$(PROCESSTYPE)</Type>
<WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>
<Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Object>
<DatabaseID>$(ASCMDDBNAME)</DatabaseID>
<CubeID>$(ASCMDDBNAME)</CubeID>
<MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
<PartitionID>Internet_Sales_2004</PartitionID>
</Object>
<Type>$(PROCESSTYPE)</Type>
<WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>
<Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Object>
<DatabaseID>$(ASCMDDBNAME)</DatabaseID>
<CubeID>$(ASCMDDBNAME)</CubeID>
<MeasureGroupID>Fact Internet Sales 1</MeasureGroupID>
<PartitionID>Internet_Sales_2003</PartitionID>
</Object>
<Type>$(PROCESSTYPE)</Type>
<WriteBackTableCreation>UseExisting</WriteBackTableCreation>
</Process>
</Parallel>
</Batch>
process.bat 파일
@echo off
call :generate-timestamp
ascmd -S myserver -d "Adventure Works DW" -i process.xmla
-o process.xml -T process-%timestamp%.csv -Tl medium
-v maxparallel=4 processtype=ProcessFull
if ERRORLEVEL 1 goto errseen
goto :EOF
:errseen
echo ** Error seen in processing
goto :EOF
:generate-timestamp
set now_date=%date%
set now_time=%time%
set now_Year=%now_date:~10,4%
set now_Month=%now_date:~4,2%
set now_Day=%now_date:~7,2%
set now_Hour=%now_time:~0,2%
set now_Min=%now_time:~3,2%
if "%now_Hour:~0,1%"==" " set now_Hour=0%now_Hour:~1,1%
set timestamp=%now_year%%now_month%%now_day%_%now_hour%%now_min%
goto :EOF
배치 파일은 여러 개의 실행이 동시에 기록될 수 있도록 출력 파일에 타임스탬프를 사용합니다.
시나리오 4: 서버에 새 데이터베이스 만들기
이 시나리오에서는 ascmd 명령줄 유틸리티를 사용하여 서버에 새 데이터베이스를 만드는 XMLA 스크립트 파일(create.xmla)을 호출합니다. 데이터베이스 이름은 XMLA 스크립트에서 사용자 정의 스크립팅 변수를 사용하여 정의되고 이 변수의 값은 명령줄에서 -v 매개 변수를 사용하여 정의됩니다.
create.xmla 파일
이 파일은 SQL Server Management Studio에서 생성되었습니다. 직접 파일을 만들려면 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 스크립트 메뉴에서 만들기를 클릭합니다.
<Create xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<ObjectDefinition>
<Database xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ID>$(dbname)</ID>
<Name>$(dbname)</Name>
<Description>A Unified Dimensional Model that encompasses the Adventure Works data warehouse.</Description>
<Language>1033</Language>
<Collation>Latin1_General_CI_AS</Collation>
<DataSourceImpersonationInfo>
<ImpersonationMode>Default</ImpersonationMode>
</DataSourceImpersonationInfo>
<Dimensions>
<Dimension>
<ID>Dim Promotion</ID>
<Name>Promotion</Name>
<Annotations>
. . .
명령줄 예
C:\>ascmd -S myserver -i create.xmla -v dbname="My Adventure Works DW"
위의 XMLA 스크립트에서 스크립팅 변수를 사용하여 데이터 원본에 대한 연결 문자열, 데이터 원본에 사용되는 서버 및 데이터베이스 이름 또는 데이터 원본 뷰의 필드 이름과 같은 개체를 구성할 수도 있습니다.
시나리오 5: 캐시 워머 응용 프로그램 만들기
이 시나리오에서는 배치 파일(cache_warmer.bat)을 사용하여 ascmd 명령줄 유틸리티를 호출하고 Analysis Services 데이터 캐시를 워밍하는 여러 MDX 쿼리를 호출합니다. 예를 들어 매일 오전 2시 또는 야간 일괄 처리 로드 후에 SQL Server 에이전트를 사용하여 이 배치 파일을 호출할 수 있습니다. 배치 파일에서 서버, 데이터베이스 및 큐브 이름에 대한 환경 변수를 설정합니다. 환경 변수로 지정한 서버 및 데이터베이스 이름은 시스템 예약 스크립팅 변수의 이름과 정확하게 일치하므로 -S 및 -d 명령줄 매개 변수의 기본값이 됩니다. 큐브 이름에 대한 사용자 정의 스크립팅 변수는 모든 MDX 쿼리에 사용됩니다.
query1.mdx 파일
파일: query1.mdx - query6.mdx(query1.txt 형식)
<Statement>
SELECT [Measures].[Internet Sales Amount] ON COLUMNS
FROM $(cube)
WHERE [Customer].[Country].&[United States]
</Statement>
[United States]를 [Australia], [Canada], [France], [Germany], [United Kingdom] 등 Adventure Works의 다른 국가로 바꾸어 추가 쿼리 파일을 만듭니다.
cache_warmer.bat 파일
set ascmdserver=myserver
set ascmddbname=Adventure Works DW
set cube=[Adventure Works]
set QUERYDIR=..\queries
set OUTPUTDIR=..\queries
echo -------------------------
set f=
for %%f in (%QUERYDIR%\*.mdx) do (
call :query %%f
if ERRORLEVEL 1 goto :EOF
)
echo -------------------------
echo Done.
goto :EOF
:query
echo Query: %1
echo ---------
ascmd -T %OUTPUTDIR%\querylog.txt -Tl duration
-Tf text -o %OUTPUTDIR%\%~n1.xml -i %1
echo Errorlevel: %ERRORLEVEL%
echo -------------------------
if ERRORLEVEL 1 goto :errseen
goto :EOF
:errseen
echo -------------------------
echo ******
echo ****** ERROR SEEN ******
echo ****** Exiting ******
goto :EOF
시나리오 6: 유효성 검사 프로시저 만들기
이 시나리오에서는 야간 ETL 실행이 끝날 때 이전 시나리오와 유사하게 ascmd 명령줄 유틸리티를 사용하여 여러 MDX 쿼리 파일을 호출합니다. -Tl 기간 매개 변수를 사용하여 각 MDX 쿼리의 기간을 추적 파일에 기록하는 동시에 MDX 스크립트 출력을 nul 파일로 보냅니다(-oNUL). -Tl 기간 매개 변수를 사용하는 동시에 실행 결과를 추적 로그에 기록할 수도 있습니다. 이런 방식으로 ascmd 명령줄 유틸리티를 사용하면 각 MDX 쿼리에 필요한 시간을 추적하고 매일 이러한 결과를 비교하여 동일한 범위의 값이 반환되는지 확인할 수 있습니다. 지정된 날짜의 기간 결과가 범위를 크게 벗어나는 경우는 ETL 실행 결과를 취소해야 함을 나타낼 수 있습니다.
명령줄 예
C:\>ascmd -i %queryfile% -o NUL -T querylog.csv -Tl duration
시나리오 7: 데이터 마이닝 모델 작성 및 성향 습득 자동화
이 시나리오에서 ascmd 명령줄 유틸리티를 사용하여 다음과 같은 여러 DMX 문을 호출할 수 있습니다.
- 마이닝 구조를 만들고 환경 변수를 사용하여 서버 및 데이터베이스 이름을 설정하는 DMX 문(Bike Buyer Structure.DMX)
- 클러스터링 마이닝 모델을 구조에 추가하는 DMX 문(Clustering_Model.dmx)
- 의사결정 트리 마이닝 모델을 구조에 추가하는 DMX 문(DT_Model.dmx)
- 마이닝 구조 및 마이닝 모델을 처리하는 DMX 문(Process Bike Buyer Structure.dmx)
마이닝 구조가 제 위치에 있으면 ascmd 명령줄 유틸리티를 사용하여 여러 마이닝 모델을 사용하는 마이닝 구조를 쿼리하는 여러 DMX 문을 호출할 수 있습니다.
마이닝 구조 만들기
Bike Buyer Structure.dmx 파일
<Statement>
CREATE MINING STRUCTURE [Bike Buyer]
(
[Customer Key] LONG KEY,
[Age]LONG DISCRETIZED(Automatic,10),
[Bike Buyer] LONG DISCRETE,
[Commute Distance] TEXT DISCRETE,
[Education] TEXT DISCRETE,
[Gender] TEXT DISCRETE,
[House Owner Flag] TEXT DISCRETE,
[Marital Status] TEXT DISCRETE,
[Number Cars Owned]LONG DISCRETE,
[Number Children At Home]LONG DISCRETE,
[Occupation] TEXT DISCRETE,
[Region] TEXT DISCRETE,
[Total Children]LONG DISCRETE,
[Yearly Income] DOUBLE CONTINUOUS
)
</Statement>
명령줄 예
C:\>set ascmdserver=myserver
C:\>set ascmddbname=Adventure Works DW
C:\>ascmd -i "Bike Buyer Structure.dmx"
구조에 클러스터링 마이닝 모델 추가
Clustering_Model.dmx 파일
<Statement>
ALTER MINING STRUCTURE [Bike Buyer]
ADD MINING MODEL [Clustering]
USING Microsoft_Clustering
</Statement>
명령줄 예
C:\>ascmd -i "Clustering_Model.dmx"
구조에 의사결정 트리 마이닝 모델 추가
DT_Model.dmx 파일
<Statement>
ALTER MINING STRUCTURE [Bike Buyer]
ADD MINING MODEL [Decision Tree]
(
[Customer Key],
[Age],
[Bike Buyer] PREDICT,
[Commute Distance],
[Education],
[Gender],
[House Owner Flag],
[Marital Status],
[Number Cars Owned],
[Number Children At Home],
[Occupation],
[Region],
[Total Children],
[Yearly Income]
) USING Microsoft_Decision_Trees
WITH DRILLTHROUGH
</Statement>
명령줄 예
C:\>ascmd -i "DT_Model.dmx"
마이닝 구조 및 마이닝 모델 처리
Process Bike Buyer Structure.dmx 파일
<Statement>
INSERT INTO MINING STRUCTURE [Bike Buyer]
(
[Customer Key],
[Age],
[Bike Buyer],
[Commute Distance],
[Education],
[Gender],
[House Owner Flag],
[Marital Status],
[Number Cars Owned],
[Number Children At Home],
[Occupation],
[Region],
[Total Children],
[Yearly Income]
)
OPENQUERY([$(ASCMDDBNAME)],
'SELECT CustomerKey, Age, BikeBuyer,
CommuteDistance,EnglishEducation,
Gender,HouseOwnerFlag,MaritalStatus,
NumberCarsOwned,NumberChildrenAtHome,
EnglishOccupation,Region,TotalChildren,
YearlyIncome
FROM dbo.vTargetMail')
</Statement>
명령줄 예
C:\>ascmd -i "DT_Model.dmx"
의사결정 트리 마이닝 모델을 사용하여 구조 쿼리
SELECT_DRILLTHROUGH.dmx 파일
<Statement>
SELECT *
FROM [Decision Tree].CASES
</Statement>
BATCH_PREDICTION.dmx 파일
<Statement>
SELECT
TOP 10
t.[LastName],
t.[FirstName],
[Decision Tree].[Bike Buyer],
PredictProbability([Bike Buyer])
From
[Decision Tree]
PREDICTION JOIN
OPENQUERY([$(ASCMDDBNAME)],
'SELECT
[LastName],
[FirstName],
[MaritalStatus],
[Gender],
[YearlyIncome],
[TotalChildren],
[NumberChildrenAtHome],
[Education],
[Occupation],
[HouseOwnerFlag],
[NumberCarsOwned]
FROM
[dbo].[ProspectiveBuyer]
') AS t
ON
[Decision Tree].[Marital Status] = t.[MaritalStatus] AND
[Decision Tree].[Gender] = t.[Gender] AND
[Decision Tree].[Yearly Income] = t.[YearlyIncome] AND
[Decision Tree].[Total Children] = t.[TotalChildren] AND
[Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
[Decision Tree].[Education] = t.[Education] AND
[Decision Tree].[Occupation] = t.[Occupation] AND
[Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND
[Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned]
WHERE [Decision Tree].[Bike Buyer] =1
ORDER BY PredictProbability([Bike Buyer]) DESC
</Statement>
SELECT_DISCRETE.dmx 파일
<Statement>
SELECT DISTINCT [Bike Buyer]
FROM [Decision Tree]
</Statement>
명령줄 예
C:\>ascmd -i SELECT_DRILLTHROUGH.dmx
C:\>ascmd -i BATCH_PERDICTION.dmx
C:\>ascmd -i SELECT_DISCRETE.dmx
시나리오 8: Analysis Services 데이터 캐시 지우기
이 시나리오에서는 ascmd 명령줄 유틸리티를 사용하여 성능 조사 시 성능 실행 간에 Analysis Services 데이터 캐시를 지우는 XMLA 스크립트(ClearCache.xmla)를 호출합니다. ClearCache.xmla 파일에는 데이터베이스 및 큐브 이름에 대한 스크립팅 변수가 들어 있습니다. 이 XMLA 스크립트는 서버 및 인스턴스 이름, 데이터베이스 이름, 입력 파일 이름, 출력 파일 이름 및 큐브 이름을 지정하는 배치 파일(ClearCache.bat)에 의해 호출됩니다.
ClearCache.xmla 파일
<Batch xmlns="https://schemas.microsoft.com/analysisservices/2003/engine">
<ClearCache>
<Object>
<DatabaseID>$(ASCMDDBNAME)</DatabaseID>
<CubeID>$(CUBE)</CubeID>
</Object>
</ClearCache>
</Batch>
ClearCache.bat 파일
@echo off
ascmd -S myserver\myinstance -d "Adventure Works DW" -i ClearCache.xmla
-o ClearCache.xml -v cube="Adventure Works DW"
if ERRORLEVEL 1 goto :errseen
goto :EOF
:errseen
echo **** Error seen ****
echo ********************
goto :EOF
시나리오 9: 현재 서버에 연결되어 있는 사용자 확인
이 시나리오에서는 ascmd 명령줄 유틸리티를 사용하여 서버의 활성 연결 목록을 검색합니다. 야간 일괄 실행을 위한 연결 이외에 현재 연결된 사용자가 있는 경우 응용 프로그램에서 이 정보를 사용하여 특정 사용자가 연결을 끊을 때까지 처리를 지연하거나 운영자에게 전자 메일을 보낼 수 있습니다.
connections.xmla 파일
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
<RequestType>DISCOVER_CONNECTIONS</RequestType>
<Restrictions />
<Properties>
<PropertyList>
<Content>Data</Content> <!-- Only the data; no schema -->
</PropertyList>
</Properties>
</Discover>
명령줄 예
C:\>ascmd -S myserver -i connections.xmla -o current_connections.xml
시나리오 10: 파티션 처리 여부 및 파티션이 처리된 경우 최종 처리 시간 확인
이 시나리오에서는 ascmd 명령줄 유틸리티를 사용하여 파티션 처리 여부 및 처리 시간을 확인합니다. 이 정보는 파티션 개체의 속성으로 저장되므로 쉽게 검색할 수 있습니다. DISCOVER_XML_METADATA 요청을 사용하여 이 정보를 검색할 수 있습니다.
connections.xmla 파일
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis">
<RequestType>DISCOVER_XML_METADATA</RequestType>
<Restrictions>
<RestrictionList>
<DatabaseID>$(DatabaseID)</DatabaseID>
<CubeID>$(CubeID)</CubeID>
<MeasureGroupID>$(MeasureGroupID)</MeasureGroupID>
<PartitionID>$(PartitionID)</PartitionID>
<!-- Ask for just this object referenced -->
<ObjectExpansion>ReferenceOnly</ObjectExpansion>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<Content>Data</Content> <!-- Only the data; no schema -->
</PropertyList>
</Properties>
</Discover>
시나리오 11: GO 명령을 사용하여 쓰기 저장(writeback) 작업 수행
이 시나리오에서는 ascmd 명령줄 유틸리티를 사용하여 쓰기 저장(writeback)을 데이터 변경 및 커밋의 두 부분으로 나눕니다. 쓰기 저장(writeback)을 수행하려면 쓰기 저장(writeback) 작업에 필요한 두 개의 MDX 문(UPDATE CUBE 문 및 COMMIT TRANSACTION 문)이 동일한 트랜잭션 내에서 차례로 실행되어야 하므로 GO 명령을 사용해야 합니다. MDX는 동일한 일괄 처리 내에서 두 MDX 문의 실행을 지원하지 않습니다.
이 시나리오의 경우 쓰기 저장(writeback)을 지원하도록 Adventure Works DW 데이터베이스를 수정해야 합니다. 기존 데이터베이스에는 현재 쓰기 저장(writeback)을 지원하는 큐브 예가 없습니다. 쓰기 저장(writeback)을 지원하는 큐브를 만들고 확인하려면 다음 단계를 수행하십시오.
"Writeback"이라는 새 큐브 정의
Business Intelligence Development Studio를 엽니다.
파일 메뉴에서 열기를 가리킨 다음 Analysis Services 데이터베이스를 클릭합니다.
데이터베이스에 연결 대화 상자의 서버 텍스트 상자에 서버 이름을 입력하고 데이터베이스 목록에서 Adventure Works DW 데이터베이스를 선택한 다음 확인을 클릭합니다.
솔루션 탐색기 창에서 큐브를 마우스 오른쪽 단추로 클릭한 다음 새 큐브를 클릭합니다.
큐브 마법사의 큐브 마법사 시작 페이지에서 다음을 클릭하고 데이터 원본을 사용하여 큐브 생성을 선택한 다음 자동 생성 확인란을 선택 취소하고 다음을 클릭합니다.
데이터 원본 뷰 선택 페이지의 사용 가능한 데이터 원본 뷰 목록에서 Adventure Works DW를 선택한 후 다음을 클릭합니다.
팩트 및 차원 테이블 식별 페이지에서 FactSalesQuota 테이블에 대해 팩트 확인란을 선택하고 dbo.DimTime 및 dbo.DimEmployee 테이블에 대해 차원 확인란을 선택한 후 다음을 클릭합니다.
dbo.DimTime(Date 차원) dbo.DimEmployeeFactSalesQuota("Sales Amount Quota" 측정값 사용)
공유 차원 확인 페이지의 사용 가능한 차원 목록에서 Date 및 Employee를 선택하고 **>**를 클릭하여 두 차원을 큐브 차원 목록에 추가한 후 다음을 클릭합니다.
측정값 선택 페이지에서 Fact Sales Quota 확인란을 선택 취소하고 Sales Amount Quota 확인란을 선택한 후 다음을 클릭합니다.
마법사 완료 페이지에서 큐브 이름을 Writeback으로 변경한 다음 마침을 클릭합니다.
Fact Sales Quota 측정값 그룹에 쓰기 저장(writeback) 사용
큐브 디자이너에서 파티션 탭을 선택합니다.
파티션 목록에서 Fact Sales Quota 파티션을 마우스 오른쪽 단추로 클릭한 다음 쓰기 저장(writeback) 설정을 클릭합니다.
쓰기 저장(writeback) 사용 - Fact Sales Quota 대화 상자에서 기본 쓰기 저장(writeback) 테이블 이름을 검토한 다음 확인을 클릭하여 이 테이블을 만들고 이 파티션에 대해 쓰기 저장(writeback)을 설정합니다.
이제 두 개의 파티션이 나타납니다. 하나는 팩트 테이블에 사용되고 다른 하나는 쓰기 저장(writeback) 테이블에 사용됩니다.
쓰기 저장(writeback) 큐브 처리
솔루션 탐색기의 큐브 노드에서 Writeback을 마우스 오른쪽 단추로 클릭한 다음 처리를 클릭합니다.
변경 내용을 저장할지 묻는 메시지가 표시되면 예를 클릭합니다.
처리 큐브 - 쓰기 저장(writeback) 대화 상자에서 실행을 클릭합니다.
처리 명령을 확장하면 쓰기 저장(writeback) 관계형 테이블을 만드는 데 사용되는 CREATE TABLE SQL 문이 표시됩니다.
처리가 완료되면 상태 상자에서 프로세스가 성공했는지 확인한 다음 닫기를 클릭합니다.
다시 닫기를 클릭하여 처리 파티션 - WriteTable_Fact Sales Quota 대화 상자를 닫습니다.
Business Intelligence Development Studio를 닫습니다.
쓰기 저장(writeback)이 작동하는지 확인
SQL Server Management Studio를 엽니다.
서버에 연결하여 개체 탐색기에서 데이터베이스를 확장하고 Adventure Works DW를 마우스 오른쪽 단추로 클릭한 다음 새 쿼리를 가리키고 MDX를 클릭합니다.
MDX 쿼리 창에서 다음 MDX 쿼리를 실행하여 Q1FY2002 및 Stephen Y. Jiang에 대한 현재 판매 할당액을 반환합니다.
/* Employee 272 is [Stephen Y. Jiang]*/ SELECT [Measures].[Sales Amount Quota] ON COLUMNS FROM [Writeback] WHERE ([Employee].[Employee].[Stephen Y. Jiang],[Date].[Calendar].[Calendar Quarter].[Q1 CY 2002])
다음 MDX 문을 실행하여 2,200달러를 반환하도록 셀을 수정합니다.
UPDATE CUBE [Writeback] SET ([Employee].[Employee].[Stephen Y. Jiang], [Date].[Calendar].[Calendar Quarter].[Q1 CY 2002]) = 2200
다음 MDX 문을 실행하여 트랜잭션을 커밋합니다.
COMMIT TRANSACTION
이때 Adventure Works DW 관계형 데이터베이스의 "dbo.WriteTable_Fact Sales Quota" 테이블을 검사하여 실제로 셀에 대해 수행된 쓰기 저장(writeback)을 확인할 수 있습니다. 이 경우 이 관계형 테이블에 기록된 것은 델타(-88800)입니다. 원래 팩트 테이블은 변경되지 않습니다.
writeback.mdx 파일
/* What is the existing value? */
SELECT [Measures].[Sales Amount Quota] ON COLUMNS
FROM [Writeback]
WHERE ([Employee].[Employee].&[272],
[Date].[Calendar].[Calendar Quarter].&[2002]&[1])
GO
/* Update the cube with a new value */
UPDATE CUBE [Writeback]
SET ([Employee].[Employee].&[272],
[Date].[Calendar].[Calendar Quarter].&[2002]&[1]) = 33000 /* some different value */
GO
/* Commit it */
Commit Transaction
GO
/* See what the updated value is */
SELECT [Measures].[Sales Amount Quota] ON COLUMNS
FROM [Writeback]
WHERE ([Employee].[Employee].&[272],
[Date].[Calendar].[Calendar Quarter].&[2002]&[1])
GO
명령줄 예
C:\>ascmd -S myserver -d "Adventure Works DW" -i writeback.mdx -o writeback_result.xml -v cube="[Writeback]"
Writeback_result.xml
<multiple-batches>
<return xmlns="urn:schemas-microsoft-com:xml-analysis">
<root xmlns= . . .>
<...metadata about the result set...>
<CellData xmlns="urn:schemas-microsoft-com:xml-analysis:mddataset">
<Cell CellOrdinal="0">
<Value xsi:type="xsd:double" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">0</Value>
<FmtValue>2200</FmtValue>
</Cell>
</CellData>
</root>
</return>
<return xmlns="urn:schemas-microsoft-com:xml-analysis">
<root xmlns="urn:schemas-microsoft-com:xml-analysis:empty" />
</return>
<return xmlns="urn:schemas-microsoft-com:xml-analysis">
<root xmlns="urn:schemas-microsoft-com:xml-analysis:empty" />
</return>
<return xmlns="urn:schemas-microsoft-com:xml-analysis">
<root xmlns= . . .>
<...metadata about the result set...>
<CellData xmlns="urn:schemas-microsoft-com:xml-analysis:mddataset">
<Cell CellOrdinal="0">
<Value xsi:type="xsd:double" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">0</Value>
<FmtValue>33000</FmtValue>
</Cell>
</CellData>
</root>
</return>
</multiple-batches>
가운데에 UPDATE CUBE 문과 COMMIT TRANSACTION 문에 대한 두 개의 빈 결과 집합이 있습니다.
릴리스 | 내역 |
---|---|
2006년 12월 12일 |
|
2006년 7월 17일 |
|
참고 항목
관련 자료
XML for Analysis (XMLA)
XML for Analysis Reference (XMLA)
Discover Method (XMLA)
Execute Method (XMLA)