Kiadvány létrehozása

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

Ez a cikk bemutatja, hogyan hozhatunk létre kiadványt SQL Server-ben az SQL Server Management Studio, Transact-SQL vagy Replication Management Objects (RMO) használatával.

Korlátozások és megkötések

  • A publikáció és a cikk nevei nem tartalmazhatják a következő karaktereket: , , , , , |:, ", </\?'vagy .>][*% Ha az adatbázisban lévő objektumok tartalmaznak valamelyik ilyen karaktert, és szeretnéd replikálni őket, akkor meg kell határoznod egy olyan cikknevet, amely eltér a Cikk Tulajdonságok - <Cikk> párbeszédablakban szereplő objektum nevétől, amely a varázsló Cikkek oldalán érhető el.

Biztonság

Ha lehetséges, kérje meg a felhasználókat, hogy futásidőben adjanak meg biztonsági hitelesítő adatokat. Ha hitelesítő adatokat kell tárolnia, használja a Microsoft Windows .NET-keretrendszer által biztosított titkosítási szolgáltatásokat .

Az SQL Server Management Studio használata

Készíts publikációkat és definiáld a cikkeket az Új Kiadás Varázslóval. A kiadvány létrehozása után tekintse meg és módosítsa a kiadvány tulajdonságait a Publikáció tulajdonságai - <Kiadvány> párbeszédablakban. Az Oracle adatbázisból való kiadvány létrehozásáról információért lásd: "Kiadvány létrehozása Oracle adatbázisból".

Kiadvány létrehozása és cikkek definiálása

  1. Csatlakozzon a Publisherhez a Microsoft SQL Server Management Studióban, majd bontsa ki a kiszolgálócsomópontot.

  2. Kibővítse a Replikáció mappát, majd jobb kézzel kattintson a Helyi Kiadványok mappára.

  3. Válassz Új Kiadványt.

  4. Az alábbiakhoz kövesse az Új publikáció varázsló oldalait:

    • Határozz meg egy Distributort, ha a szerveren még nem volt konfigurálva a disztribúció. További információért a terjesztés konfigurálásáról lásd: Közzététel és terjesztés konfigurálása.

      Ha a Forgalmazó oldalon megadod, hogy a Publisher szerver önálló Forgalmazóként (helyi Distributorként) fog működni, és a szerver nincs Distributorként konfigurálva, akkor az Új Kiadvány Varázsló konfigurálja a szervert. A Snapshot mappa oldalon megadod a Forgalmazó alapértelmezett snapshot mappáját. A snapshot mappa egyszerűen egy könyvtár, amelyet megosztottként jelöltél; Azoknak az ügynököknek, akik ebből a mappából olvasnak és írnak oda, elegendő jogosultsággal kell rendelkezniük ahhoz, hogy hozzáférjenek. További információért a mappa megfelelő biztonságáról lásd: Secure the Snapshot folder.

      Ha megadod, hogy egy másik szerver működjön a Forgalmazóként, akkor az Adminisztratív Jelszó oldalon jelszót kell megadnod a Publisher és a Forgalmazó közötti kapcsolatokhoz. Ennek a jelszónak meg kell egyeznie azzal a jelszóval, amelyet akkor adtak meg, amikor a Publishert a távoli Disztribútornál engedélyezték.

      További információkért lásd: A terjesztés konfigurálása.

    • Válassz egy publikációs adatbázist.

    • Válassz kiadványtípust. További információért lásd: Replikáció típusai.

    • Megadni az adatokat és adatbázis-objektumokat, amelyeket a publikációhoz lehet tenni; opcionálisan oszlopokat szűrhetsz táblázatcikkekből, és állítsd be az cikkelem tulajdonságait.

    • Opcionálisan szűrheted sorokat a táblázat cikkeiről. További információ: Közzétett adatok szűrése.

    • Állítsd be a Snapshot Agent ütemtervet.

    • Adja meg, hogy a következő replikációs ügynökök milyen hitelesítő adatokkal futnak és létesítenek kapcsolatot:

    • Igény szerint szkriptelheti a közzétételt. További információért lásd: Szkriptreplikáció.

    • Határozz meg a kiadvány nevét.

Használd a Transact-SQL-t

A publikációk programozott módon hozhatók létre replikációs tárolt eljárásokkal. A tárolt eljárások a létrehozott kiadvány típusától függnek.

Készíts egy pillanatképet vagy tranzakciós publikációt

  1. A Közzétevőn, a közzétételi adatbázisban hajtsa végre a sp_replicationdboption (Transact-SQL) utasítást, hogy engedélyezze az aktuális adatbázis közzétételét pillanatkép- vagy tranzakciós replikáció használatával.

  2. Egy tranzakciós kiadványnál határozd meg, hogy létezik-e Log Reader Agent munka a kiadvány adatbázisában. (Ez a lépés nem szükséges a pillanatkép publikációkhoz.)

    • Ha létezik Log Reader Agent állás a publikációs adatbázishoz, lépj a 3. lépéshez.

    • Ha nem vagy biztos benne, hogy létezik-e Log Reader Agent munka egy publikált adatbázishoz, hajtsd végre a sp_helplogreader_agent (Transact-SQL ) a kiadvány adatbázis Publisher-ján.

    • Ha az eredményhalmaz üres, hozz létre egy Log Reader Agent feladatot. A Közzétevőn hajtsa végre a sp_addlogreader_agent (Transact-SQL) parancsot. Adja meg azokat a Microsoft Windows hitelesítő adatokat, amelyekkel az ügynök a(z) @password és @job_name esetében fut. Ha az ügynök SQL Server-hitelesítést használ a Publisherhez való csatlakozáskor, akkor meg kell adnia egy értéket a(z) 0 számára a(z) @publisher_security_mode esetében, valamint az SQL Server bejelentkezési adatait a(z) @publisher_login és @publisher_password számára. Folytassa a 3. lépéssel.

  3. A Publisher után hajtsd végre sp_addpublication (Transact-SQL). Adja meg a(z) @publication közzététel nevét, és a(z) @repl_freq paraméterhez pillanatképes közzététel esetén snapshot, tranzakciós közzététel esetén pedig continuous értéket. Jelölje meg más publikációs lehetőségeket. Ez határozza meg a kiadványt.

    Note

    A kiadvány nevei nem tartalmazhatják az alábbi karaktereket:

    %, *, ], |, :, ", \, <, ?, /, > vagy [.

  4. A Közzétevőn hajtsa végre a(z) sp_addpublication_snapshot (Transact-SQL) utasítást. Adja meg a 3. lépésben a @publication elemhez használt publikáció nevét, valamint a Windows hitelesítő adatokat, amelyekkel a Snapshot Agent a @snapshot_job_name és a @password elemhez fut. Ha az ügynök SQL Server-hitelesítést használ a Publisherhez való csatlakozáskor, akkor meg kell adni egy értéket a(z) 0 számára, valamint az @publisher_security_mode SQL Server-bejelentkezési adatait a(z) @publisher_login és publisher_password számára. Ez létrehoz egy Snapshot Agent állást a kiadvány számára.

    Important

    Amikor távoli terjesztővel konfigurál egy közzétevőt, a rendszer az összes paraméterhez megadott értéket, beleértve a job_login és job_password, egyszerű szövegként küldi el a terjesztőnek. A tárolt eljárás végrehajtása előtt titkosítania kell a Publisher és a távoli terjesztő közötti kapcsolatot. További információ: Titkosított kapcsolatok engedélyezése az adatbázismotorhoz (SQL Server Konfigurációkezelő)

  5. Cikkek hozzáadása a kiadványhoz. További információ: Cikk definiálása.

  6. Indítsa el a Snapshot Agent feladatot a kiadvány kezdeti pillanatképének létrehozásához. További információ: A kezdeti pillanatkép létrehozása és alkalmazása.

Létrehozz egy összeolvasztott kiadványt

  1. A Publisher után hajtsuk végre a sp_replicationdboption (Transact-SQL) parancsot, hogy lehetővé tegye az aktuális adatbázis közzétételét merge replikációval.

  2. A publikációs adatbázis Publisher végén hajtsuk végre a sp_addmergepublication (Transact-SQL) parancsot. Határozd meg a kiadvány @publication nevét és egyéb kiadási lehetőségeket. Ez határozza meg a kiadványt.

    Note

    A kiadvány nevei nem tartalmazhatják az alábbi karaktereket:

    %, *, ], |, :, ", \, <, ?, /, >, vagy [.

  3. A Közzétevőn hajtsa végre a(z) sp_addpublication_snapshot (Transact-SQL) utasítást. Adja meg a 2. lépésben használt publikáció nevét a @publication esetében, valamint azokat a Windows-hitelesítő adatokat, amelyek alatt a Snapshot Agent fut a @snapshot_job_name és a @password esetében. Ha az ügynök SQL Server-hitelesítést fog használni a Közzétevőhöz való csatlakozáskor, akkor meg kell adnia egy értéket a(z) 0 és @publisher_security_mode számára, valamint az SQL Server bejelentkezési adatait a(z) @publisher_login és @publisher_password számára. Ez létrehoz egy Snapshot Agent állást a kiadvány számára.

    Important

    Amikor távoli terjesztővel konfigurál egy közzétevőt, a rendszer az összes paraméterhez megadott értéket, beleértve a job_login és job_password, egyszerű szövegként küldi el a terjesztőnek. A tárolt eljárás végrehajtása előtt titkosítania kell a Publisher és a távoli terjesztő közötti kapcsolatot. További információ: Titkosított kapcsolatok engedélyezése az adatbázismotorhoz (SQL Server Konfigurációkezelő)

  4. Cikkek hozzáadása a kiadványhoz. További információ: Cikk definiálása.

  5. Indítsa el a Snapshot Agent feladatot a kiadvány kezdeti pillanatképének létrehozásához. További információ: A kezdeti pillanatkép létrehozása és alkalmazása.

Példa (Transact-SQL)

Ez a példa egy tranzakciós kiadványt hoz létre. A szkriptváltozók segítségével átadják a Windows hitelesítéseket, amelyek a Snapshot Agent és a Log Reader Agent feladatainak létrehozásához szükségesek.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

Ez a példa egy egyesítéses közzétételt hoz létre. A szkriptváltozókat arra használják, hogy átadják a Windows igazolványokat, amelyek szükségesek a Snapshot Agent feladatának létrehozásához.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption 
  @dbname=@publicationDB, 
  @optname=N'merge publish',
  @value = N'true' 

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks2022]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks2022.',
  @publication_compatibility_level  = N'120RTM';

-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = @login, 
  @job_password = @password;
GO

Használj replikációs menedzsment objektumokat (RMO)

Programozott módon is létrehozhatsz publikációkat Replikációs Menedzsment Objektumok (RMO) használatával. Az RMO osztályok, amelyeket a kiadvány létrehozásához használsz, attól függnek, milyen típusú kiadványt készítesz.

Készíts egy pillanatképet vagy tranzakciós publikációt

  1. Hozzon létre kapcsolatot a Publisherrel az ServerConnection osztály használatával.

  2. Hozz létre egy példányt az ReplicationDatabase osztályból a publikációs adatbázishoz, állítsuk be a ConnectionContext tulajdonságot az 1. lépésből származó példányra, ServerConnection és hívjuk meg a LoadProperties metódust. Ha LoadProperties visszaadja falseaz adatokat, ellenőrizd, hogy az adatbázis létezik-e.

  3. Ha a EnabledTransPublishing tulajdonság értéke false, állítsa true értékre.

  4. Tranzakciós publikációhoz ellenőrizd az ingatlan értékét LogReaderAgentExists . Ha ez a truetulajdonság , akkor már létezik egy Log Read Agent feladat ehhez az adatbázishoz. Ha ez a tulajdonság false, tegye a következőket:

  5. Hozz létre egy példányt az TransPublication osztályból, és állítsuk be az alábbi tulajdonságokat ehhez az objektumhoz:

  6. A kiadvány létrehozásához hívd meg a(z) Create metódust.

    Important

    Amikor egy Publishert távoli Distributorral konfigurálunk, az összes tulajdonsághoz megadott értéket, beleértve a(z) SnapshotGenerationAgentProcessSecurity elemet is, sima szövegként küldi el a rendszer a Distributornak. A metódus meghívása előtt titkosítania kell a Publisher és a Create távoli terjesztő közötti kapcsolatot. További információ: Titkosított kapcsolatok engedélyezése az adatbázismotorhoz (SQL Server Konfigurációkezelő)

  7. Hívd a CreateSnapshotAgent metódust, amellyel létrehozhatod a Snapshot Agent állást a publikációhoz.

Létrehozz egy összeolvasztott kiadványt

  1. Hozzon létre kapcsolatot a Publisherrel az ServerConnection osztály használatával.

  2. Hozz létre egy példányt az ReplicationDatabase osztályból a publikációs adatbázishoz, állítsuk be a ConnectionContext tulajdonságot az 1. lépésből származó példányra, ServerConnection és hívjuk meg a LoadProperties metódust. Ha LoadProperties visszaadja falseaz adatokat, ellenőrizd, hogy az adatbázis létezik-e.

  3. Ha a(z) EnabledMergePublishing tulajdonság értéke false, állítsa true értékre, és hívja meg a(z) CommitPropertyChanges elemet.

  4. Hozz létre egy példányt az MergePublication osztályból, és állítsuk be az alábbi tulajdonságokat ehhez az objektumhoz:

  5. Hívja meg a Create metódust a kiadvány létrehozásához.

    Important

    Amikor egy Publishert távoli Distributor használatával konfigurál, az összes tulajdonsághoz megadott értéket, beleértve a(z) SnapshotGenerationAgentProcessSecurity értékét is, egyszerű szövegként elküldi a Distributornak. A metódus meghívása előtt titkosítania kell a Publisher és a Create távoli terjesztő közötti kapcsolatot. További információ: Titkosított kapcsolatok engedélyezése az adatbázismotorhoz (SQL Server Konfigurációkezelő)

  6. Hívd a CreateSnapshotAgent metódust, amellyel létrehozhatod a Snapshot Agent állást a publikációhoz.

Példák (RMO)

Ez a példa lehetővé teszi az AdventureWorks adatbázis tranzakciós kiadását, definiálja a Log Reader Agent feladatot, és létrehozza a AdvWorksProductTran kiadványt. Ehhez a kiadványhoz egy cikket kell meghatározni. A Windows fiók hitelesítő adatai, amelyek a Log Reader Agent és a Snapshot Agent munka létrehozásához szükségesek, futásidőben adják át. Az RMO használatával a snapshot és tranzakciós cikkelyek meghatározásához lásd a Define an Article-t (Definiál egy cikket).

// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
string publisherName = publisherInstance;

ReplicationDatabase publicationDb;
TransPublication publication;

// Create a connection to the Publisher using Windows Authentication.
ServerConnection conn;
conn = new ServerConnection(publisherName);


try
{
    // Connect to the Publisher.
    conn.Connect();

    // Enable the AdventureWorks2022 database for transactional publishing.
    publicationDb = new ReplicationDatabase(publicationDbName, conn);

    // If the database exists and is not already enabled, 
    // enable it for transactional publishing.
    if (publicationDb.LoadProperties())
    {
        if (!publicationDb.EnabledTransPublishing)
        {
            publicationDb.EnabledTransPublishing = true;
        }

        // If the Log Reader Agent does not exist, create it.
        if (!publicationDb.LogReaderAgentExists)
        {
            // Specify the Windows account under which the agent job runs.
            // This account will be used for the local connection to the 
            // Distributor and all agent connections that use Windows Authentication.
            publicationDb.LogReaderAgentProcessSecurity.Login = winLogin;
            publicationDb.LogReaderAgentProcessSecurity.Password = winPassword;

            // Explicitly set authentication mode for the Publisher connection
            // to the default value of Windows Authentication.
            publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = true;

            // Create the Log Reader Agent job.
            publicationDb.CreateLogReaderAgent();
        }
    }
    else
    {
        throw new ApplicationException(String.Format(
            "The {0} database does not exist at {1}.",
            publicationDb, publisherName));
    }

    // Set the required properties for the transactional publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Specify a transactional publication (the default).
    publication.Type = PublicationType.Transactional;

    // Activate the publication so that we can add subscriptions.
    publication.Status = State.Active;

    // Enable push and pull subscriptions and independent Distribition Agents.
    publication.Attributes |= PublicationAttributes.AllowPull;
    publication.Attributes |= PublicationAttributes.AllowPush;
    publication.Attributes |= PublicationAttributes.IndependentAgent;

    // Specify the Windows account under which the Snapshot Agent job runs.
    // This account will be used for the local connection to the 
    // Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;

    // Explicitly set the security mode for the Publisher connection
    // Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;

    if (!publication.IsExistingObject)
    {
        // Create the transactional publication.
        publication.Create();

        // Create a Snapshot Agent job for the publication.
        publication.CreateSnapshotAgent();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "The {0} publication already exists.", publicationName));
    }
}

catch (Exception ex)
{
    // Implement custom application error handling here.
    throw new ApplicationException(String.Format(
        "The publication {0} could not be created.", publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publisherName As String = publisherInstance

Dim publicationDb As ReplicationDatabase
Dim publication As TransPublication

' Create a connection to the Publisher using Windows Authentication.
Dim conn As ServerConnection
conn = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Enable the AdventureWorks2022 database for transactional publishing.
    publicationDb = New ReplicationDatabase(publicationDbName, conn)

    ' If the database exists and is not already enabled, 
    ' enable it for transactional publishing.
    If publicationDb.LoadProperties() Then
        If Not publicationDb.EnabledTransPublishing Then
            publicationDb.EnabledTransPublishing = True
        End If

        ' If the Log Reader Agent does not exist, create it.
        If Not publicationDb.LogReaderAgentExists Then
            ' Specify the Windows account under which the agent job runs.
            ' This account will be used for the local connection to the 
            ' Distributor and all agent connections that use Windows Authentication.
            publicationDb.LogReaderAgentProcessSecurity.Login = winLogin
            publicationDb.LogReaderAgentProcessSecurity.Password = winPassword

            ' Explicitly set authentication mode for the Publisher connection
            ' to the default value of Windows Authentication.
            publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = True

            ' Create the Log Reader Agent job.
            publicationDb.CreateLogReaderAgent()
        End If
    Else
        Throw New ApplicationException(String.Format( _
         "The {0} database does not exist at {1}.", _
         publicationDb, publisherName))
    End If

    ' Set the required properties for the transactional publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Specify a transactional publication (the default).
    publication.Type = PublicationType.Transactional

    'Enable push and pull subscriptions and independent Distribition Agents.
    publication.Attributes = _
    publication.Attributes Or PublicationAttributes.AllowPull
    publication.Attributes = _
    publication.Attributes Or PublicationAttributes.AllowPush
    publication.Attributes = _
    publication.Attributes Or PublicationAttributes.IndependentAgent

    ' Activate the publication so that we can add subscriptions.
    publication.Status = State.Active

    ' Specify the Windows account under which the Snapshot Agent job runs.
    ' This account will be used for the local connection to the 
    ' Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword

    ' Explicitly set the security mode for the Publisher connection
    ' Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True

    If Not publication.IsExistingObject Then
        ' Create the transactional publication.
        publication.Create()

        ' Create a Snapshot Agent job for the publication.
        publication.CreateSnapshotAgent()
    Else
        Throw New ApplicationException(String.Format( _
            "The {0} publication already exists.", publicationName))
    End If
Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
        "The publication {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

Ez a példa lehetővé teszi az AdventureWorks adatbázis merge kiadását, és létrehozza a AdvWorksSalesOrdersMerge kiadványt. A cikkeket továbbra is meg kell határozni ehhez a kiadványhoz. A Windows fiók hitelesítő adatai, amelyek a Snapshot Agent feladat létrehozásához szükségesek, futásidőben kerülnek átadásra. Az RMO merge-cikkek definiálására való használatáról lásd: Cikk definiálása.

// Set the Publisher, publication database, and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";

ReplicationDatabase publicationDb;
MergePublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Enable the database for merge publication.				
    publicationDb = new ReplicationDatabase(publicationDbName, conn);
    if (publicationDb.LoadProperties())
    {
        if (!publicationDb.EnabledMergePublishing)
        {
            publicationDb.EnabledMergePublishing = true;
        }
    }
    else
    {
        // Do something here if the database does not exist. 
        throw new ApplicationException(String.Format(
            "The {0} database does not exist on {1}.",
            publicationDb, publisherName));
    }

    // Set the required properties for the merge publication.
    publication = new MergePublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Enable precomputed partitions.
    publication.PartitionGroupsOption = PartitionGroupsOption.True;

    // Specify the Windows account under which the Snapshot Agent job runs.
    // This account will be used for the local connection to the 
    // Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;

    // Explicitly set the security mode for the Publisher connection
    // Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;

    // Enable Subscribers to request snapshot generation and filtering.
    publication.Attributes |= PublicationAttributes.AllowSubscriberInitiatedSnapshot;
    publication.Attributes |= PublicationAttributes.DynamicFilters;

    // Enable pull and push subscriptions.
    publication.Attributes |= PublicationAttributes.AllowPull;
    publication.Attributes |= PublicationAttributes.AllowPush;

    if (!publication.IsExistingObject)
    {
        // Create the merge publication.
        publication.Create();
        
        // Create a Snapshot Agent job for the publication.
        publication.CreateSnapshotAgent();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "The {0} publication already exists.", publicationName));
    }
}

catch (Exception ex)
{
    // Implement custom application error handling here.
    throw new ApplicationException(String.Format(
        "The publication {0} could not be created.", publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"

Dim publicationDb As ReplicationDatabase
Dim publication As MergePublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Enable the database for merge publication.				
    publicationDb = New ReplicationDatabase(publicationDbName, conn)
    If publicationDb.LoadProperties() Then
        If Not publicationDb.EnabledMergePublishing Then
            publicationDb.EnabledMergePublishing = True
        End If
    Else
        ' Do something here if the database does not exist. 
        Throw New ApplicationException(String.Format( _
         "The {0} database does not exist on {1}.", _
         publicationDb, publisherName))
    End If

    ' Set the required properties for the merge publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Enable precomputed partitions.
    publication.PartitionGroupsOption = PartitionGroupsOption.True

    ' Specify the Windows account under which the Snapshot Agent job runs.
    ' This account will be used for the local connection to the 
    ' Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword

    ' Explicitly set the security mode for the Publisher connection
    ' Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True

    ' Enable Subscribers to request snapshot generation and filtering.
    publication.Attributes = publication.Attributes Or _
        PublicationAttributes.AllowSubscriberInitiatedSnapshot
    publication.Attributes = publication.Attributes Or _
        PublicationAttributes.DynamicFilters

    ' Enable pull and push subscriptions
    publication.Attributes = publication.Attributes Or _
        PublicationAttributes.AllowPull
    publication.Attributes = publication.Attributes Or _
        PublicationAttributes.AllowPush

    If Not publication.IsExistingObject Then
        ' Create the merge publication.
        publication.Create()

        ' Create a Snapshot Agent job for the publication.
        publication.CreateSnapshotAgent()
    Else
        Throw New ApplicationException(String.Format( _
            "The {0} publication already exists.", publicationName))
    End If
Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
        "The publication {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try