SQL Server Reporting Services를 구성하는 수동 단계
Service Manager 데이터 웨어하우스 관리 서버를 배포하는 동안 Microsoft SSRS(SQL Server Reporting Services)를 배포할 서버를 지정할 수 있습니다. 기본적으로 설치하는 동안 데이터 웨어하우스 관리 서버를 호스트하는 컴퓨터가 선택됩니다. SSRS를 호스트할 다른 컴퓨터를 지정하는 경우 이 절차에 따라 서버를 준비하라는 메시지가 표시됩니다. SSRS를 호스트하도록 원격 컴퓨터를 준비하는 과정에는 다음 단계가 포함되며, 이 섹션에서 이러한 단계를 자세히 다룹니다.
Service Manager 설치 미디어에 있는 Microsoft.EnterpriseManagement.Reporting.Code.dll 파일을 SSRS를 호스트하는 컴퓨터에 복사합니다.
SSRS를 호스트하는 컴퓨터의 rssrvpolicy 구성 파일에 코드 세그먼트를 추가합니다.
동일한 컴퓨터의 rsreportserver 구성 파일에서 기존 Data 세그먼트에 Extension 태그를 추가합니다.
SQL Server의 기본 인스턴스를 사용한 경우 Windows 탐색기를 사용하여 Microsoft.EnterpriseManagement.Reporting.Code.dll(Service Manager 설치 미디어의 필수 구성 요소 폴더에 있음)를 \Program Files\Microsoft SQL Server\MSRS13 폴더로 끕니다. SSRS를 호스팅하는 컴퓨터의 MSSQLSERVER\Reporting Services\ReportServer\Bin입니다. SQL Server의 기본 인스턴스를 사용하지 않은 경우 필수 폴더의 경로는 \Program Files\Microsoft SQL Server\MSRS13입니다.<>INSTANCE_NAME\Reporting Services\ReportServer\Bin. 다음 절차에서는 기본 인스턴스 이름이 사용됩니다.
Microsoft.EnterpriseManagement.Reporting.Code.dll 파일 복사
다음 단계를 사용합니다.
원격 SSRS를 호스트하는 컴퓨터에서 Windows 탐색기 인스턴스를 엽니다.
SQL Server 2016의 경우 \Program Files\Microsoft SQL Server\MSRS13 폴더를 찾습니다. MSSQLSERVER\Reporting Services\ReportServer\Bin.
Windows 탐색기의 두 번째 인스턴스를 시작하고 Service Manager 설치 미디어가 포함된 드라이브를 찾은 다음 필수 구성 요소 폴더를 엽니다.
필수 구성 요소 폴더에서 Microsoft.EnterpriseManagement.Reporting.Code.dll 선택하고 2단계 중 하나에 있는 폴더로 끕니다.
rssrvpolicy.config 파일에 코드 세그먼트 추가
다음 단계를 사용합니다.
SSRS를 호스팅할 컴퓨터의 \Program Files\Microsoft SQL Server\MSRS13에서 rssrvpolicy.config 파일을 찾습니다. SQL Server 2016용 MSSQLSERVER\Reporting Services\ReportServer 폴더입니다.
원하는 XML 편집기(예: 메모장)를 사용하여 rssrvpolicy.config 파일을 엽니다.
rssrvpolicy.config 파일을 스크롤하여 코드 세그먼트를
<CodeGroup>
찾습니다. 다음 코드는 세그먼트의<CodeGroup>
예를 보여줍니다.<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust"> <IMembershipCondition class="UrlMembershipCondition" version="1" Url="$CodeGen$/*" /> </CodeGroup>
다른
<CodeGroup>
세그먼트와 동일한 섹션에 다음<CodeGroup>
세그먼트 전체를 추가합니다.<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust" Name="Microsoft System Center Service Manager Reporting Code Assembly" Description="Grants the SCSM Reporting Code assembly full trust permission."> <IMembershipCondition class="StrongNameMembershipCondition" version="1" PublicKeyBlob="0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9" /> </CodeGroup>
변경 내용을 저장하고 XML 편집기를 닫습니다.
rsreportserver.conf 파일의 데이터 세그먼트에 확장 태그 추가
다음 단계를 사용합니다.
SSRS를 호스팅하는 컴퓨터의 \Program Files\Microsoft SQL Server\MSRS13에서 rsreportserver.config 파일을 찾습니다. SQL Server 2016용 MSSQLSERVER\Reporting Services\ReportServer 폴더입니다.
원하는 XML 편집기(예: 메모장)를 사용하여 rsreportserver.config 파일을 엽니다.
rsreportserver.config 파일을 스크롤하여 코드 세그먼트를
<Data>
찾습니다. 이 파일에는 코드 세그먼트가 하나<Data>
뿐입니다.다른
Extension
모든 태그가<Data>
있는 코드 세그먼트에 다음Extension
태그를 추가합니다.<Extension Name="SCDWMultiMartDataProcessor" Type="Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code" />
변경 내용을 저장하고 XML 편집기를 닫습니다.
SSRS 설치 확인
Service Manager DW(Data Warehouse) 버전 2016 이상에서는 다음과 같은 알려진 문제가 관찰됩니다.
Service Manager DW(데이터 웨어하우스)에서 다음과 같은 알려진 문제가 관찰됩니다.
SSRS(SQL Server Reporting Services)가 데이터 웨어하우스 관리 서버에서 로컬로 실행되고 SSRS가 2017 이상인 경우 데이터 웨어하우스 설정이 성공적으로 완료되지만 지정된 로컬 SSRS 인스턴스를 제대로 구성하지 못할 수 있습니다.
아래 스크립트를 사용하여 로컬 SSRS 설치가 올바르게 구성되고 Service Manager 데이터 웨어하우스와 함께 사용할 수 있는지 확인합니다.
참고 항목
이 PowerShell 스크립트는 Service Manager 데이터 웨어하우스 설치 후에 실행할 수 있습니다. 스크립트는 구성을 변경하지 않고 확인합니다. 스크립트를 필요한 횟수만큼 실행할 수 있습니다.
#region function definitions
function SelfElevate() {
#got from http://www.expta.com/2017/03/how-to-self-elevate-powershell-script.html and changed a bit
if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
if ([int](Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
$CommandLine = "-File `"" + $Script:MyInvocation.MyCommand.Path + "`" " + $Script:MyInvocation.UnboundArguments
Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine
Exit
}
}
}
function EndScriptExecution() {
Write-Host ""
Read-Host "Press ENTER to stop execution"
Exit
}
#endregion
#region Init
SelfElevate
#endregion
#region Select SSRS service
$ssrsServicesAvailable = gwmi win32_service | ?{ $_.DisplayName -like 'SQL Server Reporting Services*' }
if ($ssrsServicesAvailable -eq $null) {
Write-Host "No SSRS service(s) detected on this machine. " -NoNewline
Write-Host "Aborting ..." -ForegroundColor Yellow
EndScriptExecution
}
if ( ($ssrsServicesAvailable | Measure-Object).Count -eq 1) {
$ssrsServiceToVerify = ($ssrsServicesAvailable | Select-Object -Property DisplayName, State, PathName) | Select-Object -First 1
}
else {
$ssrsServiceToVerify = $ssrsServicesAvailable | Select-Object -Property DisplayName, State, PathName | Out-GridView -Title 'Select the SSRS service to verify and then click OK...' -OutputMode Single
if ($ssrsServiceToVerify -eq $null) {
Write-Host "No SSRS service selected to verify. " -NoNewline
Write-Host "Aborting ..." -ForegroundColor Yellow
EndScriptExecution
}
}
#endregion
#region Preparation
Write-Host "--------------------------------------------------------------------"
Write-Host "Verifiying selected SSRS service : " -NoNewline
Write-Host "'$($ssrsServiceToVerify.DisplayName)'" -ForegroundColor Cyan
Write-Host "--------------------------------------------------------------------"
Write-Host ""
$ssrsExePath = $ssrsServiceToVerify.PathName.Replace('"','')
$ssrsExeFileVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($ssrsExePath)
$ssrsMajorVersion = $ssrsExeFileVersion.ProductMajorPart
$ssrsVersionDisplayName = switch ($ssrsMajorVersion)
{
11 {"2012"}
12 {"2014"}
13 {"2016"}
14 {"2017"}
15 {"2019"}
default {""}
}
if ($ssrsVersionDisplayName -eq "") {
Write-Host "Unknown SSRS Version detected. " -NoNewline
Write-Host "Aborting ..." -ForegroundColor Yellow
EndScriptExecution
}
[System.IO.DirectoryInfo]$ssrsReportServerFolder = (Get-Item -Path $ssrsExePath).Directory.Parent
if ($ssrsMajorVersion -ge 14) {
$ssrsReportServerFolder = Join-Path $ssrsReportServerFolder.FullName "ReportServer"
}
[string]$ssrsReportServerFolder = $ssrsReportServerFolder.FullName
[string]$ssrsReportServerBinFolder = Join-Path $ssrsReportServerFolder "bin"
#endregion
#region Checking DLL
$scsmDllFileExists = $false
$scsmDllFileName = "Microsoft.EnterpriseManagement.Reporting.Code.dll"
$scsmDllFilePath = Join-Path $ssrsReportServerBinFolder $scsmDllFileName
$scsmDllFileExists = (Test-Path -Path $scsmDllFilePath)
if (-not $scsmDllFileExists) {
Write-Host "ERROR: " -ForegroundColor Yellow -NoNewline
Write-Host "The file '$scsmDllFileName' does *NOT* exist in '$ssrsReportServerBinFolder'"
}
else {
Write-Host " Pass: The file '$scsmDllFileName' does exist in '$ssrsReportServerBinFolder'"
}
Write-Host ""
#endregion
#region Checking rssrvpolicy.config
$rssrvpolicy_configIsCorrect = $false
$rssrvpolicy_configFileName = "rssrvpolicy.config"
$rssrvpolicy_configFilePath = Join-Path $ssrsReportServerFolder $rssrvpolicy_configFileName
$rssrvpolicy_configFileExists = (Test-Path -Path $rssrvpolicy_configFilePath)
if (-not $rssrvpolicy_configFileExists) {
Write-Host "$rssrvpolicy_configFileName does *NOT* exist in $ssrsReportServerFolder" -ForegroundColor Yellow
}
if ($rssrvpolicy_configFileExists) {
[xml]$xml = Get-Content $rssrvpolicy_configFilePath
$tagNameToFind = "CodeGroup"
$attributeNameToFind = "Name"
$attributeValueToFind = "Microsoft System Center Service Manager Reporting Code Assembly"
$nodeToFind = Select-Xml -XPath "//$tagNameToFind[@$attributeNameToFind='$attributeValueToFind']" -Xml $xml
if ($nodeToFind -eq $null) {
Write-Host "ERROR: " -ForegroundColor Yellow -NoNewline
Write-Host "The file '$rssrvpolicy_configFileName' in '$ssrsReportServerFolder' does *NOT* contain the correct <$tagNameToFind> node."
}
else {
$CodeGroup_NodeToVerify = [System.Xml.XmlNode]$nodeToFind.Node
$IMembershipCondition_NodeToVerify = [System.Xml.XmlNode]$CodeGroup_NodeToVerify.IMembershipCondition
$rssrvpolicy_configIsCorrect = ( $CodeGroup_NodeToVerify.class -eq "UnionCodeGroup" `
-and $CodeGroup_NodeToVerify.version -eq "1" `
-and $CodeGroup_NodeToVerify.PermissionSetName -eq "FullTrust" `
-and $IMembershipCondition_NodeToVerify.class -eq "StrongNameMembershipCondition" `
-and $IMembershipCondition_NodeToVerify.version -eq "1" `
-and $IMembershipCondition_NodeToVerify.PublicKeyBlob -eq "0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9"
)
if (-not $rssrvpolicy_configIsCorrect) {
Write-Host "ERROR: " -ForegroundColor Yellow -NoNewline
Write-Host "The <$tagNameToFind> node in '$rssrvpolicy_configFileName' in '$ssrsReportServerFolder' does exists but its content is *NOT* correct."
}
else {
Write-Host " Pass: The content of '$rssrvpolicy_configFileName' in '$ssrsReportServerFolder' is correct."
}
}
}
Write-Host ""
#endregion
#region Checking rsreportserver.config
$rsreportserver_configIsCorrect = $false
$rsreportserver_configFileName = "rsreportserver.config"
$rsreportserver_configFilePath = Join-Path $ssrsReportServerFolder $rsreportserver_configFileName
$rsreportserver_configFileExists = (Test-Path -Path $rsreportserver_configFilePath)
if (-not $rsreportserver_configFileExists) {
Write-Host "$rsreportserver_configFileName does *NOT* exist in $ssrsReportServerFolder" -ForegroundColor Yellow
}
if ($rsreportserver_configFileExists) {
[xml]$xml = Get-Content $rsreportserver_configFilePath
$tagNameToFind = "Extension"
$attributeNameToFind = "Name"
$attributeValueToFind = "SCDWMultiMartDataProcessor"
$nodeToFind = Select-Xml -XPath "//$tagNameToFind[@$attributeNameToFind='$attributeValueToFind']" -Xml $xml
if ($nodeToFind -eq $null) {
Write-Host "ERROR: " -ForegroundColor Yellow -NoNewline
Write-Host "The file '$rsreportserver_configFileName' in '$ssrsReportServerFolder' does *NOT* contain the correct <$tagNameToFind> node."
}
else {
$Extension_NodeToVerify = [System.Xml.XmlNode]$nodeToFind.Node
$rsreportserver_configIsCorrect = ( $Extension_NodeToVerify.Type.Replace(" ","") -eq "Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code".Replace(" ","") )
if (-not $rsreportserver_configIsCorrect) {
Write-Host "ERROR: " -ForegroundColor Yellow -NoNewline
Write-Host "The <$tagNameToFind> node in '$rsreportserver_configFileName' in '$ssrsReportServerFolder' does exists but its content is *NOT* correct."
}
else {
Write-Host " Pass: The content of '$rsreportserver_configFileName' in '$ssrsReportServerFolder' is correct."
}
}
}
Write-Host ""
#endregion
#region Conclusion
""
Write-Host "Conclusion:" -ForegroundColor Cyan
Write-Host "==========="
if ($scsmDllFileExists -and $rsreportserver_configIsCorrect -and $rssrvpolicy_configIsCorrect) {
Write-Host "The selected SSRS instance is configured correctly."
}
else {
Write-Host "The selected SSRS instance is " -NoNewline
Write-Host "*NOT* configured correctly." -ForegroundColor Yellow
Write-Host "Please follow the steps at " -NoNewline
Write-Host "https://zcusa.951200.xyz/system-center/scsm/config-remote-ssrs" -ForegroundColor Yellow
}
EndScriptExecution
#endregion
다음 단계
- Service Manager에서 AlwaysOn 가용성 그룹을 사용하여 장애 조치(failover) 환경을 지원하려면 SQL Server AlwaysOn 가용성 그룹을 사용하여 장애 조치(failover)를 지원합니다.