Visualizzazione e modifica delle proprietà della pubblicazione

Si applica a: sìSQL Server (tutte le versioni supportate) SìIstanza gestita di SQL di Azure

In questo argomento viene descritto come modificare le proprietà delle pubblicazioni in SQL Server tramite SQL Server Management Studio, Transact-SQLo RMO (Replication Management Objects).

Contenuto dell'articolo

Prima di iniziare

Limitazioni e restrizioni

  • Alcune proprietà non possono essere modificate dopo la creazione di una pubblicazione, mentre altre proprietà non possono essere modificate se sono presenti sottoscrizioni alla pubblicazione. Le proprietà che non possono essere modificate vengono visualizzate come di sola lettura.

Indicazioni

Utilizzo di SQL Server Management Studio

Le proprietà delle pubblicazioni possono essere visualizzate e modificate nella finestra di dialogo Proprietà pubblicazione - <Publication> , disponibile in SQL Server Management Studio e Monitoraggio replica. Per informazioni sull'avvio di Monitoraggio replica, vedere Avviare Monitoraggio replica.

La finestra di dialogo Proprietà pubblicazione - <Publication> include le pagine seguenti:

  • Nella pagina Generale sono presenti il nome e la descrizione della pubblicazione, il nome del database, il tipo di pubblicazione e le impostazioni di scadenza della sottoscrizione.

  • La pagina Articoli corrisponde alla pagina Articoli presente nella Creazione guidata nuova pubblicazione. Utilizzare questa pagina per aggiungere ed eliminare articoli e per modificare le proprietà e l'applicazione di filtri a colonne per gli articoli.

  • La pagina Filtra righe corrisponde alla pagina Filtro righe tabella presente nella Creazione guidata nuova pubblicazione. Utilizzare questa pagina per aggiungere, modificare ed eliminare filtri di righe statici per tutti i tipi di pubblicazioni e aggiungere, modificare ed eliminare filtri di righe con parametri e filtri join per le pubblicazioni di tipo merge.

  • La pagina Snapshot consente di specificare il formato e la posizione dello snapshot, se comprimere lo snapshot e gli script da eseguire prima e dopo l'applicazione dello snapshot.

  • La pagina Snapshot FTP , per le pubblicazioni snapshot e transazionali e per le pubblicazioni di tipo merge nei server di pubblicazione che eseguono versioni precedenti a SQL Server 2005, consente di specificare se i Sottoscrittori possono scaricare file di snapshot tramite FTP (File Transfer Protocol).

  • La pagina Snapshot FTP e Internet , per le pubblicazioni di tipo merge da server di pubblicazione che eseguono SQL Server 2005 o versione successiva, consente di specificare se i Sottoscrittori possono scaricare file di snapshot tramite FTP e sincronizzare le sottoscrizioni tramite HTTPS.

  • Nella pagina Opzioni della sottoscrizione è possibile impostare alcune opzioni che si applicano a tutte le sottoscrizioni. Le opzioni variano in relazione al tipo di pubblicazione.

  • La pagina Elenco accesso pubblicazione consente di specificare quali account di accesso e gruppi possono accedere a una pubblicazione.

  • La pagina Sicurezza agente consente di accedere alle impostazioni degli account utilizzati per l'esecuzione degli agenti seguenti e per la creazione di connessioni ai computer in una topologia di replica: l'agente snapshot per tutte le pubblicazioni, l'agente di lettura log per tutte le pubblicazioni transazionali e l'agente di lettura coda per le pubblicazioni transazionali che consentono sottoscrizioni ad aggiornamento in coda.

  • La pagina Partizioni dati , per le pubblicazioni di tipo merge da server di pubblicazione che eseguono SQL Server 2005 o versione successiva, consente di specificare se i Sottoscrittori delle pubblicazioni con filtri con parametri possono richiedere uno snapshot qualora non ne fosse disponibile uno. In questa pagina è inoltre possibile generare snapshot per una o più partizioni, una sola volta o in base a una pianificazione periodica.

Per visualizzare e modificare le proprietà delle pubblicazioni in Management Studio

  1. Connettersi al server di pubblicazione in Management Studioe quindi espandere il nodo del server.

  2. Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .

  3. Fare clic con il pulsante destro del mouse su una pubblicazione e quindi scegliere Proprietà.

  4. Se necessario, modificare le proprietà e quindi fare clic su OK.

Per visualizzare e modificare le proprietà delle pubblicazioni in Monitoraggio replica

  1. Espandere un gruppo di server di pubblicazione nel riquadro sinistro di Monitoraggio replica e quindi espandere un server di pubblicazione.

  2. Fare clic con il pulsante destro del mouse su una pubblicazione e quindi scegliere Proprietà.

  3. Se necessario, modificare le proprietà e quindi fare clic su OK.

Uso di Transact-SQL

È possibile modificare le pubblicazioni e restituire a livello di programmazione le relative proprietà tramite le stored procedure di replica. Le stored procedure utilizzate dipenderanno dal tipo di pubblicazione.

Per visualizzare le proprietà di una pubblicazione snapshot o transazionale

  1. Eseguire sp_helppublication, specificando il nome della pubblicazione per il parametro @publication. Se questo parametro viene omesso, verranno restituite le informazioni su tutte le pubblicazioni disponibili nel server di pubblicazione.

Per modificare le proprietà di una pubblicazione snapshot o transazionale

  1. Eseguire sp_changepublication, specificando la proprietà della pubblicazione da modificare nel parametro @property e il nuovo valore di questa proprietà nel parametro @value.

    Nota

    Se la modifica richiederà la generazione di un nuovo snapshot, è necessario specificare anche il valore 1 per @force_invalidate_snapshot e se richiederà la reinizializzazione dei Sottoscrittori, è necessario specificare il valore 1 per @force_reinit_subscription. Per altre informazioni sulle proprietà che, in caso di modifica, richiedono un nuovo snapshot o una reinizializzazione, vedere Modificare le proprietà di pubblicazioni e articoli.

Per visualizzare le proprietà di una pubblicazione di tipo merge

  1. Eseguire sp_helpmergepublication, specificando il nome della pubblicazione per il parametro @publication. Se questo parametro viene omesso, verranno restituite le informazioni su tutte le pubblicazioni disponibili nel server di pubblicazione.

Per modificare le proprietà di una pubblicazione di tipo merge

  1. Eseguire sp_changemergepublication, specificando la proprietà della pubblicazione da modificare nel parametro @property e il nuovo valore di questa proprietà nel parametro @value.

    Nota

    Se la modifica richiederà la generazione di un nuovo snapshot, è necessario specificare anche il valore 1 per @force_invalidate_snapshot e se richiederà la reinizializzazione dei Sottoscrittori, è necessario specificare il valore 1 per @force_reinit_subscription. Per altre informazioni sulle proprietà che, in caso di modifica, richiedono un nuovo snapshot o una reinizializzazione, vedere Modificare le proprietà di pubblicazioni e articoli.

Per visualizzare le proprietà di uno snapshot

  1. Eseguire sp_helppublication_snapshot, specificando il nome della pubblicazione per il parametro @publication.

Per modificare le proprietà di uno snapshot

  1. Eseguire sp_changepublication_snapshot, specificando una o più delle nuove proprietà dello snapshot per i parametri appropriati dello snapshot.

Esempi (Transact-SQL)

In questo esempio di replica transazionale vengono restituite le proprietà della pubblicazione.

DECLARE @myTranPub AS sysname
SET @myTranPub = N'AdvWorksProductTran' 

USE [AdventureWorks2012]
EXEC sp_helppublication @publication = @myTranPub
GO

In questo esempio di replica transazionale viene disabilitata la replica dello schema per la pubblicazione.

DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran' 

-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2012]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

In questo esempio di replica di tipo merge vengono restituite le proprietà della pubblicazione.

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';

USE [AdventureWorks2012]
EXEC sp_helpmergepublication @publication = @publication;
GO

In questo esempio di replica di tipo merge viene disabilitata la replica dello schema per la pubblicazione.

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge'; 

-- Disable DDL replication for the publication.
USE [AdventureWorks2012]
EXEC sp_changemergepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0,
  @force_invalidate_snapshot = 0, 
  @force_reinit_subscription = 0;
GO

Utilizzo di RMO (Replication Management Objects)

È possibile modificare le pubblicazioni e accedere alle relative proprietà a livello di programmazione utilizzando oggetti RMO (Replication Management Objects). Le classi RMO utilizzate per visualizzare o modificare le proprietà della pubblicazione dipendono dal tipo di pubblicazione.

Per visualizzare o modificare le proprietà di una pubblicazione snapshot o transazionale

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection .

  2. Creare un'istanza della classe TransPublication , impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sulla connessione creata al passaggio 1.

  3. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto. Se questo metodo restituisce false, le proprietà della pubblicazione sono state definite in modo non corretto nel passaggio 2 oppure la pubblicazione non esiste.

  4. (Facoltativo) Per modificare le proprietà, specificare un nuovo valore per una o più proprietà che è possibile impostare. Utilizzare l'operatore AND logico ( & in Microsoft Visual C# e And in Microsoft Visual Basic) per determinare se per la proprietà PublicationAttributes è impostato un valore Attributes specificato. Utilizzare l'operatore logico OR inclusivo ( | in Visual C# e Or in Visual Basic) e l'operatore logico OR esclusivo ( ^ in Visual C# e Xor in Visual Basic) per modificare i valori di PublicationAttributes per la proprietà Attributes specificato.

  5. (Facoltativo) Se si specifica un valore true per CachePropertyChanges, chiamare il metodo CommitPropertyChanges per eseguire il commit delle modifiche nel server. Se si specifica un valore false per CachePropertyChanges (impostazione predefinita), le modifiche vengono inviate immediatamente al server.

Per visualizzare o modificare le proprietà di una pubblicazione di tipo merge

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection .

  2. Creare un'istanza della classe MergePublication , impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sulla connessione creata al passaggio 1.

  3. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto. Se questo metodo restituisce false, le proprietà della pubblicazione sono state definite in modo non corretto nel passaggio 2 oppure la pubblicazione non esiste.

  4. (Facoltativo) Per modificare le proprietà, specificare un nuovo valore per una o più proprietà che è possibile impostare. Utilizzare l'operatore AND logico ( & in Visual C# e And in Visual Basic) per determinare se per la proprietà PublicationAttributes è impostato un valore Attributes specificato. Utilizzare l'operatore logico OR inclusivo ( | in Visual C# e Or in Visual Basic) e l'operatore logico OR esclusivo ( ^ in Visual C# e Xor in Visual Basic) per modificare i valori di PublicationAttributes per la proprietà Attributes specificato.

  5. (Facoltativo) Se si specifica un valore true per CachePropertyChanges, chiamare il metodo CommitPropertyChanges per eseguire il commit delle modifiche nel server. Se si specifica un valore false per CachePropertyChanges (impostazione predefinita), le modifiche vengono inviate immediatamente al server.

Esempi (RMO)

In questo esempio vengono impostati gli attributi di pubblicazione per una pubblicazione transazionale. Le modifiche vengono memorizzate nella cache finché non vengono inviate al server in modo esplicito.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;

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

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

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

    // Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = true;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Enable support for push subscriptions and disable support 
        // for pull subscriptions.
        if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
        {
            publication.Attributes ^= PublicationAttributes.AllowPull;
        }
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Send changes to the server.
        publication.CommitPropertyChanges();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"

Dim publication As TransPublication

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

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

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

    ' Explicitly enable caching of property changes on this object.
    publication.CachePropertyChanges = True

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then
        ' Enable support for push subscriptions and disable support 
        ' for pull subscriptions.
        If (publication.Attributes And PublicationAttributes.AllowPull) <> 0 Then
            publication.Attributes = publication.Attributes _
            Xor PublicationAttributes.AllowPull
        End If
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Send changes to the server.
        publication.CommitPropertyChanges()
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
        "The publication property could not be changed.", ex)
Finally
    conn.Disconnect()
End Try

In questo esempio viene disabilitata la replica DDL per una pubblicazione di tipo merge.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";

MergePublication publication;

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

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

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


    // If we can't get the properties for this merge publication, then throw an application exception.
    if (publication.LoadProperties())
    {
        // If DDL replication is currently enabled, disable it.
        if (publication.ReplicateDdl == DdlReplicationOptions.All)
        {
            publication.ReplicateDdl = DdlReplicationOptions.None;
        }
        else
        {
            publication.ReplicateDdl = DdlReplicationOptions.All;
        }
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "The publication property could not be changed.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"

Dim publication As MergePublication

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

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

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

    ' If we can't get the properties for this merge publication, then throw an application exception.
    If publication.LoadProperties() Then
        ' If DDL replication is currently enabled, disable it.
        If publication.ReplicateDdl = DdlReplicationOptions.All Then
            publication.ReplicateDdl = DdlReplicationOptions.None
        Else
            publication.ReplicateDdl = DdlReplicationOptions.All
        End If
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
        "The publication property could not be changed.", ex)
Finally
    conn.Disconnect()
End Try

Vedere anche

Pubblicare dati e oggetti di database
Modificare le proprietà di pubblicazioni e articoli
Apportare modifiche allo schema nei database di pubblicazione
Replication System Stored Procedures Concepts
Aggiungere ed eliminare articoli in una pubblicazione (SQL Server Management Studio)
Visualizzare le informazioni ed eseguire attività usando Monitoraggio replica
Visualizzare e modificare le proprietà degli articoli