Irgendwie wurde vor Jahrzehnten eine Tabelle in unserer Datenbank erstellt, die mit a beginnt #
. Es wird im Objekt-Explorer unter der Datenbank der App angezeigt, nicht in tempdb
. Aus irgendeinem Grund importiert Azure die Datenbank nicht wie folgt.
Wir können es nicht löschen, umbenennen oder damit interagieren. Ich habe versucht , Löschen von Objekt - Explorer Script - Tropfen , Umbenennen von der GUI und keiner von ihnen gearbeitet hat.
Wir arbeiten mit SQL 2008 R2.
drop table [*app*].[dbo]."#OBSOLETE";
Database name '*app*' ignored, referencing object in tempdb.
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#OBSOLETE', because it does not exist or you do not
have permission.
exec sp_rename "dbo.#OBSOLETE", "dbo.obsolete"
Msg 15225, Level 11, State 1, Procedure sp_rename, Line 338
No item by the name of 'dbo.#OBSOLETE' could be found in the current database '*app*', given that @itemtype was input as '(null)'.
Wie töten wir dieses Objekt, damit wir es nach Azure migrieren können?
sql-server
sql-server-2008-r2
temporary-tables
dass es Kerl
quelle
quelle
SELECT [name], CONVERT(VARBINARY(128), [name]) FROM sys.tables WHERE [name] = N'#OBSOLETE';
. Vielen Dank.object_id
von dieser Tabelle. 2) Starten Sie die Instanz im Einzelbenutzermodus neu. 3) Stellen Sie eine Verbindung über eine dedizierte Administratorverbindung her.4) Versuchen Sie in dieser DB etwas wieUPDATE sys.objects$ SET [name] =N'obsolete' WHERE [object_id] = {ye_olde_object_id}; {enter} GO {enter}
. Einen Schuss wert ..Antworten:
Gegeben:
sp_rename
verwendet Objektnamen anstelle von Objekt-IDs,#
und dies als besondere Bedeutung interpretiert wird und anders behandelt wird,Sie sollten versuchen, die zugrunde liegende Systemkatalogtabelle direkt über eine DAC-Verbindung (Dedicated Admin Console) zu bearbeiten :
object_id
von diesem Tisch.Stellen Sie eine Verbindung über die Dedicated Admin Console her. Sie können dies in einer interaktiven SQLCMD-Sitzung tun, indem Sie in einem Eingabeaufforderungsfenster Folgendes ausführen:
Oder stellen Sie eine direkte Verbindung zur Datenbank her, indem Sie Folgendes verwenden:
Versuchen Sie in dieser Datenbank Folgendes:
Die Anweisung wird erst ausgeführt, wenn Sie den Befehl eingeben
GO {enter}
.Seien Sie bitte vorsichtig, wenn Sie Systemkatalogtabellen direkt bearbeiten, und machen Sie sich mit der Idee, dies zu tun, nicht allzu vertraut. Dies sollte nur getan werden , wenn es absolut keine andere Möglichkeit gibt, ein Problem zu beheben (wie hier).Es gibt wahrscheinlich mehrere Gründe, um direkte Bearbeitungen zu vermeiden, aber die beiden, die anfänglich in den Sinn kommen, sind:
Wahrscheinlich macht es die Verantwortung von Microsoft zunichte, Sie zu unterstützen, wenn Sie auf Probleme stoßen und einen Supportvertrag haben (ich habe die Bedingungen der Supportvereinbarung (en) nicht gesehen, aber es fällt mir schwer, zu glauben, dass eine solche Sprache nicht zur Verfügung steht Dort)
@Paul Randal bestätigte in einem Kommentar zu einer verwandten Antwort von mir: "Das manuelle Bearbeiten einer Systemtabelle setzt unwiderruflich ein Flag auf der Boot-Seite der Datenbank, das Ihre Datenbank als auf diese Weise bearbeitet markiert, und CSS entscheidet möglicherweise, keine Hilfe zu leisten Sie, wenn Sie später Probleme mit dieser Datenbank haben. "
quelle