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

Откуда:
Сообщений: 7
Задача следующая: организовать периодическую выгрузку из SQL 2008 R2 в формате dbf.
Долго не получалось научить sql взаимодействовать с файлами формата dbf, но в конце концов вышло.
Файл, с которым нужно работать, находится в сети.
Организовал связанный сервер следующим образом:

EXEC sp_addlinkedserver 
        @server = 'dbf_data', 
        @provider = 'Microsoft.ACE.OLEDB.12.0', 
	@srvproduct = 'Microsoft Jet',
        @datasrc='\\путь',
	@provstr='dBase 5.0'
EXEC sp_addlinkedsrvlogin 'dbf_data', 'false', 'sa', 'admin', ''


Все замечательно работает, но только в том случае, если запускать запрос из самого SQL (то есть, "Создать запрос" - написал запрос - запустил на выполнение). Но так как нужно делать это периодически, то пришлось организовать задание, где на первом шаге в базе формируется таблица, которую нужно выгружать, а на втором - создается таблица на месте назначения и в нее заливаются данные из сформированной на первом шаге таблицы.

И вот тут возникает проблема. Второй шаг категорически отказывается выполняться. Выдает следующую ошибку:

SQL_SERVER
Выполняется от имени пользователя: NT AUTHORITY\NETWORK SERVICE. Не удалось проинициализировать объект источника данных поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "dbf_data". [SQLSTATE 42000] (Ошибка 7303) Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "dbf_data" вернул сообщение "'\\путь' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.". [SQLSTATE 01000] (Ошибка 7412). Шаг завершился с ошибкой.,00:00:00,16,7412,,,,0


Запрос:
execute ('drop table NameTabl') at dbf_data
execute ('create table NameTabl(поля)') at dbf_data
insert into [dbf_data]...[NameTabl]
select * from TABL


Насколько я понимаю, путь то тут ни при чем, так как этот же код выполняется самим SQL без ошибок, а вот при организации задания выполняться не хочет.
Единственное, что могу предположить - то, что задание не хочет работать с сетью.

Вероятно, я плохо искал и потому ничего не нашел, но я плохо представляю, что вообще нужно гуглить. Подскажите пожалуйста, как я могу решить эту проблему?

P.S. Для доступа к этой сетевой папке нужно использовать логин и пароль, по всякому вертел sp_addlinkedsrvlogin, но добился только того, что работать с папкой отказался и сам SQL SERVER, выдавая ошибку о невозможности авторизации.
26 мар 14, 13:09    [15788784]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Glory
Member

Откуда:
Сообщений: 104760
Archi7
путь то тут ни при чем, так как этот же код выполняется самим SQL без ошибок, а вот при организации задания выполняться не хочет.

Обращение к внешним ресурсам сильно зависит от логина, под которм сделано соединение
Вы вот полд каким логином выполняете свои запросы ?
26 мар 14, 13:13    [15788809]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Archi7
Member

Откуда:
Сообщений: 7
Glory
Archi7
путь то тут ни при чем, так как этот же код выполняется самим SQL без ошибок, а вот при организации задания выполняться не хочет.

Обращение к внешним ресурсам сильно зависит от логина, под которм сделано соединение
Вы вот полд каким логином выполняете свои запросы ?


При запуске SQL Server Managment Studio вход осуществляется с помощью проверки подлинности Windows. И если я правильно понимаю, то запрос выполняется от системного пользователя, т. е. под кем я сижу.

А задание выполняется походу дела от имени NT AUTHORITY\NETWORK SERVICE. По крайней мере, в логах написано так.
Напрашивается вывод - запустить задание от имени нужного пользователя, но вот только у меня нет никаких догадок, как это можно было бы реализовать.
26 мар 14, 13:37    [15788963]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Glory
Member

Откуда:
Сообщений: 104760
Archi7
Напрашивается вывод - запустить задание от имени нужного пользователя, но вот только у меня нет никаких догадок, как это можно было бы реализовать.

Задание не получится. Потому что задание запускает Агент
А вот для запуска отдельных шагов под разными учетными записями есть SQL Server Agent Proxies
26 мар 14, 13:41    [15788990]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Archi7
Member

Откуда:
Сообщений: 7
Glory
А вот для запуска отдельных шагов под разными учетными записями есть SQL Server Agent Proxies


Так у шага с запросом стоит тип "Сценарий Transact-SQL", а у него поле "Выполнять как:" вообще недоступно.
Или это я не в ту степь пошел?
26 мар 14, 13:56    [15789108]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Glory
Member

Откуда:
Сообщений: 104760
Archi7
а у него поле "Выполнять как:" вообще недоступно.

Если вы не создали ни одного прокси, то с чего оно будет доступным ?
26 мар 14, 13:58    [15789121]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Archi7
Member

Откуда:
Сообщений: 7
Glory
Если вы не создали ни одного прокси, то с чего оно будет доступным ?


Так я же прочитал ваш ответ, погуглил и создал один. Но он только для сценариев ActiveX, Cmd и прочего, а сделать его доступным в T-SQL нельзя. Ну или я просто не знаю как. По крайней мере в мастере учетных записей-посредников в пункте "Активна в следующих системах" пункт T-SQL отсутствует.
26 мар 14, 14:08    [15789202]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Glory
Member

Откуда:
Сообщений: 104760
Archi7
Но он только для сценариев ActiveX, Cmd и прочего, а сделать его доступным в T-SQL нельзя.

Прокси для T-SQL задается в Advanced
26 мар 14, 14:22    [15789284]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Archi7
Member

Откуда:
Сообщений: 7
Glory
Прокси для T-SQL задается в Advanced


Поправьте меня, если ошибаюсь. В Advanced можно выбрать только пользователей БД, разве нет? А пользователи вообще не связаны с учетными записямя-посредниками?
26 мар 14, 15:02    [15789613]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Glory
Member

Откуда:
Сообщений: 104760
Archi7
В Advanced можно выбрать только пользователей БД, разве нет? А пользователи вообще не связаны с учетными записямя-посредниками?

Да.
Прокси для запуска других подстстем, не для TSQL
Это разные вещи
26 мар 14, 15:08    [15789692]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Archi7
Member

Откуда:
Сообщений: 7
Glory
Да.
Прокси для запуска других подстстем, не для TSQL
Это разные вещи


Чтож, спасибо за помощь. Хоть проблема и не решена, зато лучше разобрался в вопросе. Буду общаться с владельцем этой папки по поводу предоставления дополнительных прав.
26 мар 14, 15:37    [15789889]     Ответить | Цитировать Сообщить модератору
 Re: Работа с файлом по сети  [new]
Archi7
Member

Откуда:
Сообщений: 7
Проблему решил, может кому пригодится.

В настройках Агента-SQL задал использование той же учетной записи, с которой был залогинен и с которой проходила авторизация в SQL Server Management Studio. И - вуаля! - задача стала выполнятся от нужного мне имени.
26 мар 14, 16:23    [15790232]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить