Domanda

Sto lavorando con un database SQL Server 2000 che probabilmente contiene alcune dozzine di tabelle a cui non è più possibile accedere.Vorrei cancellare i dati che non è più necessario mantenere, ma non sono sicuro di come identificare quali tabelle rimuovere.

Il database è condiviso da diverse applicazioni, quindi non posso essere sicuro al 100% che la revisione di queste mi fornirà un elenco completo degli oggetti utilizzati.

Quello che mi piacerebbe fare, se possibile, è ottenere un elenco di tabelle a cui non è stato effettuato alcun accesso per un certo periodo di tempo.Nessuna lettura, nessuna scrittura.Come dovrei affrontare questo problema?

È stato utile?

Soluzione

MSSQL2000 non ti fornirà questo tipo di informazioni.Ma un modo per identificare quali tabelle SONO utilizzate (e quindi dedurre quali non lo sono) è utilizzare SQL Profiler, per salvare tutte le query che vanno a un determinato database.Configura il profiler per registrare i risultati in una nuova tabella, quindi controlla le query salvate lì per trovare tutte le tabelle (e viste, sps, ecc.) utilizzate dalle tue applicazioni.

Un altro modo in cui penso che potresti verificare se ci sono "scritture" è aggiungere una nuova colonna timestamp a ogni tabella e un trigger che aggiorna quella colonna ogni volta che c'è un aggiornamento o un inserimento.Ma tieni presente che se le tue app eseguono query del tipo

select * from ...

quindi riceveranno una nuova colonna e ciò potrebbe causare alcuni problemi.

Altri suggerimenti

Un altro suggerimento per tenere traccia delle tabelle su cui è stato scritto è utilizzare Salvataggio del registro SQL di Red Gate (gratuito).Questo strumento si immerge nel registro del database e ti mostrerà tutti gli inserimenti, gli aggiornamenti e le eliminazioni.Anche l'elenco è completamente ricercabile.

Non soddisfa i tuoi criteri per la ricerca delle letture nel database, ma penso che la tecnica SQL Profiler ti darà una buona idea per quanto riguarda.

Se disponi di colonne lastupdate puoi verificare le scritture, non esiste davvero un modo semplice per verificare le letture.Potresti eseguire profiler, salvare la traccia su una tabella e fare il check-in lì

Quello che faccio di solito è rinominare la tabella prefissandola con un underscrore, quando la gente inizia a urlare la rinomino semplicemente

Se per non utilizzato intendi che la tua applicazione non ha più riferimenti alle tabelle in questione e stai utilizzando SQL dinamico, potresti fare una ricerca per i nomi delle tabelle nella tua app, se non esistono spazzali via.

Ho anche emesso tutti gli sproc, le funzioni, ecc.in un file di testo e ho fatto una ricerca per i nomi delle tabelle.Se non vengono trovati, o trovati in procedure che dovranno essere eliminate, spazzateli via.

Eliminali e vedi se qualche utente si lamenta ;)

Sembra che l'utilizzo del Profiler funzionerà.Dopo averlo lasciato funzionare per un po', dovrei avere un buon elenco di tabelle utilizzate.Chi non utilizza i propri tavoli ogni giorno probabilmente può aspettare che vengano ripristinati dal backup.Grazie, gente.

Probabilmente è troppo tardi per mortificare, ma per chiunque faccia una ricerca;Cercherei tutti gli oggetti utilizzando questo oggetto nel mio codice, quindi in SQL Server eseguendo questo:

seleziona distinto '[' + object_name(id) + ']'
dai commenti di sistema
dove testo come '%MY_TABLE_NAME%'

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top