De alguma forma, décadas atrás, uma tabela foi criada em nosso banco de dados que começa com a #
. Ele aparece no Pesquisador de Objetos, no banco de dados do aplicativo, e não no tempdb
. Por algum motivo, o Azure não importará o banco de dados como este.
Não podemos descartá-lo, renomeá-lo ou interagir com ele. Eu tentei Delete from Object Explorer, Script Drop , Rename from GUI e nenhum deles funcionou.
Estamos no 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)'.
Como matamos esse objeto para podermos migrar para o Azure?
SELECT [name], CONVERT(VARBINARY(128), [name]) FROM sys.tables WHERE [name] = N'#OBSOLETE';
. Obrigado.object_id
tabela. 2) Reinicie a instância no modo de usuário único. 3) conecte-se via Conexão de administrador dedicada. 4) Nesse banco de dados, tente algo parecidoUPDATE sys.objects$ SET [name] =N'obsolete' WHERE [object_id] = {ye_olde_object_id}; {enter} GO {enter}
. Pena um tiro ..Respostas:
Dado:
sp_rename
usa nomes de objetos em vez de IDs de objetos,#
e é interpretado como tendo um significado especial e tratado de maneira diferente,Você deve tentar editar a tabela de catálogo do sistema subjacente diretamente por meio de uma conexão do Console de administração dedicada (DAC) :
object_id
tabela.Conecte-se via conexão Dedicated Admin Console. Você pode fazer isso em uma sessão interativa SQLCMD executando o seguinte em uma janela do Prompt de Comando:
ou conecte-se diretamente ao banco de dados usando:
Nesse banco de dados, tente algo como o seguinte:
Não executará a instrução até que você coloque o
GO {enter}
.Seja cauteloso ao editar diretamente as tabelas de catálogos do sistema e não fique muito à vontade com a ideia de fazê-lo. Isso é algo que deve ser feito apenas se não houver absolutamente nenhuma outra maneira de corrigir um problema (como o caso aqui). Provavelmente, existem várias razões para evitar edições diretas, mas as duas que vêm à mente são:
Provavelmente, fazer edições diretas anula a responsabilidade da Microsoft em ajudá-lo se você tiver problemas e tiver um contrato de suporte (eu não vi os termos do (s) contrato (s) de Suporte, mas tenho dificuldade em acreditar que esse idioma não esteja dentro há)
@ Paul Randal confirmou em um comentário em uma resposta minha: "editar manualmente uma tabela do sistema irrevogavelmente define um sinalizador na página de inicialização do banco de dados que marca seu banco de dados como tendo sido editado dessa maneira, e o CSS pode decidir não ajudar você se tiver problemas subsequentes com esse banco de dados ".
fonte