Notas sobre o Release


41.6 Capítulo 3. Utilizando Recursos Avançados

41.6.1 Escrevendo Aplicativos de Multi-Encadeamento

Os seguintes devem ser adicionados no final da seção"Aplicativos Mistos Multi-Threaded":

Nota:
É recomendado que você não utilize o tamanho da pilha padrão, mas em vez disso, aumente o tamanho da pilha para, no mínimo, 256 000. O DB2 requer um tamanho de pilha mínimo de 256 000 ao chamar uma função do DB2. Portanto, você deve assegurar-se de alocar um tamanho de pilha total que seja grande o suficiente para seu aplicativo e os requisitos mínimos para uma chamada da função do DB2.

41.6.2 Escrevendo um Aplicativo Unicode da CLI do DB2

Esta é uma nova seção para esse capítulo.

Existem duas áreas principais de suporte para Aplicativos Unicode do DB2 CLI:

  1. A inclusão de um conjunto de funções que podem aceitar argumentos de cadeia Unicode no lugar de argumentos de cadeia ANSI.
  2. A inclusão de novos tipos de dados C e SQL para descrever dados Unicode.

As seguintes seções fornecem mais informações para essas duas áreas. Para ser considerado um aplicativo Unicode, o aplicativo deve definir o atributo de conexão SQL_ATTR_ANSI_APP para SQL_AA_FALSE, antes de uma conexão ser feita. Isso irá assegurar que a CLI utilizará Unicode com o método de preferência de comunicação entre ela e o banco de dados.

41.6.2.1 Funções Unicode

Funções ODBC API têm sufixos para indicar o formato de seus argumentos de cadeia: os que aceitam unicode terminam em W; os que aceitam ANSI não têm sufixo.

Nota:
ODBC inclui funções equivalentes com nomes terminados em A, mas elas não são utilizadas pelo DB2 CLI.
Segue uma listas dessas funções que estão disponíveis no DB2 CLI, que tem Versões ANSI e Unicode.
SQLBrowseConnect        SQLForeignKeys          SQLPrimaryKeys
SQLColAttribute         SQLGetConnectAttr       SQLProcedureColumns
SQLColAttributes        SQLGetConnectOption     SQLProcedures
SQLColumnPrivileges     SQLGetCursorName        SQLSetConnectAttr
SQLColumns              SQLGetDescField         SQLSetConnectOption
SQLConnect              SQLGetDescRec           SQLSetCursorName
SQLDataSources          SQLGetDiagField         SQLSetDescField
SQLDescribeCol          SQLGetDiagRec           SQLSetStmtAttr
SQLDriverConnect        SQLGetInfo              SQLSpecialColumns
SQLGetStmtAttr          SQLStatistics	           SQLError
SQLNativeSQL            SQLTablePrivileges      SQLExecDirect
SQLPrepare              SQLTables

As funções Unicode cujos argumentos têm sempre o comprimento de cadeias interpretam estes argumentos como contagem de caracteres. As funções que retornam informações de comprimento para dados do servidor também descrevem o tamanho da exibição e são precisas em termos de caracteres. Quando o comprimento (tamanho de transferência de dados) puder fazer referência a dados de cadeia ou não de cadeia, o comprimento será interpretado como uma contagem de bytes. Por exemplo, SQLGetInfoW ainda usa o comprimento como contagem de bytes, mas SQLExecDirectW usará contagem de caracteres. A CLI retornará dados de conjuntos de resultados em Unicode ou ANSI, dependendo da ligação do aplicativo. Se um aplicativo vincular-se ao SQL_C_CHAR, o driver converterá os dados SQL_WCHAR para SQL_CHAR. Um gerenciador de drivers ODBC, se utilizado, mapeia SQL_C_WCHAR para SQL_C_CHAR para drivers ANSI, mas não faz nenhum mapeamento para drivers Unicode.

41.6.2.2 Novos Tipos de Dados e Conversões Válidas

Tipos de dados ODBC e CLI adicionais definidos foram incluídos para acomodar bancos de dados Unicode. Esses tipos suplementam o conjunto de tipos C e SQL já existentes. O novo tipo C, SQL_C_WCHAR, indica que o buffer C contém dados UCS-2 em formato nativo endian. Os novos tipos SQL, SQL_WCHAR, SQL_WVARCHAR e SQL_WLONGVARCHAR, indicam que um marcador de coluna ou parãmetro específico contém dados Unicode. Para bancos de dados DB2 Unicode, colunas gráficas serão descritas através dos novos tipos.


Tabela 11. Conversões de Dados Suportadas

Tipo de Dados


SQL

S
Q
L
_
C
_
C
H
A
R
S
Q
L
_
C
_
W
C
H
A
R
S
Q
L
_
C
_
L
O
N
G
S
Q
L
_
C
_
S
H
O
R
T
S
Q
L
_
C
_
T
I
N
Y
I
N
T
S
Q
L
_
C
_
F
L
O
A
T
S
Q
L
_
C
_
D
O
U
B
L
E
S
Q
L
_
C
_
T
Y
P
E
_
D
A
T
E
S
Q
L
_
C
_
T
Y
P
E
_
T
I
M
E
S
Q
L
_
C
_
T
Y
P
E
_
T
I
M
E
S
T
A
M
P
S
Q
L
_
C
_
B
I
N
A
R
S
S
Q
L
_
C
_
B
I
T
S
Q
L
_
C
_
D
B
C
H
A
R
S
Q
L
_
C
_
C
L
O
B
_
L
O
C
A
T
O
R
S
Q
L
_
C
_
B
L
O
B
_
L
O
C
A
T
O
R
S
Q
L
_
C
_
D
B
C
L
O
B
_
L
O
C
A
T
O
R
S
Q
L
_
C
_
B
I
G
I
N
T
S
Q
L
_
C
_
N
U
M
E
R
I
C
BLOB
X
X









D




X
CHAR
D
X
X
X
X
X
X
X
X
X
X
X




X
X
CLOB
D
X









X



X


DATE
X
X






D


X






DBCLOB


X









X


D



X
DECIMAL
D
X
X
X
X
X
X




X
X




X
X
DOUBLE
X
X
X
X
X
X
D





X




X
X
FLOAT
X
X
X
X
X
X
D





X




X
X
GRAPHIC
(Não-Unicode)
X
X











D



GRAPHIC
(Unicode)
X
X
X
X
X
X
X
X
X
X
X
X
D




X


INTEGER
X
X
D
X
X
X
X





X




X
X
LONG
VARCHAR
D
X









X





LONG
VARGRAPHIC
(Não-Unicode)
X
X









X


D



LONG
VARGRAPHIC
(Unicode)
X
X









X


D






NUMERIC
D
X
X
X
X
X
X





X




X
REAL
X
X
X
X
X
D
X





X




X
SMALLINT
X
X
X
D
X
X
X





X




X
X
BIGINT
X
X
X
X
X
X
X




X
X




D
X
TIME
X
X







D
X






TIMESTAMP
X
X






X
X
D






VARCHAR
D
X
X
X
X
X
X
X
X
X
X
X




X
X
VARGRAPHIC
(Não-Unicode)
X
X











D



VARGRAPHIC
(Unicode)
X
X
X
X
X
X
X
X
X
X
X
X
D




X


Nota:

D
A conversão é suportada. Essa é a conversão padrão para o tipo de dados SQL.

X
Todos os IBM DBMSs suportam a conversão.

espaço branco
Nenhum IBM DBMS suporta a conversão.

41.6.2.3 Palavra-Chave Obsoleta/Valor de Correção

Antes dos aplicativos Unicode serem suportados, os aplicativos que eram escritos para trabalhar com dados de caracteres de byte único podiam trabalhar com dados gráficos de byte duplo através de uma série de palavras-chave do arquivo cli ini, como GRAPHIC=1,2 ou 3, Patch2=7. Essa alternativa apresentava os dados gráficos como dados de caracteres e também afetavam o comprimento relatado dos dados.

Essas palavras-chave não são mais necessárias para aplicativos Unicode, e não devem ser utilizadas por causa do risco de efeitos colaterais potenciais. Se você não souber se um aplicativo específico é um aplicativo Unicode, sugerimos que tente sem quaisquer palavras-chave que afetem a manipulação de dados gráficos.

41.6.2.4 Literais em Bancos de Dados Unicode

Em bancos de dados não-unicode, os dados nas colunas LONG VARGRAPHIC e LONG VARCHAR não podem ser comparados. Os dados no GRAPHIC/VARGRAPHIC e as colunas CHAR/VARCHAR podem ser apenas comparadas ou atribuídas para cada um, utilizando as funções explícitas cast desde que a página de códigos implícita seja suportada. Isto inclui os literais GRAPHIC/VARGRAPHIC e CHAR/VARCHAR onde o literal GRAPHIC/VARGRAPHIC é diferente do literal CHAR/VARCHAR por um prefixo G.

Para os bancos de dados Unicode, a conversão entre os literais GRAPHIC/VARGRAPHIC e CHAR/VARCHAR não são requeridos. Um prefixo G, também será requerido no início do literal GRAPHIC/VARGRAPHIC. Contanto que pelo menos um dos argumentos seja um literal, as conversões implícitas ocorrerão. Isso permite que literais com ou sem o prefixo G sejam utilizados em instruções que usam SQLPrepareW() ou SQLExecDirect().Os literais para LONG VARGRAPHICs já possuem um prefixo G.

Para obter mais informações, consulte a publicação "Conversão entre Tipos de Dados" no "Capítulo 3. Elementos de Linguagem" da publicação SQL Reference.

41.6.2.5 Configuração das Palavras-chave CLI Nova

As três palavras-chave foram incluídas para evitar que qualquer suplemento extra seja conectado aos aplicativos Unicode para um banco de dados.

  1. DisableUnicode

    Descrição da Palavra-chave
    Desativa o suporte sublinhado para o Unicode.

    Sintaxe da Palavra-chave db2cli.ini:
    DisableUnicode = 0 | 1

    Definição Padrão:
    0 (falso)

    Manual de Definições do DB2 CLI/ODBC:
    Esta palavra-chave não pode ser definida utilizando o bloco de notas de Definições CLI/ODBC. O arquivo db2cli.ini deve ser modificado diretamente para que a palavra-chave possa ser utilizada.

    Notas de Uso:

    Com o suporte Unicode ativado, e quando chamada por um aplicativo Unicode, a CLI tentará conectar-se ao banco de dados utilizando a melhor página de códigos possível do cliente para assegurar que não haja perda de dados desnecessária por causa da conversão de página de códigos. Isso pode aumentar o tempo de conexão quando as páginas de códigos são trocadas ou pode causar conversões de páginas de códigos no cliente que não ocorriam antes da inclusão desse suporte.

    A definição dessa palavra-chave para True (1) fará com que todos os dados Unicode sejam convertidos, primeiro, para a página de códigos local do aplicativo, antes dos dados serem enviados para o servidor. Isso pode causar a perda dos dados que não possam ser representados na página de códigos local.

  2. ConnectCodepage

    Descrição da Palavra-chave
    Especifica uma determinada página de códigos para ser utilizada na conexão com a origem de dados, para evitar sobrecarga extra de conexão.

    Sintaxe da Palavra-chave db2cli.ini:
    ConnectCodepage = 0 | 1 | <any valid db2 code page>

    Definição Padrão:
    0

    Manual de Definições do DB2 CLI/ODBC:
    Esta palavra-chave não pode ser definida utilizando o bloco de notas de Definições CLI/ODBC. O arquivo db2cli.ini deve ser modificado diretamente para ser utilizado por esta palavra-chave.

    Notas de Uso:

    Aplicativos não-Unicode sempre conectam-se ao banco de dados utilizando a página de códigos local do aplicativo ou a definição de ambiente DB2Codepage. Por padrão, a CLI assegurará que os aplicativos Unicode sejam conectados aos bancos de dados Unicode, utilizando as páginas de códigos UTF-8 e UCS-2. O padrão para conexão a bancos de dados não-unicode é utilizar a página de códigos do banco de dados caso o servidor de banco de dados esteja executando o DB2 para Windows, DB2 para Unix ou DB2 para OS/2. Isto assegura que não exista perda de dados desnecessária devido à conversão de página de códigos.

    Esta palavra-chave permite que o usuário especifique a página de códigos do banco de dados ao conectar-se a um banco de dados não-Unicode, para evitar sobrecarga extra na conexão.

    Especificar um valor igual a 1 faz com que SQLDriverConnect() retorne o valor correto na cadeia de conexão de saída, para que o valor possa ser utilizado em chamadas de SQLDriverConnect() futuras.

  3. UnicodeServer

    Descrição da Palavra-chave
    Indica que a origem de dados é um servidor unicode. Equivalente para definir ConnectCodepage=1208.

    Sintaxe da Palavra-chave db2cli.ini:
    UnicodeServer = 0 | 1

    Definição Padrão:
    0

    Manual de Definições do DB2 CLI/ODBC:
    Esta palavra-chave não pode ser definida utilizando o bloco de notas de Definições CLI/ODBC. O arquivo db2cli.ini deve ser modificado diretamente para que a palavra-chave possa ser utilizada.

    Notas de Uso:

    Esta palavra-chave é equivalente para ConnectCodepage=1208 e é incluída apenas por conveniência. Defina esta palavra-chave para evitar conexões suplementares extra quando for conectar o DB2 para OS/390 Versão 7 ou superior. Não existe a necessidade de definir esta palavra-chave para os banco de dados do DB2 para Windows, DB2 para Unix ou DB2 para OS/2, desde que não exista solicitação de uma processamento extra.

41.6.3 MTS (Microsoft Transaction Server) como Transaction Monitor

A informação a seguir corrige o valor padrão para a palavra-chave de configuração DISABLEMULTITHREAD na subseção "Instalação e Configuração":

41.6.4 Cursores Deslocáveis

A seguinte informação deve ser incluída na seção "Cursores deslocáveis":

41.6.4.1 Suporte ao cursor deslocável no lado do servidor para OS/390

O cliente UDB para as plataformas Unix, Windows e OS/2 suporta cursores deslocáveis atualizáveis no lado do servidor ao executar em bancos de dados OS/390 Versão 7. Para acessar um cursor deslocável do OS/390 em um ambiente em três camadas, o cliente e o gateway devem estar executando o DB2 UDB Versão 7.1, FixPak 3 ou posterior.

Existem duas interfaces de ativação de aplicativos que podem acessar cursores deslocáveis: ODBC e JDBC. A interface JDBC pode acessar somente cursores deslocáveis estáticos, enquanto a interface ODBC pode acessar somente cursores deslocáveis estáticos e guiados por teclas no lado do servidor.

Atributos do cursor

A tabela abaixo lista os atributos padrão para cursores do OS/390 Versão 7 no ODBC.

Tabela 12. Atributos padrão para cursores do OS/390 no ODBC

Tipo de cursor Sensibilidade do cursor Cursor atualizável Concorrência do cursor Cursor deslocável
somente avançoa não especificado não atualizável concorrência somente leitura não deslocável
estático insensível não atualizável concorrência somente leitura deslocável
guiado por conjunto de teclas sensível atualizável concorrência de valores deslocável

a Somente avanço é o comportamento padrão de um cursor deslocável sem a cláusula FOR UPDATE. Especificar FOR UPDATE em um cursor somente avanço cria um cursor atualizável, com concorrência de bloqueio, não deslocável.


Orientações de busca suportadas

Todas as orientações de busca ODBC são suportadas através das interfaces SQLFetchScroll ou SQLExtendedFetch.

Atualização do cursor guiado por conjunto de teclas

Um cursor guiado por conjunto de teclas é atualizável. O driver CLI anexa a cláusula FOR UPDATE na consulta, exceto quando a consulta é emitida como SELECT ... FOR READ ONLY, ou se a cláusula FOR UPDATE já existir. O cursor guiado por conjunto de teclas implementado no DB2 para OS/390 é um cursor de concorrência de valores. O cursor de concorrência de valores resulta em bloqueio otimista, nos quais os bloqueios não são retidos até que seja tentada uma atualização ou exclusão. Quando for tentada uma atualização ou exclusão, o servidor do banco de dados compara os valores anteriores do aplicativo recuperado com os valores atuais da tabela fundamental. Se os valores corresponderem, a atualização ou exclusão ocorre. Se não corresponderem, a operação falha. Caso ocorra uma falha, o aplicativo deve consultar os valores novamente e reemitir a atualização ou a exclusão, se ainda for aplicável.

O aplicativo pode atualizar o cursor guiado por teclas de suas formas:

Detectando problemas em aplicativos criados antes do suporte ao cursor deslocável

Como o suporte ao cursor deslocável é novo, alguns aplicativos ODBC que trabalhavam com releases anteriores do UDB para OS/390 ou UDB para Unix, Windows, e OS/2 podem encontrar mudanças no comportamento ou no desempenho. Isso ocorre porque antes do suporte aos cursores deslocáveis, os aplicativos que solicitavam um cursor deslocável recebiam um cursor somente de avanço. Para restaurar o comportamento anterior do aplicativo, antes do suporte ao cursor deslocável, defina as seguintes palavras-chave de configuração no arquivo db2cli.ini:

Tabela 13. Valores de palavra-chave de configuração para restaurar o comportamento do aplicativo antes do suporte ao cursor deslocável

Definição da palavra-chave de configuração Descrição
PATCH2=6 Retorna uma mensagem indicando que os cursores deslocáveis (guiados por conjunto de teclas e estáticos) não são suportados. O CLI automaticamente rebaixa qualquer pedido de um cursor deslocável para um cursor somente de avanço.
DisableKeysetCursor=1 Desativa os cursores deslocáveis guiados por teclas no lado do servidor e no lado do cliente. Pode ser utilizado para forçar o driver do CLI a fornecer ao aplicativo um cursor estático quando o cursor guiado por teclas for solicitado.
UseServerKeysetCursor=0 Desativa o cursor guiado por teclas no lado do servidor para aplicativos que utilizam a biblioteca do cursor guiado por teclas no lado do cliente para simular um cursor guiado por teclas. Utilize essa opção somente quando ocorrerem problemas com o cursor guiado por teclas no lado do servidor, já que o cursor no lado do cliente resulta em muita sobra e geralmente tem desempenho mais baixo que o cursor no lado do servidor.

41.6.5 Utilizando o SQL Composto

A seguinte nota está faltando na publicação:

   Qualquer instrução SQL que pode ser preparada dinamicamente, diferentemente
   de uma consulta, que pode ser executada como uma instrução dentro de uma
   instrução composta.
 
   Nota: Dentro do SQL Composto Atômico, instruções savepoint, savepoint de
   liberação e rollback para savepoint SQL são também desabilitadas.
   Do contrário, o SQL Composto Atômico é desabilitado no savepoint.

41.6.6 Utilizando os Procedimentos Armazenados

41.6.6.1 Privilégios para Construir e Depurar Procedimentos SQL e Java Armazenados

Os privilégios a seguir devem ser concedidos aos usuários que querem construir, depurar e executar procedimentos SQL armazenados:

Os privilégios a seguir devem ser concedidos aos usuários que queiram construir, depurar e executar procedimentos Java armazenados:

Para criar a tabela DB2DBG.ROUTINE_DEBUG, emita o seguinte comando:

db2 -tf sqllib/misc/db2debug.ddl

Para obter mais informações sobre depuração de procedimentos Java armazenados, consulte Application Development Guide.

41.6.6.2 Gravando um Procedimento Armazenado em CLI

A seguir uma limitação não documentada nos procedimentos armazenados CLI:

   Se estiver fazendo chamadas aos procedimentos armazenados CLI múltiplos,
   o aplicativo fecha os cursores abertos de um procedimento armazenado
   antes de chamar o próximo procedimento armazenado. Mais especificamente,
   o primeiro conjunto de cursores abertos devem ser fechados antes do
   próximo procedimento armazenado tentar abrir um cursor.

41.6.6.3 Procedimentos Armazenados e Vinculação Automático da CLI

O item a seguir suplementa as informações na publicação:

O driver CLI/ODBC normalmente irá fazer a vinculação automática dos pacotes da CLI na primeira vez que um aplicativo CLI/ODBC executar a SQL no banco de dados, contanto que o usuário tenha o privilégio ou a autorização adequada. A vinculação automática dos pacotes da CLI não pode ser executada de dentro de um procedimento armazenado e, portanto, não ocorrerá se a primeira coisa que um aplicativo fizer for chamar um procedimento armazenado da CLI. Antes de executar um aplicativo da CLI que chama um procedimento armazenado da CLI em um novo banco de dados do DB2, você deve conectar os pacotes da CLI uma vez com este comando:

UNIX
db2 bind <BNDPATH>/@db2cli.lst blocking all

Windows e OS/2
db2bind "%DB2PATH%\bnd\@db2cli.lst" blocking

A abordagem recomendada é sempre conectar estes pacotes ao mesmo tempo em que o banco de dados é criado para evitar a vinculação automática no run-time. A vinculação automática poderá falhar se o usuário não tiver privilégio ou se outro aplicativo tentar fazer a vinculação automática ao mesmo tempo.


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