Migramos do SSRS 2012 para o SSRS 2016 e o movemos para um novo domínio.
Usando o código abaixo, podemos listar todas as fontes de dados e suas strings de conexão. Como podemos alterar as cadeias de conexão de quase 700 relatórios usando PowerShell ou T-SQL? (para que o ponto para o novo servidor de data warehouse)
WITH XMLNAMESPACES -- XML namespace def must be the first in with clause.
(DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource'
,'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'
AS rd)
,SDS AS
(SELECT SDS.name AS SharedDsName
,SDS.[Path]
,CONVERT(xml, CONVERT(varbinary(max), content)) AS DEF
FROM dbo.[Catalog] AS SDS
WHERE SDS.Type = 5) -- 5 = Shared Datasource
SELECT CON.[Path]
,CON.SharedDsName
,CON.ConnString
FROM
(SELECT SDS.[Path]
,SDS.SharedDsName
,DSN.value('ConnectString[1]', 'varchar(150)') AS ConnString
FROM SDS
CROSS APPLY
SDS.DEF.nodes('/DataSourceDefinition') AS R(DSN)
) AS CON
-- Optional filter:
-- WHERE CON.ConnString LIKE '%Initial Catalog%=%TFS%'
ORDER BY CON.[Path]
,CON.SharedDsName;
Você pode usar o
replace value of
comando XML DML para modificar o valor armazenado na cadeia de conexão. Eu montei um exemplo abaixo para você como um guia, mas observe que ele não foi testado, pois não tenho acesso a um servidor de relatório no momento, ele deve pelo menos apontar a direção correta:Mais informações sobre o
replace value of
comando podem ser encontradas em Microsoft Docs .Muitas vezes, um DNS CNAME é a solução mais simples.
Se sua string de conexão usar um nome de máquina simples (ou seja,
server
em oposição a um nome totalmente qualificado comoserver.our_company.com
), e o nome antigo não for um dispositivo existente em seu novo domínio, você poderá configurar o nome antigo como alias DNS (canônico name ou CNAME) para o nome atual.