Невозможно установить специальный регистр CURRENT OPTIMIZATION HINT через раздел db2dsdriver.cfg <specialregisters> - PullRequest
0 голосов
/ 15 марта 2019

Я пытался указать значение по умолчанию для специального регистра CURRENT OPTIMIZATION HINT для моего клиентского приложения DB2.

Я пробовал файл db2dsdriver.cfg, его раздел и параметр JDBC specialRegisters Uri.Оба приводят к одному и тому же результату:

  1. Когда я устанавливаю значение без кавычек примерно так:

db2dsdriver.cfg:

            <specialregisters>
                <parameter name="CURRENT OPTIMIZATION HINT" value="HELLO1"/>
            </specialregisters>

или с JDBC Uri:

jdbc:db2://<ip>:<port>/<database>:retrieveMessagesFromServerOnGetMessage=true;emulateParameterMetaDataForZCalls=1;specialRegisters=CURRENT OPTIMIZATION HINT=HELLO1;

Возникает исключение, говорящее о наличии проблемы с инструкцией SET:

Сообщение: ERROR [42721] [IBM][DB2] SQL0969N В файле сообщений на этой рабочей станции нет текста сообщения, соответствующего ошибке SQL «-725».Ошибка была возвращена из модуля "DSNLXENV" с оригинальными токенами "CURRENT QUERY OPTIMIZATION DALLASA".SQLSTATE = 42721

Вот освобождение от трассировки Java:

...

[jcc][t4] 
[jcc][t4]        SEND BUFFER: SQLSTT                 (ASCII)           (EBCDIC)
[jcc][t4] 0000   0036D04300010030  2414000000002653  .6.C...0$.....&S  ..}.............
[jcc][t4] 0010   4554204355525245  4E54204F5054494D  ET CURRENT OPTIM  ........+..|&..(
[jcc][t4] 0020   495A4154494F4E20  48494E54203D2048  IZATION HINT = H  .!...|+...+.....
[jcc][t4] 0030   454C4C4F31FF                        ELLO1.            .<<|..          
[jcc][t4] 

...

[jcc][Thread:Worker-103][SQLException@d1aed064] java.sql.SQLException
[jcc][Thread:Worker-103][SQLException@d1aed064][Sqlca@a74669be] DB2 SQLCA from server
[jcc][Thread:Worker-103][SQLException@d1aed064][Sqlca@a74669be] SqlCode        = -725
[jcc][Thread:Worker-103][SQLException@d1aed064][Sqlca@a74669be] SqlErrd        = { 0, 0, 0, -1, 0, 0 }
[jcc][Thread:Worker-103][SQLException@d1aed064][Sqlca@a74669be] SqlErrmc       = CURRENT QUERY OPTIMIZATION;DALLASA
[jcc][Thread:Worker-103][SQLException@d1aed064][Sqlca@a74669be] SqlErrmcTokens = { CURRENT QUERY OPTIMIZATION, DALLASA }
[jcc][Thread:Worker-103][SQLException@d1aed064][Sqlca@a74669be] SqlErrp        = DSNLXENV
[jcc][Thread:Worker-103][SQLException@d1aed064][Sqlca@a74669be] SqlState       = 42721
[jcc][Thread:Worker-103][SQLException@d1aed064][Sqlca@a74669be] SqlWarn        =            
[jcc][Thread:Worker-103][SQLException@d1aed064] SQL state  = 42721
[jcc][Thread:Worker-103][SQLException@d1aed064] Error code = -725
[jcc][Thread:Worker-103][SQLException@d1aed064] Tokens     = CURRENT QUERY OPTIMIZATION;DALLASA
[jcc][Thread:Worker-103][SQLException@d1aed064] Stack trace follows
com.ibm.db2.jcc.am.SqlSyntaxErrorException: CURRENT QUERY OPTIMIZATION;DALLASA
        at com.ibm.db2.jcc.am.kd.a(Unknown Source)
        at com.ibm.db2.jcc.am.kd.a(Unknown Source)
        at com.ibm.db2.jcc.am.kd.a(Unknown Source)
        at com.ibm.db2.jcc.am.jg.c(Unknown Source)
        at com.ibm.db2.jcc.am.jg.a(Unknown Source)
        at com.ibm.db2.jcc.t4.bb.k(Unknown Source)
        at com.ibm.db2.jcc.t4.bb.g(Unknown Source)
        at com.ibm.db2.jcc.t4.p.f(Unknown Source)
        at com.ibm.db2.jcc.t4.b.readSetGenericSQLSetInfo_(Unknown Source)
        at com.ibm.db2.jcc.am.qg.b(Unknown Source)
        at com.ibm.db2.jcc.am.sg.b(Unknown Source)
        at com.ibm.db2.jcc.am.Agent.readPiggybackCommands(Unknown Source)
        at com.ibm.db2.jcc.am.Agent.beginReadChain(Unknown Source)
        at com.ibm.db2.jcc.t4.a.beginReadChain(Unknown Source)
        at com.ibm.db2.jcc.am.Agent.flow(Unknown Source)
        at com.ibm.db2.jcc.am.fp.a(Unknown Source)
        at com.ibm.db2.jcc.am.fp.a(Unknown Source)
        at com.ibm.db2.jcc.am.fp.executeQuery(Unknown Source)
        at com.ibm.datatools.filter.DependencyService.executeCountQuery(Unknown Source)
        at com.ibm.datatools.filter.DependencyService.access$3(Unknown Source)
        at com.ibm.datatools.filter.DependencyService$LoadCountsJob.run(Unknown Source)
        at org.eclipse.core.internal.jobs.Worker.run(Unknown Source)
Когда я пытаюсь сделать то же самое и поставить кавычки вокруг значения, я получаю странные результаты:

db2dsdriver.cfg:

            <specialregisters>
                <parameter name="CURRENT OPTIMIZATION HINT" value="'HELLO1'"/>
            </specialregisters>

илис JDBC Uri:

jdbc:db2://<ip>:<port>/<database>:retrieveMessagesFromServerOnGetMessage=true;emulateParameterMetaDataForZCalls=1;specialRegisters=CURRENT OPTIMIZATION HINT='HELLO1';

В результате в специальном регистре устанавливается какое-то неверное значение:

SELECT CURRENT OPTIMIZATION HINT FROM SYSIBM.SYSDUMMY1;

возвращает строку:

"\ 0 \ 0 \ 0 \ u00010 \ u001a \ 0 \ 0 "

Вот информация о моей среде:

C:\Windows\system32>db2level
DB21085I  This instance or install (instance name, where applicable: "DB2")
uses "64" bits and DB2 code release "SQL10012" with level identifier
"0203010E".
Informational tokens are "DB2 v10.1.200.238", "s121127", "IP23389", and Fix
Pack "2".
Product is installed at "C:\PROGRA~1\IBM\SQLLIB" with DB2 Copy Name "DB2COPY1".


C:\Windows\system32>db2set -all
[e] DB2PATH=C:\Program Files\IBM\SQLLIB
[i] DB2_SELECTIVITY=ALL
[i] DB2INSTPROF=C:\ProgramData\IBM\DB2\DB2COPY1
[i] DB2CODEPAGE=1252
[g] DB2_EXTSECURITY=NO
[g] DB2_COMMON_APP_DATA_PATH=C:\ProgramData
[g] DB2PATH=C:\Program Files\IBM\SQLLIB
[g] DB2INSTDEF=DB2

C:\Windows\system32>db2cli validate
IBM DATABASE 2 Interactive CLI Sample Program
(C) COPYRIGHT International Business Machines Corp. 1993,1996
All Rights Reserved
Licensed Materials - Property of IBM
US Government Users Restricted Rights - Use, duplication or
disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  ---------------------------------------------------------------------------
  [ CLI Driver Version  : 10.01.0000 ]
  [ Informational Tokens: "DB2 v10.1.200.238","s121127","IP23389","Fixpack  2" ]
  [ CLI Driver Type     : IBM Data Server Runtime Client ]
  [ db2diag.log Path    : C:\ProgramData\IBM\DB2\DB2COPY1\DB2\db2diag.log ]
  ---------------------------------------------------------------------------

  IBM Data Server Client packages on the current workstation :

  Copyname      Version     Installed Location
  ---------------------------------------------------------------------------
  DB2COPY1[C,D] 10.01.0002  C:\Program Files\IBM\SQLLIB

  ---------------------------------------------------------------------------

db2dsdriver.cfg Schema Validation :
Success: The schema validation operation completed successfully.
The configuration file C:\ProgramData\IBM\DB2\DB2COPY1\cfg\db2dsdriver.cfg is valid

The validation completed.

Для доступа к DDF DB2 я использую:

  • IBM Data Studio 4.1.3, которая в свою очередь использует драйвер JDBC db2jcc4.jar версия 4.25.1301
  • Пользовательское приложение .NET с использованием IBM.Data.DB2.dll версия 10.1.2.2
...