none
Problema com Aplicação do Snapshot quando existem campos não Replicados RRS feed

  • Pergunta

  • Olá,

    Tenho uma replicação merge configurada entre 2 bases(Utilizei a merge devido a necessidade de eu ter que customizar o tratamento de conflitos de algumas tabelas), na configuração de algumas tabelas eu coloquei alguns campos para não terem os valores replicados, mas eles existem em ambas as bases (As duas estão identicas). Na primeira aplicação do Snapshot, percebi que estava alegando em algumas SP e duas Views que estava referenciando campos que não exisitam na base, verifiquei que os campos exisitam nas bases, mas eram exatamente campos que eu tinha marcado para não terem os valores replicados. Isso é assim mesmo? Posso estar fazendo algo errado? Quando coloquei todos os campos para terem os valores replicados tudo funcionou perfeitamente

    A view é so um select no campo, as SP são chamadas em um trigger que tenho aqui. O objetivo de ter tirado esses campos da replicação é que eles são mantidos por esse trigger. Se atualizo um dado de uma dada tabela ele faz a atualização desses campos não replicados(So essa trigger que altera o valor deles) de uma outra, mas como essa atualização da tabela pode envolver mais de 3000 updates, fiz essa configuração, pois acho que vai gerar um pacote de atualização muito grande. Estou fazendo certo? Existe outra forma de fazer isso?

    []s
    Lucas Yoshida
    terça-feira, 7 de abril de 2009 20:01

Respostas

  • Galvão,

    Achei o problema, estava comendo mosca, eu ia inicializar a subscrição com um backup da base do publicador, por conta disso criei manualmente a coluna, seguindo os passos descritos em http://msdn.microsoft.com/pt-br/library/ms152488.aspx, porem quando criei a rowguid, esqueci de especificar a mesma como ROWGUIDCOL, logo quando o snapshot tentava aplicar o script .prc ele faz referencias a coluna como ROWGUIDCOL, como ela não existia dava erro. Descobri isso depois de dar uma analisada nos arquivos do snapshot. O interessante que ao inves de alegar que não achou a rowguidcol ele de erro na linha acima no codigo do snapshot, por isso que estava dificil achar o problema.

    Vou dar essa thread como respondida.

    []s
    Lucas Yoshida
    • Marcado como Resposta Lucas Yoshida segunda-feira, 25 de maio de 2009 19:22
    segunda-feira, 25 de maio de 2009 19:22
  • Galvão,

    Estou usando o SQL 2008, como estou fazendo o teste ainda, apaguei tudo restaurei o mesmo backup da base nos dois servidores e reconfigurei a replicação toda de novo, mas na criação da mesma ja tirei da replicação as colunas que não queria que fossem replicadas, mesmo assim continuou o mesmo erro, quando ele vai aplicar o snapshot inicial ele agarra como por exemplo nesse ponto aqui

    Error messages:The schema script 'sp_movi9230ef32_753.sch' could not be propagated to the subscriber. (Source: MSSQL_REPL, Error number: MSSQL_REPL-2147201001)
    Get help:
    http://help/MSSQL_REPL-2147201001
    Invalid column name 'ESTCODPROX'. (Source: MSSQLServer, Error number: 207)
    Get help:
    http://help/207
    Invalid column name 'MREQUERACAO'. (Source: MSSQLServer, Error number: 207)
    Get help:
    http://help/207


    Ja verifiquei mais de uma vez e essas colunas existem e o codigo da SP esta correto, essas colunas são exatamente 2 colunas que não tem os valores replicados, mas existem nas duas bases (Os backups são identicos), quando eu configuro esses 2 campos para serem replicados, eu consigo aplicar o snapshot sem problemas.

    Não consigo mais imaginar o que possa ser o problema. Você tem mais alguma sugestão?

    []s


    Lucas Yoshida
    quarta-feira, 15 de abril de 2009 18:32

Todas as Respostas

  • Lucas,

    A sua dúvida é como remover estes campos que estão sendo replicados e utilizados pela view?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 8 de abril de 2009 17:05
    Moderador
  • Galvão,

    Eu não quero que algumas colunas sejam replicadas, pois vou deixar os triggers que atualizam elas sendo executados nas duas bases durante a replicação, assim a quantidade de dados a serem replicados será menor. O que esta me gerando problema é que na hora que o snapshot esta sendo aplicado, mais exatamente o snapshot das SPs usadas nos triggers e de um View que fazem referencia a um desses campos não replicados, ele alega um erro, fala que a coluna X chamada na SP ou an View não existe na base, porem eu ja verifiquei mais de uma vez e esses campos estão na base sim. Fiz o teste e coloquei para todos os campos de todas as tabelas terem os valores replicados e não tive problemas com o snapshot (Eu gerei um novo).

    Basicamente é o seguinte

    Tenho uma tabela(Tabela1) com os campos X1, X2 e X3
    Tenho uma SP que faz referencia a X2 da Tabela1
    Configuro a replicação para replicar a SP e a Tabela1, sendo que apenas os campos X1 e X3
    Na hora que vou aplicar o snapshot na outra base ele da erro na SP falando que não encontra o campo X2 na base, sendo que restaurei o memso backup da base nos dois servidores.


    Era para ser assim mesmo?

    []s


    Lucas Yoshida
    quarta-feira, 8 de abril de 2009 23:18
  • Lucas,

    Entendi, então você deseja remover da replicação algumas colunas que estão sendo utilizadas e foram adicionados no momento da geração dos artigos para a replicação.

    Neste caso você terá que parar a sua replicação e tentar remover na estrutura de configuração da publicação estas colunas, mas se não estou enganado esse tipo de operação as vezes não é suportada com a replicação já criado, talvez seja necessário recriar toda estrutura da replicação, ainda mais se você estiver trabalhando com o SQL Server 2000.

     


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 9 de abril de 2009 12:42
    Moderador
  • Galvão,

    Estou usando o SQL 2008, como estou fazendo o teste ainda, apaguei tudo restaurei o mesmo backup da base nos dois servidores e reconfigurei a replicação toda de novo, mas na criação da mesma ja tirei da replicação as colunas que não queria que fossem replicadas, mesmo assim continuou o mesmo erro, quando ele vai aplicar o snapshot inicial ele agarra como por exemplo nesse ponto aqui

    Error messages:The schema script 'sp_movi9230ef32_753.sch' could not be propagated to the subscriber. (Source: MSSQL_REPL, Error number: MSSQL_REPL-2147201001)
    Get help:
    http://help/MSSQL_REPL-2147201001
    Invalid column name 'ESTCODPROX'. (Source: MSSQLServer, Error number: 207)
    Get help:
    http://help/207
    Invalid column name 'MREQUERACAO'. (Source: MSSQLServer, Error number: 207)
    Get help:
    http://help/207


    Ja verifiquei mais de uma vez e essas colunas existem e o codigo da SP esta correto, essas colunas são exatamente 2 colunas que não tem os valores replicados, mas existem nas duas bases (Os backups são identicos), quando eu configuro esses 2 campos para serem replicados, eu consigo aplicar o snapshot sem problemas.

    Não consigo mais imaginar o que possa ser o problema. Você tem mais alguma sugestão?

    []s


    Lucas Yoshida
    quarta-feira, 15 de abril de 2009 18:32
  • Lucas,

    Realmente é muito estranho isso.

    Você já tentou configurar na base que esta recebendo os dados replicados, para que estas duas colunas aceitem valores nulos?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 16 de abril de 2009 17:06
    Moderador
  • Galvão,

    Vi aqui, eu tava fazendo besteira, olhei uma coisa aqui errada e achei que tava com problemas, ja consegui resolver.


    Agora to com outro problema, Eu configurei toda a replicação de teste aqui, com so uma tabela e uma view, tirei 2 colunas da replicação, configurei para quando um objeto ja existir no subscriber ele ser mantido sem alterações, adicionei manulamente a coluna rowguid na base do subscriber (Eu usei o mesmo scritp de criação nas duas bases), segue ele abaixo:
    - Scripts to create the database

    CREATE DATABASE [Teste]

    CREATE TABLE [dbo].[CONSTS](
    [CNTID] [int] NOT NULL,
    [CNTCARREGARALERTAS] [char](1) NULL,
    [CNTINCONSISTALOC] [datetime] NULL,
    [CNTLIMITEMEMBRO] [int] NULL,
    [CALID] [int] NULL,
    [CNTRECDATALIMITE] [datetime] NULL,
    [ATVMETRICA5NOME] [varchar](50) NULL,
    [CNTPODEVEREQUIPE] [char](1) NULL,
    [CNTRECDATAZEROGER] [datetime] NULL,
    [CNTTEXT] [text] NULL,
    [CNTINTCODPRJ] [int] NULL,
    [rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
    CONSTRAINT [CNTS_PK] PRIMARY KEY CLUSTERED
    (
    [CNTID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

    CREATE VIEW [dbo].[V_Teste]
    AS
    SELECT
    CNTID,
    CALID,
    CNTRECDATAZEROGER,
    CNTPODEVEREQUIPE
    FROM CONSTS
    GO

     - Scripts To create the replication

    use master
    exec sp_replicationdboption @dbname = N'Teste', @optname = N'merge publish', @value = N'true'
    GO

    use [Teste]
    exec sp_addmergepublication @publication = N'Lucas', @description = N'Merge publication of database ''Teste'' from Publisher ''Server01''.', @sync_mode = N'native', @retention = 14, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'true', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, @ftp_subdirectory = N'ftp', @ftp_login = N'anonymous', @allow_subscription_copy = N'false', @add_to_active_directory = N'false', @dynamic_filters = N'false', @conflict_retention = 14, @keep_partition_changes = N'false', @allow_synctoalternate = N'false', @max_concurrent_merge = 0, @max_concurrent_dynamic_snapshots = 0, @use_partition_groups = N'false', @publication_compatibility_level = N'100RTM', @replicate_ddl = 1, @allow_subscriber_initiated_snapshot = N'false', @allow_web_synchronization = N'false', @allow_partition_realignment = N'true', @retention_period_unit = N'days', @conflict_logging = N'both', @automatic_reinitialization_policy = 0
    GO

    exec sp_addpublication_snapshot @publication = N'Lucas', @frequency_type = 4, @frequency_interval = 14, @frequency_relative_interval = 1, @frequency_recurrence_factor = 0, @frequency_subday = 1, @frequency_subday_interval = 5, @active_start_time_of_day = 500, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 0, @publisher_login = N'sa', @publisher_password = N''
    exec sp_grant_publication_access @publication = N'Lucas', @login = N'sa'
    GO
    exec sp_grant_publication_access @publication = N'Lucas', @login = N'NT AUTHORITY\SYSTEM'
    GO
    exec sp_grant_publication_access @publication = N'Lucas', @login = N'distributor_admin'
    GO

    use [Teste]
    exec sp_addmergearticle @publication = N'Lucas', @article = N'CONSTS', @source_owner = N'dbo', @source_object = N'CONSTS', @type = N'table', @description = N'', @creation_script = N'', @pre_creation_cmd = N'none', @schema_option = 0x000000010C034FD1, @identityrangemanagementoption = N'none', @destination_owner = N'dbo', @force_reinit_subscription = 1, @column_tracking = N'false', @subset_filterclause = N'', @vertical_partition = N'true', @verify_resolver_signature = 1, @allow_interactive_resolver = N'false', @fast_multicol_updateproc = N'true', @check_permissions = 0, @subscriber_upload_options = 0, @delete_tracking = N'true', @compensate_for_errors = N'false', @stream_blob_columns = N'true', @partition_options = 0
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'CNTID', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'CNTCARREGARALERTAS', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'CNTINCONSISTALOC', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'CNTLIMITEMEMBRO', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'CNTRECDATALIMITE', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'ATVMETRICA5NOME', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'CNTPODEVEREQUIPE', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'CNTRECDATAZEROGER', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'CNTTEXT', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    exec sp_mergearticlecolumn @publication = N'Lucas', @article = N'CONSTS', @column = N'rowguid', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
    GO
    use [Teste]
    exec sp_addmergearticle @publication = N'Lucas', @article = N'V_Teste', @source_owner = N'dbo', @source_object = N'V_Teste', @type = N'view schema only', @description = N'', @creation_script = N'', @pre_creation_cmd = N'none', @schema_option = 0x0000000008000001, @destination_owner = N'dbo', @destination_object = N'V_Teste', @force_reinit_subscription = 1
    GO

    use [Teste]
    exec sp_addmergesubscription @publication = N'Lucas', @subscriber = N'Server02', @subscriber_db = N'Testes', @subscription_type = N'Push', @sync_type = N'Automatic', @subscriber_type = N'Global', @subscription_priority = 75, @description = N'', @use_interactive_resolver = N'False'
    exec sp_addmergepushsubscription_agent @publication = N'Lucas', @subscriber = N'Server02', @subscriber_db = N'Testes', @job_login = null, @job_password = null, @subscriber_security_mode = 0, @subscriber_login = N'sa', @subscriber_password = null, @publisher_security_mode = 1, @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0
    GO


    Consgui gerar o snapshot sem problemas, mas quando eu tento aplicar o mesmo, retorna o seguinte erro:

    Command attempted:
    {call sp_MSsetconflicttable (N'CONSTS', N'MSmerge_conflict_Lucas_CONSTS', N'Server01', N'Teste', N'Lucas')}

    Error messages:
    Incorrect syntax near 'CNTID'. (Source: MSSQLServer, Error number: 102)
    Get help: http://help/102
    The merge process was unable to deliver the snapshot to the Subscriber. If using Web synchronization, the merge process may have been unable to create or write to the message file. When troubleshooting, restart the synchronization with verbose history logging and specify an output file to which to write. (Source: MSSQL_REPL, Error number: MSSQL_REPL-2147201001)
    Get help: http://help/MSSQL_REPL-2147201001


    Eu não entendi o porque, você está vendo algum erro no script de configuração?

    []s


    Lucas Yoshida
    segunda-feira, 20 de abril de 2009 17:50
  • Lucas,

    Eu não estou vendo erros no script de configuração, somente perguntei sobre isso.

    A mensagem de erro esta informando para você reinicializar o processo de replicação e especificar novamente o arquivo de saída dos dados, para queo o SQL Server possa escrever.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 20 de abril de 2009 19:03
    Moderador
  • Galvão,

    tentei reinicailizar a repicação e não funcionou continua a dar esse erro, tentei também apagar e criar novamente a replicação, mas mesmo assim o erro continua. Você tem mais alguma sugestão?

    []s
    Lucas Yoshida
    quinta-feira, 23 de abril de 2009 11:49
  • Lucas,

    Cara, eu ainda não realizei testes de replicação de dados no SQL Server 2008, então estou ficando um pouco surpreso com estes erros.

    Deixa eu perguntar alguma coisa, você já baixou todas as atualizações do SQL Server 2008?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 23 de abril de 2009 17:00
    Moderador
  • Sim, a minha versão esta atualizada.

    Está realmente confuso isso, estou tentando indetificar algum possivel erro nos scripts gerados do snapshot, mas ainda não estou achando nada :S

    Lucas Yoshida
    sexta-feira, 24 de abril de 2009 03:15
  • Lucas,

    Esta muito confuso, eu mesmo não estou conseguindo entender, parece que o SQL Server não esta conseguindo entender o que deve ou não ser replicado!!!


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 24 de abril de 2009 16:34
    Moderador
  • Galvão,

    Achei o problema, estava comendo mosca, eu ia inicializar a subscrição com um backup da base do publicador, por conta disso criei manualmente a coluna, seguindo os passos descritos em http://msdn.microsoft.com/pt-br/library/ms152488.aspx, porem quando criei a rowguid, esqueci de especificar a mesma como ROWGUIDCOL, logo quando o snapshot tentava aplicar o script .prc ele faz referencias a coluna como ROWGUIDCOL, como ela não existia dava erro. Descobri isso depois de dar uma analisada nos arquivos do snapshot. O interessante que ao inves de alegar que não achou a rowguidcol ele de erro na linha acima no codigo do snapshot, por isso que estava dificil achar o problema.

    Vou dar essa thread como respondida.

    []s
    Lucas Yoshida
    • Marcado como Resposta Lucas Yoshida segunda-feira, 25 de maio de 2009 19:22
    segunda-feira, 25 de maio de 2009 19:22