powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL Reporting Service замена обращениий к серверам и БД
25 сообщений из 27, страница 1 из 2
SQL Reporting Service замена обращениий к серверам и БД
    #40015653
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть задача изменить названия серверов всех отчетов ms sql reporting service - отчетов много и скачивать каждый отчет отдельно, менять сервер и вновь загружать потребует больших затрат.
Есть БД ReportServer однако информация о подключениях в самих отчетах в ней я не нашел.
Подскажите, пожалуйста, есть ли какой то способ сделать это быстро - количество отчетов порядка 300?
Заранее спасибо
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015660
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama информация о подключениях в самих отчетах в ней я не нашел.
https://docs.microsoft.com/en-us/sql/reporting-services/report-data/create-modify-and-delete-shared-data-sources-ssrs?view=sql-server-ver15
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015676
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

это зависит от того, используют ли отчеты свои собственные или shared источники данных.
shared datasources поменять легко


в случае собственных...
можно выгрузить сами отчеты в виде xml в файлы с помощью подобного запроса (см. столбец extract command)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select
	Name
    ,[Path]
     ,CONVERT(xml, CONVERT(varbinary(max), content)) AS Report
	 ,'bcp "select convert(xml,convert(varbinary(max),content)) from '
		+quotename(db_name())
		+'.dbo.Catalog where name=''' 
		+Name
		+'''" queryout '
		+replace(path,'/','_')
		+'-'
		+Name
		+'.rdl -S '
		+convert(varchar(200),@@servername)
		+' -T -c'  [extract command]
from ReportServer.dbo.[Catalog] 
where type=2 



поправить и залить обратно

а на счет "быстро" приходит на ум только такое - в файле hosts прописать соответствия старых и новых серверов
править на сервере, где установлен SSRS
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015865
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,
Доброе утро, спасибо - я правильно понимаю, что выгружать в rdl посредством cmd?
А уточните, пожалуйста, как я смогу залить измененные rdl обратно в БД reportserver?
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015873
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermama
komrad,
Доброе утро, спасибо - я правильно понимаю, что выгружать в rdl посредством cmd?
А уточните, пожалуйста, как я смогу залить измененные rdl обратно в БД reportserver?


И еще, уточните, пожалуйста, а в какую папку будет произведена выгрузка - так как в столбце extract command пути не указано - я ранее не работал с таким функционалом.
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015894
bamper78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,
Перенесите бекап БД ReportServer на новый сервер и настройте подключение к ней.
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015895
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama
komrad,
Доброе утро, спасибо - я правильно понимаю, что выгружать в rdl посредством cmd?

да, BCP это утилита командной строки; обычно идет вместе с SQL Native Client

dermama

А уточните, пожалуйста, как я смогу залить измененные rdl обратно в БД reportserver?

Тут два варианта: вручную и автоматизированная массовая.

Автоматизированная массовая - это сложный процесс. Гуглить на тему "ssrs upload multiple rdl"

Однако, непонятны следующие моменты:
- структура папок в SSRS (отчеты надо разложить в существующие папки)
- какие типы data sources используются (надо ли выгружать все отчеты или достаточно поправить shared data sources?)
- имеются ли подписки на отчеты (слетят ли они при перезаписи отчета?)
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015904
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama

И еще, уточните, пожалуйста, а в какую папку будет произведена выгрузка - так как в столбце extract command пути не указано - я ранее не работал с таким функционалом.

В ту папку, из которой будет вызываться BCP (текущую).

Обратите внимание - отчеты будут выгружены с названиями папок. Таким образом обходится ситуация с одноименными отчетами в разных папках.
Если создадите на диске копию структуры папок SSRS, то для выгрузки отчетов по папкам запрос можно модицифировать следующим образом:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 
      Name
     ,[Path]
     --,CONVERT(xml, CONVERT(varbinary(max), content)) AS Report
     ,'bcp "select convert(xml,convert(varbinary(max),content)) from '
		+quotename(db_name())
		+'.dbo.Catalog where name=''' 
		+Name
		+'''" queryout "'
		+'.'
		+replace(path,'/','\')
		+'.rdl" -S '
		+convert(varchar(200),@@servername)
		+' -T -c'  [extract command]
from dbo.[Catalog] 
where type=2 



Важно:
- запрос запускать в базе ReportServer;
- эккаунт, под котором запускается BCP и сама командная строка, должен иметь полный доступ к базе ReportServer;
- BCP использует аутентификацию Windows.

Если аутентификация SQL, то ключ "-T " надо заменить на "-U login -P password " со своими login и password.
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015918
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, полагаю, что этот топик для раздела "Отчетные системы"
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015928
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

а, кстати, что вернет этот запрос?

Код: sql
1.
2.
3.
4.
select Name,count(1) [n]
from dbo.[Catalog] 
group by Name  
having count(1)>1  
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015964
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad
dermama,

а, кстати, что вернет этот запрос?

Код: sql
1.
2.
3.
4.
select Name,count(1) [n]
from dbo.[Catalog] 
group by Name  
having count(1)>1  



Данный запрос вернул мне 94 строки,
с одинаковыми названиями отчетов, но в разных папках разных подкаталогов.
количество повторяющихся названий от 2 до 9

если просто подсчитать количество отчетов по названиям, то получается 953
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015969
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama

Данный запрос вернул мне 94 строки,
с одинаковыми названиями отчетов, но в разных папках разных подкаталогов.
количество повторяющихся названий от 2 до 9

если просто подсчитать количество отчетов по названиям, то получается 953


тогда выгружать надо по ID и раскладывать по папкам локально

исправленный скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 
      Name
     ,[Path]
     --,CONVERT(xml, CONVERT(varbinary(max), content)) AS Report
     ,'bcp "select convert(xml,convert(varbinary(max),content)) from '
		+quotename(db_name())
		+'.dbo.Catalog where ItemID=''' 
		+convert(varchar(200),ItemID)
		+'''" queryout "'
		+'.'
		+replace(path,'/','\')
		+'.rdl" -S '
		+convert(varchar(200),@@servername)
		+' -T -c'  [extract command]
from dbo.[Catalog] 
where type=2 
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015971
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad
тогда выгружать надо по ID и раскладывать по папкам локально


скрипт на создание дерева папок SSRS в текущей папке

Код: sql
1.
2.
3.
select distinct 'mkdir ".'+replace(replace(path,name,''),'/','\')+'"' [create folders]
from catalog
where type=2 
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40015989
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нелегкая же дорога у тех, кто не желает пользоваться инструментами MS... Установите VS, добавьте инструментарий разработки баз данных, импортируйте отчеты в решение. Дальше - дело техники, поиск, замена, развертывание проекта.
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40016310
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Visual Studio - инструмент явно не для администрации (/конфиг.) и не для мониторинга SSRS/PBIRS,
а для разработки (как правильно замечено выше) / контроля версий (тестирование и в некотором смысле - выгрузка, но не прод.)
(хотя держать в проекте VS как советуют в пред. посте - вообще-то стандарт, можно ещё готовить к релизам но не сами релизы на выпуск)

для этих целей у MS документирован REST API в основном, (SOAP {..asmx?wsdl..} уже списали несколько лет назад, но пока работает),
ну ещё частично конфигуратор, SSMS и несколько других примочек (не важно как ими работать, частая практика - через PowerShell)
Процедуры SSRS базы данных предназначены для внутренних целей сервиса, ну разве что таблицы можно для мониторинга использовать.
(прямая выгрузка от туда и загрузка напрямую в SQL - явный кактус)

Для пакетной обработки именно REST, в первую очередь, документировано (хоть и частичично кривовато)

Если не по фэн-шую (потому-что не предназначено) переписывать напрямую в базу
(против течения, там хоть и триггеров нет но наверное и хэши завязаны)
- то как кто-то выше намекал: запросто можно побить и ID-шники со слётом связей
к другим обьектам (и в др. системах, простейший пример: агент и подписки)
потерять настройки доступа/безопасности на отчётах,
и естественно искорёжить xранилище учётных данных / сбить ключи (крипта/шифрование)
на те-же источники данных при некоторых типах аутентификации - сервера которых меняет TS

REST API (метод GET) прекрасно даёт и список объектов (JSON) со свойствами (путь, размер, ID-шники и мн. пр.)
и сам объект (скачать) по пути либо ID, и предоставляет возможность положить объекты обратно на сервер
например: http://my-server/Reports/api/v2.0/CatalogItems
задачи такого класса (пакетного/массового обслуживания)
явно не для SQL (напрямую) и не для Visual Studio (хотя некоторые инструменты для этого там есть или хранятся/разрабатываются)
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40016763
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkiv


REST API (метод GET) прекрасно даёт и список объектов (JSON) со свойствами (путь, размер, ID-шники и мн. пр.)
и сам объект (скачать) по пути либо ID, и предоставляет возможность положить объекты обратно на сервер
например: http://my-server/Reports/api/v2.0/CatalogItems
задачи такого класса (пакетного/массового обслуживания)
явно не для SQL (напрямую) и не для Visual Studio (хотя некоторые инструменты для этого там есть или хранятся/разрабатываются)


Добрый день!
Спасибо за подробный ответ.
я нашел инфу на сайте swaggerhub с доступными командами по GET, POST и так далее - получилось выгрузить файл JSON по всем очтетам, попробовал также команды по datasource - выгружается инфа по всем Общим источникам данных - однако не получается выгрузить инфу по всем отчетам, с подробным описанием собственных коннектов отчета - такое возможно только если указывать ID какого либо отчета.

Плюс как я понял, для того чтобы пользоваться командами GET, POST и т.д необходимо сторонне ПО такое как Postman к приемру для CHROME, а нам нельзя устанавливать сторонее на удаленку по причинам безопасности.

Т.Е. по сути мне удалось выгрузить некую информацию по ссылке http://my-server/Reports/api/v2.0/CatalogItems
однако подробной информации о коннектах здесь нет.
Пробовал также http://my-server/Reports/api/v2.0/datasource - также общая инфа по общим коннектам.
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40016767
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermama
vikkiv


REST API (метод GET) прекрасно даёт и список объектов (JSON) со свойствами (путь, размер, ID-шники и мн. пр.)
и сам объект (скачать) по пути либо ID, и предоставляет возможность положить объекты обратно на сервер
например: http://my-server/Reports/api/v2.0/CatalogItems
задачи такого класса (пакетного/массового обслуживания)
явно не для SQL (напрямую) и не для Visual Studio (хотя некоторые инструменты для этого там есть или хранятся/разрабатываются)


Добрый день!
Спасибо за подробный ответ.
я нашел инфу на сайте swaggerhub с доступными командами по GET, POST и так далее - получилось выгрузить файл JSON по всем очтетам, попробовал также команды по datasource - выгружается инфа по всем Общим источникам данных - однако не получается выгрузить инфу по всем отчетам, с подробным описанием собственных коннектов отчета - такое возможно только если указывать ID какого либо отчета.

Плюс как я понял, для того чтобы пользоваться командами GET, POST и т.д необходимо сторонне ПО такое как Postman к приемру для CHROME, а нам нельзя устанавливать сторонее на удаленку по причинам безопасности.

Т.Е. по сути мне удалось выгрузить некую информацию по ссылке http://my-server/Reports/api/v2.0/CatalogItems
однако подробной информации о коннектах здесь нет.
Пробовал также http://my-server/Reports/api/v2.0/datasource - также общая инфа по общим коннектам.


и соответственно как обратно постить измененную инфу (в случае если бы удалось добраться до подробного описания собственных коннектов отчета) не понятно на данный момент.
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40016855
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

300 отчетов, кстати, не так много, если не хотите пользоваться студией, то можно выполнить dowload каждого отчета, отредактировать и выполнить upload. За пару дней спокойно управитесь.
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40016864
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов dowload каждого отчета, отредактировать и выполнить upload+1
Гораздо дольше будет протестировать каждый отчет.

Заодно можно будет проделать рефакторинг: просмотреть на все отчеты, отделить нужные отчеты от остальных, сформировать источники данных

dermama количество повторяющихся названий от 2 до 9Нюхом чую бардак
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40016888
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257,

бардак однозначно, т.к. даже проекта нет.
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40016893
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

если лог настроен, то можете отбросить неактуальное старье
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40017462
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
то можно выполнить dowload каждого отчета, отредактировать и выполнить upload. За пару дней спокойно управитесь.
Яркий пример как одним махом можно отбросить развитие IT индустрии на пол века назад списав на нет всё программирование
завтра посыпятся предложения по ведению баз данных на бумаге карандашом, а огонь разжигать огнивом




SERG1257
просмотреть на все отчеты, отделить нужные отчеты от остальных,
Это задача BA а не разработчика (или IT админа)
в нормалньой организации навряд-ли есть позиции где IT-шникам нечем заняться до такой степени что приходится самим себе изобретать занятие..
обычно с натяжкой хватает времени разгребсти существующую нагрузку (и какие задачи отбросить из-за недостатка ресурса)
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40017466
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

На swaggerhub более глубокое древо API команд чем CatalogItems и DataSources,
последняя применима для Shared DataSources а не для каждого отчёта
для данной конкретной задачи (именно .rdl отчёты) рекомендую посмотреть ветку /Reports с более селективными: /Report() и /Report(id)/DataSources

По инструменту проходящему принципы безопасников - из компилированных можно и C#/VB.NET (классом WebRequest или более новым WebClient )
разными вариантами (CLR напр.), кстати - эти языки встроены в SSIS, даже t-SQL
(но если сервер может стучаться наружу то как-бы не по фэншую, даже включение этой функциональности если сеть закрытая - т.е. для внутренних сервисов)

если вопрос прозрачности: из наглядных скриптовых методов - тот-же PowerShell
сейчас по быстрому накидаю чего-нибудь из примеров, может в архивах сырое что осталось..
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40017488
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё есть в API документации (но там многое криво если честно - всё в стадии разработке и дополнений по возможности),
покопался в сыром архиве по SSRS, на PowerShell
вот так можно просмотреть все существующие ConnectionString (напр. в Shared DS его нет) из DataSources (которых на отчёт может быть несколько) где есть *local*
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#=============
$ssrs_web="http://localhost/PBI"
[String]$srch="local"

[String]$ssrs_api=$ssrs_web+"/api/v2.0/Reports"
$tbl=New-Object System.Data.DataTable;$tbl.Columns.AddRange(@("Report","DataSource","ConnectionString","ReportId"))>$null
foreach($r in(Invoke-RestMethod -Uri $ssrs_api -UseDefaultCredentials).value|?{$_.HasDataSources -eq $true})
{foreach($ds in(Invoke-RestMethod -Uri ($ssrs_api+"("+$r.Id+")/DataSources") -UseDefaultCredentials))
{foreach($sr in $ds.value|?{$_.ConnectionString -ne $null -and $_.ConnectionString -like ("*"+$srch+"*")})
{$tbl.Rows.Add($r.Path,$sr.Name,$sr.ConnectionString,$r.Id)>$null}}}
$tbl|ft
#=============

вот так скачать все .rdl (xml) отчёты (для других объектов - другая API ветка) в одну папку (по ID) для послед. обработки как xml ноды или под более примитивную текстовую замену
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
#=============
$ssrs_web="http://localhost/PBI"
$download_dir="c:\tst\ssrs_id\in"

$ssrs_api=$ssrs_web+"/api/v2.0/Reports"
if((Test-Path $download_dir) -eq $false){New-Item -ItemType Directory -Force -Path $download_dir | Out-Null}
foreach($r in(Invoke-RestMethod -Uri $ssrs_api -UseDefaultCredentials).value|?{$_.Type -eq "Report"})
{Invoke-RestMethod -Uri ($ssrs_api+"("+$r.ID+")/Content/"+'$value') -UseDefaultCredentials -OutFile ($download_dir+"\"+$r.id)}
#=============


а вот так по полному пути (но я предпочитаю по ID т.к. как-то была проблема из-за слишком длинных путей при записи на сетевое хранилище, хотя и менее читабельно)
хотя такое уже приведено выше более простым (и не совсем рекомендованным) методом через t-SQL (не факт что на сервере разрешена такая функциональность в конфигурации SQL Server-а)
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#=============
$ssrs_web="http://localhost/PBI"
$download_dir="c:\tst\ssrs_id\dr"

$ssrs_api=$ssrs_web+"/api/v2.0/Reports"
foreach($r in(Invoke-RestMethod -Uri $ssrs_api -UseDefaultCredentials).value)
{$dr=$download_dir+$r.Path.Substring(0,$r.Path.LastIndexOf("/")).Replace("/","\")
if((Test-Path $dr) -eq $false){New-Item -ItemType Directory -Force -Path $dr | Out-Null}
Invoke-RestMethod -Uri ($ssrs_api+"("+$r.ID+")/Content/"+'$value') -UseDefaultCredentials -OutFile ($download_dir+$r.Path.Replace("/","\")+".rdl")}
#=============



вот так .rdl отчёт записывается на сервер (можно и развить пройдясь циклом для каждого обработанного отчёта в Out директории)
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#=============
$ssrs_web="http://localhost/PBI"
$rdl_name="my_report_test1"

$ssrs_api=$ssrs_web+"/api/v2.0/Reports"
$my_rdl = "C:\tst\ssrs_id\in\8d6dc5eb-8f7a-496a-bebb-798e356dc2b1"
$web_rdl=@{
    "@odata.type"="#Model.Report";
    "Content"=[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($my_rdl));
    "ContentType"="";
    "Name" = $rdl_name;
    "Path" = '/';
    }|ConvertTo-Json
Invoke-RestMethod -Uri $ssrs_api -Method Post -Body $web_rdl  -ContentType "application/json" -UseDefaultCredentials
#=============


судя по документации REST методом можно записать и саму коллекцию DataSources (JSON) для конкретного отчёта напрямую на сервер без отдельного сохранения в дисковых папках
(но это сам не делал, у нас немного другие задчи массового обслуживания SSRS инфраструктуры были)
или в самих rdl через xml навигацию XPath методом SelectSingleNode с InnerXML или InnerText поменять значение ConnectionString ноды
т.е. вместо REST метода PATCH на /CatalogItems(Id) - только PUT метод через /Reports(Id)/DataSources

так-же зависит от SSRS версии - у меня это работает на последнем релизе Power BI Report Server
...
Рейтинг: 0 / 0
SQL Reporting Service замена обращениий к серверам и БД
    #40017681
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkiv,

готов поспорить, что Вы получили свои знания, которые продемонстрировали, не за пару дней, о которых я писал. А мой метод не требует никаких специальных знаний. Т.е. он эффективнее, учитывая однократность операции.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL Reporting Service замена обращениий к серверам и БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]