Ho creato troppi file di dati secondari (.ndf) per tempdb
. Per rimuovere i file in eccesso, devo svuotare il file (il contenuto verrà spostato in altri file):
DBCC SHRINKFILE('tempdbfile8', EMPTYFILE);
e quindi eliminare il file:
ALTER DATABASE tempdb REMOVE FILE tempdbfile8;
Ma il EMPTYFILE
comando restituisce l'errore:
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.
Non preoccuparti, devo solo individuare l'oggetto che utilizza questa pagina per fare qualcosa al riguardo:
DBCC TRACEON (3604)
DBCC PAGE(2,8,41920) --dbid=2, fileid=8, pageid=41920
Il comando restituisce molte informazioni, tra cui object_id. Ma:
Metadata: ObjectId = 0
Non ho idea di cosa fare al riguardo. Quale gatto impedisce a questa pagina di essere spostata? Come individuare quell'oggetto, processo, sessione o qualunque cosa sia? Qualsiasi aiuto sarà apprezzato, ma tieni presente che lasciare tutto così com'è o rimuovere altri file invece non è una soluzione valida a questo problema;).
MODIFICARE:
Sto rimuovendo i file, perché seguivamo le "migliori pratiche" per creare un file per core del processore (stessa dimensione iniziale, stesso tasso di crescita). Ma per quanto ne so, fino a quando non si incontrano problemi di contesa, non ha senso creare file tempdb aggiuntivi sullo stesso dispositivo. Nel nostro caso ha senso, perché MPIO è attivo e il dispositivo di archiviazione può gestire 4 percorsi. Ma c'è stato un errore e siamo finiti con un totale di 5 file con CPU a 6 core. È più dei percorsi MPIO, meno dei core della CPU e non è un numero pari. Potrebbe non causare problemi, ma non sembra giusto :).
Sono stato finalmente in grado di svuotare e rimuovere il file senza riavviare il server impostando uno dei database (che sospettavo di causare il problema) in modalità utente singolo (rollback immediato). Ha funzionato, ma sono stato fortunato. Quello che voglio davvero è essere sempre in grado di rintracciare la pagina in basso :).
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
Informazioni sulla tua soluzione: funzionerebbe, ma mi piacerebbe davvero farlo senza far cadere l'istanza.