Desenvolvimento de Aplicativos: Aplicativos Clientes de Programação

| | |

A Conectividade do Tipo 4 do DB2 Universal JDBC Driver com DB2 para VM/VSE Não É |Suportada

|

O DB2 Universal JDBC Driver não suporta a conectividade tipo 4 com bancos de dados DB2 |para VM/VSE. Os tópicos "Setting up the Windows Java environment" |e "Installing the DB2 Universal JDBC Driver" no Application |Development Guide: Programming Client Applications e no DB2 UDB Information |Center afirmam incorretamente que o DB2 Universal JDBC Driver suporta a conectividade tipo |4 com bancos de dados DB2 para VM/VSE.

Centralizador de Conexão do DB2 Universal JDBC Driver e Balanceamento da Carga de Trabalho Sysplex

Aplicativos Java que utilizem Conectividade do Driver JDBC tipo 2 do DB2 Universal para acessar DB2 UDB para servidores z/OS(R) podem tirar vantagem das funções do seu centralizador de conexão e do balanceamento da carga de trabalho Sysplex.

Essas funções são semelhantes às funções do centralizador de conexão e do balanceamento da carga de trabalho Sysplex do DB2 Connect.

O centralizador de conexão DB2 Universal JDBC Driver pode reduzir os recursos que os servidores de banco de dados DB2 UDB para z/OS(R) solicitam para suportar números grandes de aplicativos clientes, permitindo que vários objetos de conexão utilizem a mesma conexão física, a qual reduz o número total de conexões físicas com o servidor de banco de dados.

O balanceamento da carga de trabalho Sysplex DB2 Universal JDBC Driver pode aprimorar a disponibilidade de um grupo de compartilhamento de dados porque o driver obtém informação de status freqüente sobre os membros de um grupo de compartilhamento de dados. O driver utiliza essa informação para determinar o membro de compartilhamento de dados para o qual a próxima transação deve ser roteada. Com o balanceamento de carga de trabalho Sysplex, o servidor DB2 UDB para z/OS e o WLM para z/OS (Workload Manager) asseguram-se de que o trabalho seja distribuído eficientemente entre os membros do grupo de compartilhamento de dados e que esse trabalho seja transferido para outro membro de um grupo de compartilhamento de dados caso um dos membros tenha uma deficiência.

O DB2 Universal JDBC Driver utiliza objetos de transporte e um conjunto de objetos de transporte global para suportar o centralizador de conexão e o balanceamento da carga de trabalho Sysplex. Há um objeto de transporte para cada conexão física para o servidor de banco de dados. Ao ativar o balanceamento do centralizador de conexão e da carga de trabalho Sysplex, você configura um número máximo de conexões físicas para o servidor de banco de dados em qualquer momento, configurando o número máximo de objetos de transporte.

No nível driver, você configura limites para o número de objetos de transporte, utilizando as propriedades de configuração DB2 Universal JDBC Driver.

No nível de conexão, você ativa e desativa o balanceamento do centralizador de conexão DB2 Universal JDBC Driver e da carga de trabalho Sysplex, além de configurar limites para o número de objetos de transporte, utilizando as propriedades DataSource.

Você pode escolher qualquer uma das maneiras a seguir para monitorar o conjunto de objetos de transporte:

Propriedades de Configuração DB2 Universal JDBC Driver para Balanceamento do Centralizador de Conexão e da Carga de Trabalho Sysplex

Cada uma das propriedades de configuração a seguir é utilizada para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex

db2.jcc.dumpPool
Especifica os tipos de estatísticas que são gravadas para os eventos do conjunto de transporte, além das estatísticas de resumo que são gravadas. O conjunto de transporte global é utilizado para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex.

O tipo de dados de db2.jcc.dumpPool é inteiro (int.). As propriedades de configuração de db2.jcc.dumpPoolStatisticsOnSchedule e de db2.jcc.dumpPoolStatisticsOnScheduleFile também devem ser configuradas como estatísticas de gravação antes que qualquer estatística seja gravada.

É possível especificar um ou mais dos seguintes tipos de estatísticas com a propriedade db2.jcc.dumpPool:

Para rastrear mais de um tipo de evento, inclua os valores para os tipos de eventos que você queira rastrear. Por exemplo, suponha que você queira rastrear eventos DUMP_GET_OBJECT e DUMP_CREATE_OBJECT. Os equivalentes numéricos desses valores são 2 e 16, então você especifica 18 para o valor db2.jcc.dumpPool.

O padrão é 0, o que significa que apenas estatísticas de resumo para o conjunto de transporte global são gravadas.

db2.jcc.dumpPoolStatisticsOnSchedule
Especifica qual a freqüência, em segundos, que as estatísticas de conjunto de transporte global são gravadas no arquivo que foi especificado pela propriedade de configuração db2.jcc.dumpPoolStatisticsOnScheduleFile. O conjunto de transporte global é utilizado para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex.

O padrão é -1, o que significa que as estatísticas do conjunto de transporte global não foram gravadas.

db2.jcc.dumpPoolStatisticsOnScheduleFile
Especifica o nome do arquivo no qual as estatísticas do conjunto de transporte global são gravadas. O conjunto de transporte global é utilizado para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex.

Se a propriedade de configuração db2.jcc.dumpPoolStatisticsOnScheduleFile não for especificada, as estatísticas do conjunto de transporte global não serão gravadas.

db2.jcc.maxTransportObjectIdleTime
Especifica a quantidade de tempo, em segundos, que um objeto de transporte não utilizado permanece em um conjunto de objetos de transporte global antes que ele possa ser excluído do conjunto. Os objetos de transporte são utilizados para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex.

O valor padrão para a propriedade de configuração db2.jcc.maxTransportObjectIdleTime é 60. A configuração de db2.jcc.maxTransportObjectIdleTime como um valor menor que 0 faz com que os objetos de transporte não utilizados sejam excluídos do conjunto imediatamente. Essa ação não é recomendada porque ela pode causar grave degradação de desempenho.

db2.jcc.maxTransportObjectWaitTime
Especifica a quantidade de tempo, em segundos, que um aplicativo espera para um objeto de transporte se o valor db2.jcc.maxTransportObjects tiver sido alcançado. Os objetos de transporte são utilizados para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex. Quando um aplicativo espera mais do que o valor db2.jcc.maxTransportObjectWaitTime, o conjunto de objetos de transporte global emite uma SQLException.

O valor padrão para a propriedade de configuração db2.jcc.maxTransportObjectWaitTime é -1. Qualquer valor negativo significa que os aplicativos esperam o tempo todo.

db2.jcc.maxTransportObjects
Especifica o limite superior para o número de objetos de transporte em um conjunto de objetos de transporte global para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex. Quando o número de objetos de transporte no conjunto atinge o valor db2.jcc.maxTransportObjects, os objetos de transporte que não tenham sido utilizados por mais tempo que o valor db2.jcc.maxTransportObjectIdleTime são excluídos do conjunto.

O valor padrão para a propriedade de configuração de db2.jcc.maxTransportObjects é -1, o que significa que não há limite para o número de objetos de transporte no conjunto de objetos de transporte global.

db2.jcc.minTransportObjects
Especifica o limite inferior para o número de objetos de transporte em um conjunto de objetos de transporte global para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex. Quando um JVM é criado, não há objetos de transporte no conjunto. Os objetos de transporte são incluídos no conjunto conforme forem necessários. Após o valor db2.jcc.minTransportObjects ser alcançado, o número de objetos de transporte no conjunto de objetos de transporte global nunca chega abaixo do valor db2.jcc.minTransportObjects para a existência do JVM.

O valor padrão para a propriedade de configuração de db2.jcc.minTransportObjects é 0. Qualquer valor menor ou igual a 0 significa que o conjunto de objetos de transporte global pode se tornar vazio.

DB2 Universal JDBC Driver Propriedades de DataSource para Balanceamento do Centralizador de Conexão e da Carga de Trabalho Sysplex

Cada uma das seguintes propriedades de DataSource DB2 Universal JDBC Driver é utilizada para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex

enableConnectionConcentrator
Indica se a função do centralizador de conexão do DB2 Universal JDBC Driver está ativada. A função do centralizador de conexão está disponível somente para conexões de DB2 UDB para servidores z/OS.

O tipo de dados da propriedade enableConnectionConcentrator é booleano. O padrão é false. Porém, se enableSysplexWLB for configurado como true, o padrão será true.

enableSysplexWLB
Indica se a função de balanceamento da carga de trabalho Sysplex do DB2 Universal JDBC Driver está ativada. A função de balanceamento da carga de trabalho Sysplex está disponível somente para conexões de DB2 UDB para servidores z/OS.

O tipo de dados da propriedade enableSysplexWLB é booleano. O padrão é false. Porém, se enableSysplexWLB for configurado como true, enableConnectionConcentrator será configurado como true por padrão.

maxTransportObjects
Especifica o número máximo de transporte de objetos que pode ser utilizado para todas as conexões com o objeto DataSource associado. Os objetos de transporte são utilizados para o balanceamento do centralizador de conexão e da carga de trabalho Sysplex. O valor maxTransportObjects é ignorado se as propriedades enableConnectionConcentrator ou enableSysplexWLB não estiverem configuradas para ativar a utilização do balanceamento do centralizador de conexão ou da carga de trabalho Sysplex.

O tipo de dados dessa propriedade é inteiro (int.).

Se o valor maxTransportObjects não tiver sido alcançado e um objeto de transporte não estiver disponível no conjunto de objetos de transporte, o conjunto cria um novo objeto de transporte. Se o valor maxTransportObjects tiver sido alcançado, o aplicativo espera a quantidade de tempo que é especificada pela propriedade de configuração db2.jcc.maxTransportObjectWaitTime. Após o tempo ter decorrido, se ainda não houver objeto de transporte disponível no conjunto, o mesmo emite um SQLException.

A propriedade maxTransportObjects não substitui a propriedade de configuração db2.jcc.maxTransportObjects. A propriedade maxTransportObjects não tem efeito em conexões de outros objetos DataSource. Se o valor maxTransportObjects for maior que o valor db2.jcc.maxTransportObjects, o maxTransportObjects não acrescenta o valor db2.jcc.maxTransportObjects.

O valor padrão para a propriedade maxTransportObjects é -1, o que significa que o número de objetos de transporte para o DataSource é limitado somente pelo valor db2.jcc.maxTransportObjects do driver.

Exemplo de Ativação das Funções de Balanceamento do Centralizador de Conexão e da Carga de Trabalho Sysplex para DB2 Universal JDBC Driver no WebSphere Application Server

O procedimento a seguir é um exemplo de ativação das funções de balanceamento do centralizador de conexão e da carga de trabalho Sysplex para DB2 Universal JDBC Driver com WebSphere(R) Application Server.

Pré-requisitos

Requisitos do Servidor:

Requisitos do Cliente:

Procedimento

Para ativar as funções de balanceamento do centralizador de conexão e da carga de trabalho Sysplex para DB2 Universal JDBC Driver com WebSphere Application Server:

  1. Verifique se o DB2 Universal JDBC Driver está no nível correto para suportar as funções de equilíbrio do centralizador de conexão e de carga de trabalho Sysplex, emitindo o seguinte comando no processador de linha de comandos no z/OS ou no System Services no UNIX(R):
    java com.ibm.db2.jcc.DB2Jcc -version
    Localize uma linha na saída como esta:
    [ibm][db2][jcc] Driver: IBM DB2 JDBC Universal Driver Architecture n n
    n deve ser 2.7 ou mais recente.
  2. Defina as propriedades de configuração DB2 Universal JDBC Driver para ativar o balanceamento do centralizador de conexão ou da carga de trabalho Sysplex para todas as instâncias DataSource que são criadas baseadas no driver.

    Defina as propriedades de configuração no arquivo DB2JccConfiguration.properties .

    1. Crie um arquivo DB2JccConfiguration.properties ou edite o arquivo DB2JccConfiguration.properties existente.
    2. Defina as propriedade de configuração a seguir:
      • db2.jcc.minTransportObjects
      • db2.jcc.maxTransportObjects
      • db2.jcc.maxTransportObjectWaitTime
      • db2.jcc.dumpPool
      • db2.jcc.dumpPoolStatisticsOnScheduleFile
      Inicie com configurações semelhantes a estas:
      db2.jcc.minTransportObjects=0
      db2.jcc.maxTransportObjects=1500
      db2.jcc.maxTransportObjectWaitTime=-1
      db2.jcc.dumpPool=0
      db2.jcc.dumpPoolStatisticsOnScheduleFile=
        /home/WAS/logs/srv1/poolstats
      
    3. Inclua o caminho de diretório do DB2JccConfiguration.properties para o caminho de classe DB2 Universal JDBC Driver WebSphere Application Server.
  3. Configure as propriedades da origem de dados DB2 Universal JDBC Driver para ativar as funções de balanceamento do centralizador de conexão ou da carga de trabalho do Sysplex.

    No console administrativo WebSphere Application Server, configure as seguintes propriedades para a origem de dados que seu aplicativo utiliza para se conectar ao servidor de banco de dados:

    • enableSysplexWLB
    • enableConnectionConcentrator
    • maxTransportObjects
    Suponha que você queira a função do centralizador de conexão bem como a função de balanceamento da carga de trabalho do Sysplex. Inicie com configurações semelhantes a estas:
    Tabela 26. Exemplo de Configurações de Propriedade da Origem de Dados para Funções de Balanceamento do Centralizador de Conexão e da Carga de Trabalho Sysplex DB2 Universal JDBC Driver
    Propriedade Definição
    enableSysplexWLB true1
    maxTransportObjects 100
    Notas:
    1. A propriedade enableConnectionConcentrator é configurada como true por padrão porque a propriedade está configurada como enableSysplexWLB true.
  4. Reinicie o WebSphere Application Server.

Métodos para Monitoramento das Funções de Balanceamento do Centralizador de Conexão e da Carga de Trabalho do Sysplex DB2 Universal JDBC Driver

Para monitorar as funções do centralizador de conexão e da carga de trabalho Sysplex DB2 Universal JDBC Driver, é necessário monitorar o conjunto de objetos de transporte global. Você pode escolher qualquer uma das maneiras a seguir para monitorar o conjunto de objetos de transporte:

Propriedades de Configuração para Monitorar o Conjunto de Objetos de Transporte Global

O rastreio de controle das propriedades de configuração de db2.jcc.dumpPool, db2.jcc.dumpPoolStatisticsOnSchedule e db2.jcc.dumpPoolStatisticsOnScheduleFile do conjunto de objetos de transporte global.

Por exemplo, o conjunto a seguir de definições da propriedade de configuração ocasiona mensagens de erro Sysplex e mensagens de erro do conjunto de dump a serem gravadas a cada 60 segundos no arquivo /home/WAS/logs/srv1/poolstats:

db2.jcc.dumpPool=DUMP_SYSPLEX_MSG|DUMP_POOL_ERROR
db2.jcc.dumpPoolStatisticsOnSchedule=60
db2.jcc.dumpPoolStatisticsOnScheduleFile=/home/WAS/logs/srv1/poolstats

Uma entrada no arquivo de estatísticas do conjunto se parece com:

time Scheduled PoolStatistics npr:2575 nsr:2575 lwroc:439
hwroc:1764 coc:372 aooc:362 rmoc:362 nbr:2872 tbt:857520 tpo:10

Os significados dos campos são:

npr
O número total de pedidos feitos ao conjunto, desde a sua criação, pelo DB2 Universal JDBC Driver.
nsr
O número de pedidos bem-sucedidos que o DB2 Universal JDBC Driver efetuou ao conjunto desde que este foi criado. Um pedido bem-sucedido significa que o conjunto retornou um objeto.
lwroc
O número de objetos que foram reutilizados mas não estão no conjunto. Isto pode ocorrer se um objeto de conexão libera um objeto de transporte no limite da transação. Se o objeto de conexão precisar de um objeto de transporte mais tarde e o objeto de transporte original não foi utilizado por nenhum outro objeto de conexão, o objeto de conexão pode utilizar aquele objeto de transporte.
hwroc
O número de objetos que foram reutilizados a partir do conjunto.
coc
O número de objetos que o DB2 Universal JDBC Driver criou desde que o conjunto foi criado.
aooc
O número de objetos que excedeu o tempo inativo que foi especificado pela propriedade de configuração db2.jcc.maxTransportObjectIdleTime e foi excluído do conjunto.
rmoc
O número de objetos que foi excluído do conjunto desde que o conjunto foi criado.
nbr
O número de pedidos que o DB2 Universal JDBC Driver realizou ao conjunto que o mesmo bloqueou porque a sua capacidade máxima foi atingida. Um pedido bloqueado pode ser bem-sucedido se um objeto for retornado ao conjunto antes que o valor de configuração do db2.jcc.maxTransportObjectWaitTime seja excedido e que uma exceção seja emitida.
tbt
O tempo total em milissegundos dos pedidos que foram bloqueados pelo conjunto. Esse tempo pode ser muito maior que o tempo de execução decorrido do aplicativo se o aplicativo utilizar encadeamentos múltiplos.
tpo
O número de objetos que estão atualmente no conjunto.
Interfaces de Programação do Aplicativo para Monitorar o Conjunto de Objetos de Transporte Global

Você pode gravar aplicativos para reunir estatísticas no conjunto de objetos de transporte global. Esses aplicativos criam objetos na classe DB2PoolMonitor e chamam métodos para recuperar informação sobre o conjunto.

Por exemplo, o seguinte código cria um objeto para monitorar o conjunto de objetos de transporte global:

import com.ibm.db2.jcc.DB2PoolMonitor;
DB2PoolMonitor transportObjectPoolMonitor =
	DB2PoolMonitor.getPoolMonitor (DB2PoolMonitor.TRANSPORT_OBJECT);

Após o objeto DB2PoolMonitor ser criado, você pode utilizar os seguintes métodos para monitorar o conjunto de objetos de transporte global.

getMonitorVersion
Formato:
public int getMonitorVersion()

Recupera a versão da classe DB2PoolMonitor que é enviada com o DB2 Universal JDBC Driver.

totalRequestsToPool
Formato:
public int totalRequestsToPool()

Recupera o número total de pedidos feitos ao conjunto, desde a sua criação, pelo DB2 Universal JDBC Driver.

successfullRequestsFromPool
Formato:
public int successfullRequestsFromPool()

Recupera o número de pedidos bem-sucedidos que o DB2 Universal JDBC Driver efetuou ao conjunto desde que este foi criado. Um pedido bem-sucedido significa que o conjunto retornou um objeto.

numberOfRequestsBlocked
Formato:
public int numberOfRequestsBlocked()

Recupera o número de pedidos que o DB2 Universal JDBC Driver realizou ao conjunto que o mesmo bloqueou porque a sua capacidade máxima foi atingida. Um pedido bloqueado pode ser bem-sucedido se um objeto for retornado ao conjunto antes que o valor de configuração do db2.jcc.maxTransportObjectWaitTime seja excedido e que uma exceção seja emitida.

totalTimeBlocked
Formato:
public long totalTimeBlocked()

Recupera o tempo total em milissegundos dos pedidos que foram bloqueados pelo conjunto. Esse tempo pode ser muito maior que o tempo de execução decorrido do aplicativo se o aplicativo utilizar encadeamentos múltiplos.

lightWeightReusedObjectCount
Formato:
public int lightWeightReusedObjectCount()

Recupera o número de objetos que foram reutilizados mas não estão no conjunto. Isto pode ocorrer se um objeto de conexão libera um objeto de transporte no limite da transação. Se o objeto de conexão precisar de um objeto de transporte mais tarde e o objeto de transporte original não foi utilizado por nenhum outro objeto de conexão, o objeto de conexão pode utilizar aquele objeto de transporte.

heavyWeightReusedObjectCount
Formato:
public int heavyWeightReusedObjectCount()

Recupera o número de objetos que foram reutilizados a partir do conjunto.

createdObjectCount
Formato:
public int createdObjectCount()

Recupera o número de objetos que o DB2 Universal JDBC Driver criou desde que o conjunto foi criado.

agedOutObjectCount
Formato:
public int agedOutObjectCount()

Recupera o número de objetos que excedeu o tempo inativo que foi especificado pela propriedade de configuração db2.jcc.maxTransportObjectIdleTime e foi excluído do conjunto.

removedObjectCount
Formato:
public int removedObjectCount()

Recupera o número de objetos que foi excluído do conjunto desde que o conjunto foi criado.

totalPoolObjects
Formato:
public int totalPoolObjects()

O número de objetos que estão atualmente no conjunto.

Palavra-chave de Configuração CLI/ODBC OleDbReportIsLongForLongTypes

A palavra-chave OleDbReportIsLongForLongTypes é suportada pelos servidores de banco de dados a seguir:

Descrição da Palavra-chave
Torna o sinalizador OLE DB LONGOS tipos de dados com DBCOLUMNFLAGS_ISLONG.
Sintaxe da Palavra-chave db2cli.ini:
OleDbReportIsLongForLongTypes = 0 | 1
Atributo de Instrução Equivalente:
SQL_ATTR_REPORT_ISLONG_FOR_LONGTYPES_OLEDB
Definição Padrão:
Tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC e LONG VARGRAPHIC FOR BIT DATA) não têm o conjunto de sinalizadores DBCOLUMNFLAGS_ISLONG, que pode fazer com que as colunas sejam utilizadas na cláusula WHERE.
Notas de Uso:
 

O mecanismo do cursor de cliente do OLE DB e o CommandBuilder do OLE DB .NET Data Provider geram instruções de atualização e exclusão com base nas informações da coluna fornecidas pelo IBM DB2 OLE DB Provider. Se a instrução gerada contiver um tipo LONG na cláusula WHERE, a instrução irá falhar porque os tipos LONG não podem ser utilizados em uma procura com um operador de igualdade. Definir a palavra-chave OleDbReportIsLongForLongTypes para 1 fará com que o IBM DB2 OLE DB Provider relate tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC e LONG VARGRAPHIC FOR BIT DATA) com o conjunto de sinalizadores DBCOLUMNFLAGS_ISLONG. Isso impedirá que as colunas longas sejam utilizadas na cláusula WHERE.

Palavra-chave de Configuração CLI/ODBC OleDbSQLColumnsSortByOrdinal

A palavra-chave OleDbSQLColumnsSortByOrdinal é suportada pelos servidores de banco de dados a seguir:

Descrição da Palavra-chave
Faz o IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) do OLE DB retornar um conjunto de linhas classificadas pela coluna ORDINAL_POSITION.
Sintaxe da Palavra-chave db2cli.ini:
OleDbSQLColumnsSortByOrdinal = 0 | 1
Atributo de Instrução Equivalente:
SQL_ATTR_SQLCOLUMNS_SORT_BY_ORDINAL_OLEDB
Definição Padrão:
IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) retorna o conjunto de linhas classificado pelas colunas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME.
Notas de Uso:
 

A especificação OLE DB da Microsoft requer que IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) retorne o conjunto de linhas classificado pelas colunas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. O IBM DB2 OLE DB Provider está de acordo com a especificação. Porém, os aplicativos que utilizam o provedor Microsoft ODBC Bridge (MSDASQL) foram tipicamente codificados para obter o conjunto de linhas classificado pelo ORDINAL_POSITION. Definir a palavra-chave OleDbSQLColumnsSortByOrdinal para 1 fará com que o provedor retorne um conjunto de linhas classificado pelo ORDINAL_POSITION.

Grupo de Propriedades do DB2 Data Source para o IBM DB2 OLE DB Provider

O IBM DB2 OLE DB Provider incluiu um novo grupo de propriedade: DB2 Data Source. O conjunto de propriedades para DB2 Data Source é DBPROPSET_DB2DATASOURCE.

O GUID para o conjunto de propriedades é {0x8a80412a,0x7d94,0x4fec,{0x87,0x3e,0x6c,0xd1,0xcd,0x42,0x0d,0xcd}}

DBPROPSET_DB2DATASOURCE tem três propriedades:

DB2PROP_REPORTISLONGFORLONGTYPES

#define DB2PROP_REPORTISLONGFORLONGTYPES 4
Grupo de propriedades: DB2 Data Source
Conjunto de propriedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típico: R/W
Descrição: Relata IsLong para Tipos Longos

O mecanismo do cursor de cliente do OLE DB e o CommandBuilder do OLE DB .NET Data Provider geram instruções de atualização e exclusão com base nas informações da coluna fornecidas pelo IBM DB2 OLE DB Provider. Se a instrução gerada contiver um tipo LONG na cláusula WHERE, a instrução irá falhar porque os tipos LONG não podem ser utilizados em uma procura com um operador de igualdade.

Tabela 27. Valores DB2PROP_REPORTISLONGFORLONGTYPES
Valores Significado
VARIANT_TRUE Fará com que o IBM DB2 OLE DB Provider relate tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC e LONG VARGRAPHIC FOR BIT DATA) com o conjunto de sinalizadores DBCOLUMNFLAGS_ISLONG. Isso impedirá que as colunas longas sejam utilizadas na cláusula WHERE.
VARIANT_FALSE DBCOLUMNFLAGS_ISLONG não é definido para LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC e LONG VARGRAPHIC FOR BIT DATA. Este é o padrão.
DB2PROP_RETURNCHARASWCHAR

#define DB2PROP_RETURNCHARASWCHAR 2
Grupo de propriedades: DB2 Data Source
Conjunto de propriedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típico: R/W
Descrição: Retornar Char como WChar

Tabela 28. Valores DB2PROP_RETURNCHARASWCHAR
Valores Significado
VARIANT_TRUE OLE DB descreve colunas do tipo CHAR, VARCHAR, LONG VARCHAR ou CLOB como DBTYPE_WSTR. A página de códigos de dados implicada em ISequentialStream será UCS-2. Este é o padrão.
VARIANT_FALSE OLE DB descreve colunas do tipo CHAR, VARCHAR, LONG VARCHAR ou CLOB como DBTYPE_STR. A página de códigos de dados implicada em ISequentialStream será a página de códigos local do cliente.
DB2PROP_SORTBYORDINAL

#define DB2PROP_SORTBYORDINAL 3
Grupo de propriedades: DB2 Data Source
Conjunto de propriedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típico: R/W
Descrição: Classificar Por Ordinal

A especificação OLE DB da Microsoft requer que IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) retorne o conjunto de linhas classificado pelas colunas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. O IBM DB2 OLE DB Provider está de acordo com a especificação. Porém, os aplicativos que utilizam o provedor Microsoft ODBC Bridge (MSDASQL) foram tipicamente codificados para obter o conjunto de linhas classificado pelo ORDINAL_POSITION.

Tabela 29. Valores DB2PROP_SORTBYORDINAL
Valores Significado
VARIANT_TRUE Fará com que o provedor retorne um conjunto de linhas classificado pelo ORDINAL_POSITION.
VARIANT_FALSE Fará com que o provedor retorne um conjunto de linhas classificado pelo TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Este é o padrão.

Sintaxe de URL Incorreta no Diagrama de Sintaxe DB2Binder

No tópico "Instalando o DB2 Universal JDBC Driver", o diagrama de sintaxe DB2Binder define incorretamente a sintaxe de URL para o DB2 Universal JDBC Driver. A representação correta da sintaxe de URL para DB2Binder é mostrada no diagrama a seguir:

Sintaxe DB2Binder
Ler diagrama de sintaxeManter visual do diagrama de sintaxe>>-java--com.ibm.db2.jcc.DB2Binder------------------------------>
 
>---url jdbc:db2://server-+----------+-/database---------------->
                          '-:--ports-'
 
>---user user-ID---password password--+---------------+--------->
                                      '--size integer-'
 
>--+-----------------------------+------------------------------>
   '--collection collection-name-'
 
>--+-------------------------------+--+-------+----------------><
   |              .-,------------. |  '--help-'
   |              V              | |
   '--tracelevel ---trace-option-+-'
 

Novo Roteamento Clientes do DB2 Universal JDBC Driver

O recurso de rovo roteamento de cliente automático no DB2 UDB (Universal Database) para Linux, UNIX, e Windows permite que os aplicativos clientes se recuperem de uma perda de comunicação com o servidor para que eles possam continuar a funcionar com interrupção mínima.

Sempre que um servidor trava, cada cliente conectado a ele recebe um erro de comunicação, que encerra a conexão e resulta em um erro de aplicativo. Quando a disponibilidade é importante, você deve ter uma configuração redundante e suporte a failover. (Failover é a capacidade de um servidor de tomar o controle de operações quando outro servidor falha). Em qualquer caso, o cliente do DB2 Universal JDBC Driver tenta restabelecer a conexão com um novo servidor ou com o servidor original, que pode estar em execução em um nó de failover. Quando a conexão é restabelecida, o aplicativo recebe uma SQLException que o informa sobre o defeito da transação, mas o aplicativo pode continuar com a próxima transação.

Restrições

Procedimento

Depois que o administrador de banco de dados especifica a localização do servidor alternativo em um banco de dados particular na instância do servidor, as localizações do servidor principal e do alternativo serão retornadas ao cliente no momento da conexão. O driver DB2 Universal JDBC cria uma instância do objeto Referenciável DB2ClientRerouteServerList e armazena essa instância em sua memória temporária. Se a comunicação for perdida, o driver DB2 Universal JDBC tentará restabelecer a conexão utilizando as informações do servidor retornadas do servidor.

A propriedade clientRerouteServerListJNDIName DataSource fornece suporte adicional de novo roteamento de cliente no cliente; clientRerouteServerListJNDIName tem duas funções:

O clientRerouteServerListJNDIName identifica uma referência JNDI a uma instância DB2ClientRerouteServerList em um repositório JNDI para informações do servidor alternativo. Depois de uma conexão bem-sucedida com o servidor principal, as informações do servidor alternativo que são fornecidas pelo clientRerouteServerListJNDIName são sobrescritas pelas informações do servidor. O driver DB2 Universal JDBC tentará propagar as informações atualizadas para o armazenamento de JNDI depois de um failover se a propriedade clientRerouteServerListJNDIName for definida. Se clientRerouteServerListJNDIName for especificada, as informações do servidor principal especificadas no DB2ClientRerouteServerList serão utilizadas para conexão. Se o servidor principal não for especificado, as informações serverName especificadas sobre a origem de dados serão utilizadas.

DB2ClientRerouteServerList é um bean Java serializável com quatro propriedades:

São fornecidos os métodos getter e setter para acessar essas propriedades. A definição da classe DB2ClientRerouteServerList é a seguinte:

package com.ibm.db2.jcc;
public class DB2ClientRerouteServerList
  implements java.io.Serializable,
  javax.naming.Referenceable
{
  public String[] alternateServerName;
  public synchronized void
    setAlternateServerName(String[] alternateServer);
  public String[] getAlternateServerName();
  public int[] alternatePortNumber;
  public synchronized void
    setAlternatePortNumber(int[] alternatePortNumberList);
  public int[] getAlternatePortNumber();
  
  public synchronized void
    setPrimaryServerName (String primaryServerName);
  public String getPrimaryServerName ();
  public synchronized void setPrimaryPortNumber (int primaryPortNumber)
  public int getPrimaryPortNumber ();
}

Uma conexão de failover estabelecida recentemente é configurada com as propriedades da origem de dados originais, exceto para o nome do servidor e o número da porta. Além disso, quaisquer registros especiais do DB2 UDB modificados durante a conexão original são restabelecidos na conexão de failover pelo driver DB2 Universal JDBC.

Quando ocorre um defeito de comunicação, o driver DB2 Universal JDBC primeiro tenta a recuperação para o servidor principal. Se isso falhar, o driver tentará se conectar à localização alternativa (failover). Depois que uma conexão é restabelecida, o driver lança uma java.sql.SQLException para o aplicativo com SQLCODE -4498, para indicar ao aplicativo que a conexão com o servidor alternativo foi automaticamente restabelecida. O aplicativo pode então tentar novamente sua transação.

Procedimento para Tornar o DB2ClientRerouteServerList Persistente

Para configurar o armazenamento para tornar o DB2ClientRerouteServerList persistente, siga essas etapas:

  1. Crie uma instância de DB2ClientRerouteServerList e ligue essa instância ao registro JNDI. Por exemplo:
    // Criar um contexto inicial para operações de nomenclatura
    InitialContext registry = new InitialContext();
    // Criar um objeto DB2ClientRerouteServerList
    DB2ClientRerouteServerList address=new DB2ClientRerouteServerList();
    
    // Definir o número da porta e o nome do servidor para o servidor principal
    address.setPrimaryPortNumber(50000);
    address.setPrimaryServerName("mvs1.sj.ibm.com");
    
    // Definir o número da porta e o nome do servidor para o servidor alternativo
    int[] port = {50002};
    String[] server = {"mvs3.sj.ibm.com"};
    address.setAlternatePortNumber(port);
    address.setAlternateServerName(server);
        
    registry.rebind("serverList", address);
    
  2. Atribua o nome JNDI do objeto DB2ClientRerouteServerList para a propriedade de DataSource clientRerouteServerListJNDIName. Por exemplo:
    datasource.setClientRerouteServerListJNDIName("serverList");

Customizando as Propriedades de Configuração do DB2 Universal JDBC Driver

As propriedades de configuração do driver DB2 Universal JDBC permitem definir valores de propriedades que têm escopo em todo o driver. Estas definições se aplicam a aplicativos e instâncias DataSource. Você pode alterar as definições sem precisar alterar o código fonte do aplicativo ou as características do DataSource.

Cada definição de propriedade de configuração do driver DB2 Universal JDBC possui o seguinte formato:

property=value

Se a propriedade de configuração começar com db2.jcc.override, ela será aplicável a todas as conexões e substituirá qualquer propriedade Connection ou DataSource pelo mesmo nome de propriedade. Se a propriedade de configuração começar com db2.jcc ou com db2.jcc.default, o valor dela será um padrão. As definições da propriedade Connection ou DataSource substituem esse valor.

Procedimento

Para definir propriedades de configuração:

É possível definir as seguintes propriedades de configuração do driver DB2 Universal JDBC. Todas as propriedades são opcionais.

db2.jcc.override.traceFile
Ativa o rastreio do driver DB2 Universal JDBC para o código do driver Java e especifica o nome no qual os nomes de arquivos de rastreio são baseados.

Especifique um nome completo de arquivo para o valor da propriedade db2.jcc.override.traceFile.

A propriedade db2.jcc.override.traceFile substitui a propriedade traceFile para um objeto Connection ou DataSource.

Por exemplo, a especificação da seguinte definição para db2.jcc.override.traceFile ativa o rastreio do código Java do DB2 Universal JDBC Driver para um arquivo denominado /SYSTEM/tmp/jdbctrace:

db2.jcc.override.traceFile=/SYSTEM/tmp/jdbctrace

É necessário definir as propriedades de rastreio de acordo com as instruções do Suporte ao Software IBM.

db2.jcc.sqljUncustomizedWarningOrException
Especifica a ação que o driver DB2 Universal JDBC toma quando um aplicativo SQLJ não personalizado é executado. db2.jcc.sqljUncustomizedWarningOrException pode ter os seguintes valores:
0
O driver DB2 Universal JDBC não gera um Aviso ou uma Exceção quando um aplicativo SQLJ não personalizado é executado. Este é o padrão.
1
O driver DB2 Universal JDBC gera um Aviso quando um aplicativo SQLJ não personalizado é executado.
2
O driver DB2 Universal JDBC gera uma Exceção quando um aplicativo SQLJ não personalizado é executado.

Função db2secFreeToken Removida

A função db2secFreeToken (Memória livre mantida retida por token) não faz mais parte da API do plug-in de autenticação do usuário db2secGssapiServerAuthFunctions_1.

Implementar Plug-ins de Segurança Customizados Cuidadosamente

A integridade da instalação do DB2 UDB (Universal Database) poderá ser comprometida se a implementação dos plug-ins de segurança não for adequadamente codificada, revisada e testada. O DB2 UDB toma precauções contra muitos tipos comuns de defeitos, mas não pode garantir a integridade completa quando plug-ins de segurança gravados pelo usuário são implementados.

Plug-ins de Segurança

Se estiver utilizando seu próprio plug-in de segurança personalizado, você poderá utilizar um ID do usuário com até 255 caracteres em uma instrução connect emitida através do CLP ou uma instrução SQL dinâmica.

APIs de Plug-ins de Segurança

Para as APIs db2secGetGroupsForUser, db2secValidatePassword e db2secGetAuthIDs, o parâmetro de entrada, dbname, pode ser nulo e seu parâmetro de entrada de comprimento correspondente, dbnamelen, será definido como 0.

Convenções de Nomenclatura de Plug-in de Segurança (Linux e UNIX)

.so é, agora, aceito como uma extensão de nome de arquivo para bibliotecas de plug-in de segurança gravadas pelo usuário em todas as plataformas Linux e UNIX.

No AIX, as bibliotecas do plug-in de segurança podem ter uma extensão de .a ou .so. Se existirem as duas versões da biblioteca de plug-ins, será utilizada a versão .a.

Para HP-UX no PA-RISC, as bibliotecas de plug-ins de segurança podem ter uma extensão .sl ou .so. Se existirem as duas versões da biblioteca de plug-ins. será utilizada a versão .sl.

Em todas as outras plataformas Linux e UNIX, .so é a única extensão de nome de arquivo suportada para bibliotecas do plug-in de segurança.

Restrições para Bibliotecas de Plug-ins de Segurança

No AIX, as bibliotecas do plug-in de segurança podem ter uma extensão de nome de arquivo de .a ou .so. O mecanismo utilizado para carregar a biblioteca de plug-ins depende da extensão utilizada:

Bibliotecas de Plug-ins com uma Extensão de Nome de Arquivo .a
As bibliotecas de plug-ins com extensões de nomes de arquivos .a são considerada archives contendo membros de objetos compartilhados. Estes membros devem ser denominados shr.o (32 bits) ou shr64.o (64 bits). Um único archive pode conter os membros de 32 bits e de 64 bits, permitindo sua implementação nos dois tipos de plataformas.

Por exemplo, para construir uma biblioteca de plug-ins de estilo de archive de 32 bits:

  xlc_r -qmkshrobj -o shr.o MyPlugin.c -bE:MyPlugin.exp
  ar rv MyPlugin.a shr.o
Bibliotecas de Plug-ins com uma Extensão de Nome de Arquivo .so
As bibliotecas de plug-ins com extensões de nomes de arquivos .so são consideradas objetos compartilhados dinamicamente carregáveis. Tal objeto possui 32 ou 64 bits, dependendo das opções de compilador e de linker utilizadas durante sua construção. Por exemplo, para construir uma biblioteca de plug-ins de 32 bits:
  xlc_r -qmkshrobj -o MyPlugin.so MyPlugin.c -bE:MyPlugin.exp

Em todas as plataformas diferentes de AIX, as bibliotecas do plug-in de segurança são sempre consideradas objetos compartilhados dinamicamente carregáveis.

| | |

Suporte ao Plug-in GSS-API para o DB2 Universal JDBC Driver

|

Com o release do DB2 UDB Versão 8.2 para Linux, UNIX, Windows, você pode criar |seus próprios mecanismos de autenticação em forma de plug-ins (bibliotecas |carregáveis). O mecanismo do DB2 UDB carrega e acessa estes plug-ins para desempenhar autenticação do usuário. Para suportar aplicativos de cliente gravados em |Java, o DB2 Universal JDBC Driver fornece suporte a plug-ins de segurança no DB2 UDB |V8.2, FixPak 4.

|

Para aplicativos Java que utilizam o DB2 Universal JDBC Driver para desempenhar autenticação de plug-in, |os usuários precisam implementar seu próprio plug-in, estendendo a classe abstrata |com.ibm.db2.jcc.DB2JCCPlugin e configurando as seguintes propriedades:

| |

Observe o seguinte exemplo:

|
   java.util.Properties properties = new java.util.Properties();
|   properties.put("user", "db2admin");
|   properties.put("password", "admindb2");
|   properties.put("pluginName", "gssapi_simple");
|   properties.put("securityMechanism",
|   new String(""+com.ibm.db2.jcc.DB2BaseDataSource.PLUGIN_SECURITY+""));
|   properties.put("plugin", new JCCSimpleGSSPlugin());
|   Connection con = java.sql.DriverManager.getConnection(url, properties);

Os Plug-ins de Segurança GSS-API Não Suportam Autenticação de Vários Fluxos

A autenticação GSS-API é limitada a enviar fluxo de um token do cliente para o servidor e um token do servidor para o cliente. Esses tokens são obtidos de gss_init_sec_context() no cliente e de gss_accept_sec_context() no servidor. Os plug-ins GSS-API que estão tentando fluxos adicionais irão gerar um erro inesperado de plug-in de segurança, fazendo com que a conexão falhe.

Os Plug-ins de Segurança GSS-API Não Suportam Criptografia e Assinatura de Mensagens

A criptografia e a assinatura de mensagens não estão disponíveis em plug-ins de segurança GSS-API.

Encerramento Implícito de Transações em Aplicativos Independentes

Os encerramentos de aplicativos (normais e anormais) revertem implicitamente unidades de trabalho pendentes, independentemente do sistema operacional.

Suporte a Transações Distribuídas

Na documentação das novidades para o DB2 UDB (Universal Database) Versão 8.2, as informações de suporte à transação distribuídas para a seção de aprimoramentos do driver DB2 Universal JDBC possuem informações incorretas. A última frase dessa seção está incorreta. As informações corretas são:

A partir da Versão 8.2, o DB2 UDB fornece suporte ao processamento de transações distribuídas que está de acordo com a especificação XA. Esse suporte implementa as especificações do J2EE (Java 2 Platform, Enterprise Edition) JTS (Java Transaction Service) e JTA (Java Transaction API).

[ Início da Página |Página Anterior | Próxima Página | Índice ]