Vejo que o link do seu Centro de Informações vai para LUW 9.7 e você mencionou que programou em Java, mas a maior parte da experiência que tenho com ligação é com o DB2 no Mainframe com COBOL. Portanto, pode ser necessário adaptar um pouco a explicação (mas geralmente os conceitos devem ser os mesmos).
Eu acredito que a ligação só é relevante quando você está compilando programas que incluem SQL incorporado que é pré-compilado (SQL vinculado estaticamente). Se, por exemplo, você estiver usando JDBC, não precisará executar um BIND. O driver JDBC fará PREPARE
a declaração dinamicamente.
Quando você executar um programa através de um DB2 pré-compilador, PRECOMPILE
executado através de seu programa, e se encontra qualquer SQL embutido (em COBOL, estes são blocos de instrução que vão desde EXEC SQL
a END-EXEC.
), ele rasga cuidadosamente o SQL, e substitui-lo com um ligue para a interface COBOL-DB2. Depois disso, há duas saídas da PRECOMPILE
fonte COBOL que teve todo o SQL incorporado removido (a A
partir de agora) e um DBRM
que contém todo o SQL removido ( B
).
O pré-compilado faz algumas verificações básicas de sintaxe, mas lembre-se de que as verificações são baseadas apenas nas declarações da sua tabela no programa. Não é anexado ao DB2 para verificar isso!
Esses dois arquivos são completamente separados e, quando você executa o programa COBOL, ele precisa encontrar um A
e um B
que foram gerados ao mesmo tempo.
Nesse ponto, ele A
é compilado e vinculado ao compilador COBOL padrão em um load module
e colocado em uma biblioteca de carregamento para ser usado posteriormente.
No entanto, ainda há muito trabalho a ser feito B
, o DBRM. É aqui que BIND
entra. BIND
É como um compilador para o código SQL incorporado, e a saída da "compilação" é a package
.
Para BIND o SQL em um "pacote" executável, o processo BIND é anexado ao DB2 e faz algumas coisas:
- Verifica se o AuthID atual está autorizado a executar uma ligação.
- Verifica a sintaxe do seu SQL, com ajuda dos dados no catálogo do DB2.
- Finalmente, e mais importante, a ligação otimizará seu SQL
Durante a última etapa, todo o seu SQL é executado através do Optimizer, que leva em consideração todas as estatísticas e vários caminhos que o mecanismo do DB2 pode seguir para buscar seus dados. Em seguida, escolhe o caminho que apresentou com o menor custo associado (nas versões mais recentes do DB2 [DB2 10 para z / OS] , pode-se optar por um caminho de "custo mais alto", mas com "risco mais baixo"). Depois que o caminho é selecionado, ele é compilado e se torna um pacote, que é armazenado no catálogo (você pode ver todos os seus pacotes atuais com SELECT * FROM SYSIBM.SYSPACKAGE
(z / OS)).
Finalmente, há uma última peça que permite que nossos programas se reúnam com seus pacotes, o PLAN
. Você cria um plano executando outro BIND ( BIND PLAN
). Um plano é uma coleção de pacotes que o programa pode procurar para encontrar o pacote que compartilha o mesmo nome. Com COBOL, você especifica em qual plano o programa deve procurar em sua JCL.
Em resumo, o código compilado passa por estas etapas para gerar um utilizável BIND PLAN
:
Pré-compilar -> Cria um DBRM (com C [++], o pré-compilador gera o SQL pré-compilado em um arquivo HFS, que pode ser enviado por meio do programa de ligação da linha de comando ) -> o DBRM é otimizado e um conjunto de caminhos de acesso ( a package
) é criado -> O pacote é adicionado a a BIND PLAN
, que é um grupo de pacotes que permite criar um "caminho de pesquisa" para os seus programas examinarem.
Como esses programas são estaticamente vinculados, se as estatísticas da tabela mudarem drasticamente, o caminho de acesso escolhido pelo otimizador no momento da ligação pode não ser o melhor caminho, e a ligação novamente permitirá reavaliar o SQL e talvez escolher um melhor caminho.
Editar (atualizar para comentar): Se você estiver usando o processador de linha de comando, poderá passar um único pacote de ligação (.bnd
) ou uma lista de nomes de arquivos de ligação (.lst
). Se você passar em uma lista, o nome do arquivo deve ser anexado com um@
(por exemplo/path/to/@packages.lst
). Dentro do arquivo .lst, você pode colocar cada pacote em uma linha individual ou separá-los com+
:
package1.bnd
package2.bnd
package3.bnd+package4.bnd+package5.bnd