Conhecendo a Stored Procedure não documentada MSunmarkreplinfo

Galera, bom dia.

Tudo bem?

A dica de hoje tem o objetivo de apresentar uma das diversas Stored Procedures existentes no SQL Server, mas que não possuem documentação oficial por parte da Microsoft, estou se referindo a MSunmarkreplinfo, que recentemente acabei conhecendo e utilizando.

Para apresentar mais sobre esta Stored Procedure, vou contar um pouco do que aconteceu e como consegui encontrar esta relíquia.

Nos últimos dias um dos meus clientes solicitou a configuração de uma estrutura de Replicação Transacional para suas bases de dados, até ai sem problemas, todo processo de configuração do Publisher e Subscriber realizado normalmente, especificando os artigos que seriam replicados entre os servidores, horário de replicação, filtros, entre outros detalhes.

Pois bem, durante alguns dias o processo de replicação funcionou sem problemas, mas no último final de semana, um dos programadores da empresa tinha a necessidade de aplicar algumas atualizações ao ambiente, dentre os elementos que seriam atualizados uma das bases de dados que estava envolvida na replicação seria envolvida nesta atualização.

Dentre os procedimentos padrões definidos pelo desenvolvedor para aplicar as atualizações consistia em realização do backup e posteriormente fazer um detach do banco de dados, foi justamente neste ponto que os problemas começaram a aparecer!!!

Não sei exatamente por qual motivo mas somente realizando o detach do banco de dados as atualizações na aplicação e banco eram aplicadas corretamente e o ambiente voltava a funcionar. Em conversa com o programar informei que poderíamos manter a estrutura de replicação e no processo de detach realizar alguns procedimentos específicos para os bancos envolvidos no processo de replica. Mas como santo de casa não faz milagre, o cara ficou louco, e disse que desta forma não poderia mais trabalhar, então acabou sobrando pra mim, você já podem imaginar o que aconteceu. Tive que remover todo processo de replicação para este banco de dados, ai que vem o pior, durante o processo de remoção da estrutura de replicação o servidor sem qualquer motivo específico travou.

Com certeza vocês podem imaginar alguns dos principais problemas durante um processo de reconfiguração de um ambiente o servidor travar, mas para minha felicidade ou infelicidade o banco de dados, não sofreu maiores problemas, mas o SQL Server não conseguiu remover o status das tabelas envolvidas na replicação, como sendo artigos replicados, desta forma, todo e qualquer processo de alteração na estrutura ou até mesmo exclusão das tabelas não poderiam ser realizados.

Nesta momento, eu consegui entender que o SQL Server ainda estava trabalhando com a replicação mesmo que toda estrutura tivesse sido removida, o que naquele momento poderia dizer que exista então um processo de replicação fantasma, conhecida como Ghost Replication, algo muito comum de se acontecer quando realizamos alterações nas configurações de uma replicação transacional e ocorrem falhas no ambiente.

Mesmo assim, sabendo da possível existência da Ghost Replication, o programador, tentou excluir a tabela ou até mesmo realizar algumas alterações em sua estrutura, foi neste momento que ao realizar por exemplo um simples Drop Table ou Alter Table, o SQL Server apresentava a seguinte mensagem:

Unable to drop a table even after removing replication. Getting the following errors, when try to drop or alter the table:
Server: Msg 3724, Level 16, State 2, Line 1
Cannot drop the table ‘t1’ because it is published for replication.
Server: Msg 4931, Level 16, State 1, Line 1
Cannot add columns to table ‘t1’ because it is being published for merge replication.

Básicamente a mensagem informava que era impossível realizar a exclusão ou alterações na tabela pois a mesma estava envolvida em um processo de replicação.

Ao entrar em contato comigo e alertar sobre esta situação, o programador destacou a impossibilidade de manter o ambiente em funcionamento sem poder aplicar as novas atualizações.

Foi justamente com base nesta situação e sabendo que o status das tabelas envolvidas na replicação não haviam sido alterados, comecei a realizar algumas tentativas de alteração direta nas tabelas e visões de catálogo de sistema existentes no SQL Server 2005, trabalhando diretamente com a Sys.Objetcs e Sys.SysObjects.

Dentre as diversas tentativas, tentei alterar as colunas ReplInfo e Is_Published existentes nas respectivas tabelas e visões de catálogo, mas para minha raiva não consegui realizar a alteração. O SQL Server retornava uma mensagem informando que existia dependência entre estes objetos de sistemas o que impossibilitava esta alteração.

Lógicamente neste instante o que me restava era tentar de alguma forma buscar mais informações, através do Books On-Line, como também, utilizando a própria Internet. Em ambos as alternativas praticamente encontrei os mesmos exemplos, procedimentos, dicas e sugestões. Mas como a esperança é a última que morre comecei a buscar mais informações nos Fóruns MSDN e TechNet nos Estados Unidos e foi justamente neste locais que encontrei informações e exemplos de como utilizar MSunmarkreplinfo.

Não encontrei muita coisa sobre esta Stored Procedure, mas o pouco que encontrei foi o suficiente para conseguir resolver o meu problema, e justamente esta solução que vou compartilhar com vocês, conforme o exemplo apresentado a seguir:

 — Exemplo: Utilizando a MSunmarkreplinfo para remover o Status de tabela envolvida em replicação —

SET NOCOUNT ON
DECLARE @tablename NVARCHAR(128), @RC INT

DECLARE curTable CURSOR FOR
SELECT [name] AS tbl FROM sys.tables

OPEN curTable
FETCH NEXT FROM curTable INTO @tablename

 WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE @RC = dbo.sp_MSunmarkreplinfo @tablename
FETCH NEXT FROM curTable INTO @tablename
END

 CLOSE curTable
DEALLOCATE curTable
GO

Com o código apresentado anteriormente consegui alterar de uma forma forçada as colunas ReplInfo e Is_Published na tabela de catálogo de sistema Sys.Objects e utilizada também pela Sys.SysObjects, desta forma, o programador já poderia realizar todas as alterações desejadas, mecher na estrutura das tabelas, como também, executar qualquer outro tipo de procedimento em seu ambiente.

Sendo assim, tudo voltou ao normal, mas o processo de replicação não pode mais ser configurado a este ambiente, fazendo-se necessário adotar outros processos de disponibilidade dos dados entre os servidores da empresa.

Espero que esta dica possa ter ilustrado um pouco de como é possível utilizar Stored Procedures não documentadas em algumas situações, vale ressaltar que qualquer procedimento desconhecido deve ser analisado e realizado em ambientes de teste.

Agradeço a sua visita, nos encontramos em breve.

Até mais.

Anúncios

Sobre Junior Galvão - MVP

Profissional com vasta experiência na área de Tecnologia da Informação e soluções Microsoft. Graduado no Curso Superior em Gestão da Tecnologia de Sistemas de Informação. Pós-Graduado no Curso de Gestão e Engenharia de Processos para Desenvolvimento de Software com RUP na Faculdade FIAP - Faculdade de Informática e Administração Paulista de São Paulo. Pós-Graduado em Gestão da Tecnologia da Informação Faculdade - ESAMC Sorocaba. Formação MCDBA Microsoft, autor de artigos acadêmicos e profissionais postados em Revistas, Instituições de Ensino e WebSistes. Meu primeiro contato com tecnologia ocorreu em 1995 após meus pais comprarem nosso primeiro computador, ano em que as portas para este fantástico mundo se abriram. Neste mesmo ano, comecei o de Processamento de Dados, naquele momento a palavra TI não existia, na verdade a Tecnologia da Informação era conhecida como Computação ou Informática, foi assim que tudo começou e desde então não parei mais, continuando nesta longa estrada até hoje. Desde 2001 tenho atuado como Database Administrator - Administrador de Banco de Dados - SQL Server em tarefas de Administração, Gerenciamento, Migração de Servidores e Bancos de Dados, Estratégias de Backup/Restauração, Replicação, LogShipping, Implantação de ERPs que utilizam bancos SQL Server, Desenvolvimento de Funções, Stored Procedure, Triggers. Experiência na Coordenação de Projetos de Alta Disponibilidade de Dados, utilizando Database Mirroring, Replicação Transacional e Merge, Log Shipping. Atualmente trabalho como Administrador de Banco de Dados no FIT - Instituto de Tecnologia da Flextronics, como também, Consultor em Projetos de Tunnig e Performance para clientes, bem como, Professor Titular na Fatec São Roque. Desde 2008 exerço a função de Professor Universitário, para as disciplinas de Banco de Dados, Administração, Modelagem de Banco de Dados, Programação em Banco de Dados, Sistemas Operacionais, Análise e Projetos de Sistemas, entre outras. Possuo titulações e Reconhecimentos: Microsoft MVP, MCC, MSTC e MIE.
Esse post foi publicado em Dicas, Material de Apoio, Mundo SQL Server, VIRTUAL PASS BR e marcado , , , , , , , , . Guardar link permanente.

2 respostas para Conhecendo a Stored Procedure não documentada MSunmarkreplinfo

  1. Fabricio Lima disse:

    Massa… Como eu digo, vivendo e aprendendo!!!

    Obrigado por compartilhar a solução.

    Abraços.

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s