2013-02-19 304 views
5

在SQL Server 2008中,我試圖批量插入大小約爲1GB的CSV。正如我這樣做,它創建了一個巨大的tempdb.mdf文件。目前,這個1GB CSV文件的容量爲35GB。手動刪除tempdb.mdf文件是否安全?

我試過了各種解決方案,Microsoft provides,他們似乎沒有工作。

我想在非生產系統上「縮小」tempdb.mdf文件的最簡單方法就是在SQL服務關閉時刪除它。

這是否會導致任何問題?如果是這樣,可以預期哪些問題?

編輯

1)這裏有一排從CSV(它具有約4M行):

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和更改跟蹤,複製等外來功能,請告訴我們。 – 2013-02-19 19:20:59

+1

離線時切記刪除時不會做大量工作,因爲它在啓動時會重置? – chrisb 2013-02-19 19:31:55

+0

@chrisb你試過這個嗎?你會建議在生產實例上嘗試嗎?您是否願意爲此測試自願爲您的生產實例? – 2013-02-19 19:41:12

回答

1

最後,是的,我刪除這個文件是安全的。 SHRINKFILE沒有一貫的工作(不知道爲什麼,可能是基本的東西),並刪除文件完美的工作。

一種伏都教的舉動,是的,但文件被自動重新創建,沒有發生任何問題。

4

不,您不能刪除tempdb mdf文件。

如果需要再次縮小文件,請重新啓動SQL Server,然後運行DBCC SHRINKFILE()。這是一個受支持的操作,不像任何這種「在SQL Server不查找時刪除mdf文件」的voodoo。

您可能能夠優化您的批量操作,因此tempdb在firts的地方並沒有受到如此嚴重的打擊,但不可能告訴詳細的給出實際問題。

+0

謝謝。請參閱上面的編輯。 – mlissner 2013-02-19 20:09:56

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 2013-02-19 19:29:20

+0

夠公平的。我總是將BCP理解爲推薦的方法。關於主題:有一篇MSDN文章[鏈接](http://msdn.microsoft.com/en-us/library/ms190422(v = sql.105).aspx)http://msdn.microsoft.com/zh-cn/ -us/library/ms190422(v = sql.105).aspx似乎相關。 – 2013-02-19 19:42:19

相關問題