Jakiś dekad temu w naszej bazie danych utworzono tabelę zaczynającą się od #
. Pokazuje się w Object Explorer w bazie danych aplikacji, a nie w tempdb
. Z jakiegoś powodu Azure nie zaimportuje takiej bazy danych.
Nie możemy go upuścić, zmienić jego nazwy ani wchodzić w interakcje. Próbowałem usunąć z Object Explorer, Script Drop , Rename z GUI i żaden z nich nie działał.
Jesteśmy na 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)'.
Jak zabijamy ten obiekt, abyśmy mogli przeprowadzić migrację na platformę Azure?
sql-server
sql-server-2008-r2
temporary-tables
ten facet
źródło
źródło
SELECT [name], CONVERT(VARBINARY(128), [name]) FROM sys.tables WHERE [name] = N'#OBSOLETE';
. Dzięki.object_id
ten stół. 2) Uruchom ponownie instancję w trybie pojedynczego użytkownika. 3) połącz za pomocą dedykowanego połączenia administracyjnego. 4) W tym DB spróbuj czegoś takiegoUPDATE sys.objects$ SET [name] =N'obsolete' WHERE [object_id] = {ye_olde_object_id}; {enter} GO {enter}
. WartoOdpowiedzi:
Dany:
sp_rename
używa nazw obiektów zamiast identyfikatorów obiektów,#
a, który jest interpretowany jako mający specjalne znaczenie i jest traktowany inaczej,Powinieneś spróbować edytować bazową tabelę katalogu systemowego bezpośrednio przez połączenie z dedykowaną konsolą administracyjną (DAC) :
object_id
ten stół.Połącz przez dedykowane połączenie konsoli administracyjnej. Możesz to zrobić w interaktywnej sesji SQLCMD, uruchamiając następujące polecenie w oknie wiersza polecenia:
lub połącz bezpośrednio z bazą danych za pomocą:
W tej bazie danych spróbuj czegoś takiego:
Nie wykona instrukcji, dopóki nie wpiszesz
GO {enter}
.Zachowaj ostrożność podczas bezpośredniej edycji tabel katalogu systemowego i nie przejmuj się pomysłem zrobienia tego. Jest to coś, co należy zrobić tylko wtedy, gdy nie ma absolutnie żadnego innego sposobu rozwiązania problemu (na przykład w tym przypadku). Prawdopodobnie istnieje kilka powodów, aby unikać dokonywania bezpośrednich edycji, ale dwa, które początkowo przychodzą na myśl, to:
Całkiem prawdopodobne, że dokonywanie bezpośrednich edycji unieważnia odpowiedzialność Microsoft za pomoc, jeśli napotkasz problemy i masz umowę wsparcia (nie widziałem warunków umowy wsparcia, ale trudno mi uwierzyć, że taki język nie byłby w języku tam)
@Paul Randal potwierdził w komentarzu do mojej pokrewnej odpowiedzi : „ręczne edytowanie tabeli systemowej nieodwołalnie ustawia flagę na stronie rozruchowej bazy danych, która oznacza, że baza danych została edytowana w ten sposób, a CSS może zdecydować, że nie pomoże jeśli później wystąpią problemy z tą bazą danych ”.
źródło