Gestione delle partizioni di una pubblicazione di tipo merge con filtri con parametriManage Partitions for a Merge Publication with Parameterized Filters

In questo argomento viene descritto come gestire le partizioni per una pubblicazione di tipo merge con i filtri con parametri in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLo Replication Management Objects (RMO).This topic describes how to manage partitions for a merge publication with parameterized filters in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO). È possibile utilizzare i filtri di riga con parametri per generare partizioni non sovrapposte.Parameterized row filters can be used to generate nonoverlapping partitions. È possibile limitare tali partizioni in modo che solo una sottoscrizione riceva una determinata partizione.These partitions can be restricted so that only one subscription receives a given partition. In questi casi, la presenza di un numero elevato di Sottoscrittori comporta un numero elevato di partizioni, che richiedono anche un numero uguale di snapshot partizionati.In these cases, a large number of subscribers will result in a large number of partitions, which in turn requires an equal number of partitioned snapshots. Per altre informazioni sui filtri di riga con parametri, vedere Filtri di riga con parametri.For more information, see Parameterized Row Filters.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Indicazioni Recommendations

  • Se si crea, come consigliato, uno script per la topologia di replica, gli script di pubblicazione contengono le chiamate di stored procedure necessarie per creare le partizioni di dati.If you script a replication topology, which is recommended, publication scripts contain the stored procedure calls to create data partitions. Lo script offre un riferimento per le partizioni create e un modo per ricreare, se necessario, una o più partizioni.The script provides a reference for the partitions created and a way in which to re-create one or more partitions if necessary. Per altre informazioni, vedere script di replica.For more information, see Scripting Replication.

  • Se una pubblicazione contiene filtri con parametri che producono sottoscrizioni con partizioni non sovrapposte ed è necessario ricreare un'eventuale sottoscrizione persa, rimuovere la partizione sottoscritta, ricreare la sottoscrizione, quindi ricreare la partizione.When a publication has parameterized filters that yield subscriptions with nonoverlapping partitions, and if a particular subscription is lost and needs to be re-created, you must do the following: remove the partition that was subscribed to, re-create the subscription, and then re-create the partition. Per altre informazioni sui filtri di riga con parametri, vedere Filtri di riga con parametri.For more information, see Parameterized Row Filters. La replica genera script di creazione per le partizioni del Sottoscrittore esistenti al momento della generazione di uno script per la creazione della pubblicazione.Replication generates creation scripts for existing Subscriber partitions when a publication creation script is generated. Per altre informazioni, vedere script di replica.For more information, see Scripting Replication.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Gestire le partizioni nella pagina Partizioni dati della finestra di dialogo Proprietà pubblicazione - <Pubblicazione>.Manage partitions on the Data Partitions page of the Publication Properties - <Publication> dialog box. Per ulteriori informazioni sull'accesso a questa finestra di dialogo, vedere Visualizzare e modificare le proprietà della pubblicazione.For more information about accessing this dialog box, see View and Modify Publication Properties. In questa pagina è possibile creare ed eliminare partizioni, consentire ai Sottoscrittori di avviare la generazione e il recapito di snapshot, generare snapshot per una o più partizioni ed eliminare snapshot.On this page you can: create and delete partitions; allow Subscribers to initiate snapshot generation and delivery; generate snapshots for one or more partitions; and clean up snapshots.

Per creare una partizioneTo create a partition

  1. Nella pagina Partizioni dati della finestra di dialogo Proprietà pubblicazione - <Pubblicazione> fare clic su Aggiungi.On the Data Partitions page of the Publication Properties - <Publication> dialog box, click Add.

  2. Nella finestra di dialogo Aggiungi partizione dati immettere un valore per HOST_NAME() e/o un valore SUSER_SNAME() associato alla partizione che si desidera creare.In the Add Data Partition dialog box, enter a value for the HOST_NAME() and/or SUSER_SNAME() value associated with the partition you want to create.

  3. Facoltativamente, specificare una pianificazione per l'aggiornamento degli snapshot:Optionally specify a schedule for refreshing snapshots:

    1. Selezionare Usa la pianificazione seguente per l'esecuzione dell'agente snapshot per questa partizione.Select Schedule the Snapshot Agent for this partition to run at the following time(s)

    2. Accettare la pianificazione predefinita per l'aggiornamento degli snapshot oppure fare clic su Cambia per specificare una pianificazione diversa.Accept the default schedule for refreshing snapshots, or click Change to specify a different schedule.

  4. Fare clic su OK.Click OK.

Per eliminare una partizioneTo delete a partition

  1. Nella pagina Partizioni dati selezionare una partizione della griglia.On the Data Partitions page, select a partition in the grid.

  2. Fare clic su Elimina.Click Delete.

Per consentire ai Sottoscrittori di avviare la generazione e il recapito di snapshotTo allow Subscribers to initiate snapshot generation and delivery

  1. Nella pagina Partizioni dati selezionare Definisci automaticamente una partizione e genera uno snapshot, se necessario, quando un nuovo Sottoscrittore cerca di eseguire la sincronizzazione.On the Data Partitions page, select Automatically define a partition and generate a snapshot if needed when a new Subscriber tries to synchronize.

  2. Fare clic su OK.Click OK.

Per generare lo snapshot di una partizioneTo generate a snapshot for a partition

  1. Nella pagina Partizioni dati selezionare una partizione della griglia.On the Data Partitions page, select a partition in the grid.

  2. Fare clic su Genera gli snapshot selezionati adesso.Click Generate the selected snapshots now.

Per eliminare lo snapshot di una partizioneTo clean up a snapshot for a partition

  1. Nella pagina Partizioni dati selezionare una partizione della griglia.On the Data Partitions page, select a partition in the grid.

  2. Fare clic su Elimina gli snapshot esistenti.Click Clean up the existing snapshots.

Utilizzo di Transact-SQL Using Transact-SQL

Per migliorare la gestione di una pubblicazione con filtri con parametri, è possibile enumerare le partizioni esistenti a livello di programmazione, utilizzando stored procedure di replica.To better manage a publication with parameterized filters, you can programmatically enumerate the existing partitions using replication stored procedures. È inoltre possibile creare ed eliminare le partizioni esistenti.You can also create and delete existing partitions. È possibile ottenere le informazioni seguenti sulle partizioni esistenti:The following information on existing partitions can be obtained:

  • Modalità in cui una partizione viene filtrata (tramite SUSER_SNAME (Transact-SQL) o HOST_NAME (Transact-SQL)).How a partition is filtered (using SUSER_SNAME (Transact-SQL) or HOST_NAME (Transact-SQL)).

  • Nome del processo che genera uno snapshot partizionato.The name of the job that generates a partitioned snapshot.

  • Ora dell'ultima esecuzione di un processo di snapshot partizionato.The last time that a partitioned snapshot job ran.

    Mentre la seconda parte dello snapshot a due parti può essere generata su richiesta quando viene inizializzata una nuova sottoscrizione, le procedure descritte di seguito consentono di controllare il modo in cui tale snapshot viene generato e di effettuare la pregenerazione dello snapshot nel momento più appropriato.While the second part of the two-part snapshot can be generated on-demand when a new subscription is initialized, the procedures below enable you to control how this snapshot is generated and to pre-generate this snapshot when it is most convenient. Per altre informazioni, vedere Snapshot per pubblicazioni di tipo merge con filtri con parametri.For more information, see Snapshots for Merge Publications with Parameterized Filters.

Per visualizzare informazioni sulle partizioni esistentiTo view information on existing partitions

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_helpmergepartition (Transact-SQL).At the Publisher on the publication database, execute sp_helpmergepartition (Transact-SQL). Specificare il nome della pubblicazione per @publication.Specify the name of the publication for @publication. (Facoltativo) Specificare @suser_sname o @host_name per ottenere esclusivamente informazioni basate su un solo criterio di filtro.(Optional) Specify @suser_sname or @host_name to return only information based on a single filtering criterion.

Per definire una nuova partizione e generare un nuovo snapshot partizionatoTo define a new partition and generate a new partitioned snapshot

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergepartition (Transact-SQL).At the Publisher on the publication database, execute sp_addmergepartition (Transact-SQL). Specificare il nome della pubblicazione per @publicatione il valore con parametri che definisce la partizione per uno degli elementi indicati di seguito.Specify the name of the publication for @publication, and the parameterized value that defines the partition for one of the following:

  2. Creare e inizializzare lo snapshot con parametri per la nuova partizione.Create and initialize the parameterized snapshot for this new partition. Per altre informazioni, vedere Creazione di uno snapshot per una pubblicazione di tipo merge con filtri con parametri.For more information, see Create a Snapshot for a Merge Publication with Parameterized Filters.

Per eliminare una partizioneTo delete a partition

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_dropmergepartition (Transact-SQL).At the Publisher on the publication database, execute sp_dropmergepartition (Transact-SQL). Specificare il nome della pubblicazione per @publication e il valore con parametri che definisce la partizione per uno degli elementi indicati di seguito.Specify the name of the publication for @publication and the parameterized value that defines the partition for one of the following:

    • @suser_sname: se il filtro con parametri è definito dal valore restituito da SUSER_SNAME (Transact-SQL).@suser_sname - when the parameterized filter is defined by the value returned by SUSER_SNAME (Transact-SQL).

    • @host_name: se il filtro con parametri è definito dal valore restituito da HOST_NAME (Transact-SQL).@host_name - when the parameterized filter is defined by the value returned by HOST_NAME (Transact-SQL).

      Viene inoltre effettuata la rimozione del processo di snapshot e degli eventuali file di snapshot per la partizione.This also removes the snapshot job and any snapshot files for the partition.

Utilizzo di RMO (Replication Management Objects) Using Replication Management Objects (RMO)

Per migliorare la gestione di una pubblicazione con filtri con parametri, è possibile creare nuove partizioni del Sottoscrittore a livello di programmazione, enumerare le partizioni del Sottoscrittore esistenti ed eliminare quelle desiderate utilizzando oggetti RMO (Replication Management Objects).To better manage a publication with parameterized filters, you can programmatically create new Subscriber partitions, enumerate the existing Subscriber partitions, and delete Subscriber partitions by using Replication Management Objects (RMO). Per informazioni sulla creazione di partizioni del Sottoscrittore, vedere Creazione di uno snapshot per una pubblicazione di tipo merge con filtri con parametri.For information about how to create Subscriber partitions, see Create a Snapshot for a Merge Publication with Parameterized Filters. È possibile ottenere le informazioni seguenti sulle partizioni esistenti:The following information about existing partitions can be obtained:

  • Valore e funzione di filtro su cui si basa la partizione.The value and filtering function upon which the partition is based.

  • Nome del processo che genera uno snapshot con parametri per il Sottoscrittore.The name of the job that generates a parameterized snapshot for the Subscriber.

  • Ora dell'ultima esecuzione di un processo di snapshot con parametri.The last time that a parameterized snapshot job ran.

Per visualizzare informazioni sulle partizioni esistentiTo view information on existing partitions

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Creare un'istanza della classe MergePublication .Create an instance of the MergePublication class. Impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sull'oggetto ServerConnection creato nel passaggio 1.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the ServerConnection created in step 1.

  3. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto.Call the LoadProperties method to get the properties of the object. Se questo metodo restituisce false, le proprietà della pubblicazione sono state definite in modo non corretto nel passaggio 2 oppure la pubblicazione non esiste.If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.

  4. Chiamare il metodo EnumMergePartitions e passare il risultato a una matrice di oggetti MergePartition .Call the EnumMergePartitions method, and pass the result to an array of MergePartition objects.

  5. Per ogni oggetto MergePartition nella matrice, ottenere le proprietà desiderate.For each MergePartition object in the array, get any properties of interest.

Per eliminare partizioni esistentiTo delete existing partitions

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Creare un'istanza della classe MergePublication .Create an instance of the MergePublication class. Impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sull'oggetto ServerConnection creato nel passaggio 1.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the ServerConnection created in step 1.

  3. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto.Call the LoadProperties method to get the properties of the object. Se questo metodo restituisce false, le proprietà della pubblicazione sono state definite in modo non corretto nel passaggio 2 oppure la pubblicazione non esiste.If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.

  4. Chiamare il metodo EnumMergePartitions e passare il risultato a una matrice di oggetti MergePartition .Call the EnumMergePartitions method, and pass the result to an array of MergePartition objects.

  5. Per ogni oggetto MergePartition nella matrice, determinare se la partizione deve essere eliminata.For each MergePartition object in the array, determine whether the partition should be deleted. Questa decisione si basa in genere sul valore della proprietà DynamicFilterLogin o DynamicFilterHostName .This decision is usually based on the value of the DynamicFilterLogin property or the DynamicFilterHostName property.

  6. Chiamare il metodo RemoveMergePartition sull'oggetto MergePublication indicato nel passaggio 2.Call the RemoveMergePartition method on the MergePublication object from step 2. Passare l'oggetto MergePartition indicato nel passaggio 5.Pass the MergePartition object from step 5.

  7. Ripetere il passaggio 6 per ogni partizione eliminata.Repeat step 6 for each partition that is deleted.

Vedere ancheSee Also

Filtri di riga con parametri Parameterized Row Filters
Snapshot per pubblicazioni di tipo merge con filtri con parametriSnapshots for Merge Publications with Parameterized Filters