powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на другом сервере и сохранение данных на локальной таблице
7 сообщений из 7, страница 1 из 1
Запрос на другом сервере и сохранение данных на локальной таблице
    #39927285
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

У меня есть сервер (MyServer1), на котором мне надо собрать данные с других серверов (например MyServer2\MyInstance) и сохранить в таблицу. Думаю это сделать через джобу с Powershell. Вот что у меня пока получилось:


Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
$Srv = 'MyServer2\MyInstance'
SL SQLSERVER:\SQL\"$Srv"\Databases

$Query = "
declare @backup_list table (DBName sysname, BackupType varchar(50), BackupFinishDate datetime, PhysicalDeviceName varchar(512))
;with backup_cte as
(
    select
        database_name,
        backup_type =
            case type
                when 'D' then 'database'
                when 'L' then 'log'
                when 'I' then 'differential'
                else 'other'
            end,
        backup_finish_date,
        rownum = 
            row_number() over
            (
                partition by database_name, type 
                order by backup_finish_date desc
            ),
			m.physical_device_name
    from msdb.dbo.backupset s
	INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
)
insert into @backup_list(DBName, BackupType, BackupFinishDate, PhysicalDeviceName)
select
    database_name,
    backup_type,
    backup_finish_date, 
	physical_device_name
from backup_cte
where rownum = 1 
and backup_type in ('database')
order by database_name;
select * from @backup_list
" 

Invoke-Sqlcmd -query $Query 




Поскажите, пжлста, как мне теперь результаты этого запроса сохранить в постоянную таблицу на сервере на котором запускается джоба (MyServer1)?
...
Рейтинг: 0 / 0
Запрос на другом сервере и сохранение данных на локальной таблице
    #39927290
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще ли сделать линкед-сервер на 2й сервер и все делать с помощью запроса?
...
Рейтинг: 0 / 0
Запрос на другом сервере и сохранение данных на локальной таблице
    #39927451
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m, см Write-SqlTableData
Код: powershell
1.
2.
3.
4.
5.
(Invoke-Sqlcmd -query "SELECT @@SERVERNAME AS 'ServerName', DB_NAME(dbid) AS 'Database',
                              name, CONVERT(BIGINT, size) * 8 AS 'size_in_kb', filename
                              FROM master..sysaltfiles" `
   -ServerInstance MyServer\MyInstance -database master -OutputAs DataTables) |
   Write-SqlTableData -ServerInstance MyServer\MyOtherInstance -Database ServerStats -SchemaName dbo -TableName DatabasesSizes -Force
...
Рейтинг: 0 / 0
Запрос на другом сервере и сохранение данных на локальной таблице
    #39927452
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m, убери те вставку во времянку.
...
Рейтинг: 0 / 0
Запрос на другом сервере и сохранение данных на локальной таблице
    #39927724
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Megabyte
Не проще ли сделать линкед-сервер на 2й сервер и все делать с помощью запроса?


Оно понятно, что проще, но не дадут мне его сделать. Ибо банк и суровая безопасность кругом.
...
Рейтинг: 0 / 0
Запрос на другом сервере и сохранение данных на локальной таблице
    #39927765
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser
Roust_m, убери те вставку во времянку.


Реальный пример у меня несколько сложнее. Вот что у меня получилось:

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
$Query = "
declare @backup_list table (ServerName sysname, DBName sysname, BackupType varchar(50), BackupFinishDate datetime, PhysicalDeviceName varchar(512))

;with backup_cte as
(
    select
        database_name,
        backup_type =
            case type
                when 'D' then 'database'
                when 'L' then 'log'
                when 'I' then 'differential'
                else 'other'
            end,
        backup_finish_date,
        rownum = 
            row_number() over
            (
                partition by database_name, type 
                order by backup_finish_date desc
            ),
			m.physical_device_name
    from msdb.dbo.backupset s
	INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
)
insert into @backup_list(ServerName, DBName, BackupType, BackupFinishDate, PhysicalDeviceName)
select 
	@@SERVERNAME,
    database_name,
    backup_type,
    backup_finish_date, 
	physical_device_name
from backup_cte
where rownum = 1 and backup_type in ('database')
order by database_name;


;with backup_cte as
(
    select
        database_name,
        backup_type =
            case type
                when 'D' then 'database'
                when 'L' then 'log'
                when 'I' then 'differential'
                else 'other'
            end,
        backup_finish_date,
        rownum = 
            row_number() over
            (
                partition by database_name, type 
                order by backup_finish_date desc
            ),
			m.physical_device_name
    from msdb.dbo.backupset s
	INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
)
insert into @backup_list(ServerName, DBName, BackupType, BackupFinishDate, PhysicalDeviceName)
select
	@@SERVERNAME,
    database_name,
    backup_type,
    backup_finish_date, 
	physical_device_name
from backup_cte c
join @backup_list l
on c.database_name = l.DBName
where rownum = 1 and backup_type in ('differential') and c.backup_finish_date > l.BackupFinishDate
order by database_name;



;with backup_cte as
(
    select
        database_name,
        backup_type =
            case type
                when 'D' then 'database'
                when 'L' then 'log'
                when 'I' then 'differential'
                else 'other'
            end,
        backup_finish_date,
        rownum = 
            row_number() over
            (
                partition by database_name, type 
                order by backup_finish_date desc
            ),
			m.physical_device_name
    from msdb.dbo.backupset s
	INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
)
insert into @backup_list(ServerName, DBName, BackupType, BackupFinishDate, PhysicalDeviceName)
select
	@@SERVERNAME,
    database_name,
    backup_type,
    backup_finish_date, 
	physical_device_name
from backup_cte c
join (select DBName, MAX(BackupFinishDate) BackupFinishDate from @backup_list group by DBName) l on c.database_name = l.DBName
where backup_type in ('log') and c.backup_finish_date > l.BackupFinishDate
order by database_name;

select * from @backup_list order by DBName, BackupFinishDate
"
(Invoke-Sqlcmd -query $Query  `
   -ServerInstance  MyServer\MyInstance -database master -OutputAs DataTables) |
   Write-SqlTableData -ServerInstance MyOtherServer\MyOtherInstance -Database DBStats -SchemaName dbo -TableName backup_list -Force




Работает прекрасно.

Мне бы еще результаты запроса выше отфильтровать по такому запросу на втором сервере (где база DBStats).
Код: sql
1.
SELECT [DB_name]  FROM [DBUtilities].[dbo].[DBList] where DBGroupID = 1



То есть пример выше собирает инфу по бекапам для всех баз на MyServer\MyInstance, а мне нужно только для группы.

Такое реально?
...
Рейтинг: 0 / 0
Запрос на другом сервере и сохранение данных на локальной таблице
    #39927769
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще добавить в backup_list столбец с DBGroupID.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на другом сервере и сохранение данных на локальной таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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