2010-10-05 14 views
6

Ho un database SQL Server 2005. Sto registrando i dati su un tavolo. Voglio impedire che i dati della tabella diventino troppo grandi.Come limitare le dimensioni di un tavolo?

Come limitare la dimensione della tabella al numero x di righe e mantenere la registrazione? Voglio che le file più vecchie vengano rilasciate.

risposta

8

Devi costruire questo processo da solo. È possibile esaminare la creazione di un processo di SQL Server che esegua un'istruzione SQL DELETE basata sui criteri definiti.

+1

Un lavoro è probabilmente meglio di un trigger se non ti dispiace il totale andando un po 'oltre. Basta impostarlo per funzionare una volta alla sera o settimanalmente o qualsiasi altra cosa. –

3

Questo è l'esempio in cui i trigger potrebbero effettivamente essere una buona idea in Sql Server. (Il mio sentimento personale è che i trigger in SQL sono come GOTO nel codice.)

Basta scrivere un trigger INSERT che, quando attivato, verificherà il numero di righe nel file ed eseguirà un DELETE in base a qualsiasi regola specificata .

Ecco un collegamento a trigger basics. E another, questa volta con i cappucci dello schermo.

+1

Se la tabella in questione cambia spesso, questa non sarebbe una buona idea. Di solito è molto meglio programmare gli articoli di manutenzione per le ore in cui il sistema ha meno carico. – NotMe

+0

Se segui questa strada, dovresti valutare le prestazioni. Con trigger e grandi quantità di dati, un'istruzione INSERT impiegherà molto più tempo per essere completata. E, devi anticipare i fallimenti nel processo di cancellazione. Devi decidere se è importante fallire un inserimento perché il trigger non è riuscito. – bobs

2

Posizionare la tabella sul proprio filegroup. Limita la dimensione del filegroup. Vedi:

quindi aggiungere un lavoro che elimina i record di log vecchi, ma questo è di solito più difficile di quanto sembri. Il modo più efficiente per utilizzare una finestra scorrevole: How to Implement an Automatic Sliding Window in a Partitioned Table. Se non è possibile, la cosa migliore da fare è assicurarsi che la chiave in cluster sulla tabella sia la data, in modo che le eliminazioni possano rimuovere in modo efficiente le vecchie righe.

0

Se si desidera limitare le dimensioni di una tabella per scopi di registrazione, non consiglierei di pensare a risolvere il problema limitando il numero di record memorizzati in una tabella. Invece di avere un processo di archiviazione o di eliminazione per la tabella che memorizza i registri, questo processo può essere configurato per eliminare/archiviare i registri una volta raggiunto il numero X di righe, o forse in seguito si desidera riconfigurarlo per dopo X numero di min/h/etc. Se sei preoccupato per lo spazio reale, allora sarebbe meglio analizzare quanto spazio occupano effettivamente i log. Una volta che hai un'idea di quanto spazio fisico hai a disposizione per il database, quindi limitare la crescita dei dati da SQL Server per essere sicuro che il file di dati su cui sono memorizzate le informazioni di registrazione non superi le tue aspettative.

Problemi correlati