Assinantes do IBM DB2
O SQL Server oferece suporte a assinaturas push para IBM DB2/AS 400, DB2/MVS e DB2/Universal Database por meio dos provedores OLE DB fornecidos com o Microsoft Host Integration Server.
Configurando um Assinante IBM DB2
Para configurar um Assinante IBM DB2, siga estas etapas:
Instale a versão mais recente do Microsoft OLE DB Provider para DB2 no Distribuidor:
Se você estiver usando o Microsoft SQL Server 2012 Enterprise, na página da Web Downloads do SQL Server 2008, na seção Downloads relacionados, clique no link para a versão mais recente do Microsoft SQL Server 2008 Feature Pack. Na página da Web do Microsoft SQL Server 2008 Feature Pack, pesquise por Microsoft OLE DB Provider for DB2.
Se você estiver usando o SQL Server 2012 Standard, instale a versão mais recente do servidor Microsoft Host Integration Services (HIS), que inclui o provedor.
Além de instalar o provedor, recomendamos que você instale o Data Access Tool, que é usado na próxima etapa (é instalado por padrão com o download do SQL Server 2012 Enterprise). Para obter mais informações sobre a instalação e uso de Data Access Tool, consulte a documentação do provedor ou a documentação HIS.
Crie uma cadeia de conexão para o Assinante. A cadeia de conexão pode ser criada em qualquer editor de texto, mas recomendamos que você use o Data Access Tool. Para criar a cadeia de caracteres no Data Access Tool:
Clique em Iniciar, Programas, Microsoft OLE DB Provider para DB2 e, então, Data Access Tool.
No Data Access Tool, siga as etapas para prover informações sobre o servidor de DB2. Quando você concluir a ferramenta, um UDL (vínculo de dados universal) é criado com uma cadeia de conexão associada (o UDL não é usado de fato pela replicação, mas a cadeia de conexão é).
Acesse a cadeia de conexão: clique com o botão direito em UDL no Data Access Tool e selecione Exibir Cadeia de Conexão.
A cadeia de conexão será semelhante a (quebras de linha são para legibilidade):
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;Units of Work=RUW;DBMS Platform=DB2/NT; Persist Security Info=False;Connection Pooling=True;
A maioria das opções na cadeia de caracteres é específica para o servidor DB2 que você está configurando, mas a opção Process Binary as Character deve sempre ser definida como False. Um valor é necessário para a opção Initial Catalog para identificar o banco de dados de assinatura. A cadeia de conexão será inserida no Assistente para Nova Assinatura quando você criar a assinatura.
Crie um instantâneo ou uma publicação transacional, habilite-o para Assinantes não SQL Server e, em seguida, crie uma assinatura push para o Assinante. Para obter mais informações, consulte Criar uma assinatura para um Assinante não SQL Server.
Opcionalmente, especifique um script de criação personalizado para um ou mais artigos. Quando uma tabela é publicada, um script CREATE TABLE é criado para aquela tabela. Para Assinantes não SQL Server, o script é criado no dialeto Transact-SQL e, depois, é convertido para um dialeto SQL mais genérico pelo Agente de Distribuição antes de ser aplicado ao Assinante. Para especificar um script de criação personalizado, modifique o script Transact-SQL existente ou crie um script completo que usa o dialeto SQL DB2; se for criado um script DB2, use a diretiva bypass_translation para que o Agente de Distribuição aplique o script no Assinante sem conversão.
Os scripts podem ser modificados por diversas razões, porém a razão mais comum é alterar mapeamentos de tipo de dados. Para obter mais informações, consulte a seção "Considerações para o mapeamento de tipo de dados" neste tópico. Se você modificar o script Transact-SQL, as alterações deverão ficar restritas a alterações de mapeamento de tipo de dados (e o script não deverá conter nenhum comentário). Se mais alterações significativas forem requeridas, crie um script DB2.
Para modificar um script de artigo e fornecê-lo como um script de criação personalizado
Depois que o instantâneo for gerado para a publicação, navegue para a pasta de instantâneo da publicação.
Localize o arquivo .sch com o mesmo nome do artigo, por exemplo, MyArticle.sch.
Abra o arquivo usando o Bloco de Notas ou outro editor de textos.
Modifique o arquivo e salve-o em um diretório diferente.
Execute sp_changearticle, especificando o caminho e o nome do arquivo para a propriedade creation_script. Para obter mais informações, consulte sp_changearticle (Transact-SQL).
Para criar um script de artigo e fornecê-lo como um script de criação personalizado
Crie um script de artigo usando o dialeto DB2 SQL. Certifique-se que a primeira linha do arquivo seja bypass_translation, com nada mais na linha.
Execute sp_changearticle, especificando o caminho e o nome do arquivo para a propriedade creation_script.
Considerações sobre os Assinantes IBM DB2
Além das considerações abrangidas no tópico Assinantes não SQL Server, considere os assuntos a seguir ao replicar para os Assinantes DB2:
Os dados e índices para cada tabela replicada são atribuídos para um espaço de tabela de DB2. O tamanho de página de um espaço de tabela DB2 controla o número máximo de colunas e o tamanho máximo da linha das tabelas pertencentes ao espaço de tabela. Verifique se o espaço de tabela associado com tabelas replicadas é baseado apropriadamente no número de colunas replicadas e no tamanho máximo das linhas das tabelas.
Não publique tabelas para Assinantes DB2 usando replicação transacional se uma ou mais colunas de chave primária na tabela forem do tipo de dados DECIMAL(32-38, 0-38) ou NUMERIC(32-38, 0-38). A replicação transacional identifica linhas usando a chave primária; isso poderá resultar em falhas porque estes tipos de dados são mapeados para VARCHAR(41) no Assinante. Tabelas com chaves primárias que usam estes tipos de dados podem ser publicadas usando replicação de instantâneo.
Se você quer pré-criar tabelas no Assinante em vez de a replicação criá-las, use a opção replication support only. Para obter mais informações, consulte Inicializar uma assinatura transacional sem um instantâneo.
SQL Server permite nomes de tabela e nomes de coluna mais longos que DB2:
Se o banco de dados da publicação incluir tabelas com nomes mais longos do que os que têm suporte na versão DB2 do Assinante, especifique um nome alternativo para a propriedade de artigo destination_table. Para obter mais informações sobre como definir propriedades ao criar uma publicação, consulte Crie uma publicação e Defina um Artigo.
Não é possível especificar nomes de coluna alternativos. Você deve se assegurar de que as tabelas publicadas não incluam colunas mais longas do que as que têm suporte na versão DB2 do Assinante.
Mapear tipos de dados do SQL Server para IBM DB2
A tabela a seguir exibe os mapeamentos dos tipos de dados usados quando os dados são replicados para um Assinante que executa IBM DB2.
Tipo de dados do SQL Server |
Tipo de dados IBM DB2 |
---|---|
bigint |
DECIMAL(19,0) |
binary(1-254) |
CHAR(1-254) FOR BIT DATA |
binary(255-8000) |
VARCHAR(255-8000) FOR BIT DATA |
bit |
SMALLINT |
char(1-254) |
CHAR(1-254) |
char(255-8000) |
VARCHAR(255-8000) |
date |
DATE |
datetime |
TIMESTAMP |
datetime2(0-7) |
VARCHAR(27) |
datetimeoffset(0-7) |
VARCHAR(34) |
decimal(1-31, 0-31) |
DECIMAL(1-31, 0-31) |
decimal(32-38, 0-38) |
VARCHAR(41) |
float(53) |
DOUBLE |
float |
FLOAT |
geography |
IMAGE |
geometry |
IMAGE |
hierarchyid |
IMAGE |
image |
VARCHAR(0) FOR BIT DATA1 |
into |
INT |
money |
DECIMAL(19,4) |
nchar(1-4000) |
VARCHAR(1-4000) |
ntext |
VARCHAR(0)1 |
numeric(1-31, 0-31) |
DECIMAL(1-31, 0-31) |
numeric(32-38, 0-38) |
VARCHAR(41) |
nvarchar(1-4000) |
VARCHAR(1-4000) |
nvarchar(max) |
VARCHAR(0)1 |
real |
REAL |
smalldatetime |
TIMESTAMP |
smallint |
SMALLINT |
smallmoney |
DECIMAL(10,4) |
sql_variant |
N/A |
sysname |
VARCHAR(128) |
text |
VARCHAR(0)1 |
time(0-7) |
VARCHAR(16) |
timestamp |
CHAR(8) FOR BIT DATA |
tinyint |
SMALLINT |
uniqueidentifier |
CHAR(38) |
varbinary(1-8000) |
VARCHAR(1-8000) FOR BIT DATA |
varchar(1-8000) |
VARCHAR(1-8000) |
varbinary(max) |
VARCHAR(0) FOR BIT DATA1 |
varchar(max) |
VARCHAR(0)1 |
xml |
VARCHAR(0)1 |
1 Consulte a próxima seção para obter mais informações sobre mapeamentos para VARCHAR(0).
Considerações sobre mapeamento de tipo de dados
Considere os seguintes problemas de mapeamento de tipo de dados ao replicar para Assinantes DB2:
Durante o mapeamento de SQL Server char, varchar, binary e varbinary para DB2 CHAR, VARCHAR, CHAR FOR BIT DATA e VARCHAR FOR BIT DATA, respectivamente, a replicação define o comprimento do tipo de dados DB2 como igual ao do tipo SQL Server.
Isto permite que a tabela gerada seja criada com êxito no Assinante, desde que a restrição de tamanho da página DB2 seja ampla o suficiente para acomodar o tamanho máximo da linha. Assegure-se de que o logon usado para acessar o banco de dados do DB2 tenha permissões para acessar espaços de tabela de tamanho suficiente para as tabelas que estão sendo replicadas para DB2.
O DB2 pode suportar colunas VARCHAR de até 32 KB (kilobytes); portanto, é possível que algumas colunas grandes de objeto SQL Server possam ser mapeadas apropriadamente para colunas DB2 VARCHAR. Porém, o provedor OLE DB que a replicação usa para DB2 não suporta mapear objetos grandes SQL Server para objetos grandes DB2. Por isso, as colunas SQL Server text, varchar(max), ntext e nvarchar(max) são mapeadas para VARCHAR(0) nos scripts de criação gerados. O valor de comprimento de 0 deve ser alterado para um valor apropriado antes de aplicar o script ao Assinante. Se o comprimento de tipo de dado não for alterado, o DB2 gerará o erro 604 quando a criação de tabela for tentada no Assinante DB2 (o erro 604 indica que o atributo de precisão ou comprimento de um tipo de dado não é válido).
Baseado sobre seu conhecimento da tabela de origem que você está replicando, determine se é apropriado mapear um objeto grande SQL Server para um item DB2 de comprimento variável e especifique um comprimento máximo apropriado em um script de criação personalizado. Para obter informações sobre especificar um script de criação personalizado, consulte a etapa 5 na seção "Configurando um Assinante de IBM DB2" neste tópico.
Observação O comprimento especificado para o tipo DB2, quando combinado com outros comprimentos de coluna, não pode exceder o tamanho máximo de linha baseado no espaço de tabela DB2 ao qual os dados de tabela são atribuídos.
Se não houver mapeamento apropriado para uma coluna de objeto grande, considere usar filtragem de coluna no artigo para que a coluna não seja replicada. Para obter mais informações, consulte Filtrar dados publicados.
Durante a replicação de SQL Server nchar e nvarchar para DB2 CHAR e VARCHAR, a replicação usa o mesmo especificador de comprimento para o tipo DB2 do tipo SQL Server. Porém, o comprimento de tipo de dados pode ser muito pequeno para a tabela DB2 gerada.
Em alguns ambientes DB2, um item de dados SQL Server char não é restrito a caracteres de byte único; o comprimento de um item CHAR ou VARCHAR deve levar isso em conta. Você deve levar também em conta o mover para dentro e mover para fora de caracteres se forem necessários. Se estivar replicando tabelas com as colunas nchar e nvarchar, talvez seja necessário especificar um comprimento máximo maior para o tipo de dados em um script de criação personalizado. Para obter informações sobre especificar um script de criação personalizado, consulte a etapa 5 na seção "Configurando um Assinante de IBM DB2" neste tópico.