2 Stimmen

Bereinigen einer Datenbank

Ich habe eine Datenbank mit Hunderten von Tabellen.

Ich entwickle ein Skript zum Löschen aller Zeilen in dieser Datenbank.

Da es sich um eine relationale Datenbank handelt, muss ich natürlich erst die Zeilen der Kinder löschen, bevor ich die Eltern anfassen kann.

Gibt es etwas, das ich dafür verwenden kann, oder muss ich das auf die harte Tour machen?

エディテージ

Angenommene Antwort wurde geändert, um auch Disable Trigger einzuschließen

EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ? '
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ? '

7voto

Jonathan Punkte 11561

Sie können alle Beschränkungen deaktivieren, dann alle Daten löschen und die Beschränkungen wieder aktivieren. Sie können den Code zur Wiederverwendung in eine gespeicherte Prozedur einfügen. Etwas schnelles und schmutziges:

CREATE PROCEDURE sp_EmplyAllTable
AS
EXEC sp_MSForEachTable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL’
EXEC sp_MSForEachTable ‘DELETE FROM ?’
EXEC sp_MSForEachTable ‘ALTER TABLE ? CHECK CONSTRAINT ALL’
GO

4voto

JustABitOfCode Punkte 974

Ich nehme an, Sie wollen die Struktur ohne die Daten?

Können Sie ein Skript für die Tabellen / sp's / benutzerdefinierten Funktionen / Trigger / Berechtigungen usw. erstellen und dann die Datenbank löschen, bevor Sie sie mit dem Skript neu erstellen?

Dieser Link erklärt, wie man mit SQL Server Management Studio ein Skript für alle Objekte in einer Datenbank erstellt... http://msdn.microsoft.com/en-us/library/ms178078.aspx

2voto

Bill Karwin Punkte 493880

Wenn dies MySQL wäre, würde ich " mysqldump --no-data ", um nur eine Sicherung der Datenbank-Metadaten zu erstellen. Dann würde ich die Datenbank vollständig löschen und meine datenlose Sicherung wiederherstellen.

Abgesehen davon, dass es sich um einen dreistufigen Prozess handelt, ist er allein in Bezug auf Transaktionen und E/A viel schneller als das Löschen aus jeder Tabelle einzeln. Außerdem wird der Tablespace auf der Festplatte verkleinert, was beim Löschen nicht der Fall wäre (zumindest bei InnoDB).

Ich bin mit den Backup-Tools von Microsoft SQL Server nicht vertraut. Gibt es eine gleichwertige Option?


Ich glaube, ich habe etwas Vielversprechendes gefunden: Wie man: Erzeugen eines Skripts (SQL Server Management Studio)

So erstellen Sie ein Skript für ein ganzes Datenbank

  1. Verbinden Sie sich im Object Explorer mit einer Instanz der SQL Server-Datenbank Engine und erweitern Sie dann diese Instanz.
  2. Erweitern Sie Datenbanken klicken Sie mit der rechten Maustaste auf eine beliebige Datenbank, zeigen Sie auf Aufgaben zeigen Sie auf Skripte generieren und folgen Sie dann der Schritte in der Assistent zum Erzeugen von Skripten .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X