Импорт большого листа Excel в SQL

Ежемесячно мне выдаются электронные таблицы, которые мне нужно импортировать в SQL. Что я обычно делаю, так это использую мастер импорта и экспорта SQL Server и импортирую во временную таблицу, где затем вызываю хранимые процедуры для завершения процесса импорта. Все это отлично работает на моем производственном сервере и отлично работало на моем компьютере для разработки до прошлой недели, когда я выполнил чистую установку Windows 10. Однако теперь я все еще могу импортировать меньшие электронные таблицы, содержащие всего несколько тысяч строк, если я попытаюсь импортировать данные из электронных таблиц, содержащих более 500 000 строк данных, это займет пару минут как на «Настройка исходного соединения», так и на «Настройка целевого соединения», а затем, похоже, зависнет на «Копировании». Я проверил журналы и запустил SQL Profiler и ничего не вижу в отношении сбоев. Я позволил процессу работать более часа и, в конце концов, убил его, просмотрел временную таблицу и показал, что записи не были импортированы. Формат данных хорош, так как я могу без проблем импортировать их на свой рабочий сервер.

Теперь вот кикер... Я могу импортировать эти большие листы на свой сервер разработки, только если у меня одновременно открыта электронная таблица в Excel (обратите внимание, что для меньших электронных таблиц мне не нужно открывать электронную таблицу импортировать). Когда электронная таблица открыта, процесс импорта работает, но очень медленно и неэффективно.

Любые мысли о том, почему импорт работает только с небольшими электронными таблицами, если электронная таблица также не открывается в Excel?

Я использую SQL Server 2008 R2 в Windows 10 Pro и Office 2016. У меня также установлен AccessDatabaseEngine - 2007.

EDIT: я создал пакет SSIS и запустил его, как было предложено, и все заработало, как ожидалось. Чтобы сделать ситуацию еще более странной, я прошел через мастер импорта/экспорта и выбрал «Выполнить немедленно» и создал SSIS, и все снова заработало, как и ожидалось. Я снова прошел через мастер, но выбрал «Немедленно запустить» (не создавал SSIS), и копирование по-прежнему зависает. Я попытался запустить его еще 4 раза, и каждый раз он работает, если выбрать «Немедленно запустить» и «Создать SSIS», но каждый раз терпит неудачу при выборе только «Немедленно запустить» (без создания SSIS). Честно говоря, я не понимаю, как это может произойти, и я открыт для других предложений.


person aantiix    schedule 15.01.2016    source источник
comment
Вы смотрели на использование памяти?   -  person Fuzzy    schedule 15.01.2016
comment
Используете ли вы SSIS для процесса ETL?   -  person Mike Zalansky    schedule 16.01.2016
comment
@KamranFarzami Да, использование моего ЦП, памяти и диска составляет 30% или ниже и остается на этом уровне во время попытки импорта.   -  person aantiix    schedule 16.01.2016
comment
@MikeZalansky Сейчас я просто пытаюсь выполнить импорт вручную с помощью мастера импорта и экспорта SQL Server, а не SSIS.   -  person aantiix    schedule 16.01.2016
comment
Вместо запуска импорта прямо из мастера импорта/экспорта сохраните пакет dtsx (SSIS), созданный мастером, и откройте его в Visual Studio; вы можете наблюдать за результатами выполнения по мере их выполнения. Возможно, вы найдете там свой ответ.   -  person Mike Zalansky    schedule 16.01.2016
comment
@MikeZalansky Я создал пакет SSIS и запустил его, как вы предложили, и обновил свой исходный пост, указав результаты.   -  person aantiix    schedule 16.01.2016
comment
Попробуйте создать пакет SSIS в Data Tool (Visual Studio)   -  person FLICKER    schedule 16.01.2016
comment
@MohammadSanati, если вы прочитаете исходный пост и комментарии, вы увидите, что у меня нет проблем при использовании SSIS.   -  person aantiix    schedule 16.01.2016
comment
@aantiix, насколько я понимаю, вы используете мастер импорта/экспорта для создания пакета SSIS. Я полагаю, что вы используете Data Toll для создания пакета вместо использования мастера. Извините, если это не так, я ошибаюсь.   -  person FLICKER    schedule 19.01.2016
comment
@MohammadSanati Мне также нужна возможность импорта с помощью мастера. Я могу выполнить свою текущую задачу, создав пакет SSIS, но бывают случаи, когда предпочтительнее использовать мастер импорта/экспорта. Я хотел бы хотя бы понять, почему у меня такие проблемы.   -  person aantiix    schedule 19.01.2016


Ответы (1)


Наконец-то нашел решение этой проблемы!

Поскольку я мог импортировать открытые листы, это навело меня на мысль, что мои проблемы связаны с медленным соединением между SQL и Excel, поэтому я начал искать в этом направлении. Я нашел несколько сообщений на других сайтах, в которых говорилось о медленных соединениях ODBC с Windows 8 и 10. На одном сайте упоминалось о переключении драйвера на "SQL Native Client". Я выбирал место назначения как "Собственный клиент SQL Server 10.0", затем переключился на "Собственный клиент SQL Server", как было предложено, и теперь все работает, как и ожидалось.

Я вижу эти два драйвера, указанные как:

Driver                          Version
------------------------------------------------
SQL Native Client               2005.90.3042.00
SQL Server Native Client 10.0   2009.100.6000.34

Я предполагаю, что более старый (2005 г.) SQL Native Client работает потому, что импорт/экспорт использует AccessDatabaseEngine - 2007.

ПРИМЕЧАНИЕ. При использовании Windows 7 или 2008 Server у меня не было проблем с импортом больших электронных таблиц с помощью (2009) SQL Server Native Client 10.0. Кажется, это проблема только с более поздними версиями Windows. Я вижу, что несколько других сайтов упоминали о проблемах с производительностью при использовании TCP для своих ODBC-соединений в Windows 10, и вместо этого они увидели заметное улучшение при использовании именованных каналов. Поскольку мой рабочий сервер использует TCP, я не вносил изменения в именованные каналы на своем компьютере для разработки, поэтому я не могу это подтвердить, но хотел бы упомянуть об этом на случай, если кто-то наткнется на этот пост с этой проблемой.

person aantiix    schedule 27.01.2016