Не удается установить ТЕКУЩИЙ специальный регистр подсказки ОПТИМИЗАЦИИ через раздел db2dsdriver.cfg

#db2 #zos

#db2 #zos

Вопрос:

Я пытался предоставить значение по умолчанию для ТЕКУЩЕГО специального регистра подсказки ОПТИМИЗАЦИИ для моего клиентского приложения DB2.

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

  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:

Сообщение: ОШИБКА [42721] [IBM] [DB2] SQL0969N В файле сообщений на этой рабочей станции отсутствует текст сообщения, соответствующий ошибке SQL «-725». Ошибка была возвращена из модуля «DSNLXENV» с оригинальными токенами «ТЕКУЩАЯ ОПТИМИЗАЦИЯ ЗАПРОСА DALLASA». SQLSTATE=42721

Вот освобожденный от трассировки java:

 ...

[jcc][t4] 
[jcc][t4]        SEND BUFFER: SQLSTT                 (ASCII)           (EBCDIC)
[jcc][t4] 0000   0036D04300010030  2414000000002653  .6.C...0$.....amp;S  ..}.............
[jcc][t4] 0010   4554204355525245  4E54204F5054494D  ET CURRENT OPTIM  ........ ..|amp;..(
[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)  

  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';
  

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

 SELECT CURRENT OPTIMIZATION HINT FROM SYSIBM.SYSDUMMY1;
  

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

» u00010u001a»

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

 C:Windowssystem32>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~1IBMSQLLIB" with DB2 Copy Name "DB2COPY1".


C:Windowssystem32>db2set -all
[e] DB2PATH=C:Program FilesIBMSQLLIB
[i] DB2_SELECTIVITY=ALL
[i] DB2INSTPROF=C:ProgramDataIBMDB2DB2COPY1
[i] DB2CODEPAGE=1252
[g] DB2_EXTSECURITY=NO
[g] DB2_COMMON_APP_DATA_PATH=C:ProgramData
[g] DB2PATH=C:Program FilesIBMSQLLIB
[g] DB2INSTDEF=DB2

C:Windowssystem32>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:ProgramDataIBMDB2DB2COPY1DB2db2diag.log ]
  ---------------------------------------------------------------------------

  IBM Data Server Client packages on the current workstation :

  Copyname      Version     Installed Location
  ---------------------------------------------------------------------------
  DB2COPY1[C,D] 10.01.0002  C:Program FilesIBMSQLLIB

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

db2dsdriver.cfg Schema Validation :
Success: The schema validation operation completed successfully.
The configuration file C:ProgramDataIBMDB2DB2COPY1cfgdb2dsdriver.cfg is valid

The validation completed.  

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

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

Комментарии:

1. Отредактируйте свой пост, чтобы показать db2level выходные данные для Db2-client или точную версию, какой клиент вы используете.

2. Пожалуйста, загрузите и установите поддерживаемый в настоящее время Db2-client из IBM fix central, а затем повторите попытку. Например, Db2-клиент версии 11.1.4.4.

3. @mao Пока я пытался использовать как старый IBM.Data.DB2, так и новый JDBC и вижу одинаковое поведение, похоже, это не проблема клиента, не так ли?

4. Если последняя версия драйвера jdbc (3.72.52 (для типа 3) или 4.25.1301 (для типа 4) выдает тот же симптом, то проблема может быть не в драйвере jdbc. Код -725 означает, что специальному регистру было присвоено недопустимое значение. Можете ли вы подтвердить, что можете динамически устанавливать для этого специального регистра конкретное значение непосредственно в базе данных хоста (т. Е. не используя драйверы клиента)?

5. Возможно, это один из способов поддержки IBM. Я не вижу никаких совпадений для SQL0725N в Центре знаний, поэтому не уверен, какое сообщение вы получаете от сервера z / OS. Есть обращения в службу поддержки IBM, например www-01.ibm.com/support/docview.wss?uid=swg1PM86663