2008-08-29 5 views
2

Ich arbeite mit einer SQL Server 2000-Datenbank, die wahrscheinlich einige Dutzend Tabellen hat, auf die nicht mehr zugegriffen wird. Ich möchte die Daten löschen, die wir nicht länger pflegen müssen, aber ich bin mir nicht sicher, wie ich die zu entfernenden Tabellen identifizieren kann.Strategie zum Identifizieren nicht verwendeter Tabellen in SQL Server 2000?

Die Datenbank wird von mehreren verschiedenen Anwendungen gemeinsam genutzt. Daher kann ich nicht 100% ig davon ausgehen, dass die vollständige Liste der verwendeten Objekte angezeigt wird.

Was ich tun möchte, wenn es möglich ist, ist, eine Liste von Tabellen zu bekommen, auf die seit einiger Zeit überhaupt nicht zugegriffen wurde. Keine liest, keine schreibt. Wie soll ich das angehen?

Antwort

5

MSSQL2000 gibt Ihnen diese Art von Informationen nicht. Eine Möglichkeit, um festzustellen, welche Tabellen verwendet werden (und dann ableiten, welche nicht), besteht darin, den SQL Profiler zu verwenden, um alle Abfragen zu speichern, die zu einer bestimmten Datenbank gehen. Konfigurieren Sie den Profiler, um die Ergebnisse in einer neuen Tabelle aufzuzeichnen, und überprüfen Sie dann die dort gespeicherten Abfragen, um alle Tabellen (und Ansichten, SPS usw.) zu finden, die von Ihren Anwendungen verwendet werden.

Eine andere Möglichkeit, denke ich, dass Sie überprüfen können, ob "Schreiben" eine neue Timestamp-Spalte zu jeder Tabelle hinzufügen soll, und einen Trigger, der diese Spalte jedes Mal aktualisiert, wenn ein Update oder eine Einfügung stattfindet. Aber denken Sie daran, dass, wenn Ihre Anwendungen Abfragen des Typs tun

select * from ... 

dann werden sie eine neue Spalte erhalten und das könnte einige Probleme verursachen.

0

Wenn Sie lastupdate-Spalten haben, können Sie nach den Schreibvorgängen suchen, es gibt wirklich keine einfache Möglichkeit, nach Lesevorgängen zu suchen. Sie könnten Profiler, speichern Sie die Spur zu einem Tisch und überprüfen dort

Was ich in der Regel tun, ist die Tabelle umbenennen, indem prefixing es mit einem underscrore laufen, wenn die Leute zu schreien beginne ich es nur

0

Wenn wieder umbenennen nicht verwendet, Sie meinen, Ihre Anwendung hat keine Referenzen mehr auf die fraglichen Tabellen und Sie verwenden dynamic sql, können Sie eine Suche nach den Tabellennamen in Ihrer App, wenn sie nicht existieren, blasen sie weg.

Ich habe auch alle Sprocs, Funktionen usw. in eine Textdatei ausgegeben und eine Suche nach den Tabellennamen durchgeführt. Falls nicht gefunden oder in Prozeduren gefunden, die ebenfalls gelöscht werden müssen, blasen Sie sie weg.

0

löschen Sie einfach und sehen, ob jeder Benutzer darüber beschwert;)

0

Es sieht aus wie der Profiler arbeiten wird. Sobald ich es eine Weile laufen lasse, sollte ich eine gute Liste verwendeter Tabellen haben. Wer nicht jeden Tag seine Tische benutzt, kann wahrscheinlich darauf warten, dass sie aus dem Backup wiederhergestellt werden. Danke, Leute.

1

Ein anderer Vorschlag zum Verfolgen von Tabellen, in die geschrieben wurde, ist die Verwendung Red Gate SQL Log Rescue (kostenlos). Dieses Tool taucht in das Protokoll der Datenbank ein und zeigt Ihnen alle Einfügungen, Aktualisierungen und Löschungen an. Die Liste ist auch vollständig durchsuchbar.

Es erfüllt nicht Ihre Kriterien für die Erforschung von liest in die Datenbank, aber ich denke, die SQL-Profiler-Technik wird Ihnen eine faire Idee, soweit das geht.

0

Wahrscheinlich zu spät, um Mogrify zu helfen, aber für jeden, der eine Suche durchführt; Ich würde für alle Objekte suchen, um dieses Objekt in meinem Code verwenden, dann in SQL Server durch diese ausgeführt wird:

select distinct '[' + object_name (id) + ']'
von syscomments
wo Text wie ‚% MY_TABLE_NAME% '

Verwandte Themen