2 Stimmen

SQL DTS-Datenbankkopie schlägt fehl

Hallo zusammen, ich arbeite schon eine Weile an diesem Problem und die üblichen Google-Suchen helfen nicht :(

Ich habe eine Produktionsdatenbank in SQL 2000. Ich möchte sie über eine Schulungsdatenbank kopieren, um sie zu aktualisieren. Ich möchte, dass dies einmal pro Woche geschieht, um die Schulungsdatenbank auf dem neuesten Stand zu halten.

Ich habe einen DTS-Auftrag für diese Aufgabe erstellt. Innerhalb dieses DTS-Auftrags habe ich eine einzelne Aufgabe "SQL-Server-Objekte kopieren". Diese Aufgabe ist wie folgt eingerichtet:

  • Alle kopierten Objekte erstellen
    • Zielobjekte zuerst ablegen
  • Daten kopieren
    • Ersetzen Sie vorhandene Daten
  • Kopieren von Indizes, Triggern, Primär- und Fremdschlüsseln
  • Kopieren Sie alle Benutzertabellen, Ansichten, Funktionen und gespeicherten Verfahren.

Wenn ich dieses DTS-Paket ausführe (natürlich in der Vorproduktion zu Testzwecken), wird es zu 99 % fertig und gibt den folgenden Fehler aus:

Step Error Source: Microsoft SQL-DMO (ODBC SQLState: 42S02)
Step Error Description:[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'dbo.vwEstAssetStationAddress'.
Step Error code: 800400D0
Step Error Help File:SQLDMO80.hlp
Step Error Help Context ID:1131

Meine Recherchen im Netz brachten nicht viel Hilfe. Es gibt Berichte über diese Fehler, aber keiner scheint auf meine Situation zuzutreffen. Ein Vorschlag, den ich gefunden habe, war, dass die Tabelle sysdepends beschädigt wurde, so dass der DTS-Job seine Skripte in der falschen Reihenfolge ausführt. Ich habe jedoch das folgende Skript ausgeführt, um die Tabelle zu korrigieren, und es tritt immer noch derselbe Fehler auf:

USE master
GO
ALTER DATABASE [DATABASE NAME]
SET SINGLE_USER
GO

USE [DATABASE NAME]
GO

DBCC CHECKTABLE('sysdepends',REPAIR_REBUILD )
GO

USE master
GO
ALTER DATABASE [DATABASE NAME]
SET MULTI_USER
GO

Ich habe auch gesehen, dass unterschiedliche Objekteigentümer diesen Fehler verursachen können. Ich habe jedoch bestätigt, dass die Objekte in diesem Fall alle dem Benutzer dbo gehören.

Irgendwelche Vorschläge?

2voto

Dr8k Punkte 1088

Ich komme mir dumm vor, aber ich poste die Antwort, die ich gerade gefunden habe, für die Nachwelt (und damit ihr hilfreichen Leute aufhören könnt, euch für mich zu stressen).

Obwohl ich alle zu kopierenden Benutzertabellen, Ansichten, gespeicherten Prozeduren und benutzerdefinierten Funktionen ausgewählt hatte, hatte ich nicht die Option "Alle abhängigen Objekte einbeziehen" gewählt. Ich war davon ausgegangen, dass, wenn man zwei Objekte zum Kopieren auswählt und eines vom anderen abhängt, SQL die Kopien immer in der richtigen Reihenfolge durchführt. Offenbar nicht. Das Aktivieren dieses kleinen Kontrollkästchens machte den Unterschied aus.

Nochmals vielen Dank an alle, die mit Vorschlägen geholfen haben

0voto

Hector Sosa Jr Punkte 4222

Irgendwie wird die Tabelle dbo.vwEstAssetStationAddress von Ihrem DTS-Paket nicht gefunden. Leider wird in der Meldung nicht angegeben, ob sie in der Quelle oder im Ziel nicht gefunden wurde.

Welches sind die genauen Schritte in der Reihenfolge, in der Sie sie in Ihrem DTS-Paket haben? Ich gehe davon aus, dass die Liste der oben genannten Aufgaben nicht in der richtigen Reihenfolge ist. Ich weiß, dass dies keine Antwort ist, aber es sieht so aus, als bräuchten wir ein paar mehr Informationen, um Ihnen weiterhelfen zu können.

0voto

Dr8k Punkte 1088

Danke für die Antwort hectorsosajr.

Das Objekt, das den Fehler verursacht (dbo.vwEstAssetStationAddress), ist eine Ansicht, die auf 2 zugrunde liegende Tabellen verweist. Ich habe die Abfrage der Ansicht sowie die Ausführung der SELECT-Anweisung, die sie definiert, sowohl in der Quell- als auch in der Zieldatenbank getestet, und sie funktioniert einwandfrei.

Bei der Aufgabe zum Kopieren von Datenbankobjekten in DTS können Sie die Reihenfolge, in der die Objekte übertragen werden, nicht festlegen. Soweit ich es verstanden habe, verwendet sie die Tabelle sysdepends, um die erforderliche Reihenfolge der Ereignisse zu bestimmen.

0voto

Cade Roux Punkte 85601

Hört sich an, als ob versucht wird, eine gespeicherte Prozedur/Ansicht auf der Grundlage einer Ansicht zu erstellen, die noch nicht existiert.

Warum sichern Sie nicht einfach die Datenbank und stellen sie unter einem anderen Namen wieder her? (wenn es sich nicht um eine Produktionsdatenbank handelt, würde ich sagen: abtrennen, kopieren und wieder anhängen). Das alles können Sie unter der Kontrolle von T-SQL tun.

Sehen Sie, ob dieser Link hilft Ihnen, Ihr Abhängigkeitsproblem zu finden.

0voto

Dr8k Punkte 1088

Ich wollte es vermeiden, dies über eine Sicherung/Wiederherstellung zu tun. Es gibt einige Benutzer der Datenbank, bei denen es sich um SQL Server-Konten handelt (nicht um Active Directory). Dies wird zu einem Problem, wenn man von einem Server auf einen anderen wechseln muss, da man diese Benutzer löschen und neu anlegen muss.

0 Stimmen

Versuchen Sie den Link, den ich meiner Antwort beigefügt habe - er könnte Ihnen helfen, Ihr Abhängigkeitsproblem einzugrenzen.

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