Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скрипт перестает работать если его запустить через джобу сиквела / 25 сообщений из 39, страница 1 из 2
29.07.2020, 09:34
    #39984825
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Добрый день,

У меня есть скрипт PowerwShell, который прекрасно работает если его запустить вручную.

Если я его помещаю в джобу, то получаю ошибку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Write-SqlTableData : Failed to connect to server server2\instance2.
At C:\myfolder\tst.ps1:111 char:4
+    Write-SqlTableData -ServerInstance $SrvDestination -Database MyDB ...
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (server2\instance2:String) [Write-SqlTableData], Co 
   nnectionFailureException
    + FullyQualifiedErrorId : ConnectionToServerFailed,Microsoft.SqlServer.Management.PowerShell. 
   WriteSqlTableData



Тип шага джобы: "Operating system(CmdExec)"
Команда:
Код: powershell
1.
PowerShell.exe "C:\myfolder\tst.ps1 server1\instance1 server2\instance2 42" -NonInteractive



Если закоментить вторую строчку в команде ниже, то все работает:
Код: powershell
1.
2.
(Invoke-Sqlcmd -query $Query -ServerInstance  $SrvSource  -database master -OutputAs DataTables) 
# | Write-SqlTableData -ServerInstance $SrvDestination -Database mydb -SchemaName dbo -TableName mytable -Force
...
Рейтинг: 0 / 0
29.07.2020, 09:58
    #39984836
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Ну дык, твоя учетная запись и учетная запись Агента имеют разные права на сервере. В том числе и на удаленном сервере.

ЗЫ. Самое правильное - ЯВНО авторизоваться на удаленном сервере в скрипте powershell.
...
Рейтинг: 0 / 0
29.07.2020, 10:37
    #39984850
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
aleks222
Ну дык, твоя учетная запись и учетная запись Агента имеют разные права на сервере. В том числе и на удаленном сервере.

ЗЫ. Самое правильное - ЯВНО авторизоваться на удаленном сервере в скрипте powershell.



Я этот шаг выполняю через прокси с credentials с моей учетной записью. Это чтобы не возникло проблем с правами. Дело все-таки в "Write-SqlTableData". Без нее к серверу все прекрасно подключается.
...
Рейтинг: 0 / 0
29.07.2020, 10:44
    #39984852
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Errorlog сиквела смотрите, чтобы узнать что скрывается за "Failed to connect to server server2\instance2"
...
Рейтинг: 0 / 0
29.07.2020, 10:46
    #39984854
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Roust_m
Без нее к серверу все прекрасно подключается.

Наивный.
Ну... не пиши данные на сервер.
Только, ведь, тебя это не устроит.
...
Рейтинг: 0 / 0
29.07.2020, 11:09
    #39984858
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
invm
Errorlog сиквела смотрите, чтобы узнать что скрывается за "Failed to connect to server server2\instance2"


Единственное сообщение за сегодня:
Код: sql
1.
This instance of SQL Server has been using a process ID of 3968 since 19/07/2020 12:26:17 PM (local) 19/07/2020 2:26:17 AM (UTC). This is an informational message only; no user action is required.
...
Рейтинг: 0 / 0
29.07.2020, 11:12
    #39984859
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
aleks222
Roust_m
Без нее к серверу все прекрасно подключается.

Наивный.
Ну... не пиши данные на сервер.
Только, ведь, тебя это не устроит.


Ну хорошо, а как мне явно авторизоваться на сервере? Ведь у меня их два:
$SrvSource и $SrvDestination

Код: powershell
1.
2.
(Invoke-Sqlcmd -query $Query -ServerInstance  $SrvSource  -database master -OutputAs DataTables)  | 
Write-SqlTableData -ServerInstance $SrvDestination -Database mydb -SchemaName dbo -TableName mytable -Force



Причем, $SrvDestination он не удаленный, на нем сама джоба и исполняется.
...
Рейтинг: 0 / 0
29.07.2020, 11:22
    #39984865
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Roust_m,

Если в errorlog нету сообщений вида login failed - значит либо до соединения с сервером вообще не доходит, либо смотрите не тот (не там) errorlog
...
Рейтинг: 0 / 0
29.07.2020, 11:27
    #39984866
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
invm
Roust_m,

Если в errorlog нету сообщений вида login failed - значит либо до соединения с сервером вообще не доходит, либо смотрите не тот (не там) errorlog
Либо логирование неудачных попыток отключено.
...
Рейтинг: 0 / 0
29.07.2020, 11:47
    #39984882
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Roust_m,

Пара наивных вопросов:

0. Сервера в одном домене? Имена полные?
1. Пробовали ли создать явное описание подключения?
...
Рейтинг: 0 / 0
29.07.2020, 12:13
    #39984894
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
env
Roust_m,

Пара наивных вопросов:

0. Сервера в одном домене? Имена полные?
1. Пробовали ли создать явное описание подключения?


Да в одном.

Я видоизменил скрипт:
Код: powershell
1.
2.
3.
$Query = "select name from master.sys.databases (nolock) where database_id > 5" 
Invoke-Sqlcmd -query $Query -ServerInstance  $SrvSource  -database master -OutputAs DataTables
Invoke-Sqlcmd -query $Query -ServerInstance  $SrvDestination  -database master -OutputAs DataTables



В этом виде все работает. Как только начинаю использовать Write-SqlTableData, все ломается нафик. :(
...
Рейтинг: 0 / 0
29.07.2020, 12:39
    #39984902
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Похоже я начинаю нащупывать проблему.

Перед выполнением
Код: powershell
1.
2.
(Invoke-Sqlcmd -query $Query -ServerInstance  $SrvSource  -database master -OutputAs DataTables)  |
   Write-SqlTableData -ServerInstance $SrvDestination -Database MigrManagement -SchemaName dbo -TableName test -Force


Я перезаписал запрос, сделав его очень маленьким:
Код: powershell
1.
$Query = "select name from master.sys.databases (nolock) where database_id > 5" 



После этого все начало работать и в джобе.

Похоже дело в длине запроса. Когда он большой, то Write-SqlTableData начинает глючить. Мой реальный запрос таков:

Код: 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.
$Query = "declare @last_full_backup table (database_name sysname, last_lsn numeric(25,0))   

insert into @last_full_backup (database_name, last_lsn)
select database_name, MAX(last_lsn) 
from msdb.dbo.backupset b 
INNER JOIN msdb.dbo.backupmediafamily m ON b.media_set_id = m.media_set_id
where type = 'D'  and is_copy_only = 0 
group by database_name
order by database_name


SELECT $groupid, b.type, b.database_name, b.backup_finish_date,  physical_device_name,
'RESTORE DATABASE [' + b.database_name + '] FROM ' +
(
STUFF((
select 
', DISK = N' + '''' +  '$RestorePathSY6' + CASE b.type When 'D' Then '\FULL\' When 'I' Then '\DIFF\' When 'L' Then '\Log\' END +substring(physical_device_name, len(physical_device_name) - CHARINDEX('\',reverse(physical_device_name))+2, len(physical_device_name) ) + '''' + ' '  
from 
msdb.dbo.backupmediafamily mf
where  b.media_set_id = mf.media_set_id
FOR XML PATH ('')), 1, 2, '')) +
' WITH  FILE = 1,  ' +
STUFF((
select '  MOVE N'+ '''' + m.name + '''' + ' TO N' + '''' + '$DataFolder' + 
substring(physical_name, len(physical_name) - CHARINDEX('\',reverse(physical_name))+2, len(physical_name) ) + '''' + ','
from
 master.sys.master_files m,
 sys.databases d
 where m.database_id = d.database_id
 and d.name = b.database_name
 and m.[type] = 0
FOR XML PATH ('')), 1, 1, '') + 
STUFF((
select '  MOVE N'+ '''' + m.name + '''' + ' TO N' + '''' + '$LogFolder' + 
substring(physical_name, len(physical_name) - CHARINDEX('\',reverse(physical_name))+2, len(physical_name) ) + '''' + ','
from
 master.sys.master_files m,
 sys.databases d
 where m.database_id = d.database_id
 and d.name = b.database_name
 and m.[type] = 1
FOR XML PATH ('')), 1, 1, '') +
'NORECOVERY,  NOUNLOAD,  STATS = 5' as RestoreCommandSY6,
'RESTORE DATABASE [' + b.database_name + '] FROM ' +
(
STUFF((
select 
', DISK = N' + '''' +  '$RestorePathSY7' + CASE b.type When 'D' Then '\FULL\' When 'I' Then '\DIFF\' When 'L' Then '\Log\' END +substring(physical_device_name, len(physical_device_name) - CHARINDEX('\',reverse(physical_device_name))+2, len(physical_device_name) ) + '''' + ' '  
from 
msdb.dbo.backupmediafamily mf
where  b.media_set_id = mf.media_set_id
FOR XML PATH ('')), 1, 2, '')) +
' WITH  FILE = 1,  ' +
STUFF((
select '  MOVE N'+ '''' + m.name + '''' + ' TO N' + '''' + '$DataFolder' + 
substring(physical_name, len(physical_name) - CHARINDEX('\',reverse(physical_name))+2, len(physical_name) ) + '''' + ','
from
 master.sys.master_files m,
 sys.databases d
 where m.database_id = d.database_id
 and d.name = b.database_name
 and m.[type] = 0
FOR XML PATH ('')), 1, 1, '') + 
STUFF((
select '  MOVE N'+ '''' + m.name + '''' + ' TO N' + '''' + '$LogFolder' + 
substring(physical_name, len(physical_name) - CHARINDEX('\',reverse(physical_name))+2, len(physical_name) ) + '''' + ','
from
 master.sys.master_files m,
 sys.databases d
 where m.database_id = d.database_id
 and d.name = b.database_name
 and m.[type] = 1
FOR XML PATH ('')), 1, 1, '') +
'NORECOVERY,  NOUNLOAD,  STATS = 5' as RestoreCommandSY7
from
msdb.dbo.backupset b
INNER JOIN msdb.dbo.backupmediafamily m ON b.media_set_id = m.media_set_id
join @last_full_backup lfb
on b.last_lsn >= lfb.last_lsn and b.database_name = lfb.database_name
--where b.type = 'D' or b.type = 'L'
order by b.database_name, b.backup_finish_date desc
"



Осталось понять, как этот скрипт заставить работать в джобе и большим и сложным запросом. Хранимые процедуры или вообще какие-либо объекты на сервере $SrvSource я создавать не могу.
...
Рейтинг: 0 / 0
29.07.2020, 13:02
    #39984917
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Roust_m,
авторЯ перезаписал запрос, сделав его очень маленьким:
$Query = "select name from master.sys.databases (nolock) where database_id > 5"

Дело не в размере, это запрос никуда ничего не записывает.
...
Рейтинг: 0 / 0
29.07.2020, 13:34
    #39984940
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Владислав Колосов
Roust_m,
авторЯ перезаписал запрос, сделав его очень маленьким:
$Query = "select name from master.sys.databases (nolock) where database_id > 5"


Дело не в размере, это запрос никуда ничего не записывает.

ну логично тогда попробовать элементарный апдейт-Insert в тестовую таблицу и глянуть прокатит или нет
чтобы локализовать проблему.
...
Рейтинг: 0 / 0
29.07.2020, 13:39
    #39984943
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Гулин Федор
Владислав Колосов
Roust_m,
пропущено...


Дело не в размере, это запрос никуда ничего не записывает.


ну логично тогда попробовать элементарный апдейт-Insert в тестовую таблицу и глянуть прокатит или нет
чтобы локализовать проблему.


Гораздо логичнее - перестать жрать кактус.

Если у тредстартера фсе это безобразие творится на ОДНОМ сервере, то нахера ваще Write-SqlTableData?
...
Рейтинг: 0 / 0
29.07.2020, 14:07
    #39984964
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Ах да, поскольку мышей не отучишь жрать кактус, то можно ишо профайлер запустить.

И узрить воотчую разницу между "прекрасно работает если его запустить вручную" и "Если я его помещаю в джобу, то получаю ошибку".

Экономия кактуса может быть изрядной.
...
Рейтинг: 0 / 0
29.07.2020, 16:05
    #39985024
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Гулин Федор
Владислав Колосов
Roust_m,
пропущено...


Дело не в размере, это запрос никуда ничего не записывает.


ну логично тогда попробовать элементарный апдейт-Insert в тестовую таблицу и глянуть прокатит или нет
чтобы локализовать проблему.


Уже прокатило:
Код: powershell
1.
2.
3.
$Query = "select name from master.sys.databases (nolock) where database_id > 5" 
(Invoke-Sqlcmd -query $Query -ServerInstance  $SrvSource  -database master -OutputAs DataTables)  |
   Write-SqlTableData -ServerInstance $SrvDestination -Database MigrManagement -SchemaName dbo -TableName test -Force
...
Рейтинг: 0 / 0
29.07.2020, 16:06
    #39985025
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
aleks222
Гулин Федор
пропущено...


ну логично тогда попробовать элементарный апдейт-Insert в тестовую таблицу и глянуть прокатит или нет
чтобы локализовать проблему.


Гораздо логичнее - перестать жрать кактус.

Если у тредстартера фсе это безобразие творится на ОДНОМ сервере, то нахера ваще Write-SqlTableData?


В том-то и дело, что не на одном:
(Invoke-Sqlcmd -query $Query -ServerInstance $SrvSource -database master -OutputAs DataTables) |
Write-SqlTableData -ServerInstance $SrvDestination -Database mydb -SchemaName dbo -TableName mytable -Force
...
Рейтинг: 0 / 0
29.07.2020, 18:54
    #39985114
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Roust_m,

авторПосле этого все начало работать и в джобе.
Здесь еще интереснее - зачем Вы выполняете в джобе PS скрипт? Я бы еще понял, если это был бы планировщик windows. Что мешает использовать Integration Services, например?
...
Рейтинг: 0 / 0
30.07.2020, 03:05
    #39985179
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Владислав Колосов
Roust_m,

авторПосле этого все начало работать и в джобе.

Здесь еще интереснее - зачем Вы выполняете в джобе PS скрипт? Я бы еще понял, если это был бы планировщик windows. Что мешает использовать Integration Services, например?

Всяческие ограничения, принятые прежде решения, безопасность и т.д. Идти обратно к начальству, просить пересмотреть дизайн из-за того, что одна команда не работает? Я попробую планировщик Windows, но хотелось бы иметь возможность использовать сиквел джобы, ибо они как-то привычней и более знакомы.
...
Рейтинг: 0 / 0
30.07.2020, 03:22
    #39985182
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Попробовал планировщик Windows, вылезает ошибка:

---------------------------
Task Scheduler
---------------------------
An error has occurred for task MyDB Refresh. Error message: The following error was reported: 2147944309.
---------------------------
OK
---------------------------
Вот по этой причине и хотелось бы иметь возможность использовать джобы сиквела, ибо они очень знакомы.
...
Рейтинг: 0 / 0
30.07.2020, 03:46
    #39985183
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Фиксанул эту ошибку и запустил задачу. Тот же шаг не отрабатывает и в планировщике Windows. История задач планировщика ужасная, сплошная абра-кадабра, понять почему шаг падает непросто.
...
Рейтинг: 0 / 0
30.07.2020, 11:55
    #39985267
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Roust_m,

что хотите делать вашим скриптом?
...
Рейтинг: 0 / 0
30.07.2020, 14:30
    #39985330
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Roust_m
aleks222
пропущено...


Гораздо логичнее - перестать жрать кактус.

Если у тредстартера фсе это безобразие творится на ОДНОМ сервере, то нахера ваще Write-SqlTableData?


В том-то и дело, что не на одном:
(Invoke-Sqlcmd -query $Query -ServerInstance $SrvSource -database master -OutputAs DataTables) |
Write-SqlTableData -ServerInstance $SrvDestination -Database mydb -SchemaName dbo -TableName mytable -Force


Мыши кололись, плакали, но продолжали жрать кактус...
...
Рейтинг: 0 / 0
31.07.2020, 10:23
    #39985486
Roust_m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт перестает работать если его запустить через джобу сиквела
Критик
Roust_m,

что хотите делать вашим скриптом?


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


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