powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как программно запустить dts-пакет с клиентской машины?
31 сообщений из 31, показаны все 2 страниц
Как программно запустить dts-пакет с клиентской машины?
    #32038160
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые Коллеги! Помогите, плз, решить проблему.
Проблема вкратце такова. Есть dbf-таблицы, распологающиеся на сетевом диске, с которыми работает одна часть пользователей. Есть база на SQL Server (2000), которая содержит копии этих dbf-таблиц, с которыми работает другая часть пользователей посредством моей программы (ну, надо так..). В dbf-таблицы, кот. на сетевом диске, периодически вносятся изменения (бывает, что и несколько раз на день). На сервере существует dts-пакет на обновление этих таблиц, который запускается ежедневно в 12 часов ночи. Но, сами понимаете, такая частота меня не устраивает. Есть ли какой-нить программый способ запуска этого пакета? Коллективным разумом найденное решение через NMMsg/NMMSGServ, к сожалению, по не зависящим от меня причинам реализовываться не будет. Реализовать это чисто программно, через ADOTable, я могу, но скорость, господа !!.. Да и хотелось бы, чтобы этим занимались службы самого сервера, что, без сомнения, было бы гораздо кульней.
Очень надеюсь на вашу помощь.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038166
cool_lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут придется написать программу, есть у вас программисты?
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038182
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как Вам сказать... Я стараюсь им быть... Не могу похвалиться, что достиг в этом сияющих высот (вообще на Делфе с переменным успехом программирую менее года), но все-таки что-то иногда получается.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038186
cool_lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а я то думал мы с вами коллеги, ну так зачем всякие глупые вопросы о dts пакетах на delphi форуме задавать, об этом наверно на sql-форуме знают, а вообще не знаю - я ламер
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038231
spice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А BOL читать не пробовали?
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038250
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for spice:
про exec master..xp_cmdshell 'dtsrun....' я знаю, если Вы намекаете на этот путь, но нет ли другого способа? Я понимаю, что можно пойти в Москву через Магадан, попутно заглянув на мыс Доброй Надежды, но все же? Поверьте, есть причины, по которым мне не очень хочется рисовать SP, и не потому, что не знаю как...
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038282
spice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если невозможно этот процесс повесить на шедуллер, советую прочитать статью "Executing a DTS Package" в BOL. Почему не нравится SP, код будет минимальный.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038286
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После установки MS SQL Server Client Tools на клиенте можно оперировать COM-объектом DTSPackage.

Хотите - новые создавайте, хотите - существующие на сервере запускайте.

А вот "умеет" ли Delphi работать с COM-объектами, вам наверное виднее
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038298
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for Glory:
благодарю за совет, уважаемый Glory, но дело в том, что мою программу предполагается устанавливать на машинах узкоспециализированных непродвинутых пользователей, коим, сами понимаете, клиентская часть особо не нужна. Да и машины такие, что ой ...

for spice:
благодарю за совет, уважаемый spice, статью обязательно прочту. А насчет SP.. Прямого доступа к серверу-то у меня нет... Как думаете, вам понравится программировать через посредника, которого к тому же вам совсем не хочется нагружать? С бумажками бегать туда-сюда... Вот и хочется как-нить эдак, чтоб без беготни...
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038303
spice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А слабо для этих целей использовать ADOStoredProc?
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038318
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spice, дык чтоб использовать ADOStoredProc, надо иметь уже готовую SP на сервере, не так ли? А мне, чтоб ее написать, придется раз 10 сбегать с текстом процедуры на бумаге к, так сказать, посреднику, чтобы он ее набил, а это время-деньги и, самое главное, нервы посредника, потому как если он станет недоволен, то хрен я вообще чего напишу...
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038319
cool_lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>мою программу предполагается устанавливать на машинах >узкоспециализированных непродвинутых пользователей

>Прямого доступа к серверу-то у меня нет

>программировать через посредника

>есть причины, по которым мне не очень хочется рисовать SP

какие-то странные условия программирования, может опишешь по-подробнее: ОС сервера, его роль в домене, с какими правами заходишь на сервер, с какими на SQL, примерный конфиг ПК клиентов,
несколько вариантов решения проблемы уже предложили - не может такого быть, чтобы ничего не подошло, какие ошибки выскакивают при выполнении
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038325
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>какие-то странные условия программирования...

Э-э-х-х, в этом-то все и дело. Спасибо за участие, парни, простите, но некогда писать развернутый ответ - домой пора (я типа на работе), завтра встретимся. Удачи.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038327
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Client Tools это просто наиболее простой способ.

Путем экспериментов и анализа системного реестра можно выяснить какие библиотеки отвечают собственно за DTSPackage и вручную перенести и зарегистрировать их на клиентской машине.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038340
spice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну ADOCommand-то ты хоть можешь оформить???
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038355
Фотография nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>на Делфе с переменным успехом программирую менее года
>Прямого доступа к серверу-то у меня нет
С переменным это хорошо... А до этого на чем писали?
Я бы тоже много раз подумал прежде чем полные права на сервере раздавать, никакой админ не управится.
А про запуск DTS-пакета где-то на форуме подробный пример был.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038407
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго утра, господа!
вот свежий прикол:
написал SP
exec master..xp_cmdshell 'dtsrun /Sserver /Uuser /Ppassword
/Npackage' (естественно, с реальными параметрами), все честь по чести, в ответ:
error provider 18452 Login failed for user 'sa' (сухой щелчок бойка :)). Не подскажете, как бороться?

for Nike: до этого писал в основном на различных ассемблерах (по образованию я инженер-системотехник, так что сам понимаешь...)

for Glory: может быть, это и простой способ, но у меня цейтнот - если до пятницы не управлюсь, раздастся одиночный выстрел.. :)

for spice: если я правильно понял - это принудительно создавать SP на сервере? :[] А тогда не все ли равно? По любому у меня админ взвоет, если я что-нить без его ведома на серваке делать буду...
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038408
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда шедуллишь DTS Package, в job можно нажать на кнопочку generate sql script - получится что-то типа "sp_runJob <jobname>" (в стихах не помню), правда владелец job должен быть тот user, который ее и будет запускать через ADOCommand. У меня все так и работает - сам пользователь запускает задание (job то бишь) которое выполняет DTS Package. Недостаток - как узнать о том, что задание выполнено. Но это где-то я видел в форуме.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038413
cool_lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> error provider 18452 Login failed for user 'sa' (сухой щелчок бойка :)). Не подскажете, как бороться?

если ты ответы на такие вопросы пытаешься найти на форуме, значит админ твой молодой, да неопытный, ты спроси у него стоят ли необходимые сервиспаки на сервере и на SQL, если он давно не обновлял - глюки у тебя будут гарантированно, а программку для лечения этой ошибки выслал тебе по почте, с ее помощью ты сможешь выполнять пакеты от имени SA и получишь права администратора на сервере, если хочешь вышлю исходники на ассемблере, в нем то ты нормально разбираешься. удачи
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038426
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, а если я сделаю линкованный сервер (ну там sp_addlinkedserver.. и т.д. ), это вылечит?
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038485
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for Alex:
надо ли переносить sp_start_job из msdb в ту базу, на которой лежит dts - пакет? У меня sp_start_job только при uses msdb работает... И если не трудно, подкинь, плз, CommandText для ADOCommand для запуска этого jobа...
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038555
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, ну это просто слезы.. :``(((
простейшая SP:
exec master..xp_cmdshell 'dtsrun /STitan /E /N copy_plan' на сервере - без вопросов, из программы - "Executing permission denied on object xp_cmdshell, database 'master', owner 'dbo' ..." Использую ADOStoredProc, конечно.. Что бы это значило, а?
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038567
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Executing permission denied on object xp_cmdshell, database 'master', owner 'dbo'

Наверняка ведь пользователь, запускающий это, не является членом роли sysadmins. A только они могут это сделать напрямую. Все другие пользователи могут запускать xp_cmdshell через другую пользовательскую процедуру. При этом, запущенные таким образом внешние программы (dtsrun в данном случае), будут выполнятся в контексте безопасности SQL Server Agent proxy account, а не учетной записи, под которой запущен MSSQL Server.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038570
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за раз'яснение, частично прояснилось..

>... Все другие пользователи могут запускать xp_cmdshell через другую пользовательскую процедуру...
А через какую именно не подскажете?
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038576
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через любую, которая будет содержать явный вызов xp_cmdshell и на которую вы дадите пользователю право на запуск
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038654
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утро доброе!
Так в этом и дело, уважаемый Glory, что вышеуказанная строка содержится именно в пользовательской SP, доступ на которую моей программе дан!.. Может быть, дело в ключе /E? Может, надо строго /Usa /Ppassword? А если пароль на sa отсутствует (ну вот такая дикая ситуация..)?
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038658
spice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если пароль на sa присутствует, можно его явно в xp_cmdshell прописать?
Попробуй зайти на форум по SQL, набрать в строке поиска xp_cmdshell (проблема не в Дельфях). Не может быть, чтобы никто с этим не сталкивался.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038672
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, по ходу работы возникают новые проблемы. Я нашел, что для того, чтобы мне, не сисадмину, запустить cmdshell, надо или в Server Agent делать job и давать мне на него права (я правильно понял?), или использовать xp_sqlagent_proxy_account, так? Но ни то, ни другое мне сделать не дадут!... Как быть? Может, есть другой способ запустить пакет, кроме как через cmdshell (похоже, что-то моему админу в нем не нравится)?
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038685
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте сначала

Имеем пользователя - ни sysadmin, ни dbo
Задача - позвволить ему запускать внешнее приложение на сервере из T-SQL.

1. Для запуска внешнего приложения будем использовать xp_cmdshell

2. Т.к. такой пользователь не имеет прав непосредственно запускать xp_cmdshell, то создаем обыкновенную пользовательскую процедуру, вроде такого

create procedure dbo.sp_startmyapp
as
exec master..xp_cmdshell 'dir с:\*.*'
go

3. Даем пользователю право на запуск dbo.sp_startmyapp

4. Т.к. наш пользователь не sysadmin, то запускаемое приложение (в нашем примере 'dir *.*') будет работать в контексте безопасности SQL Server Agent proxy account.
Этот аккаунт задается в EM в свойствах Server Agent-а или с помощью xp_sqlagent_proxy_account.
!NB! Данная процедура не будет выдавать никаких ошибок, если имя/пароль аккаунта заданы неверно, например, с включенным CapsLock.

5. При выполнении всех шагов и если SQL Server Agent proxy account имеет нужные права на с:\, то пользователь, запуская наш пример,
exec dbo.sp_startmyapp
должен получить содержимое директории с:\

6. Все дальнейшие ошибки есть уже ошибки запущенного приложения

У меня все это работает
MS SQL2000SP2, Win2000 AdvServ SP2
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038800
pau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pau
Гость
//Переключаемся на системную БД
Dm1.ManufactureCommand.CommandText:='use msdb';
Dm1.ManufactureCommand.Execute;
//Запускаем задание
Dm1.ManufactureCommand.CommandText:='EXEC sp_start_job @job_name = "Manufacture"';
Dm1.ManufactureCommand.Execute;
//Переключаемся в пользовательскую БД
Dm1.ManufactureCommand.CommandText:='use Calculation';
Dm1.ManufactureCommand.Execute;
//Сообщаем пользователю

Кстати, о птичках про всякие "Login Failed" -
Permissions
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.

When sp_start_job is invoked by a user who is a member of the sysadmin fixed server role, sp_start_job will be executed under the security context in which the SQL Server service is running. When the user is not a member of the sysadmin fixed server role, sp_start_job will impersonate the SQL Server Agent proxy account, which is specified using xp_sqlagent_proxy_account. If the proxy account is not available, sp_start_job will fail. This is only true for Microsoft® Windows NT® 4.0 and Windows 2000. On Windows 9.x, there is no impersonation and sp_start_job is always executed under the security context of the Windows 9.x user who started SQL Server.

Удачи, рад помочь.
...
Рейтинг: 0 / 0
Как программно запустить dts-пакет с клиентской машины?
    #32038935
Фотография manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро, Господа!
Огромное спасибо всем за советы, они мне очень помогли!
Проблема решилась сама собой, так что тему, наверное, можно закрывать. Еще раз благодарю всех, кто принимал участие в обсуждении. Был рад с вами общаться. Удачи всем!
P.S. "О, сколько нам открытий чудных готовит программизма дух..."
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как программно запустить dts-пакет с клиентской машины?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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