AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-297910

fumblinggravy's questions

Martin Hope
fumblinggravy
Asked: 2024-07-18 13:53:05 +0800 CST

A replicação transacional está tentando atualizar uma linha que ainda não existe. Por que?

  • 5
Esta questão foi migrada do Stack Overflow porque pode ser respondida no Stack Exchange dos Administradores de Banco de Dados. Migrado há 6 dias .

Estou mexendo no SQL Server 2019 e na replicação transacional há algum tempo e me deparei com um obstáculo. Olhando para o monitor de replicação, estou vendo o erro "A linha não foi encontrada no Assinante ao aplicar o comando UPDATE replicado para a Tabela '[dbo].[MessageQueue]' com Chave(s) Primária(s): [Id] = 6039250" . Este erro ocorre logo no primeiro lote que o distribuidor envia ao assinante.

Eu sei que a linha acima foi adicionada após meu backup do editor, mas eu esperava que o INSERT fosse replicado antes do UPDATE.

Editor/distribuidor: padrão local do SQL Server 2019

Assinante: Instância Gerenciada de SQL

Estou usando o método de backup/restauração para inicializar, pois quando coloco isso em produção, estou lidando com um banco de dados de 2 TB. Meu banco de dados de teste tem apenas 150 GB.

Abaixo está o processo que segui para levantar as coisas:

  • Crie o editor, fiz isso através do assistente SSMS.
  • Defina as opções de assinatura da publicação para "Permitir inicialização de arquivos de backup" = True
  • Faça backup do banco de dados em uma conta de armazenamento do Azure. Usei uma chave de acesso da conta de armazenamento como credencial. Também não queria quebrar a cadeia de log do meu servidor DPM, então usei o COPY_ONLY.
CREATE CREDENTIAL [credential_name_here]
WITH IDENTITY = '<storage account name>',
SECRET = '<redacted>'

BACKUP DATABASE [myDatabase] TO  URL = N'https://<redacted>.blob.core.windows.net/backups/myDatabase_replication.bak' 
WITH CREDENTIAL = 'credential_name_here'
,COMPRESSION, COPY_ONLY, STATS = 5
  • Então, no meu SQL MI, executo o comando de restauração
use master
RESTORE DATABASE [myDatabase] 
FROM URL = N'https://<redacted>.blob.core.windows.net/backups/myDatabase_replication.bak'
  • Finalmente, criei a assinatura usando algum SQL.

Observe que tenho algumas opções comentadas. Tentei usar @sync_type, @backupdevicetype& @backupdevicenamemas não consegui superar o erro 'Não é possível abrir o dispositivo de backup' https://redacted.blob.core.windows.net/backups/myDatabase_replication.bak '. Erro 86 do sistema operacional (A senha de rede especificada não está correta). '.

Por alguma razão desconhecida, sp_addsubscription não suporta a passagem de uma credencial... bem, pelo que pude encontrar de qualquer maneira.

USE [myDatabase]
GO
EXEC sp_addsubscription 
@publication = N'pub_myDatabase', 
@subscriber = '<redacted>.<redacted>.database.windows.net', 
@destination_db = N'myDatabase',
@sync_type = 'replication support only',
--@sync_type = 'initialize with backup',
--@backupdevicetype ='URL',
--@backupdevicename = 'https://<redacted>.blob.core.windows.net/backups/myDatabase_replication.bak',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0

-- Configure the Distribution Agent job
exec [myDatabase]..sp_addpushsubscription_agent 
     @publication = N'pub_myDatabase', 
     @subscriber = '<redacted>.<redacted>.database.windows.net', 
     @subscriber_db = N'myDatabase', 
     @job_login = NULL, @job_password = NULL, 
     @subscriber_security_mode = 0, 
     @subscriber_login = '<redacted>', @subscriber_password = '<redacted>',
     @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0 -- Continuous
GO

-- Start Distribution agent
exec [myDatabase]..sp_startpushsubscription_agent 
     @publication = N'pub_myDatabase', 
     @subscriber = '<redacted>.<redacted>.database.windows.net', 
     @subscriber_db = N'myDatabase'
GO

É nesse ponto que verifico o monitor de replicação e vejo o erro citado anteriormente. Qualquer dica e/ou orientação seria muito apreciada!

sql-server
  • 1 respostas
  • 46 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve