#db2 #zos
#db2 #zos
Вопрос:
Я пытался предоставить значение по умолчанию для ТЕКУЩЕГО специального регистра подсказки ОПТИМИЗАЦИИ для моего клиентского приложения DB2.
Я попробовал файл db2dsdriver.cfg и его раздел и параметр Uri JDBC specialRegisters. Оба приводят к одному и тому же результату:
- Когда я устанавливаю значение без кавычек вот так:
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)
- Когда я пробую то же самое и заключаю значение в кавычки, я получаю некоторые странные результаты:
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