Aracılığıyla paylaş


SQL Server Reporting Services'ı yapılandırmaya yönelik el ile adımlar

Service Manager veri ambarı yönetim sunucusunun dağıtımı sırasında, Microsoft SQL Server Reporting Services'ın (SSRS) dağıtılacağı sunucuyu belirtebilirsiniz. Kurulum sırasında, veri ambarı yönetimi sunucusunu barındıran bilgisayar varsayılan olarak seçilir. SSRS'yi barındırmak için farklı bir bilgisayar belirtirseniz, sunucuyu hazırlamak için bu yordamı izlemeniz istenir. Uzak bilgisayarı SSRS'yi barındırması için hazırlamak bu bölümde ayrıntılı olarak ele alan şu adımları içerir:

  • Service Manager yükleme medyasındaki Microsoft.EnterpriseManagement.Reporting.Code.dll dosyasını SSRS'yi barındıran bilgisayara kopyalayın.

  • SSRS'yi barındıran bilgisayarda rssrvpolicy yapılandırma dosyasına bir kod kesimi ekleyin.

  • Aynı bilgisayardaki rsreportserver yapılandırma dosyasındaki mevcut Veri segmentine bir Uzantı etiketi ekleyin.

SQL Server'ın varsayılan örneğini kullandıysanız, Microsoft.EnterpriseManagement.Reporting.Code.dll (Service Manager yükleme medyanızdaki Önkoşullar klasöründe bulunur) \Program Files\Microsoft SQL Server\MSRS13 klasörüne sürüklemek için Windows Gezgini'ni kullanın. SSRS'yi barındıran bilgisayarda MSSQLSERVER\Reporting Services\ReportServer\Bin. SQL Server'ın varsayılan örneğini kullanmadıysanız, gerekli klasörün yolu \Program Files\Microsoft SQL Server\MSRS13'tür.<>INSTANCE_NAME\Reporting Services\ReportServer\Bin. Aşağıdaki yordamda varsayılan örnek adı kullanılır.

Microsoft.EnterpriseManagement.Reporting.Code.dll dosyasını kopyalama

Aşağıdaki adımları kullanın:

  1. Uzak SSRS'yi barındıracak olan bilgisayarda bir Windows Gezgini örneği açın.

  2. SQL Server 2016 için \Program Files\Microsoft SQL Server\MSRS13 klasörünü bulun. MSSQLSERVER\Reporting Services\ReportServer\Bin.

  3. Windows Gezgini'nin ikinci bir örneğini başlatın, Service Manager yükleme medyasını içeren sürücüyü bulun ve Önkoşullar klasörünü açın.

  4. Önkoşullar klasöründe Microsoft.EnterpriseManagement.Reporting.Code.dll'yi seçin ve 2. adımlardan herhangi birisinde bulunan klasöre sürükleyin.

rssrvpolicy.config dosyasına kod kesimi ekleme

Aşağıdaki adımları kullanın:

  1. SSRS'yi barındıracak bilgisayarda, \Program Files\Microsoft SQL Server\MSRS13 içinde rssrvpolicy.config dosyasını bulun. SQL Server 2016 için MSSQLSERVER\Reporting Services\ReportServer klasörü.

  2. Kendi seçtiğiniz bir XML editörünü kullanarak (Not Defteri gibi), rssrvpolicy.config dosyasını açın.

  3. rssrvpolicy.config dosyasını kaydırın ve kod kesimlerini bulun <CodeGroup> . Aşağıdaki kodda bir <CodeGroup> segment örneği gösterilmektedir.

    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust">
       <IMembershipCondition
          class="UrlMembershipCondition"
          version="1"
          Url="$CodeGen$/*"
       />
    </CodeGroup>
    
  4. Aşağıdaki <CodeGroup> segmenti diğer <CodeGroup> segmentlerle aynı bölüme tamamen ekleyin.

    <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>
    
  5. Değişiklikleri kaydedin ve XML editörünü kapatın.

rsreportserver.conf dosyasındaki Veri kesimine Uzantı etiketi ekleme

Aşağıdaki adımları kullanın:

  1. SSRS barındıran bilgisayarda, \Program Files\Microsoft SQL Server\MSRS13 konumunda rsreportserver.config dosyasını bulun. SQL Server 2016 için MSSQLSERVER\Reporting Services\ReportServer klasörü.

  2. Tercihinize göre bir XML düzenleyicisini kullanarak (Not Defteri gibi) rsreportserver.config dosyasını açın.

  3. rsreportserver.config dosyasını kaydırın ve kod kesimini <Data> bulun. Bu dosyada yalnızca bir <Data> kod kesimi var.

  4. Aşağıdaki Extension etiketi diğer Extension tüm etiketlerin <Data> bulunduğu kod kesimine ekleyin:

    <Extension Name="SCDWMultiMartDataProcessor" Type="Microsoft.EnterpriseManagement.Reporting.MultiMartConnection, Microsoft.EnterpriseManagement.Reporting.Code" />
    
  5. Değişiklikleri kaydedin ve XML editörünü kapatın.

SSRS yüklemesini doğrulama

Service Manager Veri Ambarı (DW) sürüm 2016 ve sonraki sürümlerinde aşağıdaki bilinen sorun gözlenmiştir:

Service Manager Veri Ambarı'nda (DW) aşağıdaki bilinen sorun gözlenir:

SQL Server Reporting Services (SSRS) Veri Ambarı Yönetim Sunucusu'nda yerel olarak çalışıyorsa ve SSRS 2017 veya üzeriyse, Veri Ambarı Kurulumu başarıyla tamamlanır, ancak belirtilen yerel SSRS örneğini düzgün yapılandırmayabilir.

LOCAL SSRS yüklemesinin doğru yapılandırılıp yapılandırılmadığını ve Service Manager Veri Ambarı ile birlikte kullanılıp kullanılamadığını doğrulamak için aşağıdaki betiği kullanın.

Not

Bu PowerShell betiği bir Service Manager Veri Ambarı yüklemesi sonrasında yürütülebilir. Betik, yapılandırmada herhangi bir değişiklik yapmaz ancak bunu doğrular. Betiği gerektiği kadar çalıştırabilirsiniz.

#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://learn.microsoft.com/system-center/scsm/config-remote-ssrs" -ForegroundColor Yellow
}
EndScriptExecution
#endregion

Sonraki adımlar