KB3197883 - FIX: agente di snapshot non riesce quando si pubblicano funzioni definite dall'utente in SQL Server server di distribuzione 2016 in Transactional Replication

Si applica a
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1

Sintomi

Si supponga di avere una configurazione in cui Microsoft SQL Server 2016 funge da server di distribuzione e SQL Server 2014 o SQL Server 2012 funge da server di pubblicazione. In questa configurazione, se si crea uno snapshot o una pubblicazione transazionale o di tipo merge in SQL Server 2012 o SQL Server 2014 Publisher con funzione definita dall'utente come articolo, l'agente di snapshot non riesce durante l'esecuzione di query definite dall'utente e viene visualizzato un messaggio di errore simile al seguente:

Nota

Script non riuscito per UserDefinedFunction 'schema.functionname'

Dalla cronologia dei processi dell'agente di snapshot viene visualizzato il messaggio di errore seguente:

Nota

<DateTime> [5%] L'agente di replica ha rilevato un'eccezione
<Origine DateTime> : Sconosciuto
<Tipo di eccezione DateTime> : Microsoft.SqlServer.Management.Smo.FailedOperationException
<Messaggio di eccezione DateTime> : Script non riuscito per UserDefinedFunction 'schema.functionname'
<Codice messaggio DateTime> : Non applicabile

Causa

Questo problema si verifica perché l'agente di snapshot usa Miscrosft.SqlServer.Smo.dll SMO per scrivere articoli. SQL Server 2016 aggiunge una nuova proprietà SMO IsNativelyCompiled per In-Memory funzioni/stored procedure. Questa proprietà non è presente in SQL Server la cui versione è precedente a SQL Server 2016. Quando si esegue il agente di snapshot in Server di distribuzione per SQL Server 2016, viene utilizzato Microsoft.SqlServer.Smo.dll di SQL Server 2016, ma tenta di verificare la proprietà IsNativelyCompiled di SMO rispetto a SQL Server Publisher 2012 o 2014 e l'operazione non riesce con l'errore precedente.

Risoluzione

Questo problema è stato risolto negli aggiornamenti cumulativi seguenti per SQL Server:

Aggiornamento cumulativo 2 per SQL Server 2016 SP1

Aggiornamento cumulativo 4 per SQL Server 2016

Informazioni sugli aggiornamenti cumulativi per SQL Server

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutte le correzioni rapide e di sicurezza incluse nell'aggiornamento cumulativo precedente. Vedere gli aggiornamenti cumulativi più recenti per SQL Server:

Aggiornamento cumulativo più recente per SQL Server 2016

Soluzione alternativa

Per risolvere questo problema, creare manualmente funzioni definite dall'utente nel Sottoscrittore.

Stato

Microsoft ha confermato che si tratta di un problema relativo ai prodotti elencati nella sezione "Si applica a".

Riferimenti

Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.