Erstellen einer Veröffentlichung
In diesem Thema wird beschrieben, wie eine Veröffentlichung in SQL Server 2012 mithilfe von SQL Server Management Studio, Transact-SQL oder Replikationsverwaltungsobjekten (RMO) erstellt wird.
In diesem Thema
Vorbereitungen:
Einschränkungen
Sicherheit
So erstellen Sie eine Veröffentlichung und definieren Artikel mit:
SQL Server Management Studio
Transact-SQL
Replikationsverwaltungsobjekte (RMO)
Vorbereitungen
Einschränkungen
- Veröffentlichungs- und Artikelnamen dürfen folgende Zeichen nicht enthalten: % , * , [ , ] , | , : , " , ? , ' , \ , / , < , >. Wenn Objekte in der Datenbank eines dieser Zeichen enthalten und Sie die Objekte replizieren möchten, müssen Sie einen Artikelnamen angeben, der sich von dem Objektnamen im Dialogfeld Artikeleigenschaften - <Artikel> unterscheidet. Dieses Dialogfeld ist im Assistenten auf der Seite Artikel verfügbar.
Sicherheit
Die Benutzer sollten nach Möglichkeit während der Laufzeit zur Eingabe von Sicherheitsanmeldeinformationen aufgefordert werden. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Microsoft Windows .NET Framework.
[Top]
Verwendung von SQL Server Management Studio
Mit dem Assistenten für neue Veröffentlichung erstellen Sie Veröffentlichungen und definieren Artikel. Rufen Sie nach der Erstellung einer Veröffentlichung das Dialogfeld Veröffentlichungseigenschaften - <Veröffentlichung> auf, um die Eigenschaften anzuzeigen und zu ändern. 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
Stellen Sie in Microsoft SQL Server Management Studio eine Verbindung mit dem Verleger her, und erweitern Sie dann den Serverknoten.
Erweitern Sie den Ordner Replikation, und klicken Sie dann mit der rechten Maustaste auf den Ordner Lokale Veröffentlichungen.
Klicken Sie auf Neue Veröffentlichung.
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 Konfigurieren der Veröffentlichung und der Verteilung.
Wenn Sie auf der Seite Verteiler angeben, dass der Verleger als eigener Verteiler fungiert (lokaler Verteiler) und der Server nicht als Verteiler konfiguriert ist, erfolgt die Konfiguration des Servers durch den Assistenten für neue Veröffentlichung. Auf der Seite Momentaufnahmeordner geben Sie einen Standardmomentaufnahmeordner für den Verteiler an. Beim Momentaufnahmeordner handelt es sich kurz gesagt um ein Verzeichnis, das Sie als Freigabe festgelegt haben. Agents, die Dateien in diesem Ordner lesen oder schreiben sollen, müssen mit den dafür erforderlichen Zugriffsrechten ausgestattet sein. Weitere Informationen zum angemessenen Sichern 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, das bei der Aktivierung des Verlegers auf dem Remoteverteiler angegeben wurde.
Weitere Informationen finden Sie unter Konfigurieren der Verteilung.
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 Filtern von veröffentlichten Daten.
Festlegen des Zeitplans für den Momentaufnahme-Agent.
Angeben der Anmeldeinformationen, unter denen die folgenden Replikations-Agents ausgeführt werden und Verbindungen herstellen:
- Momentaufnahme-Agent für alle Veröffentlichungen.
- Protokolllese-Agent für alle Transaktionsveröffentlichungen.
- Warteschlangenlese-Agent für Transaktionsveröffentlichungen, in denen Updates von Abonnements zulässig sind.
Weitere Informationen finden Sie unter Sicherheitsmodell des Replikations-Agents und Bewährte Methoden für die Replikationssicherheit.
Optionale Erstellung eines Skripts für die Veröffentlichung. Weitere Informationen finden Sie unter Erstellen von Skripts für die Replikation.
Angeben eines Namens für die Veröffentlichung.
[Top]
Verwendung von Transact-SQL
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
Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_replicationdboption (Transact-SQL) aus, um die Veröffentlichung der aktuellen Datenbank mit der Momentaufnahme- oder der Transaktionsreplikation zu aktivieren.
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 sich nicht sicher sind, ob ein Auftrag des Protokolllese-Agents für die Veröffentlichungsdatenbank vorhanden ist, führen Sie sp_helplogreader_agent (Transact-SQL) auf dem Verleger für die Veröffentlichungsdatenbank aus.
Wenn das Resultset leer ist, erstellen Sie einen Auftrag des Protokolllese-Agents. Führen Sie auf dem Verleger sp_addlogreader_agent (Transact-SQL) aus. Geben Sie die Microsoft Windows-Anmeldeinformationen, unter denen der Agent ausgeführt wird, für @job_name und @job_password an. Wenn der Agent zum Herstellen der Verbindung mit dem Verleger die SQL Server-Authentifizierung verwendet, müssen Sie zudem den Wert 0 für @publisher_security_mode und die Microsoft SQL Server-Anmeldeinformationen für @publisher_login und @publisher_password angeben. Fahren Sie mit Schritt 3 fort.
Führen Sie auf dem Verleger sp_addpublication (Transact-SQL) aus. Geben Sie einen Veröffentlichungsnamen für @publication und für den @repl_freq-Parameter den Wert snapshot (bei einer Momentaufnahmeveröffentlichung) oder den Wert continuous (bei einer Transaktionsveröffentlichung) an. Geben Sie eventuell weitere Veröffentlichungsoptionen an. Dadurch wird die Veröffentlichung definiert.
Hinweis Veröffentlichungsnamen dürfen die folgenden Zeichen nicht enthalten:
% * [ ] | : " ? \ / < >
Führen Sie auf dem Verleger sp_addpublication_snapshot (Transact-SQL) aus. Geben Sie den in Schritt 3 für @publication verwendeten Veröffentlichungsnamen und die Windows-Anmeldeinformationen, unter denen der Momentaufnahme-Agent ausgeführt wird, für @snapshot_job_name und @job_password an. Wenn der Agent zum Herstellen der Verbindung mit dem Verleger die SQL Server-Authentifizierung verwendet, müssen Sie zudem den Wert 0 für @publisher_security_mode und die SQL Server-Anmeldeinformationen für @publisher_login und @publisher_password angeben. Dadurch wird ein Auftrag des Momentaufnahme-Agents für die Veröffentlichung erstellt.
Sicherheitshinweis Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die Werte, die für alle Parameter einschließlich job_login und job_password bereitgestellt 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 (SQL Server-Konfigurations-Manager).
Fügen Sie der Veröffentlichung Artikel hinzu. Weitere Informationen finden Sie unter Definieren eines Artikels.
Starten Sie den Auftrag des Momentaufnahme-Agents, um die Anfangsmomentaufnahme für diese Veröffentlichung zu generieren. Weitere Informationen finden Sie unter Erstellen und Anwenden der Anfangsmomentaufnahme.
So erstellen Sie eine Mergeveröffentlichung
Führen Sie auf dem Verleger sp_replicationdboption (Transact-SQL) aus, um die Veröffentlichung der aktuellen Datenbank mit der Mergereplikation zu aktivieren.
Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_addmergepublication (Transact-SQL) aus. Geben Sie einen Veröffentlichungsnamen für @publication und eventuell weitere Veröffentlichungsoptionen an. Dadurch wird die Veröffentlichung definiert.
Hinweis Veröffentlichungsnamen dürfen die folgenden Zeichen nicht enthalten:
% * [ ] | : " ? \ / < >
Führen Sie auf dem Verleger sp_addpublication_snapshot (Transact-SQL) aus. Geben Sie den in Schritt 2 für @publication verwendeten Veröffentlichungsnamen und die Windows-Anmeldeinformationen, unter denen der Momentaufnahme-Agent ausgeführt wird, für @snapshot_job_name und @job_password an. Wenn der Agent zum Herstellen der Verbindung mit dem Verleger die SQL Server-Authentifizierung verwendet, müssen Sie zudem den Wert 0 für @publisher_security_mode und die SQL Server-Anmeldeinformationen für @publisher_login und @publisher_password angeben. Dadurch wird ein Auftrag des Momentaufnahme-Agents für die Veröffentlichung erstellt.
Sicherheitshinweis Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die Werte, die für alle Parameter einschließlich job_login und job_password bereitgestellt 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 (SQL Server-Konfigurations-Manager).
Fügen Sie der Veröffentlichung Artikel hinzu. Weitere Informationen finden Sie unter Definieren eines Artikels.
Starten Sie den Auftrag des Momentaufnahme-Agents, um die Anfangsmomentaufnahme für diese Veröffentlichung zu generieren. Weitere Informationen finden Sie unter Erstellen und Anwenden der Anfangsmomentaufnahme.
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'110RTM';
-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
GO
[Top]
Verwenden von Replikationsverwaltungsobjekten (RMO)
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
Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection-Klasse verwenden.
Erstellen Sie eine Instanz der ReplicationDatabase-Klasse für die Veröffentlichungsdatenbank, legen Sie die ConnectionContext-Eigenschaft auf die Instanz von ServerConnection aus Schritt 1 fest, und rufen Sie die LoadProperties-Methode auf. Wenn LoadProperties den Wert false zurückgibt, vergewissern Sie sich, dass die Datenbank vorhanden ist.
Hat die EnabledTransPublishing-Eigenschaft den Wert false, dann legen Sie ihren Wert auf true fest.
Überprüfen Sie für eine Transaktionsveröffentlichung den Wert der LogReaderAgentExists-Eigenschaft. Wenn diese Eigenschaft den Wert true hat, ist ein Protokolllese-Agentauftrag für diese Datenbank bereits vorhanden. Hat diese Eigenschaft den Wert false, gehen Sie wie folgt vor:
Legen Sie die Felder Login und Password oder SecurePassword von LogReaderAgentProcessSecurity fest, um die Anmeldeinformationen für das Microsoft Windows-Konto bereitzustellen, unter dem der Protokolllese-Agent auf dem Abonnenten ausgeführt wird.
Hinweis Wenn die Veröffentlichung von einem Mitglied der festen Serverrolle sysadmin erstellt wird, müssen Sie LogReaderAgentProcessSecurity nicht festlegen. In diesem Fall nimmt der Agent die Identität des SQL Server-Agentkontos an. Weitere Informationen finden Sie unter Sicherheitsmodell des Replikations-Agents.
(Optional) Legen Sie die Felder SqlStandardLogin und SqlStandardPassword oder SecureSqlStandardPassword von LogReaderAgentPublisherSecurity fest, wenn Sie die SQL Server-Authentifizierung zum Herstellen einer Verbindung mit dem Verleger verwenden.
Rufen Sie die CreateLogReaderAgent-Methode auf, um den Protokolllese-Agentauftrag für die Datenbank zu erstellen.
Erstellen Sie eine Instanz der TransPublication-Klasse, und legen Sie die folgenden Eigenschaften für dieses Objekt fest:
Die ServerConnection aus Schritt 1 für ConnectionContext
Den Namen der veröffentlichten Datenbank für DatabaseName.
Einen Namen für die Veröffentlichung für Name.
Einen PublicationType, entweder Transactional oder Snapshot.
Die Felder Login und Password von SnapshotGenerationAgentProcessSecurity, um die Anmeldeinformationen für das Windows-Konto bereitzustellen, unter dem der Momentaufnahme-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.
Hinweis Wenn die Veröffentlichung von einem Mitglied der festen Serverrolle sysadmin erstellt wird, müssen Sie SnapshotGenerationAgentProcessSecurity nicht festlegen. In diesem Fall nimmt der Agent die Identität des SQL Server-Agentkontos an. Weitere Informationen finden Sie unter Sicherheitsmodell des Replikations-Agents.
(Optional) Legen Sie die Felder SqlStandardLogin und SqlStandardPassword oder SecureSqlStandardPassword von SnapshotGenerationAgentPublisherSecurity fest, wenn Sie die SQL Server-Authentifizierung zum Herstellen einer Verbindung mit dem Verleger verwenden.
(Optional) Verwenden Sie den inklusiven logischen OR-Operator (| in Visual C# und Or in Visual Basic) und den ausschließlichen logischen OR-Operator (^ in VisualC# und Xor in Visual Basic), um die PublicationAttributes-Werte für die Attributes-Eigenschaft festzulegen.
(Optional) Den Namen des Verlegers für PublisherName, wenn der Verleger ein Nicht-SQL Server-Verleger ist.
Rufen Sie die Create-Methode auf, um die Veröffentlichung zu erstellen.
Sicherheitshinweis Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die Werte, die für alle Eigenschaften einschließlich SnapshotGenerationAgentProcessSecurity bereitgestellt werden, als Nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie die Create-Methode aufrufen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zum Datenbankmodul (SQL Server-Konfigurations-Manager).
Rufen Sie die CreateSnapshotAgent-Methode auf, um den Momentaufnahme-Agentauftrag für die Veröffentlichung zu erstellen.
So erstellen Sie eine Mergeveröffentlichung
Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection-Klasse verwenden.
Erstellen Sie eine Instanz der ReplicationDatabase-Klasse für die Veröffentlichungsdatenbank, legen Sie die ConnectionContext-Eigenschaft auf die Instanz von ServerConnection aus Schritt 1 fest, und rufen Sie die LoadProperties-Methode auf. Wenn LoadProperties den Wert false zurückgibt, vergewissern Sie sich, dass die Datenbank vorhanden ist.
Wenn die EnabledMergePublishing-Eigenschaft den Wert false hat, legen Sie sie auf true fest, und rufen Sie CommitPropertyChanges auf.
Erstellen Sie eine Instanz der MergePublication-Klasse, und legen Sie die folgenden Eigenschaften für dieses Objekt fest:
Die ServerConnection aus Schritt 1 für ConnectionContext
Den Namen der veröffentlichten Datenbank für DatabaseName.
Einen Namen für die Veröffentlichung für Name.
Die Felder Login und Password von SnapshotGenerationAgentProcessSecurity, um die Anmeldeinformationen für das Windows-Konto bereitzustellen, unter dem der Momentaufnahme-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.
Hinweis Wenn die Veröffentlichung von einem Mitglied der festen Serverrolle sysadmin erstellt wird, müssen Sie SnapshotGenerationAgentProcessSecurity nicht festlegen. Weitere Informationen finden Sie unter Sicherheitsmodell des Replikations-Agents.
(Optional) Verwenden Sie den inklusiven logischen OR-Operator (| in Visual C# und Or in Visual Basic) und den ausschließlichen logischen OR-Operator (^ in VisualC# und Xor in Visual Basic), um die PublicationAttributes-Werte für die Attributes-Eigenschaft festzulegen.
Rufen Sie die Create-Methode auf, um die Veröffentlichung zu erstellen.
Sicherheitshinweis Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die Werte, die für alle Eigenschaften einschließlich SnapshotGenerationAgentProcessSecurity bereitgestellt werden, als Nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie die Create-Methode aufrufen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zum Datenbankmodul (SQL Server-Konfigurations-Manager).
Rufen Sie die CreateSnapshotAgent-Methode auf, um den Momentaufnahme-Agentauftrag 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 Definieren eines Artikels.
// 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 Definieren eines Artikels.
// 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
[Top]
Siehe auch
Konzepte
Verwenden von sqlcmd mit Skriptvariablen
Veröffentlichen von Daten und Datenbankobjekten
Konzepte für Replikationsverwaltungsobjekte (RMO)