Tôi có quá nhiều tệp dữ liệu thứ cấp (.ndf) được tạo cho tempdb
. Để xóa các tệp thừa, tôi cần làm trống tệp (nội dung sẽ được chuyển sang các tệp khác):
DBCC SHRINKFILE('tempdbfile8', EMPTYFILE);
và sau đó xóa tệp:
ALTER DATABASE tempdb REMOVE FILE tempdbfile8;
Nhưng EMPTYFILE
lệnh trả về lỗi:
DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page.
Msg 2555, Level 16, State 1, Line 2
Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation.
Đừng lo lắng, tôi chỉ cần xác định vị trí của đối tượng đang sử dụng trang này để làm gì đó với nó:
DBCC TRACEON (3604)
DBCC PAGE(2,8,41920) --dbid=2, fileid=8, pageid=41920
Lệnh trả về rất nhiều thông tin, object_id trong số đó. Nhưng:
Metadata: ObjectId = 0
Tôi không biết phải làm gì về nó. Con mèo nào ngăn trang này khỏi bị di chuyển? Làm thế nào để xác định vị trí của đối tượng, quá trình, phiên hoặc bất cứ điều gì? Bất kỳ trợ giúp sẽ được đánh giá cao, nhưng xin lưu ý rằng để lại mọi thứ như nó là hoặc loại bỏ các tập tin khác thay vào đó không phải là một giải pháp hợp lệ cho vấn đề này;).
BIÊN TẬP:
Tôi đang xóa các tệp vì chúng tôi thường tuân theo "thực tiễn tốt nhất" về việc tạo một tệp cho mỗi lõi bộ xử lý (cùng kích thước ban đầu, cùng tốc độ tăng trưởng). Nhưng theo như tôi biết, cho đến khi bạn gặp phải vấn đề tranh chấp, sẽ không có điểm nào để tạo các tệp tempdb bổ sung trên cùng một thiết bị. Trong trường hợp của chúng tôi, điều đó có ý nghĩa, bởi vì chúng tôi đã bật MPIO và thiết bị lưu trữ có thể xử lý 4 đường dẫn. Nhưng có một lỗi và chúng tôi đã kết thúc với tổng số 5 tệp với cpu 6 lõi. Đó là nhiều hơn các đường dẫn MPIO, ít hơn các lõi CPU và nó không phải là một số chẵn. Nó có thể không gây ra bất kỳ vấn đề nào, nhưng có vẻ không đúng :).
Cuối cùng tôi đã có thể làm trống và xóa tệp mà không cần khởi động lại máy chủ bằng cách đặt một trong các cơ sở dữ liệu (mà tôi nghi ngờ gây ra sự cố) sang chế độ người dùng (quay lại ngay lập tức). Nó đã làm việc, nhưng tôi đã gặp may mắn. Điều tôi thực sự muốn, là luôn có thể theo dõi trang này :).
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
Về giải pháp của bạn: nó sẽ hoạt động, nhưng tôi thực sự muốn làm điều này mà không đưa trường hợp xuống.