Массовая загрузка невозможна, так как не удалось открыть файл «». Код ошибки операционной системы 5 (доступ запрещен.) - PullRequest
2 голосов
/ 09 ноября 2019

Хорошо. Я вижу, что было достаточно много подобных вопросов, которые уже были заданы. Поверхность формы может показаться, что я не должен задавать этот вопрос, потому что многие люди уже пытались ответить на этот вопрос, но я объясню, что мой сценарий отличается:

Прежде всего, мои настройки:

У меня есть два сервера за балансировщиком нагрузки

Сервер A: запуск службы Windows в качестве домена Service_account Сервер B: Запуск службы Windows в качестве домена service_account

и затем эта служба Windowsв конце концов вызывает SQL Server для выполнения хранимой процедуры, которая, конечно, пытается выполнить массовую вставку из файла, находящегося в \ network \ location. Теперь я не знаю, насколько важна его информация, но это сетевое местоположение на самом деле является папкой, общей для сетевой папки на Server B, поэтому в основном \ network \ location = Сервер B: C / что-то.

ТеперьЯ добавил всех в качестве пользователя в эту папку и установил полный доступ к нему, чтобы убедиться, что нет проблем с разрешениями для всех, кто пытается получить доступ к папке.

Теперь я получаю эту ошибку: Cannot bulk load because the file “" could not be opened. Operating system error code 5(Access is denied.).

ТОЛЬКО иногда. Вся проблема здесь в том, что ошибка не всегда воспроизводима. Это происходит только раз в неделю. Я пытался обойти балансировщик нагрузки и делать запросы непосредственно с сервера, и я не нашел никаких проблем. Кроме того, я также заметил, что запросы, сделанные до и после этого неудачного запроса, все успешны. Это означает, что это in a true sense спорадическая ошибка.

После просмотра SO я обнаружил две основные причины, которые традиционно вызывали эту ошибку:

  1. Когда пользователь, работающий с другой службой, действительно не имеет к ней доступапапки. Что не так, потому что буквально каждый имеет доступ к этой папке.

  2. Я сталкивался с некоторыми темами, где люди указывают на потенциальную Kerberos Double Hop как потенциальную проблему. Как объяснено здесь: https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff649317(v=pandp.10)?redirectedfrom=MSDN

Это может быть Kerberos, и я копаю дальше, чтобы увидеть, если это проблема или нет. Но в то же время, скажем, Kerberos double hop является виновником, что объясняет спорадический характер этой ошибки? Если Kerberos отбрасывает учетные данные, то не будет это все время отбрасывать его вместо того, чтобы ТОЛЬКО выбирать несколько раз?

Или также сказать, что ни одна из этих двух причин не является настоящей причиной этой ошибки. Настоящая проблема заключается не в самой ошибке, а в самой спорадической природе ошибки. Может ли это быть что-то в сети, что может вызвать сбой в соединении?

Ответы [ 3 ]

2 голосов
/ 14 ноября 2019

убедитесь, что SQL Server может видеть общий ресурс. Один хороший способ проверить это - использовать xp_cmdshell для создания DIR на общем ресурсе. например,

exec sp_configure 'show advanced' , 1
RECONFIGURE
exec sp_configure 'xp_cmdshell' , 1
RECONFIGURE
exec xp_cmdshell 'dir \\host.domain.local\sharename'

Если это нерегулярно, это может быть связано с проблемой разрешения имен DNS / сети? убедитесь, что вы используете полное доменное имя. Если это связано с Kerberos, вы можете исключить проблему, используя IP-адрес сервера, на котором размещен общий ресурс, например exec xp_cmdshell 'dir \\10.10.10.x\sharename'. При использовании IP-адреса аутентификация должна откатиться до NTLM. В зависимости от настроек безопасности серверов может потребоваться изменить некоторые объекты групповой политики, чтобы это работало.

0 голосов
/ 14 ноября 2019

Мне было бы интересно узнать, что говорит xp_dirtree. Я бы использовал его для корневой папки и установил переменные так, чтобы он "достаточно углубился", чтобы найти вашу папку.

 EXEC master.sys.xp_dirtree ‘filePath1’,0,1;
0 голосов
/ 14 ноября 2019

Другая причина может быть по CONCURRENCY.

Когда файл Excel уже открыт другим пользователем в сети, а затем, когда мы открываем файл, мы получаем сообщение типа «Файл будет в режиме только для чтения». "(не помню правильно).

Точно так же, когда мы читаем файл Excel через приложение, например C# и т. д., и если многие пользователи одновременно используют один и тот же файл, мы получим ту же ошибку.

Наше приложение переводит такую ​​ошибку в "Access is denied...". Поэтому иногда он работает нормально, а иногда выдает ошибку.

Таким образом, вы можете попытаться воспроизвести в CONCURRENT среде.

Сделайте изменения в вашем Excel, как описано в этой ссылке .

...