Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выполнение утилит командной строки в Job'е  [new]
GrayMagellan
Member

Откуда:
Сообщений: 188
Проблема:

1) создаем новый job
2) создаем step №1
3) указываем тип шага "Operating System Command (CmdExec)"
4) в строке "Command" пишем команду "copy c:\test.txt c:\1\test.txt"

Файл c:\test.txt существует, папка c:\1 тоже существует. Везде нажимаем "ок", сохраняем job, запускаем. Все отрабатывается прекрасно. Файл test.txt из корня диска c:\ копируется в папку c:\1. Снова заходим в job, и меняем команду на "copy c:\test.txt \\server\folder". Разумеется, есть и server, и folder на нем расшарен с правами everyone full control и в Security, и в Share permission. Сохраняем job, запускаем, видим статус job'а - failed. Заходим в лог job'а и видим следующий текст "Invalid drive specification
0 File(s) copied". Что это за хрень и как с ней бороться. Попытка замапить \\server\folder как диск z: с соответствющей коррекцией job'а приводят к тому же результату, равно как и все прочие ухищрения (типа батников и пр...). Такое ощущение, что SQL UNC в принципе не понимает, и как увидит имя UNC (как бы оно не было замаскировано), так выходит из CmdExec с ошибкой.

Вопрос: что делать? это глюк? или UNC в принципе не поддерживается CmdExec в SQL 2000? а если поддерживается, то как реализовать поставленную задачу?

Задача: Нужно после архивации базы последним шагом копировать бэкапы на другой сервер по сети. Как это сделать? Текущий вариант такой: бэкап базы и все такое сидит в job'е, а потом через некоторое время запускается "Sheduled Task", который копирует файл бэкапа на другой сервер. Такая конструкция работает, пока job укладывается во временные рамки, отпущенные ему. Но если job сильно затягивается по времени выполнения и накладывается на "Sheduled Task", то тот может отработать криво или вообще не отработать. А надо получиить 100% работоспособность.

Какие будут мнения у сообщества SQL? В поиск не посылайте, я там уже был и ничего стоящего, простого и надежного не увидел.
25 янв 05, 13:57    [1271709]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
GrayMagellan
Member

Откуда:
Сообщений: 188
P.S. Задача-то в принципе простая...
25 янв 05, 13:58    [1271711]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
GrayMagellan
Member

Откуда:
Сообщений: 188
P.P.S. Таже фигня получается при попытке реализовать задачу в DTS...
25 янв 05, 13:59    [1271713]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
GrayMagellan
P.S. Задача-то в принципе простая...


Конечно простая.

автор
Разумеется, есть и server, и folder на нем расшарен с правами everyone full control и в Security, и в Share permission.


И тут просто надо вспомнить, что агент - это служба которая стартует под определенной учетной записью, а, например, локальная системная учетная запись не имеет возможности доступаться до сетевых ресурсов.
25 янв 05, 14:06    [1271750]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
под какой учеткой работает sql Server?
25 янв 05, 14:06    [1271753]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
GrayMagellan
Member

Откуда:
Сообщений: 188
Гм... И SQL, и SQL Agent работают под учетной записью LocalSystem.

Ок, возможно, вы правы. А тогда поясните мне, пожалуйста, для чего тогда в job'е предназначено поле "Owner"? В нем прописан администратор домена. Разве job не выполняется с правами учетной записи, которая указана в поле "Owner"? Он выполняется с правами учетной записи, под которой работает SQL Agent и SQL Server?

Проясните, пожалуйста, мне этот вопрос...
25 янв 05, 14:20    [1271813]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
Glory
Member

Откуда:
Сообщений: 104760
Owner нужен для того, чтобы определить кому можно запускать этот джоб а кому нельзя.
25 янв 05, 14:24    [1271831]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Owner предназнаен для разграничения прав на старт джоба:

BOL->sp_start_job

...

Execute permissions default to the public role in the msdb database. A user who can execute this procedure and is a member of the sysadmin fixed role can start any job. A user who is not a member of the sysadmin role can use sp_start_job to start only the jobs he/she owns.
25 янв 05, 14:27    [1271849]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
GrayMagellan
Member

Откуда:
Сообщений: 188
Ясно. Значит, суммируя все вышеизложенное, получается, что поле "Owner" определяет список лиц, имеющих право запустить job, а вот выполняться он будет с правами, под которыми работает сервис SQL Agent. Правильно я понимаю?
25 янв 05, 15:03    [1272031]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение утилит командной строки в Job'е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31606
GrayMagellan
Ясно. Значит, суммируя все вышеизложенное, получается, что поле "Owner" определяет список лиц, имеющих право запустить job, а вот выполняться он будет с правами, под которыми работает сервис SQL Agent. Правильно я понимаю?

Ещё в свойствах агента есть галка "Only users with SysAdmin privileges can execute CmdExec and ActiveScripting job steps"
Если она не установлена, то вы можете задать аккаунт для запуска в полях:
Reset Proxy Account
Reset Proxy Password
При этом они будут использоваться "to execute jobs owned by non system administrators."
25 янв 05, 15:33    [1272136]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить