Saya memiliki terlalu banyak file data sekunder (.ndf) yang dibuat untuk tempdb
. Untuk menghapus file berlebih, saya perlu mengosongkan file (konten akan dipindahkan ke file lain):
DBCC SHRINKFILE('tempdbfile8', EMPTYFILE);
lalu hapus file:
ALTER DATABASE tempdb REMOVE FILE tempdbfile8;
Tetapi EMPTYFILE
perintah mengembalikan kesalahan:
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.
Jangan khawatir, saya hanya perlu mencari objek yang menggunakan halaman ini untuk melakukan sesuatu tentang hal itu:
DBCC TRACEON (3604)
DBCC PAGE(2,8,41920) --dbid=2, fileid=8, pageid=41920
Perintah mengembalikan banyak informasi, object_id di antara mereka. Tapi:
Metadata: ObjectId = 0
Saya tidak tahu harus bagaimana. Kucing apa yang mencegah halaman ini dipindahkan? Bagaimana cara menemukan objek, proses, sesi atau apa pun itu? Bantuan apa pun akan dihargai, tetapi harap dicatat bahwa membiarkan semuanya apa adanya atau menghapus file lain bukan merupakan solusi yang valid untuk masalah ini;).
EDIT:
Saya menghapus file, karena kami biasa mengikuti "praktik terbaik" membuat satu file per inti prosesor (ukuran awal yang sama, tingkat pertumbuhan yang sama). Tapi sejauh yang saya tahu, sampai Anda mengalami masalah pertikaian, tidak ada gunanya membuat file tempdb tambahan pada perangkat yang sama. Dalam kasus kami masuk akal, karena kami telah mengaktifkan MPIO , dan perangkat penyimpanan dapat menangani 4 jalur. Tetapi ada kesalahan, dan kami berakhir dengan total 5 file dengan cpu 6-core. Ini lebih dari jalur MPIO, kurang dari inti CPU, dan itu bukan bilangan genap. Ini mungkin tidak menyebabkan masalah, tetapi sepertinya tidak tepat :).
Saya akhirnya dapat mengosongkan dan menghapus file tanpa me-restart server dengan mengatur salah satu database (yang saya duga menyebabkan masalah) ke mode pengguna tunggal (rollback langsung). Itu berhasil, tapi saya beruntung. Yang benar-benar saya inginkan, adalah untuk selalu dapat melacak halaman :).
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
Tentang solusi Anda: itu akan berhasil, tetapi saya benar-benar ingin melakukan ini tanpa menurunkan instance.