Sottoscrittori IBM DB2IBM DB2 Subscribers

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server supporta le sottoscrizioni push a database IBM DB2/AS 400, DB2/MVS e DB2/Universal tramite i provider OLE DB inclusi in MicrosoftMicrosoft Host Integration Server. Host Integration Server.

Configurazione di un Sottoscrittore IBM DB2Configuring an IBM DB2 Subscriber

Per configurare un Sottoscrittore IBM DB2, eseguire la procedura seguente:To configure an IBM DB2 Subscriber, follow these steps:

  1. Installare la versione più recente del provider MicrosoftMicrosoft OLE DB per DB2 nel server di distribuzione:Install the latest version of the MicrosoftMicrosoft OLE DB Provider for DB2 on the Distributor:

    • Se si usa SQL ServerSQL Server Enterprise Edition, nella pagina Web Download di SQL Server fare clic sul collegamento alla versione più recente di Microsoft SQL Server Feature Pack nella sezione Download correlati.If you are using SQL ServerSQL Server Enterprise Edition, on the SQL Server Downloads Web page, in the Related Downloads section, click the link to the latest version of the Microsoft SQL Server Feature Pack. Nella pagina Web Microsoft SQL Server Feature Pack cercare Provider Microsoft OLE DB per DB2.On the Microsoft SQL Server Feature Pack Web page, search for Microsoft OLE DB Provider for DB2.

    • Se si usa SQL ServerSQL Server Standard Edition, installare la versione più recente del server MicrosoftMicrosoft Host Integration ServicesIntegration Services (HIS), che include il provider.If you are using SQL ServerSQL Server Standard Edition, install the latest version of the MicrosoftMicrosoft Host Integration ServicesIntegration Services (HIS) server, which includes the provider.

      Oltre al provider, è consigliabile installare lo strumento di accesso ai dati usato nel passaggio seguente (per impostazione predefinita, lo strumento viene installato con il download di SQL ServerSQL Server Enterprise Edition).In addition to installing the provider, we recommend that you install the Data Access Tool, which is used in the next step (it is installed by default with the download for SQL ServerSQL Server Enterprise Edition. Per ulteriori informazioni sull'installazione e sull'utilizzo dello strumento di accesso ai dati, vedere la documentazione del provider o di HIS.For more information about installing and using the Data Access Tool, see the provider documentation or the HIS documentation.

  2. Creare una stringa di connessione per il Sottoscrittore.Create a connection string for the Subscriber. La stringa di connessione può essere creata in qualsiasi editor di testo, ma è consigliabile utilizzare lo strumento di accesso ai dati.The connection string can be created in any text editor, but we recommend that you use the Data Access Tool. Per creare la stringa nello strumento di accesso ai dati:To create the string in the Data Access Tool:

    1. Fare clic sul menu Start, scegliere Programmi, Provider Microsoft OLE DB per DB2e quindi Strumento di accesso ai dati.Click Start, Programs, Microsoft OLE DB Provider for DB2, and then Data Access Tool.

    2. In Strumento di accesso ai datieseguire la procedura per fornire informazioni sul server DB2.In the Data Access Tool, follow the steps to provide information about the DB2 server. Al termine della procedura, verrà creato un collegamento dati universale (UDL) con una stringa di connessione associata. Sarà tale stringa a essere utilizzata dalla replica e non il collegamento UDL.When you complete the tool, a universal data link (UDL) is created with an associated connection string (the UDL is not actually used by replication, but the connection string is).

    3. Accedere alla stringa di connessione: fare clic con il pulsante destro del mouse sul collegamento UDL nello strumento di accesso ai dati e scegliere Visualizza stringa di connessione.Access the connection string: right-click the UDL in the Data Access Tool and select Display Connection String.

      La stringa di connessione sarà simile alla seguente (le interruzioni di linea sono state inserite per favorire la leggibilità):The connection string will be similar to (line breaks are for readability):

    Provider=DB2OLEDB;Initial Catalog=MY_SUBSCRIBER_DB;Network Transport Library=TCP;Host CCSID=1252;  
    PC Code Page=1252;Network Address=MY_SUBSCRIBER;Network Port=50000;Package Collection=MY_PKGCOL;  
    Default Schema=MY_SCHEMA;Process Binary as Character=False;Derive Parameters=False;Units of Work=RUW;DBMS Platform=DB2/NT;  
    Persist Security Info=False;Connection Pooling=True;  
    

    La maggior parte delle opzioni nella stringa è specifica per il server DB2 configurato, ma è necessario che le opzioni Process Binary as Character e Derive Parameters siano sempre impostate su False.Most of the options in the string are specific to the DB2 server you are configuring, but the Process Binary as Character and Derive Parameters options should always be set to False. È necessario specificare un valore per l'opzione Initial Catalog per identificare il database di sottoscrizione.A value is required for the Initial Catalog option to identify the subscription database. La stringa di connessione verrà immessa nella Creazione guidata nuova sottoscrizione durante la creazione della sottoscrizione.The connection string will be entered in the New Subscription Wizard when you create the subscription.

  3. Creare uno snapshot o una pubblicazione transazionale, abilitarlo per i Sottoscrittori non SQL ServerSQL Server , quindi creare una sottoscrizione push per il Sottoscrittore.Create a snapshot or transactional publication, enable it for non- SQL ServerSQL Server Subscribers, and then create a push subscription for the Subscriber. Per altre informazioni, vedere Create a Subscription for a Non-SQL Server Subscriber.For more information, see Create a Subscription for a Non-SQL Server Subscriber.

  4. Se necessario, specificare uno script di creazione personalizzato per uno o più articoli.Optionally, specify a custom creation script for one or more articles. Quando viene pubblicata una tabella, viene creato uno script CREATE TABLE per la tabella.When a table is published, a CREATE TABLE script is created for that table. Per i Sottoscrittori non SQL ServerSQL Server lo script viene creato nel sottolinguaggio Transact-SQLTransact-SQL e viene quindi convertito in un sottolinguaggio SQL più generico dall'agente di distribuzione prima di essere applicato al Sottoscrittore.For non- SQL ServerSQL Server Subscribers, the script is created in the Transact-SQLTransact-SQL dialect, and it is then translated to a more generic SQL dialect by the Distribution Agent before being applied at the Subscriber. Per specificare uno script di creazione personalizzato, modificare lo script Transact-SQLTransact-SQL esistente oppure creare uno script completo che utilizzi il sottolinguaggio DB2 SQL. Se viene creato uno script DB2, utilizzare la direttiva bypass_translation in modo che l'agente di distribuzione possa applicare lo script al Sottoscrittore senza conversione.To specify a custom creation script, either modify the existing Transact-SQLTransact-SQL script or create a complete script that uses the DB2 SQL dialect; if a DB2 script is created, use the bypass_translation directive so that the Distribution Agent will apply the script at the Subscriber without translation.

    Gli script possono essere modificati per numerosi motivi, ma quello più comune consiste nella necessità di modificare i mapping dei tipi di dati.Scripts can be modified for a number of reasons, but the most common reason is to alter data type mappings. Per ulteriori informazioni, vedere la sezione "Considerazioni sui mapping dei tipi di dati" di seguito in questo argomento.For more information, see the "Data Type Mapping Considerations" section in this topic. Se si modifica lo script Transact-SQLTransact-SQL , è consigliabile limitare le modifiche solo ai mapping dei tipi di dati. Lo script non dovrà inoltre contenere commenti.If you modify the Transact-SQLTransact-SQL script, changes should be restricted to data type mapping changes (and the script should not contain any comments). Se sono necessarie modifiche più sostanziali, creare uno script DB2.If more substantial changes are required, create a DB2 script.

    Per modificare lo script di un articolo e fornirlo come script di creazione personalizzatoTo modify an article script and supply it as a custom creation script

    1. Dopo avere generato uno snapshot per la pubblicazione, passare alla cartella snapshot per la pubblicazione.After the snapshot has been generated for the publication, navigate to the snapshot folder for the publication.

    2. Individuare il file .sch con lo stesso nome dell'articolo, ad esempio MyArticle.sch.Locate the .sch file with the same name as the article, such as MyArticle.sch.

    3. Aprire il file utilizzando il Blocco note o un altro editor di testo.Open this file using Notepad or another text editor.

    4. Modificare il file e salvarlo in una directory diversa.Modify the file and save it to a different directory.

    5. Eseguire sp_changearticle, specificando il percorso e il nome del file per la proprietà creation_script .Execute sp_changearticle, specifying the file path and name for the creation_script property. Per altre informazioni, vedere sp_changearticle (Transact-SQL).For more information, see sp_changearticle (Transact-SQL).

      Per creare lo script di un articolo e fornirlo come script di creazione personalizzatoTo create an article script and supply it as a custom creation script

    6. Creare lo script di un articolo utilizzando il sottolinguaggio DB2 SQL.Create an article script using the DB2 SQL dialect. Verificare che la prima riga del file sia bypass_translatione non contenga altro.Ensure the first line of the file is bypass_translation, with nothing else on the line.

    7. Eseguire sp_changearticle specificando il percorso e il nome del file per la proprietà creation_script.Execute sp_changearticle, specifying the file path and name for the creation_script property.

Considerazioni per i Sottoscrittori IBM DB2Considerations for IBM DB2 Subscribers

Oltre alle considerazioni riportate nell'argomento Non-SQL Server Subscribers, quando si esegue una replica nei Sottoscrittori DB2 tenere presenti gli aspetti seguenti:In addition to the considerations covered in the topic Non-SQL Server Subscribers, consider the following issues when replicating to DB2 Subscribers:

  • I dati e gli indici per ogni tabella replicata sono associati a un spazio tabella DB2.The data and indexes for each replicated table are assigned to a DB2 tablespace. La dimensione della pagina di uno spazio tabella DB2 controlla il numero massimo di colonne e la dimensione massima delle righe delle tabelle che appartengono allo spazio tabella.The page size of a DB2 tablespace controls the maximum number of columns and the maximum row size of the tables belonging to the tablespace. Verificare che lo spazio tabella associato alle tabelle replicate sia appropriato al numero di colonne replicate e alla dimensione massima delle righe delle tabelle.Ensure that the tablespace associated with replicated tables is appropriate based on the number of replicated columns and the maximum row size of the tables.

  • Non pubblicare tabelle nei Sottoscrittori DB2 utilizzando una replica transazionale se i dati di una o più colonne chiave primaria nella tabella sono di tipo DECIMAL(32-38, 0-38) o NUMERIC(32-38, 0-38).Do not publish tables to DB2 Subscribers using transactional replication if one or more primary key columns in the table is of data type DECIMAL(32-38, 0-38) or NUMERIC(32-38, 0-38). La replica transazionale identifica le righe utilizzando la chiave primaria. Ciò può dar luogo a errori, in quanto per i tipi di dati viene eseguito il mapping a VARCHAR(41) nel Sottoscrittore.Transactional replication identifies rows using the primary key; this can result in failures because these data types are mapped to VARCHAR(41) at the Subscriber. Le tabelle con chiavi primarie che utilizzano questi tipi di dati possono essere pubblicate tramite la replica snapshot.Tables with primary keys that use these data types can be published using snapshot replication.

  • Se si desidera creare tabelle nel Sottoscrittore evitando che vengano create dalla replica, utilizzare l'opzione replication support only.If you want to pre-create tables at the Subscriber, rather than having replication create them, use the replication support only option. Per altre informazioni, vedere Initialize a Transactional Subscription Without a Snapshot.For more information, see Initialize a Transactional Subscription Without a Snapshot.

  • In SQL ServerSQL Server sono consentiti nomi di tabella e nomi di colonna più lunghi rispetto a DB2: allows longer table names and column names than DB2:

    • Se il database di pubblicazione include tabelle con nomi più lunghi di quelli supportati nella versione DB2 del Sottoscrittore, specificare un nome alternativo per la proprietà dell'articolo destination_table.If the publication database includes tables with names longer than those supported on the DB2 version at the Subscriber, specify an alternative name for the destination_table article property. Per altre informazioni sull'impostazione delle proprietà durante la creazione di una pubblicazione, vedere Creare una pubblicazione e Definire un articolo.For more information about setting properties when creating a publication, see Create a Publication and Define an Article.

    • Non è possibile specificare nomi di colonna alternativi.It is not possible to specify alternative column names. È necessario verificare che le tabelle pubblicate non includano nomi di colonna più lunghi di quelli supportati nella versione DB2 del Sottoscrittore.You must ensure that published tables do not include column names longer than those supported on the DB2 version at the Subscriber.

Mapping dei tipi di dati tra SQL Server e IBM DB2Mapping Data Types from SQL Server to IBM DB2

Nella tabella seguente vengono illustrati i mapping dei tipi di dati utilizzati quando si esegue la replica dei dati in un Sottoscrittore in cui è in esecuzione IBM DB2.The following table shows the data type mappings that are used when data is replicated to a Subscriber running IBM DB2.

Tipo di dati di SQL ServerSQL Server data type Tipo di dati IBM DB2IBM DB2 data type
bigintbigint DECIMAL(19,0)DECIMAL(19,0)
binary(1-254)binary(1-254) CHAR(1-254) FOR BIT DATACHAR(1-254) FOR BIT DATA
binary(255-8000)binary(255-8000) VARCHAR(255-8000) FOR BIT DATAVARCHAR(255-8000) FOR BIT DATA
bitbit SMALLINTSMALLINT
char(1-254)char(1-254) CHAR(1-254)CHAR(1-254)
char(255-8000)char(255-8000) VARCHAR(255-8000)VARCHAR(255-8000)
datedate DATEDATE
datetimedatetime TIMESTAMPTIMESTAMP
datetime2(0-7)datetime2(0-7) VARCHAR(27)VARCHAR(27)
datetimeoffset(0-7)datetimeoffset(0-7) VARCHAR(34)VARCHAR(34)
decimal(1-31, 0-31)decimal(1-31, 0-31) DECIMAL(1-31, 0-31)DECIMAL(1-31, 0-31)
decimal(32-38, 0-38)decimal(32-38, 0-38) VARCHAR(41)VARCHAR(41)
float(53)float(53) DOUBLEDOUBLE
floatfloat FLOATFLOAT
geographygeography IMAGEIMAGE
geometrygeometry IMAGEIMAGE
hierarchyidhierarchyid IMAGEIMAGE
imageimage VARCHAR(0) FOR BIT DATAVARCHAR(0) FOR BIT DATA
intointo INTINT
moneymoney DECIMAL(19,4)DECIMAL(19,4)
nchar(1-4000)nchar(1-4000) VARCHAR(1-4000)VARCHAR(1-4000)
nvarchar(max)ntext VARCHAR(0) VARCHAR(0)
numeric(1-31, 0-31)numeric(1-31, 0-31) DECIMAL(1-31,0-31)DECIMAL(1-31,0-31)
numeric(32-38, 0-38)numeric(32-38, 0-38) VARCHAR(41)VARCHAR(41)
nvarchar(1-4000)nvarchar(1-4000) VARCHAR(1-4000)VARCHAR(1-4000)
ssNoVersionnvarchar(max) VARCHAR(0) VARCHAR(0)
realreal REALREAL
smalldatetimesmalldatetime TIMESTAMPTIMESTAMP
smallintsmallint SMALLINTSMALLINT
smallmoneysmallmoney DECIMAL(10,4)DECIMAL(10,4)
sql_variantsql_variant N/DN/A
sysnamesysname VARCHAR(128)VARCHAR(128)
varchar(max)text VARCHAR(0) VARCHAR(0)
time(0-7)time(0-7) VARCHAR(16)VARCHAR(16)
timestamptimestamp CHAR(8) FOR BIT DATACHAR(8) FOR BIT DATA
tinyinttinyint SMALLINTSMALLINT
uniqueidentifieruniqueidentifier CHAR(38)CHAR(38)
varbinary(1-8000)varbinary(1-8000) VARCHAR(1-8000) FOR BIT DATAVARCHAR(1-8000) FOR BIT DATA
varchar(1-8000)varchar(1-8000) VARCHAR(1-8000)VARCHAR(1-8000)
varbinary(max)varbinary(max) VARCHAR(0) FOR BIT DATAVARCHAR(0) FOR BIT DATA
ntextvarchar(max) VARCHAR(0) VARCHAR(0)
xmlxml VARCHAR(0) VARCHAR(0)
  • Vedere la sezione successiva per altre informazioni sui mapping per il tipo di dati VARCHAR(0).See the next section for more information about mappings to VARCHAR(0).

Considerazioni sui mapping dei tipi di datiData Type Mapping Considerations

Quando si esegue la replica nei Sottoscrittori DB2, considerare gli aspetti seguenti relativi ai mapping dei tipi di dati:Consider the following data type mapping issues when replicating to DB2 Subscribers:

  • Quando si esegue il mapping tra i tipi di SQL ServerSQL Server varchar, binary, varbinary e ssNoVersion e, rispettivamente, i tipi di dati CHAR, VARCHAR, CHAR FOR BIT DATA e VARCHAR FOR BIT DATA di DB2, tramite la replica viene impostata la lunghezza del tipo di dati di DB2 affinché sia identica a quella del tipo di dati di SQL ServerSQL Server .When mapping SQL ServerSQL Server char, varchar, binary and varbinary to DB2 CHAR, VARCHAR, CHAR FOR BIT DATA, and VARCHAR FOR BIT DATA, respectively, replication sets the length of the DB2 data type to be the same as that of the SQL ServerSQL Server type.

    In questo modo, la tabella generata viene creata correttamente nel Sottoscrittore, a condizione che il vincolo relativo alla dimensione della pagina DB2 consenta di supportare la dimensione massima delle righe.This allows the generated table to be successfully created at the Subscriber, as long as the DB2 page size constraint is large enough to accommodate the maximum size of the row. Verificare che l'account di accesso al database DB2 disponga delle autorizzazioni per utilizzare gli spazi tabella con dimensioni sufficienti per le tabelle replicate in DB2.Ensure that the login used to access the DB2 database has permissions to access table spaces of a sufficient size for the tables being replicated to DB2.

  • DB2 può supportare colonne VARCHAR di grandezza pari a 32 KB. È pertanto possibile che venga eseguito correttamente il mapping tra alcune colonne LOB SQL ServerSQL Server e le colonne VARCHAR DB2.DB2 can support VARCHAR columns as large as 32 kilobytes (KB); therefore it is possible that some SQL ServerSQL Server large object columns can be appropriately mapped to DB2 VARCHAR columns. Il provider OLE DB utilizzato dalla replica per DB2, tuttavia, non supporta l'esecuzione del mapping tra oggetti di grandi dimensioni di SQL ServerSQL Server e oggetti di grandi dimensioni di DB2.However, the OLE DB provider that replication uses for DB2 does not support mapping SQL ServerSQL Server large objects to DB2 large objects. Per questo motivo, per le colonne SQL ServerSQL Server varchar(max), ntext, nvarchar(max)di ssNoVersion viene eseguito il mapping a VARCHAR(0) negli script di creazione generati.For this reason, SQL ServerSQL Server text, varchar(max), ntext, and nvarchar(max) columns are mapped to VARCHAR(0) in the generated create scripts. È necessario modificare il valore di lunghezza 0 in un valore appropriato prima di applicare lo script nel Sottoscrittore.The length value of 0 must be changed to an appropriate value prior to applying the script to the Subscriber. Se la lunghezza del tipo di dati non cambia, in DB2 viene generato l'errore 604 quando si tenta di creare la tabella nel Sottoscrittore DB2. L'errore 604 indica che l'attributo di precisione o di lunghezza di un tipo di dati non è valido.If the data type length is not changed, DB2 will raise error 604 when the table create is attempted at the DB2 Subscriber (error 604 indicates that the precision or length attribute of a data type is not valid).

    In base alle informazioni in proprio possesso sulla tabella di origine di cui si esegue la replica, determinare se sia opportuno eseguire il mapping tra un oggetto di grandi dimensioni di SQL ServerSQL Server e un elemento DB2 di lunghezza variabile e specificare una lunghezza massima appropriata in uno script di creazione personalizzato.Based upon your knowledge of the source table that you are replicating, determine whether it is appropriate to map a SQL ServerSQL Server large object to a variable length DB2 item, and specify an appropriate maximum length in a custom creation script. Per informazioni sulla definizione di uno script di creazione personalizzato, vedere il passaggio 5 nella sezione "Configurazione di un Sottoscrittore IBM DB2" in questo argomento.For information about specifying a custom creation script, see step 5 in the section "Configuring an IBM DB2 Subscriber" in this topic.

    Nota

    La lunghezza specificata per il tipo DB2, se associata ad altre lunghezze di colonna, non può superare la dimensione massima delle righe basata sullo spazio tabella DB2 cui sono assegnati i dati della tabella.The specified length for the DB2 type, when combined with other column lengths, cannot exceed the maximum row size based upon the DB2 table space that the table data is assigned to.

    Se non esiste alcun mapping appropriato per una colonna LOB, valutare l'opportunità di applicare filtri colonne nell'articolo affinché la colonna non venga replicata.If there is no appropriate mapping for a large object column, consider using column filtering on the article so that the column is not replicated. Per altre informazioni, vedere Filtrare i dati pubblicati.For more information, see Filter Published Data.

  • Quando si esegue la replica di tipi di dati SQL ServerSQL Server nvarchar e ssNoVersion in tipi di dati CHAR e VARCHAR di DB2, viene utilizzato lo stesso identificatore di lunghezza sia per il tipo DB2 che per quello SQL ServerSQL Server .When replicating SQL ServerSQL Server nchar and nvarchar to DB2 CHAR and VARCHAR, replication uses the same length-specifier for the DB2 type as for the SQL ServerSQL Server type. La lunghezza del tipo di dati, tuttavia, potrebbe essere troppo ridotta per la tabella DB2 generata.However, the data type length might too small for the generated DB2 table.

    In alcuni ambienti DB2 un dato SQL ServerSQL Server varchar non è limitato a caratteri a un byte. Nel definire la lunghezza di un dato CHAR o VARCHAR, è pertanto necessario tenere conto di questo aspetto.In some DB2 environments, a SQL ServerSQL Server char data item is not restricted to single-byte characters; the length of a CHAR or VARCHAR item must take this into account. È inoltre necessario considerare i caratteri di controllo SI e i caratteri di controllo SO , se richiesti.You must also take into account shift in and shift out characters if they are needed. Se si replicano tabelle con colonne nchar e nvarchar , potrebbe essere necessario specificare una lunghezza massima maggiore per il tipo di dati in uno script di creazione personalizzato.If you are replicating tables with nchar and nvarchar columns, you might need to specify a larger maximum length for the data type in a custom creation script. Per informazioni sulla definizione di uno script di creazione personalizzato, vedere il passaggio 5 nella sezione "Configurazione di un Sottoscrittore IBM DB2" in questo argomento.For information about specifying a custom creation script, see step 5 in the section "Configuring an IBM DB2 Subscriber" in this topic.

Vedere ancheSee Also

Non-SQL Server Subscribers Non-SQL Server Subscribers
Sottoscrivere le pubblicazioni Subscribe to Publications