Erstellen einer Veröffentlichung

 

In diesem Thema wird beschrieben, wie eine Veröffentlichung in SQL Server 2016 mithilfe von SQL Server Management Studio, Transact-SQL oder Replikationsverwaltungsobjekten (RMO) erstellt wird.

In diesem Thema

Einschränkungen

  • Veröffentlichung und Artikelnamen dürfen dürfen keines der folgenden Zeichen: %, * , [,], |,:, ","? , ' , \ , / , < , >. Wenn Objekte in der Datenbank eines dieser Zeichen enthalten, und Sie sie replizieren möchten, geben Sie einen Artikelnamen, die sich von den Objektnamen in der Artikeleigenschaften - < Artikel> im Dialogfeld aus der Artikel Seite im Assistenten.

Sicherheit

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Microsoft Windows .NET Framework.

Mit dem Assistenten für neue Veröffentlichung erstellen Sie Veröffentlichungen und definieren Artikel. Nachdem eine Veröffentlichung erstellt wurde, anzeigen und Ändern von Veröffentlichungseigenschaften in die Veröffentlichungseigenschaften - < Veröffentlichung> (Dialogfeld). Informationen zum Erstellen einer Veröffentlichung aus einer Oracle-Datenbank finden Sie unter Erstellen einer Veröffentlichung aus einer Oracle-Datenbank.

So erstellen Sie eine Veröffentlichung und definieren Artikel

  1. Stellen Sie in Microsoft SQL Server Management Studioeine Verbindung mit dem Verleger her, und erweitern Sie dann den Serverknoten.

  2. Erweitern Sie die Replikation Ordner, und klicken Sie dann mit der rechten Maustaste die lokale Publikationen Ordner.

  3. Klicken Sie auf Neue Veröffentlichung.

  4. Folgen Sie den Anweisungen auf den Seiten des Assistenten für neue Veröffentlichung, um folgende Vorgänge auszuführen:

    • Angeben eines Verteilers, falls die Verteilung auf dem Server nicht konfiguriert wurde. Weitere Informationen zum Konfigurieren der Verteilung finden Sie unter Verleger- und Verteilereigenschaften.

      Wenn Sie an der Verteiler Seite, die der Verleger als sein eigener Verteiler (lokaler Verteiler) fungiert, und der Server ist nicht konfiguriert, als Verteiler, Assistenten für neue Veröffentlichung der Server konfiguriert werden kann. Auf der Seite Momentaufnahmeordner geben Sie einen Standardmomentaufnahmeordner für den Verteiler an. Der Momentaufnahmeordner ist lediglich ein von Ihnen freigegebenes Verzeichnis. Agents, die aus diesem Ordner lesen bzw. in den Ordner schreiben, benötigen ausreichende Zugriffsberechtigungen. Weitere Informationen zur Absicherung des Ordners finden Sie unter Sichern des Momentaufnahmeordners.

      Wenn Sie angeben, dass ein anderer Server als Verteiler fungieren soll, müssen Sie auf der Seite Administratorkennwort ein Kennwort für Verbindungen eingeben, die zwischen dem Verleger und dem Verteiler hergestellt werden. Dieses Kennwort muss mit dem Kennwort übereinstimmen, dass bei der Aktivierung des Verlegers auf dem Remoteverteiler angegeben wurde.

      Weitere Informationen finden Sie unter Verteilung konfigurieren.

    • Auswählen einer Veröffentlichungsdatenbank.

    • Auswählen eines Veröffentlichungstyps. Weitere Informationen finden Sie unter Replikationstypen.

    • Angeben von Daten und Datenbankobjekten, die veröffentlicht werden sollen. Optional können Sie Spalten aus Tabellenartikeln filtern und Artikeleigenschaften angeben.

    • Optionales Filtern von Zeilen aus Tabellenartikeln. Weitere Informationen finden Sie unter veröffentlichten Filterdaten.

    • Festlegen des Zeitplans für den Momentaufnahme-Agent.

    • Angeben der Anmeldeinformationen, unter denen die folgenden Replikations-Agents ausgeführt werden und Verbindungen herstellen:

      - Snapshot-Agent für alle Veröffentlichungen.

      - Protokollieren Sie Protokolllese-Agent für alle transaktionsveröffentlichungen.

      - Warteschlangenlese-Agent für Transaktionspublikationen, die aktualisierbare Abonnements zulassen.

      Weitere Informationen finden Sie unter Replication Agent Security Model und Replication Security Best Practices.

    • Optionale Erstellung eines Skripts für die Veröffentlichung. Weitere Informationen finden Sie unter Scripting Replication.

    • Angeben eines Namens für die Veröffentlichung.

Veröffentlichungen können programmgesteuert mit gespeicherten Replikationsprozeduren erstellt werden. Welche gespeicherten Prozeduren Sie verwenden, hängt vom Typ der zu erstellenden Veröffentlichung ab.

So erstellen Sie eine Momentaufnahme- oder Transaktionsveröffentlichung

  1. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank Sp_replicationdboption & #40; Transact-SQL & #41; So aktivieren die Veröffentlichung der aktuellen Datenbank mit der Snapshot- oder Transaktionsreplikation.

  2. Bestimmen Sie bei einer Transaktionsveröffentlichung, ob ein Auftrag des Protokolllese-Agents für die Veröffentlichungsdatenbank existiert. (Dieser Schritt ist für Momentaufnahmeveröffentlichungen nicht erforderlich.)

    • Wenn bereits ein Auftrag des Protokolllese-Agents für die Veröffentlichungsdatenbank vorhanden ist, fahren Sie mit Schritt 3 fort.

    • Wenn Sie unsicher sind, ob ein Protokolllese-Agent-Auftrag für eine veröffentlichte Datenbank vorhanden ist, führen Sie Sp_helplogreader_agent & #40; Transact-SQL & #41; auf dem Verleger für die Veröffentlichungsdatenbank.

    • Wenn das Resultset leer ist, erstellen Sie einen Auftrag des Protokolllese-Agents. Führen Sie auf dem Verleger Sp_addlogreader_agent & #40; Transact-SQL & #41;. Geben Sie die Microsoft unter dem der Agent ausgeführt, für die wird Windows-Anmeldeinformationen @job_name und @password. Wenn der Agent beim Verbinden mit dem Verleger SQL Server-Authentifizierung verwendet, müssen Sie auch angeben, auf den Wert 0 für @publisher_security_mode und Microsoft SQL Server Anmeldeinformationen für @publisher_login und @publisher_password. Fahren Sie mit Schritt 3 fort.

  3. Führen Sie auf dem Verleger Sp_addpublication & #40; Transact-SQL & #41;. Geben Sie einen Veröffentlichungsnamen für @publication, und für die @repl_freq Parameter, geben Sie den Wert Snapshot für eine Snapshot- oder Wert fortlaufende für eine Transaktionspublikation. Geben Sie eventuell weitere Veröffentlichungsoptionen an. Dadurch wird die Veröffentlichung definiert.

    System_CAPS_ICON_note.jpg Hinweis


    Veröffentlichungsnamen dürfen die folgenden Zeichen nicht enthalten:

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

  4. Führen Sie auf dem Verleger Sp_addpublication_snapshot & #40; Transact-SQL & #41;. Geben Sie den Namen der Veröffentlichung verwendet, die in Schritt 3 für @publication und die Windows-Anmeldeinformationen, unter denen der Snapshot-Agent ausgeführt, für die wird @snapshot_job_name und @password. Wenn der Agent beim Verbinden mit dem Verleger SQL Server-Authentifizierung verwendet, müssen Sie auch angeben, auf den Wert 0 für @publisher_security_mode und SQL Server Anmeldeinformationen für @publisher_login und @publisher_password. Dadurch wird ein Auftrag des Momentaufnahme-Agents für die Veröffentlichung erstellt.

    System_CAPS_ICON_important.jpg Wichtig


    Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die angegebenen Werte für alle Parameter einschließlich Job_login und Job_password, werden als nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie diese gespeicherte Prozedur ausführen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zum Datenbankmodul & #40; SQL Server-Konfigurations-Manager & #41;.

  5. Fügen Sie der Veröffentlichung Artikel hinzu. Weitere Informationen finden Sie unter Define an Article.

  6. Starten Sie den Auftrag des Momentaufnahme-Agents, um die Anfangsmomentaufnahme für diese Veröffentlichung zu generieren. Weitere Informationen finden Sie unter Create and Apply the Initial Snapshot.

So erstellen Sie eine Mergeveröffentlichung

  1. Führen Sie auf dem Verleger Sp_replicationdboption & #40; Transact-SQL & #41; So aktivieren die Veröffentlichung der aktuellen Datenbank mithilfe der Mergereplikation.

  2. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank Sp_addmergepublication & #40; Transact-SQL & #41;. Geben Sie einen Veröffentlichungsnamen für @publication und eventuell weitere Veröffentlichungsoptionen an. Dadurch wird die Veröffentlichung definiert.

    System_CAPS_ICON_note.jpg Hinweis


    Veröffentlichungsnamen dürfen die folgenden Zeichen nicht enthalten:

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

  3. Führen Sie auf dem Verleger Sp_addpublication_snapshot & #40; Transact-SQL & #41;. Geben Sie den in Schritt 2 verwendeten Veröffentlichungsnamen @publication und die Windows-Anmeldeinformationen, unter denen der Snapshot-Agent ausgeführt, für die wird @snapshot_job_name und @password. Wenn der Agent beim Verbinden mit dem Verleger SQL Server-Authentifizierung verwendet, müssen Sie auch angeben, auf den Wert 0 für @publisher_security_mode und SQL Server Anmeldeinformationen für @publisher_login und @publisher_password. Dadurch wird ein Auftrag des Momentaufnahme-Agents für die Veröffentlichung erstellt.

    System_CAPS_ICON_important.jpg Wichtig


    Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die angegebenen Werte für alle Parameter einschließlich Job_login und Job_password, werden als nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie diese gespeicherte Prozedur ausführen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zum Datenbankmodul & #40; SQL Server-Konfigurations-Manager & #41;.

  4. Fügen Sie der Veröffentlichung Artikel hinzu. Weitere Informationen finden Sie unter Define an Article.

  5. Starten Sie den Auftrag des Momentaufnahme-Agents, um die Anfangsmomentaufnahme für diese Veröffentlichung zu generieren. Weitere Informationen finden Sie unter Create and Apply the Initial Snapshot.

Beispiel (Transact-SQL)

In diesem Beispiel wird eine Transaktionsveröffentlichung erstellt. Anhand von Skriptvariablen werden Windows-Anmeldeinformationen übergeben, die zur Erstellung von Aufträgen für den Momentaufnahme-Agent und den Protokolllese-Agent erforderlich sind.

-- 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

In diesem Beispiel wird eine Mergeveröffentlichung erstellt. Anhand von Skriptvariablen werden Windows-Anmeldeinformationen übergeben, die zur Erstellung des Auftrags für den Momentaufnahme-Agent erforderlich sind.

-- 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'AdventureWorks2012'; 
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 [AdventureWorks2012]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks2012.',
  @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

Sie können Veröffentlichungen mithilfe von Replikationsverwaltungsobjekten (RMO) programmgesteuert erstellen. Welche RMO-Klassen Sie zum Erstellen von Veröffentlichungen verwenden, hängt vom Typ der zu erstellenden Veröffentlichung ab.

So erstellen Sie eine Momentaufnahme- oder Transaktionsveröffentlichung

  1. Erstellen Sie eine Verbindung mit dem Verleger mithilfe der ServerConnection Klasse.

  2. Erstellen Sie eine Instanz von der ReplicationDatabase Klasse für die Veröffentlichungsdatenbank, legen die ConnectionContext Eigenschaft, um die Instanz von ServerConnection aus Schritt 1, und rufen die LoadProperties Methode. Wenn LoadProperties gibt false, stellen Sie sicher, dass die Datenbank vorhanden ist.

  3. Wenn die EnabledTransPublishing Eigenschaft false, legen Sie es auf true.

  4. Überprüfen Sie den Wert der für eine Transaktionspublikation, die LogReaderAgentExists Eigenschaft. Wenn diese Eigenschaft den Wert truehat, ist ein Protokolllese-Agentauftrag für diese Datenbank bereits vorhanden. Hat diese Eigenschaft den Wert false, gehen Sie wie folgt vor:

  5. Erstellen Sie eine Instanz von der TransPublication Klasse, und legen Sie für dieses Objekt die folgenden Eigenschaften:

  6. Rufen Sie die Erstellen Methode, um die Veröffentlichung zu erstellen.

    System_CAPS_ICON_important.jpg Wichtig


    Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die angegebenen Werte für alle Eigenschaften, einschließlich SnapshotGenerationAgentProcessSecurity, werden als nur-Text an den Verteiler gesendet. Verschlüsseln Sie die Verbindung zwischen dem Verleger und die zugehörigen Remoteverteiler vor dem Aufruf der Erstellen Methode. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zum Datenbankmodul & #40; SQL Server-Konfigurations-Manager & #41;.

  7. Rufen Sie die CreateSnapshotAgent Methode, um den Snapshot-Agent-Auftrag für die Veröffentlichung zu erstellen.

So erstellen Sie eine Mergeveröffentlichung

  1. Erstellen Sie eine Verbindung mit dem Verleger mithilfe der ServerConnection Klasse.

  2. Erstellen Sie eine Instanz von der ReplicationDatabase Klasse für die Veröffentlichungsdatenbank, legen die ConnectionContext Eigenschaft, um die Instanz von ServerConnection aus Schritt 1, und rufen die LoadProperties Methode. Wenn LoadProperties gibt false, stellen Sie sicher, dass die Datenbank vorhanden ist.

  3. Wenn EnabledMergePublishing Eigenschaft false, legen Sie es auf true, und rufen Sie CommitPropertyChanges.

  4. Erstellen Sie eine Instanz von der MergePublication Klasse, und legen Sie für dieses Objekt die folgenden Eigenschaften:

    • Die ServerConnection aus Schritt 1 für ConnectionContext.

    • Der Name der veröffentlichten Datenbank für DatabaseName.

    • Einen Namen für die Veröffentlichung für Namen.

    • Die Anmeldung und Kennwort Felder SnapshotGenerationAgentProcessSecurity für die Anmeldeinformationen für das Windows-Konto unter dem der Snapshot-Agent ausgeführt wird. Dieses Konto wird auch verwendet, wenn der Momentaufnahme-Agent Verbindungen mit dem lokalen Verteiler herstellt, sowie für alle Remoteverbindungen mithilfe der Windows-Authentifizierung.

      System_CAPS_ICON_note.jpg Hinweis


      Festlegen von SnapshotGenerationAgentProcessSecurity ist nicht erforderlich, beim Erstellen der Veröffentlichung von einem Mitglied der Sysadmin festen Serverrolle. Weitere Informationen finden Sie unter Replication Agent Security Model.

    • (Optional) Verwenden Sie den inklusiven logischen OR-Operator (| in Visual c# und oder in Visual Basic) und den exklusiven logischen OR-Operator (^ in Visual c# und Xor in Visual Basic) Festlegen der PublicationAttributes Werte für die Attribute Eigenschaft.

  5. Rufen Sie die Erstellen Methode, um die Veröffentlichung zu erstellen.

    System_CAPS_ICON_important.jpg Wichtig


    Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die angegebenen Werte für alle Eigenschaften, einschließlich SnapshotGenerationAgentProcessSecurity, werden als nur-Text an den Verteiler gesendet. Verschlüsseln Sie die Verbindung zwischen dem Verleger und die zugehörigen Remoteverteiler vor dem Aufruf der Erstellen Methode. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zum Datenbankmodul & #40; SQL Server-Konfigurations-Manager & #41;.

  6. Rufen Sie die CreateSnapshotAgent Methode, um den Snapshot-Agent-Auftrag für die Veröffentlichung zu erstellen.

Beispiele (RMO)

In diesem Beispiel wird die AdventureWorks-Datenbank für Transaktionsveröffentlichung aktiviert, ein Protokolllese-Agentauftrag definiert und die AdvWorksProductTran-Veröffentlichung erstellt. Für diese Veröffentlichung muss ein Artikel definiert sein. Die Anmeldeinformationen für das Windows-Konto, die für die Erstellung des Protokolllese- und des Momentaufnahme-Agentauftrags erforderlich sind, werden zur Laufzeit übergeben. Informationen darüber, wie RMO verwendet wird, um Momentaufnahme- und Transaktionsartikel zu definieren, finden Sie unter Define an Article.

			// Set the Publisher, publication database, and publication names.
			string publicationName = "AdvWorksProductTran";
			string publicationDbName = "AdventureWorks2012";
			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 AdventureWorks2012 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 = "AdventureWorks2012"
        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 AdventureWorks2012 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

In diesem Beispiel wird die AdventureWorks-Datenbank für Mergepublishing aktiviert und die AdvWorksSalesOrdersMerge-Veröffentlichung erstellt. Für diese Veröffentlichung müssen ebenfalls Artikel definiert sein. Die Anmeldeinformationen für das Windows-Konto, die für die Erstellung des Momentaufnahme-Agentauftrags erforderlich sind, werden zur Laufzeit übergeben. Informationen darüber, wie RMO verwendet wird, um Mergeartikel zu definieren, finden Sie unter Define an Article.

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

			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 = "AdventureWorks2012"

        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

Verwenden von sqlcmd mit Skriptvariablen
Veröffentlichen von Daten und Datenbankobjekten
Konzepte für Replikationsverwaltungsobjekte (RMO)
Definieren eines Artikels
Anzeigen und Ändern von Veröffentlichungseigenschaften
Konfigurieren der Verteilung
Schützen des Verteilers
Sichern des Verlegers

Community-Beiträge

HINZUFÜGEN
Anzeigen: