Я пытался указать значение по умолчанию для специального регистра CURRENT OPTIMIZATION HINT для моего клиентского приложения DB2.
Я пробовал файл db2dsdriver.cfg, его раздел и параметр JDBC specialRegisters Uri.Оба приводят к одному и тому же результату:
- Когда я устанавливаю значение без кавычек примерно так:
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