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

Откуда:
Сообщений: 148
Заполняю dbf-файл с помощью openrowset.
Дальше хочу его перенести ('master..xp_cmdshell ''move ....''').
но пишет ошибку:
The process cannot access the file because it is being used by another process.

подскажите как справиться?
29 сен 06, 14:07    [3202545]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Basill
Member

Откуда:
Сообщений: 29
может, антивирус мешает?
29 сен 06, 14:37    [3202834]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Valushka
Member

Откуда:
Сообщений: 148
нет, не он - отключила, ошибка та же
29 сен 06, 14:41    [3202880]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Valushka
Member

Откуда:
Сообщений: 148
вот openrowset:
set @cmd='
insert OPENROWSET(''MSDASQL'',
''Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB='+@v_path+';
SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=Yes;'',

''SELECT * FROM '+substring(@name_file,1,6)+' '') '
может еще что-то надо прописать?
29 сен 06, 14:43    [3202896]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Попробуйте батч с OPENROWSET оформить в виде хранимки, а вне этой хранимки вызыват master..xp_cmdshell.


Posted via ActualForum NNTP Server 1.3

29 сен 06, 14:47    [3202944]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Valushka
Member

Откуда:
Сообщений: 148
не помогло(
29 сен 06, 14:57    [3203037]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
aleks2
Guest
Valushka
не помогло(


И не поможет, ибо файл держит сам сервер - ты ж туды писал... Сервер его закроет, только вот когда?
29 сен 06, 15:12    [3203157]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Valushka
Member

Откуда:
Сообщений: 148
а как насильно закрыть?
29 сен 06, 15:19    [3203210]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Может попробовать OPENROWSET завернуть в транзакцию?
З.Ы Как вариант, данные в DBF заливать через DTS.


Posted via ActualForum NNTP Server 1.3

29 сен 06, 15:22    [3203242]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Valushka
Member

Откуда:
Сообщений: 148
транзакция не помогла, а использование DTS в данной задаче нецелесобразно.

может еще есть варианты?
29 сен 06, 16:25    [3203750]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Glory
Member

Откуда:
Сообщений: 104751
Valushka
транзакция не помогла, а использование DTS в данной задаче нецелесобразно.

может еще есть варианты?

Это особенность openrowset. После выполнения запроса файл еще некоторое время блокируется. Единственный вариант - циклическое повторении попытки копирования файла с таймаутом
29 сен 06, 16:27    [3203773]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Valushka
Member

Откуда:
Сообщений: 148
спасибо
29 сен 06, 16:33    [3203825]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: копирование файла после openrowset  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
Glory
Это особенность openrowset. После выполнения запроса файл еще некоторое время блокируется. Единственный вариант - циклическое повторении попытки копирования файла с таймаутом

Мне показалось эта особенность присуща и другим случаям.
В частности использую sp_OAxxx(Word.Application) для модификации файла, а затем с помощью openrowset хочу записать файл в базу. Такая же ошибка возникает, т.е. между sp_OAMethod (Application.Quit) и openrowset необходимо вставить задержку.
Что примечательно, чтение файла из базы, изменение Word'ом и запись обратно в базу делаю в транзакции. И если в цикле попыток openrowset не сумеет с первой попытки получить доступ к файлу, то все последующие попытки оканчиваются неудачей, кроме того xact_state() меняется с 1 на -1, со всеми вытекающими. Так что я вынужден интервал ожидания брать с запасом для надёжности. Однако это не самый изящный выход, т.к. несколько сотен пользователей ожидают в это время завершения моей траны.
9 сен 13, 16:48    [14815214]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
Забыл добавить, если кто-то знает, как это решить лучше, подскажите пожалуйста.
Спасибо за внимание.
9 сен 13, 16:52    [14815254]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Glory
Member

Откуда:
Сообщений: 104751
Lithium
если кто-то знает, как это решить лучше,

На дворе 2013 год.
Куча отдельных специализированных средств загрузки и обработки данных есть уже как в составе MSSQL так и у сторонних производителей.

А для хранения файлов и прозрачной правки их специально придумали filestream
9 сен 13, 17:15    [14815425]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
Glory
На дворе 2013 год.
Куча отдельных специализированных средств загрузки и обработки данных есть уже как в составе MSSQL так и у сторонних производителей.

Не сомневаюсь, что Вы правы. Но мне о них неизвестно. Хоть намекните что Вы имеете в виду, или лучше ссылку на пост дайте. Так-то я в гугле искал ответы на свои вопросы, и вот этот пост нашёлся, а другого, с использованием более совершенных технологий не нашлось.

Glory
А для хранения файлов и прозрачной правки их специально придумали filestream

Этот вопрос поднимал и изучал. Есть ряд условий, при которых переходить на эту технологию хранения файлов целесообразно. В частности Microsoft не рекомендует это делать, если средний размер файла менее 1МБ. В моём случае средний размер файла около 100кБ. Решили не переходить пока.
10 сен 13, 08:15    [14817554]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31969
Lithium
Забыл добавить, если кто-то знает, как это решить лучше, подскажите пожалуйста.
Получается, что это Word.Application не отпускает файл?
10 сен 13, 08:48    [14817654]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Glory
Member

Откуда:
Сообщений: 104751
Lithium
Не сомневаюсь, что Вы правы. Но мне о них неизвестно. Хоть намекните что Вы имеете в виду, или лучше ссылку на пост дайте. Так-то я в гугле искал ответы на свои вопросы, и вот этот пост нашёлся, а другого, с использованием более совершенных технологий не нашлось.

Sql Server Integration Service - SSIS

Lithium
Этот вопрос поднимал и изучал. Есть ряд условий, при которых переходить на эту технологию хранения файлов целесообразно. В частности Microsoft не рекомендует это делать, если средний размер файла менее 1МБ. В моём случае средний размер файла около 100кБ. Решили не переходить пока.

Эти рекомендации касаются производительности.
У вас то не вопрос не в производительности, а методах.
10 сен 13, 09:26    [14817825]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
Glory
Эти рекомендации касаются производительности.
У вас то не вопрос не в производительности, а методах.

Производительность никогда не уходила на второй план.

Glory
Sql Server Integration Service - SSIS

Спасибо, похоже это то что нужно. Попытаюсь освоить на необходимо достаточном уровне.
10 сен 13, 12:02    [14818913]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Glory
Member

Откуда:
Сообщений: 104751
Lithium
Glory
Эти рекомендации касаются производительности.
У вас то не вопрос не в производительности, а методах.

Производительность никогда не уходила на второй план.

Вы хотите сказать, что ваш самописный редактор doc файлов будет не медленнее нативных средств ?
С какой скоростью вы редактируете ваши файлы, что сталкнулись с проблемами производительности ?
10 сен 13, 12:09    [14818976]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
Glory
Вы хотите сказать, что ваш самописный редактор doc файлов будет не медленнее нативных средств ?
С какой скоростью вы редактируете ваши файлы, что сталкнулись с проблемами производительности ?

Хочу сказать, что перевод базы на filetable должен быть обоснованным. В документации http://technet.microsoft.com/en-us/library/gg471497.aspx сказано, что
If the following conditions are true, you should consider using FILESTREAM:
- Objects that are being stored are, on average, larger than 1 MB.
- Fast read access is important.
- You are developing applications that use a middle tier for application logic.
For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

этот мой редактор всего лишь крупица, ради него жертвовать быстродействием всей системы нецелесообразно.

alexeyvg
Получается, что это Word.Application не отпускает файл?

По всей видимости. Опытным путём подобрал задержку 2мс, её достаточно чтобы Word.Application закончил свои дела с файлом.
10 сен 13, 13:25    [14819650]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Glory
Member

Откуда:
Сообщений: 104751
Lithium
For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

этот мой редактор всего лишь крупица, ради него жертвовать быстродействием всей системы нецелесообразно.

Вы почему то переводите better streaming performance, как всеобщую производительность
10 сен 13, 13:47    [14819809]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31969
Lithium
alexeyvg
Получается, что это Word.Application не отпускает файл?

По всей видимости. Опытным путём подобрал задержку 2мс, её достаточно чтобы Word.Application закончил свои дела с файлом.
Понятно.

Просто получается, что неважно, какими средствами делать загрузку файла, важно, что пока Word.Application не отпустит файл, его нельзя будет загрузить используя SSIS или что то ещё, или перейдя на filestream.
10 сен 13, 14:32    [14820221]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
Glory, полагаю Вы поняли, что я имею в виду)
Но если всё-таки ошибаюсь, то добавлю что streaming perfomance является одним из факторов, определяющих быстродействие системы. Особенно в версии mssql 2012+, где добавили поддержку output параметров типа stream. И я уже начинаю это использовать.
Да есть и другие подводные камни у filestream, не назову их сейчас, ну вот честно, раз проанализировав что нам это не подходит, не стал запоминать.
10 сен 13, 14:35    [14820247]     Ответить | Цитировать Сообщить модератору
 Re: копирование файла после openrowset  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
alexeyvg
Просто получается, что неважно, какими средствами делать загрузку файла, важно, что пока Word.Application не отпустит файл, его нельзя будет загрузить используя SSIS или что то ещё, или перейдя на filestream.

Да, я об этом тоже подумал. Но тут же подумал, что другой путь может по-другому дожидаться завершения работы COM-объекта. Нужно попробовать.
10 сен 13, 14:42    [14820313]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить