2013-02-19 10 views
5

Trong SQL Server 2008, tôi đang cố gắng BULK INSERT một tệp CSV có dung lượng khoảng 1GB. Khi tôi làm như vậy, nó tạo ra một tệp tempdb.mdf lớn. Ngay bây giờ, nó là 35GB cho tệp CSV 1GB này.Có an toàn để xóa tệp tempdb.mdf theo cách thủ công không?

Tôi đã thử các giải pháp khác nhau mà Microsoft provides và dường như chúng không hoạt động.

Tôi nghĩ cách dễ nhất để "thu hẹp" tệp tempdb.mdf trên hệ thống phi sản xuất là chỉ xóa nó trong khi dịch vụ SQL bị hỏng.

Điều đó có gây ra bất kỳ sự cố nào không? Nếu vậy, những loại vấn đề có thể được mong đợi?

Chỉnh sửa

1) Dưới đây là một hàng từ CSV (nó có khoảng 4M hàng):

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) Đây là DB mô tả thông tin bảng (không có gì kỳ lạ, và không có trình kích hoạt): https://gist.github.com/mlissner/4cd13db5a1bbae91dd50

3) Tôi có Cơ sở dữ liệu được đặt thành mô hình Khôi phục đơn giản.

+1

Hiển thị cấu trúc bảng của bạn (bao gồm các chỉ mục), định dạng chung của tệp CSV (một vài hàng là tốt) và số hàng trong tệp. Ngoài ra, hãy cho chúng tôi biết nếu bảng bạn đang cố chèn vào có kích hoạt, nếu bạn có các tính năng kỳ lạ như CDC và theo dõi thay đổi, sao chép, v.v. –

+1

Chắc chắn xóa trong khi ngoại tuyến sẽ không thực hiện được nhiều khi được đặt lại khi khởi động? – chrisb

+0

@chrisb bạn đã thử cái này chưa? Bạn có khuyên bạn nên thử nó trên một ví dụ sản xuất? Bạn có quan tâm đến tình nguyện sản xuất của bạn cho thử nghiệm này? –

Trả lời

1

Cuối cùng, có, tôi đã an toàn khi xóa tệp này. SHRINKFILE đã không hoạt động liên tục (không biết tại sao, có thể là một cái gì đó cơ bản), và xóa các tập tin làm việc hoàn hảo.

Loại di chuyển voodoo, vâng, nhưng tệp được tự động tạo lại và không có sự cố nào xảy ra.

4

Không, bạn không thể xóa tệp tempdb mdf.

Nếu bạn cần thu nhỏ lại tệp, hãy khởi động lại SQL Server, rồi chạy DBCC SHRINKFILE(). Đây là một hoạt động được hỗ trợ, không giống như bất kỳ điều này "xóa một tập tin mdf trong khi SQL Server không tìm kiếm" voodoo.

Bạn có thể tối ưu hóa hoạt động hàng loạt của mình để tempdb không bị ảnh hưởng nặng nề ở nơi khó khăn, nhưng không thể nói chi tiết về vấn đề thực tế là gì.

+0

Cảm ơn. Xem ở trên để chỉnh sửa. – mlissner

0

Bạn có thể sử dụng BCP không? Đó là một cách được khuyến nghị để tải các tệp phẳng lớn vào SQL Server.

Hoặc bạn có thể chuyển từ mô hình khôi phục đầy đủ sang mô hình khôi phục đơn giản không? Điều đó sẽ làm giảm số lượng đăng nhập giao dịch được thực hiện bởi máy chủ.

+0

MSDN thực sự [nói ngược lại] (http://msdn.microsoft.com/en-us/library/ms190421 (v = sql.105).aspx): "Nếu có thể, hãy sử dụng câu lệnh Transact-SQL để nhập dữ liệu hàng loạt vào SQL Server vì Transact-SQL nhanh hơn bcp". – Pondlife

+0

Đủ công bằng. Tôi luôn hiểu BCP là phương pháp được khuyến nghị. Về chủ đề: có một bài viết MSDN [link] (http://msdn.microsoft.com/en-us/library/ms190422 (v = sql.105) .aspx) http://msdn.microsoft.com/vi -us/library/ms190422 (v = sql.105) .aspx dường như có liên quan. –