2013-05-21 12 views
5

Quindi abbiamo un sacco di app in esecuzione sui nostri server SQL, e oggi ci siamo resi conto che alcuni di loro avevano un sacco di schemi/funzioni di partizione che non avevamo creare.Impossibile eliminare gli schemi di partizione "sistema" creati dai cataloghi FullText

Gli schemi e le funzioni delle partizioni sono stati denominati rispettivamente ifts_comp_fragment_data_space_{hash} e ifts_comp_fragment_partition_function_{hash}.

Scavando più in profondità, ci siamo resi conto che sono contrassegnati come voci di sistema (is_system impostate su 1 in sys.partition_schemes), il che significa che non possiamo nemmeno cancellarle.

Dopo alcune ricerche abbiamo scoperto che il server SQL li creerà per partizionare i cataloghi fulltext se diventano troppo grandi, o qualcosa di simile a see here. Il problema è che abbiamo appena cancellato tutti i cataloghi e questi sono stati abbandonati, senza alcun modo per eliminarli.

Non mi preoccuperei troppo, tranne che ho bisogno di cancellarli, dato che sto cercando di esportare il nostro DB come file .bacpac, e che si blocca lamentando che il DB contiene schemi/funzioni di partizione e sono non supportato.

C'è qualche modo per forzare il server SQL a rilasciare quegli oggetti o qualsiasi altra alternativa che potrei fare?

+0

Ho modificato il titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –

+0

Buon punto, grazie) –

risposta

5

È possibile modificare il flag is_system da 1 a 0 e quindi rilasciare lo schema di partizione come qualsiasi altro. Per fare questo:

Prima consentire gli aggiornamenti sul server:

exec sp_configure 'allow updates', 1 
go 
reconfigure with override 
go 
  1. Shutdown server SQL
  2. Avviare il backup in modalità utente singolo eseguendo "C: \ Programmi \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ Binn \ sqlservr.exe -m "da una console con privilegi elevati.
  3. Accedere al server utilizzando il DAC SQL Server http://technet.microsoft.com/en-us/library/ms178068(v=sql.105).aspx
  4. Se facciamo uno sp_helptext sulle sys.partition_schemes vista, vedrete che la colonna is_system si basa su un indicatore di stato nella tabella sys.sysclsobjs. "sysconv (bit, o.status & 0x4) AS is_system,"
  5. Quindi, per cambiare la bandiera, dobbiamo vedere qual è il valore corrente dello stato e deselezionare il 4 bit. Il mio valore è stato di 4 così ho aggiornato a 0.

    update sys.sysclsobjs set status = 0 where name = 
        'ifts_comp_fragment_data_space_033D368C' 
    

Ora si può spegnere la modalità utente singolo processo di SQL Server sufficiente chiudere la finestra della console e avviare il servizio di Windows server SQL. Quindi effettua il login come faresti normalmente e rilascia lo schema di partizione.

Infine, impostare il 'consentire gli aggiornamenti' impostazione torna a 0.

Questo potrebbe aver bisogno di essere pianificato tempi di inattività per un server di produzione.

NEGAZIONE Questo probabilmente non è un Microsoft supportato modo di fare questo, si consiglia di verificare su alcuni server non-prod prima di immergersi in.

+1

Grazie .. Questo sicuramente mi ha indirizzato nella giusta direzione, e non devo ricreare l'intero DB da zero ora^_^ –

+0

Sai cosa è lo sys.sysclsobjs.status? Considerando che è documentato? –

+0

E non sarebbe molto meglio impostare 'status & ~ 0x4' in modo da non rovinare gli altri bit nel bitfield? –

Problemi correlati