Temos um banco de dados SQL Server que está no meio da sincronização e continuará sincronizando por um bom tempo. Gostaria de criar um procedimento armazenado no banco de dados, no entanto, não parece ser possível criar um procedimento armazenado no banco de dados enquanto ele está sincronizando.
Alguém pode me informar se é possível criar um procedimento armazenado no banco de dados enquanto ele está sincronizando? Ou seja, sem Pausar ou Suspender a Sincronização
Estamos executando o SQL Server 15.0.4415.2
Como determinar o Banco de Dados SQL Primário? Fui informado de que se eu atualizar o Banco de Dados Primário, as alterações serão sincronizadas com o banco de dados secundário. Alguém pode me dizer como determinar o que é o Banco de Dados Primário? Pela imagem você pode ver que só consigo visualizar os bancos de dados secundários
Li que criar um procedimento armazenado não altera os dados ou o esquema que está sendo sincronizado. É uma operação de metadados, então os mecanismos de sincronização (por exemplo, replicação transacional, grupos de disponibilidade Always On) não devem ser afetados.
Entretanto, quando tento criar o seguinte procedimento, recebo o seguinte erro:
Msg 3906, Level 16, State 2, Procedure GenerateDeltaTable, Line 1 [Batch Start Line 0]
Failed to update database "xxxxx" because the database is read-only.
CREATE PROCEDURE [dbo].[DeltaTable]
@Domain VARCHAR(100),
@TableName VARCHAR(100),
@DeltaTable VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(MAX);
-- Construct dynamic SQL for dropping and creating the target table
SET @sql = '
IF OBJECT_ID(''' + QUOTENAME(@Domain) + '.' + QUOTENAME(@DeltaTable) + ''', ''U'') IS NOT NULL
DROP TABLE ' + QUOTENAME(@Domain) + '.' + QUOTENAME(@DeltaTable) + ';
SELECT T.*,
LOWER(CONVERT(VARCHAR(64), HASHBYTES(''SHA2_256'',
(SELECT T.* FOR JSON PATH, WITHOUT_ARRAY_WRAPPER, INCLUDE_NULL_VALUES)), 2)) AS signature
INTO ' + QUOTENAME(@Domain) + '.' + QUOTENAME(@DeltaTable) + '
FROM ' + QUOTENAME(@Domain) + '.' + QUOTENAME(@TableName) + ' AS T;';
-- Execute the constructed SQL
EXEC sp_executesql @sql;
END;
Adicione-o ao primário e ele será sincronizado com o secundário.
Você não pode editar os bancos de dados nos nós secundários.
Seu SP não contém uma verificação para garantir que ele seja executado apenas no nó primário. – Stephen Morris - Mo64
Réplicas secundárias legíveis são somente leitura. Apenas alterações no primário podem aparecer em um secundário.