Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на другом сервере и сохранение данных на локальной таблице / 7 сообщений из 7, страница 1 из 1
17.02.2020, 09:28
    #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
17.02.2020, 09:47
    #39927290
Megabyte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на другом сервере и сохранение данных на локальной таблице
Не проще ли сделать линкед-сервер на 2й сервер и все делать с помощью запроса?
...
Рейтинг: 0 / 0
17.02.2020, 13:31
    #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
17.02.2020, 13:32
    #39927452
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на другом сервере и сохранение данных на локальной таблице
Roust_m, убери те вставку во времянку.
...
Рейтинг: 0 / 0
18.02.2020, 05:08
    #39927724
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на другом сервере и сохранение данных на локальной таблице
Megabyte
Не проще ли сделать линкед-сервер на 2й сервер и все делать с помощью запроса?


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


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