SQL Server 사용량 및 진단 데이터 수집의 로컬 감사(CEIP)

적용 대상:SQL Server - Windows 한정 Azure SQL Managed Instance

소개

Microsoft SQL Server에는 컴퓨터 또는 디바이스에 대한 정보를 수집하여 보낼 수 있는 인터넷 사용 기능이 포함되어 있습니다. 이를 표준 컴퓨터 정보라고 합니다. SQL Server 사용 현황 및 진단 데이터 수집의 로컬 감사 구성 요소는 서비스에서 수집한 데이터를 지정된 폴더에 기록하여 Microsoft로 보낼 데이터(로그)를 나타냅니다. 로컬 감사의 목적은 규정 준수 또는 개인 정보 유효성 검사를 위해 Microsoft가 이 기능을 사용하여 수집하는 모든 데이터를 고객이 확인할 수 있도록 하는 것입니다. 

SQL Server 2016 CU2 및 CU3의 경우 SQL Server 데이터베이스 엔진 및 Analysis Services(SSAS)에 대한 인스턴스 수준에서 로컬 감사를 구성할 수 있습니다. SQL Server 2016 CU4, 2016 SP1 이상 릴리스의 경우, SSIS(SQL Server Integration Services)에도 로컬 감사가 사용됩니다. 설치 후 다운로드되거나 설정된 SQL Server 도구 및 설정 중에 설치되는 기타 SQL Server 구성 요소에는 사용량 및 진단 데이터 수집에 대한 로컬 감사 기능이 없습니다.

설명

  • SQL CEIP 서비스를 제거하거나 사용하지 않도록 설정하는 것은 지원되지 않습니다.
  • 클러스터 그룹에서 SQL CEIP 리소스를 제거하는 것은 지원되지 않습니다.

SQL Server 사용 및 진단 데이터 수집을 옵트아웃할 수 있지만 서비스를 제거하거나 사용하지 않도록 설정할 수는 없습니다. 데이터 수집을 옵트아웃하려면 로컬 감사 활성화 또는 비활성화를 참조하세요

필수 조건

다음은 각 SQL Server 인스턴스에서 로컬 감사를 사용하도록 설정하는 데 필요한 필수 구성 요소입니다.

  1. 인스턴스는 SQL Server 2016 RTM CU2 이상으로 패치됩니다. Integration Services의 경우 인스턴스가 SQL 2016 RTM CU4, SQL 2016 SP1 이상으로 패치됩니다.

  2. 사용자는 레지스트리 키 추가 및 수정, 폴더 만들기, 폴더 보안 관리 및 Windows 서비스를 중지/시작이 가능한 액세스 권한이 부여된 시스템 관리자 또는 역할이어야 합니다. 

로컬 감사를 활성화하기 전의 사전 구성 단계

로컬 감사를 켜기 전에 시스템 관리자는 다음을 수행해야 합니다.

  1. SQL Server 인스턴스 이름 및 SQL Server CEIP 서비스 로그온 계정을 파악합니다.

  2. 로컬 감사 파일에 대한 새 폴더를 구성합니다.

  3. SQL Server CEIP 서비스 로그온 계정에 사용 권한을 부여합니다.

  4. 레지스트리 키 설정을 만들어 로컬 감사 대상 디렉터리를 구성합니다.

SQL Server CEIP 서비스 로그온 계정 가져오기

SQL Server CEIP 서비스 로그온 계정을 얻으려면 다음 단계를 수행합니다

  1. 서비스 콘솔을 시작합니다. 이렇게 하려면 키보드에서 Windows 키 + R을 눌러 실행 대화 상자를 엽니다. 그런 다음, 텍스트 필드에 services.msc를 입력하고 확인을 선택하여 서비스 콘솔을 시작합니다.

  2. 적절한 서비스로 이동합니다. 예를 들어 데이터베이스 엔진의 경우 SQL Server CEIP 서비스(Your-Instance-Name)를 찾습니다. Analysis Services의 경우 SQL Server Analysis Services CEIP(Your-Instance-Name)에 있습니다. Integration Services의 경우 SQL Server Integration Services CEIP 서비스를 찾습니다.

  3. 서비스를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  4. 로그온 탭을 선택합니다. 로그온 계정은 이 계정에 나열되어 있습니다.

로컬 감사 파일에 대한 새 폴더를 구성합니다.

로컬 감사에서 로그를 작성할 새 폴더(로컬 감사 디렉터리)를 만듭니다. 예를 들어 데이터베이스 엔진의 기본 인스턴스에 대한 로컬 감사 디렉터리의 전체 경로는 C:\SQLCEIPAudit\MSSQLSERVER\DB\가 됩니다. 

참고 항목

감사 기능 및 패치 허용으로 인해 SQL Server에 문제가 발생하는 것을 방지하려면 SQL Server 설치 경로 외부에 로컬 감사 디렉터리 경로를 구성하세요.

디자인 의사 결정 추천
공간 사용 가능성 약 10개의 데이터베이스가 있는 보통 워크로드에서 인스턴스별로 데이터베이스당 약 2MB의 디스크 공간을 계획합니다.
개별 디렉터리 각 인스턴스에 대한 디렉터리를 만듭니다. 예를 들어 이름이 MSSQLSERVER인 SQL Server 인스턴스에 대해 C:\SQLCEIPAudit\MSSQLSERVER\DB\를 사용합니다. 이렇게 하면 파일 관리가 간소화됩니다.
별도의 폴더 각 서비스에 특정 폴더를 사용합니다. 예를 들어 지정된 인스턴스 이름의 경우 데이터베이스 엔진에 대한 폴더가 하나 있습니다. Analysis Services 인스턴스에서 동일한 인스턴스 이름을 사용하는 경우 Analysis Services에 대해 별도의 폴더를 만듭니다. 데이터베이스 엔진 및 Analysis Services 인스턴스를 모두 동일한 폴더에 구성하면 모든 로컬 감사가 두 인스턴스의 동일한 로그 파일에 쓰게 됩니다.
SQL Server CEIP 서비스 로그온 계정에 사용 권한 부여합니다 목록 폴더 콘텐츠 사용, SQL Server CEIP 서비스 로그온 계정에 대한 읽기쓰기 액세스

SQL Server CEIP 서비스 로그온 계정에 사용 권한 부여합니다

  1. 파일 탐색기에서 새 폴더가 있는 위치로 이동합니다.

  2. 새 폴더를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  3. 보안 탭에서 권한 관리 편집을 선택합니다.

  4. 추가를 선택하고 SQL Server CEIP 서비스의 자격 증명을 입력합니다. 예: NT Service\SQLTELEMETRY.

  5. 이름 확인을 선택하여 제공한 이름의 유효성을 검사한 후 확인을 선택합니다.

  6. 사용 권한 대화 상자에서 SQL Server CEIP 서비스 로그온 계정을 선택하고 폴더 내용 목록, 읽기쓰기를 선택합니다.

  7. 확인을 선택하여 권한 변경 내용을 즉시 적용합니다.

레지스트리 키 설정을 만들어 로컬 감사 대상 디렉터리를 구성합니다.

  1. regedit을 시작합니다.

  2. 적절한 CPE 경로로 이동합니다.

    버전 데이터베이스 엔진 - 레지스트리 키
    2016 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.Your-Instance-Name\CPE
    2017 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.Your-Instance-Name\CPE
    2019 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.Your-Instance-Name\CPE
    버전 분석 서비스 - 레지스트리 키
    2016 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSAS13.Your-Instance-Name\CPE
    2017 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSAS14.Your-Instance-Name\CPE
    2019 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSAS15.Your-Instance-Name\CPE
    버전 Integration Services - 레지스트리 키
    2016 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130
    2017 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\140
    2019 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150
  3. CPE 경로를 마우스 오른쪽 단추로 클릭하고 새로 만들기를 선택합니다. 문자열 값을 선택합니다.

  4. 새 레지스트리 키 UserRequestedLocalAuditDirectory의 이름을 지정합니다.

로컬 감사 활성화 또는 비활성화

사전 구성 단계를 완료한 후에 로컬 감사를 켤 수 있습니다. 이렇게 하려면 아래 단계에 따라 레지스트리 키를 수정하여 로컬 감사를 활성화하거나 비활성화하는 데 액세스할 수 있는 시스템 관리자 계정 또는 유사한 역할을 사용합니다.

  1. regedit을 시작합니다. 

  2. 적절한 CPE 경로로 이동합니다.

  3. UserRequestedLocalAuditDirectory를 마우스 오른쪽 단추로 클릭하고 수정을 선택합니다.

  4. 로컬 감사를 켜려면 로컬 감사 경로를 입력합니다(예: C:\SQLCEIPAudit\MSSQLSERVER\DB\).

    로컬 감사를 비활성화하려면 UserRequestedLocalAuditDirectory 값을 비워 둡니다.

  5. regedit를 닫습니다.

서비스가 이미 실행 중인 경우 SQL Server CEIP는 로컬 감사 설정을 즉각 인식해야 합니다. SQL Server CEIP 서비스를 시작하려면 시스템 관리자 또는 Windows 서비스를 시작하거나 중지할 수 있는 권한이 있는 사용자가 다음 단계를 수행할 수 있습니다.

  1. 서비스 콘솔을 시작합니다. 이렇게 하려면 키보드에서 Windows 키 + R을 눌러 실행 대화 상자를 엽니다. 그런 다음, 텍스트 필드에 services.msc를 입력하고 확인을 선택하여 서비스 콘솔을 시작합니다.

  2. 적절한 서비스로 이동합니다.

    • 데이터베이스 엔진의 경우, SQL Server CEIP 서비스(Your-Instance-Name)를 사용합니다.
    • Analysis Services의 경우 SQL Server Analysis Services CEIP(Your-Instance-Name)를 사용합니다.
    • 통합 서비스의 경우,
      • SQL 2016의 경우, SQL Server Integration Services CEIP 서비스 13.0을 사용합니다.
      • SQL 2017의 경우, SQL Server Integration Services CEIP 서비스 14.0을 사용합니다.
    • SQL 2019의 경우, SQL Server Integration Services CEIP 서비스 15.0을 사용합니다.
  3. 마우스 오른쪽 단추를 클릭하고 다시 시작을 선택합니다.

  4. 서비스의 상태가 실행 중인지 확인합니다.

로컬 감사는 하루에 하나의 로그 파일을 생성합니다. 로그 파일은 <YYYY-MM-DD>.json 형태가 됩니다. 예: 2016-07-12.json. 지정된 디렉터리에 해당 날짜에 대한 기존 파일이 존재할 경우 로컬 감사가 첨부됩니다. 그렇지 않으면 해당 날짜에 대한 새 파일을 만듭니다.

참고 항목

로컬 감사를 사용하도록 설정한 후 로그 파일을 처음으로 작성하는 데 최대 5분이 걸릴 수 있습니다.

유지 관리

  1. 로컬 감사에서 작성한 파일로 디스크 공간 사용량을 제한하려면 로컬 감사 디렉터리를 정리하는 정책 또는 일반 작업을 설정하여 불필요한 이전 파일을 제거합니다. 

  2. 적절한 사람만 액세스할 수 있도록 로컬 감사 디렉터리 경로를 보호합니다. Microsoft에 피드백을 보내도록 SQL Server 2016를 구성하는 방법에 설명된 대로 로그 파일에 정보가 포함되어 있습니다. 이 파일에 액세스하면 조직 구성원의 대부분이 파일을 읽지 못하게 됩니다. 

로컬 감사 출력 데이터 구조의 데이터 사전

  • 로컬 감사 로그 파일은 emitTime에서 Microsoft로 다시 전송되는 데이터 요소를 나타내는 개체(행) 집합을 포함하는 JSON에 있습니다.
  • 각 행은 schemaVersion으로 식별되는 특정 스키마를 따릅니다.
  • 각 행은 sessionID로 식별되는 SQLCEIP 서비스 세션의 출력입니다.
  • 행은 시퀀스로 식별되는 순서대로 내보내집니다.
  • 각 데이터 요소 행에는 traceName로 식별되어 T-SQL 쿼리, XE 세션 또는 추적 형식과 관련된 메시지일 수 있는 queryIdentifier 출력이 포함되어 있습니다.
  • queryIdentifiersquerySetVersion과 함께 그룹화되고 버전이 지정됩니다.
  • data에는 queryTimeInTicks를 수행한 해당 쿼리 실행의 출력이 포함됩니다.
  • T-SQL 쿼리에 대한 queryIdentifiers에는 T-SQL 쿼리 정의가 쿼리에 저장됩니다.
논리 로컬 감사 정보 계층 구조 관련 열
머리글 emitTime, schemaVersion
컴퓨터 operatingSystem
인스턴스 instanceUniqueID, correlationID, clientVersion
세션 sessionID, traceName
쿼리 sequence, querySetVersion, queryIdentifier, query, queryTimeInTicks
데이터 데이터

이름/값 쌍 정의 및 예제

아래 나열된 열은 로컬 감사 파일 출력 순서를 나타냅니다. SHA 256을 사용하는 단방향 해시를 통해 아래의 다양한 열이 익명 값으로 처리됩니다. 

속성 설명 예제 값
instanceUniqueID 익명화된 인스턴스 식별자 888770C4D5A8C6729F76F33D472B28883AE518C92E1999888B171A085059FD
schemaVersion SQLCEIP의 스키마 버전   3
emitTime 데이터 요소 내보내기 시간(UTC 기준) 2016-09-08T17:20:22.1124269Z
sessionId SQLCEIP 서비스를 제공하는 세션 식별자 89decf9a-ad11-485c-94a7-fefb3a02ed86
correlationId 추가 식별자에 대한 자리 표시자 0
식별 전송 세션 내에서 데이터 요소의 시퀀스 번호 15
clientVersion SQL Server 인스턴스 버전 13.0.2161.3 ((SQL16_RTM_QFE-CU).160907-1223)
operatingSystem SQL Server 인스턴스가 설치되어 있는 OS 버전 Microsoft Windows Server 2012 R2 Datacenter
querySetVersion 쿼리 정의의 그룹 버전 1.0.0.0
traceName 추적 범주: (SQLServerXeQueries, SQLServerPeriodicQueries, SQLServerOneSettingsException) SQLServerPeriodicQueries
queryIdentifier 쿼리의 식별자 SQLServerProperties.002
데이터 T-SQL 쿼리, XE 세션 또는 애플리케이션의 출력으로 queryIdentifier에서 수집된 정보 출력 [{"Collation": "SQL_Latin1_General_CP1_CI_AS","SqlFTinstalled": "0" "SqlIntSec": "1","IsSingleUser": "0","SqlFilestreamMode": "0","SqlPbInstalled": "0","SqlPbNodeRole": "","SqlVersionMajor": "13","SqlVersionMinor": "0","SqlVersionBuild": "2161","ProductBuildType": "","ProductLevel": "RTM","ProductUpdateLevel": "CU2","ProductUpdateReference": "KB3182270","ProductRevision": "3","SQLEditionId": "-1534726760","IsClustered": "0","IsHadrEnabled": "0","SqlAdvAInstalled": "0","PacketReceived": "1210","Version": "Microsoft SQL Server 2016 (RTM-CU2) (KB3182270) - 13.0.2161.3 (X64) \n\tSep 7 2016 14:24:16 \n\tCopyright (c) Microsoft Corporation\n\tStandard Edition (64-bit) on Windows Server 2012 R2 Datacenter 6.3 \u003cX64\u003e (Build 9600: ) (Hypervisor)\n"}],
쿼리 해당하는 경우 데이터를 생성하는 queryIdentifier와 관련된 T-SQL 쿼리 정의입니다. 이 구성 요소는 SQL Server CEIP 서비스가 업로드하지 않습니다. 고객에 대한 참조로만 로컬 감사에 포함됩니다. SELECT\n SERVERPROPERTY(\u0027Collation\u0027) AS [Collation],\n SERVERPROPERTY(\u0027IsFullTextInstalled\u0027) AS [SqlFTinstalled],\n SERVERPROPERTY(\u0027IsIntegratedSecurityOnly\u0027) AS [SqlIntSec],\n SERVERPROPERTY(\u0027IsSingleUser\u0027) AS [IsSingleUser],\n SERVERPROPERTY (\u0027FileStreamEffectiveLevel\u0027) AS [SqlFilestreamMode],\n SERVERPROPERTY(\u0027IsPolyBaseInstalled\u0027) AS [SqlPbInstalled],\n SERVERPROPERTY(\u0027PolyBaseRole\u0027) AS [SqlPbNodeRole],\n SERVERPROPERTY(\u0027ProductMajorVersion\u0027) AS [SqlVersionMajor],\n SERVERPROPERTY(\u0027ProductMinorVersion\u0027) AS [SqlVersionMinor],\n SERVERPROPERTY(\u0027ProductBuild\u0027) AS [SqlVersionBuild],\n SERVERPROPERTY(\u0027ProductBuildType\u0027) AS ProductBuildType,\n SERVERPROPERTY(\u0027ProductLevel\u0027) AS ProductLevel,\n SERVERPROPERTY(\u0027ProductUpdateLevel\u0027) AS ProductUpdateLevel,\n SERVERPROPERTY(\u0027ProductUpdateReference\u0027) AS ProductUpdateReference,\n RIGHT(CAST(SERVERPROPERTY(\u0027ProductVersion\u0027) AS NVARCHAR(30)),CHARINDEX(\u0027.\u0027, REVERSE(CAST(SERVERPROPERTY(\u0027ProductVersion\u0027) AS NVARCHAR(30)))) - 1) AS ProductRevision,\n SERVERPROPERTY(\u0027EditionID\u0027) AS SQLEditionId,\n SERVERPROPERTY(\u0027IsClustered\u0027) AS IsClustered,\n SERVERPROPERTY(\u0027IsHadrEnabled\u0027) AS IsHadrEnabled,\n SERVERPROPERTY(\u0027IsAdvancedAnalyticsInstalled\u0027) AS [SqlAdvAInstalled],\n @@PACK_RECEIVED AS PacketReceived,\n @@VERSION AS Version
queryTimeInTicks 다음 추적 범주를 사용하여 쿼리를 실행하는 데 걸리는 기간: (SQLServerXeQueries, SQLServerPeriodicQueries)   0

추적 범주

현재 다음 추적 범주를 수집합니다.

  • SQLServerXeQueries: 확장 이벤트 세션을 통해 수집된 데이터 요소를 포함합니다.
  • SQLServerPeriodicQueries: SQL Server 인스턴스에서 실행되는 정기적인 쿼리를 통해 수집된 데이터 요소를 포함합니다.
  • SQLServerPerDBPeriodicQueries: SQL Server 인스턴스에서 최대 30개의 데이터베이스까지 실행되는 정기 쿼리를 통해 수집되는 데이터 요소를 포함합니다.
  • SQLServerOneSettingsException: 스키마 및/또는 쿼리 집합 업데이트와 관련된 예외 메시지를 포함합니다.
  • DigitalProductID: SQL Server 인스턴스의 익명화(SHA-256)로 해시된 디지털 제품 ID를 집계하기 위한 데이터 요소가 포함되어 있습니다.

로컬 감사 파일 예제

다음은 로컬 감사의 JSON 파일 출력에서 발췌한 내용입니다.

[
  {
    "instanceUniqueId": "888770C4D5A8C6729F76F33D472B28883AE518C92E1999888B171A085059FD",
    "isSSEIInstance": "0",
    "schemaVersion": "5",
    "emitTime": "2018-05-04T15:27:59.7031518Z",
    "sessionId": "c3cd1b56-ab61-462f-8363-8881779aa223",
    "correlationId": 0,
    "sequence": 18,
    "clientVersion": "14.0.3025.34 ((SQLServer2017-CU6).180410-0033)",
    "isInternalMachine": "1",
    "operatingSystem": "Microsoft Windows 10 Enterprise",
    "querySetVersion": "14.0.3025.34",
    "traceName": "SQLServerPeriodicQueries",
    "queryIdentifier": "SQLServerProperties.002",
    "data": [
      {
        "Collation": "SQL_Latin1_General_CP1_CI_AS",
        "SqlFTinstalled": "0",
        "SqlIntSec": "1",
        "IsSingleUser": "0",
        "SqlFilestreamMode": "2",
        "SqlPbInstalled": "1",
        "SqlPbNodeRole": "Head",
        "SqlVersionMajor": "14",
        "SqlVersionMinor": "0",
        "SqlVersionBuild": "3025",
        "ProductBuildType": "",
        "ProductLevel": "RTM",
        "ProductUpdateLevel": "CU6",
        "ProductUpdateReference": "KB4101464",
        "ProductRevision": "34",
        "SQLEditionId": "1872460670",
        "IsClustered": "0",
        "IsHadrEnabled": "0",
        "SqlAdvAInstalled": "1",
        "PacketReceived": "422",
        "Version": "Microsoft SQL Server 2017 (RTM-CU6) (KB4101464) - 14.0.3025.34 (X64) \n\tApr  9 2018 18:00:41 \n\tCopyright (C) 2017 Microsoft Corporation\n\tEnterprise Edition: Core-based Licensing (64-bit) on Windows 10 Enterprise 10.0 <X64> (Build 16299: )\n"
      }
    ],
    "query": "SELECT\n      SERVERPROPERTY('Collation') AS [Collation],\n      SERVERPROPERTY('IsFullTextInstalled') AS [SqlFTinstalled],\n      SERVERPROPERTY('IsIntegratedSecurityOnly') AS [SqlIntSec],\n      SERVERPROPERTY('IsSingleUser') AS [IsSingleUser],\n      SERVERPROPERTY ('FileStreamEffectiveLevel') AS [SqlFilestreamMode],\n      SERVERPROPERTY('IsPolyBaseInstalled') AS [SqlPbInstalled],\n      SERVERPROPERTY('PolyBaseRole') AS [SqlPbNodeRole],\n      SERVERPROPERTY('ProductMajorVersion') AS [SqlVersionMajor],\n      SERVERPROPERTY('ProductMinorVersion') AS [SqlVersionMinor],\n      SERVERPROPERTY('ProductBuild') AS [SqlVersionBuild],\n      SERVERPROPERTY('ProductBuildType') AS ProductBuildType,\n      SERVERPROPERTY('ProductLevel') AS ProductLevel,\n      SERVERPROPERTY('ProductUpdateLevel') AS ProductUpdateLevel,\n      SERVERPROPERTY('ProductUpdateReference') AS ProductUpdateReference,\n      RIGHT(CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(30)),CHARINDEX('.', REVERSE(CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(30)))) - 1) AS ProductRevision,\n      SERVERPROPERTY('EditionID') AS SQLEditionId,\n      SERVERPROPERTY('IsClustered') AS IsClustered,\n      SERVERPROPERTY('IsHadrEnabled') AS IsHadrEnabled,\n      SERVERPROPERTY('IsAdvancedAnalyticsInstalled') AS [SqlAdvAInstalled],\n      @@PACK_RECEIVED AS PacketReceived,\n      @@VERSION AS Version",
    "queryTimeInTicks": 0
  },
  {
    "instanceUniqueId": "8884F770C4D5A8C6729F76F33D472B28883AE518C92E1999888B171A085059FD",
    "isSSEIInstance": "0",
    "schemaVersion": "5",
    "emitTime": "2018-05-04T15:28:00.9025999Z",
    "sessionId": "c3cd1b56-ab61-462f-8363-8881779aa223",
    "correlationId": 0,
    "sequence": 23,
    "clientVersion": "14.0.3025.34 ((SQLServer2017-CU6).180410-0033)",
    "isInternalMachine": "1",
    "operatingSystem": "Microsoft Windows 10 Enterprise",
    "querySetVersion": "14.0.3025.34",
    "traceName": "SQLServerPeriodicQueries",
    "queryIdentifier": "OsSysInfo.003",
    "data": [
      {
        "LogicalCPUCount": "8",
        "HyperthreadRatio": "8",
        "PhysicalMemoryMB": "32710.902343",
        "SQLServerStartTime": "05/04/2018 08:22:30",
        "AffinityTypeDesc": "AUTO",
        "VirtualMachineType": "0",
        "SocketCount": "1",
        "CoresPerSocket": "4",
        "NumaNodeCount": "1",
        "ContainerType": "0",
        "ContainerDescription": "NONE"
      }
    ],
    "query": "SELECT\n      cpu_count AS LogicalCPUCount,\n      hyperthread_ratio AS HyperthreadRatio,\n      physical_memory_kb/1024.0 AS PhysicalMemoryMB,\n      sqlserver_start_time AS SQLServerStartTime,\n      affinity_type_desc AS AffinityTypeDesc,\n      virtual_machine_type AS VirtualMachineType,\n      socket_count as SocketCount,\n      cores_per_socket as CoresPerSocket,\n      numa_node_count as NumaNodeCount,\n      container_type as ContainerType,\n      container_type_desc as ContainerDescription\n      FROM sys.dm_os_sys_info WITH(nolock)",
    "queryTimeInTicks": 0
  }
]

자주 묻는 질문

DBA는 로컬 감사 로그 파일을 어떻게 읽나요? 이러한 로그 파일은 JSON 형식으로 기록됩니다. 각 줄은 Microsoft에 업로드하는 사용량/진단 데이터의 부분을 나타내는 JSON 개체가 됩니다. 필드 이름은 설명을 포함해야 합니다.

DBA에서 사용량 및 진단 데이터 수집을 사용하지 않도록 설정하면 어떻게 되나요? 로컬 감사 파일이 기록되지 않습니다.

인터넷 연결/컴퓨터가 방화벽 뒤에 없으면 어떻게 되나요? SQL Server 사용 현황 및 진단 데이터를 Microsoft로 보내지 않습니다. 올바르게 구성된 경우에도 로컬 감사 로그를 작성하려고 합니다.

DBA는 로컬 감사를 사용하지 않도록 설정하려면 어떻게 해야 하나요? UserRequestedLocalAuditDirectory 레지스트리 키 항목을 제거합니다.

로컬 감사 로그 파일을 읽을 수 있는 사람은 누구인가요? 로컬 감사 디렉터리에 액세스할 수 있는 조직의 모든 사용자입니다.

DBA가 지정된 디렉터리에 기록된 로그 파일을 관리하려면 어떻게 하나요? DBA는 디스크 공간이 너무 많이 소비되지 않도록 디렉터리에 있는 파일의 정리를 자체 관리해야 합니다.

이 JSON 출력을 읽는 데 사용할 수 있는 클라이언트 또는 도구가 있나요? 출력은 Windows 메모장, Visual Studio 또는 원하는 JSON 판독기를 사용하여 읽을 수 있습니다. 또는 JSON 파일을 읽고 아래와 같이 SQL Server 인스턴스에서 데이터를 분석할 수 있습니다. SQL Server에서 JSON 파일을 읽는 방법에 대한 자세한 내용은 Importing JSON files into SQL Server using OPENROWSET (BULK) and OPENJSON (Transact-SQL)(OPENROWSET(BULK) 및 OPENJSON(TRANSACT-SQL)를 사용하여 SQL Server로 JSON 파일 가져오기)을 참조하세요.

DECLARE @JSONFile AS VARCHAR(MAX)

-- Read the JSON file into variable 
SELECT @JSONFile = BulkColumn 
FROM OPENROWSET (BULK 'C:\SQLCEIPAudit\MSSQLSERVER\2016-09-08.json', SINGLE_CLOB) MyFile 

-- Check if the JSON file has been read properly and if it's in a JSON format
SELECT 
	@JSONFile LocalAuditOutput, 
	ISJSON(@JSONFile) IsFileInJSONFormat

-- Get the query identifier, query and the data (output of the query)	
SELECT 
	sequence,
	queryIdentifier,
	query,
	data
FROM OPENJSON(@JSONFile) 
	WITH (sessionId VARCHAR(64)
		 ,sequence INT
		 ,queryIdentifier VARCHAR(128)
		 ,query VARCHAR(MAX)
		 ,data NVARCHAR(MAX) AS JSON)
-- Get specific details about the output of "DatabaseProperties.001" query	
SELECT 
	QueryIdentifier,
	DatabaseID,
	CompatibilityLevel,
	IsQueryStoreOn
FROM OPENJSON(@JSONFile) 
	WITH (sessionId VARCHAR(64)
		 ,sequence INT
		 ,queryIdentifier VARCHAR(128)
		 ,query VARCHAR(MAX)
		 ,data NVARCHAR(MAX) AS JSON) 
	CROSS APPLY OPENJSON(data) 
		WITH (	 DatabaseID varchar(128) '$.database_id'
				,CompatibilityLevel varchar(128) '$.compatibility_level'
				,IsQueryStoreOn varchar(128) '$.QS'
			 )
WHERE queryIdentifier = 'DatabaseProperties.001'

참고 항목

SSMS 사용량 및 진단 데이터 수집의 로컬 감사