|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые Коллеги! Помогите, плз, решить проблему. Проблема вкратце такова. Есть dbf-таблицы, распологающиеся на сетевом диске, с которыми работает одна часть пользователей. Есть база на SQL Server (2000), которая содержит копии этих dbf-таблиц, с которыми работает другая часть пользователей посредством моей программы (ну, надо так..). В dbf-таблицы, кот. на сетевом диске, периодически вносятся изменения (бывает, что и несколько раз на день). На сервере существует dts-пакет на обновление этих таблиц, который запускается ежедневно в 12 часов ночи. Но, сами понимаете, такая частота меня не устраивает. Есть ли какой-нить программый способ запуска этого пакета? Коллективным разумом найденное решение через NMMsg/NMMSGServ, к сожалению, по не зависящим от меня причинам реализовываться не будет. Реализовать это чисто программно, через ADOTable, я могу, но скорость, господа !!.. Да и хотелось бы, чтобы этим занимались службы самого сервера, что, без сомнения, было бы гораздо кульней. Очень надеюсь на вашу помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 09:50 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
тут придется написать программу, есть у вас программисты? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 10:11 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Ну как Вам сказать... Я стараюсь им быть... Не могу похвалиться, что достиг в этом сияющих высот (вообще на Делфе с переменным успехом программирую менее года), но все-таки что-то иногда получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 11:29 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
а я то думал мы с вами коллеги, ну так зачем всякие глупые вопросы о dts пакетах на delphi форуме задавать, об этом наверно на sql-форуме знают, а вообще не знаю - я ламер ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 11:36 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
А BOL читать не пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 13:27 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
for spice: про exec master..xp_cmdshell 'dtsrun....' я знаю, если Вы намекаете на этот путь, но нет ли другого способа? Я понимаю, что можно пойти в Москву через Магадан, попутно заглянув на мыс Доброй Надежды, но все же? Поверьте, есть причины, по которым мне не очень хочется рисовать SP, и не потому, что не знаю как... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 14:18 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Если невозможно этот процесс повесить на шедуллер, советую прочитать статью "Executing a DTS Package" в BOL. Почему не нравится SP, код будет минимальный. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 15:55 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
После установки MS SQL Server Client Tools на клиенте можно оперировать COM-объектом DTSPackage. Хотите - новые создавайте, хотите - существующие на сервере запускайте. А вот "умеет" ли Delphi работать с COM-объектами, вам наверное виднее ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 16:06 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
for Glory: благодарю за совет, уважаемый Glory, но дело в том, что мою программу предполагается устанавливать на машинах узкоспециализированных непродвинутых пользователей, коим, сами понимаете, клиентская часть особо не нужна. Да и машины такие, что ой ... for spice: благодарю за совет, уважаемый spice, статью обязательно прочту. А насчет SP.. Прямого доступа к серверу-то у меня нет... Как думаете, вам понравится программировать через посредника, которого к тому же вам совсем не хочется нагружать? С бумажками бегать туда-сюда... Вот и хочется как-нить эдак, чтоб без беготни... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 16:49 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
А слабо для этих целей использовать ADOStoredProc? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 16:55 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
spice, дык чтоб использовать ADOStoredProc, надо иметь уже готовую SP на сервере, не так ли? А мне, чтоб ее написать, придется раз 10 сбегать с текстом процедуры на бумаге к, так сказать, посреднику, чтобы он ее набил, а это время-деньги и, самое главное, нервы посредника, потому как если он станет недоволен, то хрен я вообще чего напишу... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 17:32 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
>мою программу предполагается устанавливать на машинах >узкоспециализированных непродвинутых пользователей >Прямого доступа к серверу-то у меня нет >программировать через посредника >есть причины, по которым мне не очень хочется рисовать SP какие-то странные условия программирования, может опишешь по-подробнее: ОС сервера, его роль в домене, с какими правами заходишь на сервер, с какими на SQL, примерный конфиг ПК клиентов, несколько вариантов решения проблемы уже предложили - не может такого быть, чтобы ничего не подошло, какие ошибки выскакивают при выполнении ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 17:34 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
>какие-то странные условия программирования... Э-э-х-х, в этом-то все и дело. Спасибо за участие, парни, простите, но некогда писать развернутый ответ - домой пора (я типа на работе), завтра встретимся. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 17:46 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Client Tools это просто наиболее простой способ. Путем экспериментов и анализа системного реестра можно выяснить какие библиотеки отвечают собственно за DTSPackage и вручную перенести и зарегистрировать их на клиентской машине. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 17:49 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Ну ADOCommand-то ты хоть можешь оформить??? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 18:21 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
>на Делфе с переменным успехом программирую менее года >Прямого доступа к серверу-то у меня нет С переменным это хорошо... А до этого на чем писали? Я бы тоже много раз подумал прежде чем полные права на сервере раздавать, никакой админ не управится. А про запуск DTS-пакета где-то на форуме подробный пример был. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2002, 19:02 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Доброго утра, господа! вот свежий прикол: написал 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 на сервере? :[] А тогда не все ли равно? По любому у меня админ взвоет, если я что-нить без его ведома на серваке делать буду... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 09:57 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Когда шедуллишь DTS Package, в job можно нажать на кнопочку generate sql script - получится что-то типа "sp_runJob <jobname>" (в стихах не помню), правда владелец job должен быть тот user, который ее и будет запускать через ADOCommand. У меня все так и работает - сам пользователь запускает задание (job то бишь) которое выполняет DTS Package. Недостаток - как узнать о том, что задание выполнено. Но это где-то я видел в форуме. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 10:04 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
> error provider 18452 Login failed for user 'sa' (сухой щелчок бойка :)). Не подскажете, как бороться? если ты ответы на такие вопросы пытаешься найти на форуме, значит админ твой молодой, да неопытный, ты спроси у него стоят ли необходимые сервиспаки на сервере и на SQL, если он давно не обновлял - глюки у тебя будут гарантированно, а программку для лечения этой ошибки выслал тебе по почте, с ее помощью ты сможешь выполнять пакеты от имени SA и получишь права администратора на сервере, если хочешь вышлю исходники на ассемблере, в нем то ты нормально разбираешься. удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 10:27 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Господа, а если я сделаю линкованный сервер (ну там sp_addlinkedserver.. и т.д. ), это вылечит? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 11:22 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
for Alex: надо ли переносить sp_start_job из msdb в ту базу, на которой лежит dts - пакет? У меня sp_start_job только при uses msdb работает... И если не трудно, подкинь, плз, CommandText для ADOCommand для запуска этого jobа... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 13:50 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Господа, ну это просто слезы.. :``((( простейшая SP: exec master..xp_cmdshell 'dtsrun /STitan /E /N copy_plan' на сервере - без вопросов, из программы - "Executing permission denied on object xp_cmdshell, database 'master', owner 'dbo' ..." Использую ADOStoredProc, конечно.. Что бы это значило, а? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 16:56 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
"Executing permission denied on object xp_cmdshell, database 'master', owner 'dbo' Наверняка ведь пользователь, запускающий это, не является членом роли sysadmins. A только они могут это сделать напрямую. Все другие пользователи могут запускать xp_cmdshell через другую пользовательскую процедуру. При этом, запущенные таким образом внешние программы (dtsrun в данном случае), будут выполнятся в контексте безопасности SQL Server Agent proxy account, а не учетной записи, под которой запущен MSSQL Server. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 17:22 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Спасибо за раз'яснение, частично прояснилось.. >... Все другие пользователи могут запускать xp_cmdshell через другую пользовательскую процедуру... А через какую именно не подскажете? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 17:28 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Через любую, которая будет содержать явный вызов xp_cmdshell и на которую вы дадите пользователю право на запуск ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 17:41 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Утро доброе! Так в этом и дело, уважаемый Glory, что вышеуказанная строка содержится именно в пользовательской SP, доступ на которую моей программе дан!.. Может быть, дело в ключе /E? Может, надо строго /Usa /Ppassword? А если пароль на sa отсутствует (ну вот такая дикая ситуация..)? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 07:43 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
А если пароль на sa присутствует, можно его явно в xp_cmdshell прописать? Попробуй зайти на форум по SQL, набрать в строке поиска xp_cmdshell (проблема не в Дельфях). Не может быть, чтобы никто с этим не сталкивался. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 08:49 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Господа, по ходу работы возникают новые проблемы. Я нашел, что для того, чтобы мне, не сисадмину, запустить cmdshell, надо или в Server Agent делать job и давать мне на него права (я правильно понял?), или использовать xp_sqlagent_proxy_account, так? Но ни то, ни другое мне сделать не дадут!... Как быть? Может, есть другой способ запустить пакет, кроме как через cmdshell (похоже, что-то моему админу в нем не нравится)? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 10:19 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Давайте сначала Имеем пользователя - ни 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 10:55 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
//Переключаемся на системную БД 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. Удачи, рад помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 15:14 |
|
Как программно запустить dts-пакет с клиентской машины?
|
|||
---|---|---|---|
#18+
Доброе утро, Господа! Огромное спасибо всем за советы, они мне очень помогли! Проблема решилась сама собой, так что тему, наверное, можно закрывать. Еще раз благодарю всех, кто принимал участие в обсуждении. Был рад с вами общаться. Удачи всем! P.S. "О, сколько нам открытий чудных готовит программизма дух..." ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2002, 08:33 |
|
|
start [/forum/topic.php?all=1&fid=58&tid=2119927]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 239ms |
total: | 501ms |
0 / 0 |