Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
azure SQL Managed Instance
Ve výchozím nastavení transakční replikace provádí všechny změny dat u odběratelů prostřednictvím uložených procedur, které jsou generovány interními postupy, pro každý článek tabulky v publikaci. Tři procedury (každá z nich pro vložení, aktualizace a odstranění) se zkopírují do odběratele a provedou se, když je vložení, aktualizace nebo odstranění replikováno odběrateli.
Když dojde ke změně schématu v tabulce v aplikaci SQL Server Publisher, replikace tyto postupy automaticky vygeneruje voláním stejné sady interních skriptovacích procedur tak, aby nové postupy odpovídaly novému schématu (replikace změn schématu není podporována pro Oracle Publishers).
Můžete také zadat vlastní procedury, které nahradí jeden nebo více výchozích procedur. Vlastní postupy by se měly změnit, pokud změna schématu ovlivní proceduru. Pokud například procedura odkazuje na sloupec, který je vynechán ve změně schématu, měly by být odkazy na sloupec odebrány z procedury.
Existují dva způsoby, jak replikace může předat novou vlastní proceduru odběratelům:
- Použití vlastního postupu skriptování k nahrazení výchozích hodnot používaných replikací
- Použití skriptu, který obsahuje novou definici vlastní procedury
Použití vlastního postupu skriptování k nahrazení výchozích hodnot používaných replikací
Při spuštění sp_addarticle se ujistěte, že je bit @schema_option0x02 nastaven na true.
Poznámka:
Definice vlastní uložené procedury musí být skriptována pomocí dynamické Transact-SQL uvnitř obálkové uložené procedury. Procedura obálka musí také obsahovat parametr @artid typu int, aby se zajistilo, že je vytvořena na odběrateli.
Spusťte sp_register_custom_scripting a zadejte hodnotu parametru insertupdatedelete a název vlastního skriptovacího postupu pro parametr @value.
Při příští změně schématu volá replikace tuto uloženou proceduru, aby skriptoval definici pro novou uživatelsky definovanou vlastní uloženou proceduru a poté rozšíří proceduru do každého odběratele.
Příklad
V tomto příkladu předpokládejme, že vydavatel a odběratel jsou již nakonfigurovány a chcete vytvořit vlastní delete uloženou proceduru.
Na odběrateli vytvořte tabulku, která předvede vlastní skript pro odstranění.
USE [SubscriberDB]; GO CREATE TABLE DeleteLogging (id INT PRIMARY KEY); GOPřidejte článek z Publisheru. Všimněte si hodnot parametru
@schema_option,@ins_cmd,@upd_cmda@del_cmdparametrů:USE [PublisherDB]; EXECUTE sp_addarticle @publication = N'PubName1', @article = N'Purchases', @source_owner = N'dbo', @source_object = N'Purchases', @type = N'logbased', @description = NULL, @creation_script = NULL, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509F, @identityrangemanagementoption = N'manual', @destination_table = N'Purchases', @destination_owner = N'dbo', @vertical_partition = N'false', @ins_cmd = N'CALL sp_MSins_dboPurchases', -- default @del_cmd = N'CALL custom_delete', -- custom @upd_cmd = N'SCALL sp_MSupd_dboPurchases'; -- default GOVytvořte uloženou proceduru, která vygeneruje skript pro uloženou proceduru
custom_delete, kterou chcete použít na odběrateli. Toto je procedura typu wrapper uložená v systému, jak bylo uvedeno dříve.Vrácení nenulových hodnot z této uložené procedury vede k tomu, že
custom_deletese na odběrateli nevytvoří. ProceduraSELECTby měla vrátit úplnouCREATEdefinici uložené procedury, která bude použita pro příjemce.Poznamenejte si použití požadovaného
@artidparametru.USE [PublisherDB]; GO CREATE OR ALTER PROCEDURE script_custom_delete (@artid INT) AS BEGIN SELECT 'CREATE OR ALTER PROCEDURE custom_delete @pkc1 INT AS BEGIN INSERT INTO DeleteLogging (id) VALUES (@pkc1) END'; RETURN 0; END GOZaregistrujte vlastní skript v Publisheru.
USE [PublisherDB]; GO EXECUTE sp_register_custom_scripting @type = 'delete', @value = 'script_custom_delete', @publication = 'PubName1', @article = 'Purchases'; GOPřidejte předplatné. V tomto příkladu
@sync_typeje parametr nastaven nareplication support only, takže se nepoužívá žádný snímek.USE [PublisherDB]; GO EXECUTE sp_addsubscription @publication = N'PubName1', @subscriber = @@SERVERNAME, @destination_db = N'SubscriberDB', @subscription_type = N'Push', @sync_type = N'replication support only', @article = N'all', @update_mode = N'read only', @subscriber_type = 0; GO
Použití skriptu, který obsahuje novou definici vlastní procedury
Při spuštění sp_addarticle nastavte @schema_option0x02 bit tak, aby false replikace automaticky nevygenerovala vlastní procedury u odběratele.
Před každou změnou schématu vytvořte nový soubor skriptu a zaregistrujte skript s replikací spuštěním sp_register_custom_scripting. Zadejte hodnotu custom_script parametru @type a cestu ke skriptu v Publisheru pro parametr @value .
Při příští změně příslušného schématu se tento skript spustí u každého odběratele ve stejné transakci jako příkaz DDL. Po provedení změny schématu se skript neregistruje. Skript je nutné znovu zaregistrovat, aby se spustil po následné změně schématu.