2013-02-19 5 views
5

В SQL Server 2008 я пытаюсь Вставить INSERT CSV размером около 1 ГБ. Поскольку я делаю это, он создает огромный файл tempdb.mdf. Прямо сейчас, это 35 ГБ для этого 1GB CSV-файла.Можно ли удалить файл tempdb.mdf вручную?

Я пробовал различные решения, которые Microsoft provides, и они, похоже, не работают.

Я думаю, что самый простой способ «сжать» файл tempdb.mdf в непроизводственной системе - просто удалить его, пока служба SQL не работает.

Это вызовет проблемы? Если да, то какие проблемы можно ожидать?

редактирует

1) Вот строки из CSV (он имеет около 4М строк):

PS D:\> gc .\map.items.csv | select -last 1 
40747646;jdbc:patent/8046822;8683;other/patent;12/31/69 16:00:00.00 PST;E6 E6 80 6D FD 6D 0B 5F 44 66 4E 1C 35 DE 46 BB 19 36 3C 31 37 67 4D 1D DF 58 A5 99 A8 A0 3B 52;crawled;full_patent_db2;Electronic apparatus, function selection method of electronic apparatus and management system of electronic apparatus;Sony Corporation;Tokyo;03;G06F21/00 

2) Вот DB опишите таблицу данные (ничего экзотического, и нет триггеров): https://gist.github.com/mlissner/4cd13db5a1bbae91dd50

3) У меня есть база данных настроена на модель простого восстановления.

+1

Показать структуру таблицы (включая индексы), общий формат вашего CSV-файла (несколько строк в порядке) и количество строк в файле. Также сообщите нам, есть ли в таблице, в которой вы пытаетесь вставить большую часть вставки, есть триггеры, если у вас есть такие экзотические функции, как CDC и отслеживание изменений, репликация и т. Д. –

+1

Разумеется, удаление во время автономной работы не сильно облегчит процесс перезагрузки при запуске? – chrisb

+0

@chrisb Вы пробовали это? Вы порекомендовали бы его попробовать на производственном экземпляре? Не хотите ли вы добровольно представить свой экземпляр для этого теста? –

ответ

1

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

Вид движения вуду, да, но файл был автоматически воссоздан и никаких проблем не возникло.

4

Нет, вы не можете удалить файл mdf tempdb.

Если вам нужно снова сжать файл, перезапустите SQL Server, а затем запустите DBCC SHRINKFILE(). Это поддерживаемая операция, в отличие от любого из этих «удалить файл mdf, пока SQL Server не смотрит» voodoo.

Возможно, вам удастся оптимизировать объемную операцию, поэтому tempdb не так сильно попал в место, но невозможно рассказать с подробными данными о том, что представляет собой настоящая проблема.

+0

Спасибо. См. Выше для редактирования. – mlissner

0

Можете ли вы использовать BCP? Это рекомендуемый способ загрузки больших плоских файлов на SQL Server.

В качестве альтернативы вы можете перейти от полной модели восстановления к простой модели восстановления? Это уменьшит количество транзакций, выполняемых сервером.

+0

MSDN фактически [говорит обратное] (http://msdn.microsoft.com/en-us/library/ms190421 (v = sql.105).aspx): «Где возможно, используйте оператор Transact-SQL для массового импорта данных в SQL Server, потому что Transact-SQL быстрее, чем bcp». – Pondlife

+0

Достаточно честный. Я всегда понимал, что BCP - рекомендуемый подход. По теме: есть статья MSDN [ссылка] (http://msdn.microsoft.com/en-us/library/ms190422 (v = sql.105) .aspx) http://msdn.microsoft.com/ru -us/library/ms190422 (v = sql.105) .aspx, что кажется актуальным. –

 Смежные вопросы

  • Нет связанных вопросов^_^