Разработка прикладных программ: Разработка прикладных программ клиента

| | |

Концентратор соединений и балансировка рабочей нагрузки Sysplex |универсального драйвера JDBC DB2

|

Программы Java, использующие для обращения к серверам DB2 UDB for z/OS(R) Соединения универсального драйвера JDBC DB2 типа 4, |могут использовать преимущества функций концентратора соединений и балансировки |рабочей нагрузки Sysplex универсального драйвера JDBC DB2.

|

Эти функции аналогичны функциям концентратора соединений и балансировки рабочей нагрузки Sysplex для DB2 Connect.

|

Концентратор соединений универсального драйвера JDBC DB2 может снизить требования к ресурсам |серверов баз данных DB2 UDB for z/OS для поддержки большого числа клиентских прикладных программ |благодаря использованию для объектов соединений одного и того же физического соединения, что позволяет |уменьшить общее число физических соединений с сервером баз данных.

|

Балансировка рабочей нагрузки Sysplex универсального драйвера JDBC DB2 может повысить доступность |группы совместного использования данных, поскольку этот драйвер позволяет часто получает информацию |о состоянии элементов в группе совместно используемых данных. Драйвер использует эту информацию для |определения элемента совместно используемых данных, в который следует маршрутизировать следующую |транзакцию. При помощи балансировки рабочей загрузки Sysplex сервер DB2 UDB for z/OS и WLM for z/OS |(Workload Manager - менеджер рабочей нагрузки) гарантируют эффективное распределение работы по |элементам группы совместно используемых данных, а при сбое одного из элементов - передачу работы |другому элементу группы.

|

Универсальный драйвер JDBC DB2 использует для поддержки концентратора соединений и балансировки рабочей нагрузки Sysplex |транспортные объекты и глобальный пул транспортных объектов. Для каждого соединения с сервером баз данных существует один транспортный объект. |При включении поддержки концентратора соединений и балансировки рабочей нагрузки Sysplex надо |задать максимальное число физических соединений с сервером баз данных, существующих одновременно, |задав для этого максимальное число транспортных объектов.

|

На уровне драйвера нужно указать предельное число транспортных объектов |в свойствах конфигурации универсального драйвера JDBC DB2.

|

На уровне соединений можно включить или отключить поддержку концентратора соединений |и балансировки рабочей нагрузки Sysplex универсального драйвера JDBC DB2 |и задать предельное число транспортных объектов при помощи свойств DataSource.

|

Глобальный пул транспортных объектов можно отслеживать одним из следующих способов:

| | |

Свойства конфигурации универсального драйвера JDBC DB2 для концентратора соединений |и балансировки рабочей нагрузки Sysplex

|

Каждое из следующих свойств конфигурации используется для концентратора соединений и балансировки рабочей нагрузки Sysplex

|
| |
db2.jcc.dumpPool
|
Задает типы статистических показателей, записываемых для событий глобального транспортного пула наряду с записываемой сводной статистикой. Глобальный транспортный пул используется для концентратора соединений и балансировки рабочей нагрузки Sysplex. |

В свойстве db2.jcc.dumpPool используется тип данных integer (int.). Перед записью |каких-либо показателей статистики нужно также задать свойства конфигурации для записи статистики |db2.jcc.dumpPoolStatisticsOnSchedule и db2.jcc.dumpPoolStatisticsOnScheduleFile.

|

При помощи свойства db2.jcc.dumpPool можно задать один или несколько типов статистических показателей:

| |

Для трассировки нескольких типов событий сложите значения типов событий, которые нужно трассировать. Например, вы хотите трассировать события DUMP_GET_OBJECT и DUMP_CREATE_OBJECT. Числовые эквиваленты этих значений - 2 и 16, поэтому для db2.jcc.dumpPool нужно задать значение 18.

|

Значение по умолчанию 0 означает, что для глобального |транспортного пула будет записываться только сводная статистика.

|
|| |
db2.jcc.dumpPoolStatisticsOnSchedule
|
Задает частоту (в секундах) записи статистических показателей глобального транспортного пула |в файл, указанный в свойстве конфигурации db2.jcc.dumpPoolStatisticsOnScheduleFile. Глобальный транспортный пул используется для концентратора |соединений и балансировки рабочей нагрузки Sysplex. |

Значение по умолчанию (-1) означает, что |статистические показатели глобального транспортного пула записываться не будут.

|
|| |
db2.jcc.dumpPoolStatisticsOnScheduleFile
|
Задает имя файла, в который записываются статистические показатели глобального транспортного пула. Глобальный транспортный пул используется для концентратора |соединений и балансировки рабочей нагрузки Sysplex. |

Если свойство конфигурации |db2.jcc.dumpPoolStatisticsOnScheduleFile не задано, статистические показатели глобального |транспортного пула не записываются.

|
|| |
db2.jcc.maxTransportObjectIdleTime
|
Задает срок в секундах, в течение которого неиспользуемый транспортный объект должен оставаться |в глобальном пуле транспортных объектов перед тем, как его можно будет удалить из пула. Транспортные объекты используются для концентратора соединений и балансировки рабочей нагрузки Sysplex. |

По умолчанию для свойства конфигурации db2.jcc.maxTransportObjectIdleTime |используется значение 60. Если для свойства db2.jcc.maxTransportObjectIdleTime задать значение |меньше нуля, неиспользуемые транспортные объекты будут удаляться из пула немедленно. Это не рекомендуется, поскольку может привести к серьезному снижению производительности.

|
|| |
db2.jcc.maxTransportObjectWaitTime
|
Задает максимальный срок в секундах, в течение которого программа ожидает транспортный объект, |если достигнуто значение db2.jcc.maxTransportObjects. Транспортные объекты используются |для концентратора соединений и балансировки рабочей нагрузки Sysplex. Если программа ожидает дольше, |чем задано значением db2.jcc.maxTransportObjectWaitTime, |глобальный пул транспортных объектов генерирует исключительную ситуацию SQLException. |

По умолчанию для свойства конфигурации db2.jcc.maxTransportObjectWaitTime используется значение -1. Любое отрицательное значение означает, что программы ожидают бесконечно долго.

|
|| |
db2.jcc.maxTransportObjects
|
Задает верхний предел для числа транспортных объектов в глобальном пуле транспортных объектов |для концентратора соединений и балансировки рабочей нагрузки Sysplex. Когда число транспортных объектов |в пуле достигает значения свойства db2.jcc.maxTransportObjects, транспортные объекты, не использовавшиеся |дольше значения свойства db2.jcc.maxTransportObjectIdleTime, удаляются из пула. |

По умолчанию |для свойства конфигурации db2.jcc.maxTransportObjects используется значение -1, означающее отсутствие |ограничения на число транспортных объектов в глобальном пуле транспортных объектов.

|
|| |
db2.jcc.minTransportObjects
|
Задает нижний предел для числа транспортных объектов в глобальном пуле транспортных объектов |для концентратора соединений и балансировки рабочей нагрузки Sysplex. Когда создается JVM, в пуле нет транспортных объектов. |Транспортные объекты добавляются в пул по мере требования. По достижении значения свойства |db2.jcc.minTransportObjects число транспортных объектов в глобальном пуле транспортных объектов никогда |не становится меньше значения свойства db2.jcc.minTransportObjects в течение срока существования данной JVM. |

По умолчанию для свойства конфигурации the db2.jcc.minTransportObjects используется значение 0. |Любое неположительное значение означает, что глобальный пул транспортных объектов может стать пустым.

|
| |
| |

Свойства DataSource универсального драйвера JDBC DB2 для концентратора соединений |и балансировки рабочей нагрузки Sysplex

|

Каждое из следующих свойств DataSource универсального драйвера JDBC DB2 используется |для концентратора соединений и балансировки рабочей нагрузки Sysplex

|
| |
enableConnectionConcentrator
|
Указывает, включена ли функция концентратора соединений универсального драйвера JDBC DB2. Функция концентратора соединений доступна только для соединений с серверами DB2 UDB for z/OS. |

В свойстве enableConnectionConcentrator используется тип данных boolean. Значение по умолчанию - false. Однако если для свойства enableSysplexWLB задано значение |true, по умолчанию используется значение true.

|
|| |
enableSysplexWLB
|
Указывает, включена ли функция балансировки рабочей нагрузки Sysplex универсального драйвера JDBC DB2. Функция функция балансировки рабочей нагрузки Sysplex только для соединений с серверами DB2 UDB for z/OS. |

В свойстве enableSysplexWLB используется тип данных boolean. Значение по умолчанию - false. Однако если для свойства enableSysplexWLB задано значение |true, для свойства enableConnectionConcentrator по умолчанию используется значение true.

|
|| |
maxTransportObjects
|
Задает максимальное число транспортных объектов, которые могут использоваться для всех соединений со |связанным о объектом DataSource. Транспортные объекты используются |для концентратора соединений и балансировки рабочей нагрузки Sysplex. |Если в свойстве enableConnectionConcentrator или enableSysplexWLB не включено использование |концентратора соединений или балансировки рабочей нагрузки Sysplex, |значение свойства maxTransportObjects игнорируется. |

В этом свойстве используется тип данных integer (int.).

|

Если транспортный объект недоступен в глобальном пуле транспортных объектов, |а значение свойства maxTransportObjects не достигнуто, пул создает новый транспортный объект. Если значение свойства maxTransportObjects достигнуто, программа ожидает в течение срока, |задаваемого свойством конфигурации db2.jcc.maxTransportObjectWaitTime. Если по истечении этого срока в пуле все еще нет доступных транспортных объектов, пул генерирует исключительную ситуацию SQLException.

|

Свойство maxTransportObjects не переопределяет |свойство конфигурации db2.jcc.maxTransportObjects. Свойство maxTransportObjects не влияет на соединения от других объектов DataSource. Если значение maxTransportObjects |больше значения db2.jcc.maxTransportObjects, maxTransportObjects не увеличивает значение |свойства db2.jcc.maxTransportObjects.

|

По умолчанию для свойства maxTransportObjects используется |значение -1, означающее, что число транспортных объектов для DataSource ограничено |только значением db2.jcc.maxTransportObjects для драйвера.

|
| |
| |

Пример включения функций концентратора соединений и балансировки рабочей нагрузки Sysplex |универсального драйвера JDBC DB2 в WebSphere Application Server

|

Следующая процедура - это пример включения функций концентратора соединений |и балансировки рабочей нагрузки Sysplex универсального драйвера JDBC DB2 |в WebSphere(R) Application Server.

|
|Предварительные требования |

Требования для сервера:

| |

Требования для клиента:

|
|
|Порядок действий |

Чтобы включить функции концентратора соединений и балансировки рабочей нагрузки Sysplex |универсального драйвера JDBC DB2 в WebSphere Application Server:

|
    |
  1. Проверьте, что у универсального драйвера JDBC DB2 правильный уровень, обеспечивающий поддержку |функций концентратора соединений и балансировки рабочей нагрузки Sysplex; введите для этого |в командной строке z/OS или в UNIX System Services команду: |
    java com.ibm.db2.jcc.DB2Jcc -version
    Найдите в выводе такую строку: |
    [ibm][db2][jcc] Driver: IBM DB2 JDBC Universal Driver Architecture n n
    Где n должно быть 2.7 или новее.
  2. |
  3. Задайте свойства конфигурации универсального драйвера JDBC DB2, чтобы включить поддержку |концентратора соединений или балансировки рабочей нагрузки Sysplex для всех экземпляров |DataSource, созданных под этим драйвером. |

    Задайте свойства конфигурации в файле DB2JccConfiguration.properties.

    |
      |
    1. Создайте файл DB2JccConfiguration.properties или отредактируйте существующий файл |DB2JccConfiguration.properties.
    2. |
    3. Задайте следующие свойства конфигурации: |
        |
      • db2.jcc.minTransportObjects
      • |
      • db2.jcc.maxTransportObjects
      • |
      • db2.jcc.maxTransportObjectWaitTime
      • |
      • db2.jcc.dumpPool
      • |
      • db2.jcc.dumpPoolStatisticsOnScheduleFile
      Начните с параметров, аналогичных следующим: |
      db2.jcc.minTransportObjects=0
      |db2.jcc.maxTransportObjects=1500
      |db2.jcc.maxTransportObjectWaitTime=-1
      |db2.jcc.dumpPool=0
      |db2.jcc.dumpPoolStatisticsOnScheduleFile=
      |  /home/WAS/logs/srv1/poolstats
      
    4. |
    5. Добавьте путь каталога для файла DB2JccConfiguration.properties в classpath |универсального драйвера JDBC DB2 WebSphere Application Server.
  4. |
  5. Задайте свойства источника данных универсального драйвера JDBC DB2, чтобы включить функции |концентратора соединений или балансировки рабочей нагрузки Sysplex. |

    На консоли администратора |WebSphere Application Server задайте для источника данных, используемого программой при соединении |с сервером баз данных, следующие свойства:

    |
      |
    • enableSysplexWLB
    • |
    • enableConnectionConcentrator
    • |
    • maxTransportObjects
    Предположим, вам нужна функция концентратора соединений и функция балансировки рабочей нагрузки Sysplex. Начните с параметров, аналогичных следующим: | ||||||||||||||||||||||
    Табл. 26. Пример параметров свойств источника данных для функций концентратора соединений и балансировки рабочей нагрузки Sysplex универсального драйвера JDBC DB2
    Свойство Значение
    enableSysplexWLB true1
    maxTransportObjects 100
    | |
    Прим.:
    |
      |
    1. Для свойства enableConnectionConcentrator задается по умолчанию значение true, |поскольку для свойства enableSysplexWLB задано значение true.
    2. |
  6. |
  7. Перезапустите WebSphere Application Server.
| |

Методы слежения за функциями концентратора соединений и балансировки рабочей нагрузки |Sysplex универсального драйвера JDBC DB2

|

Чтобы отслеживать функции концентратора соединений и балансировки рабочей нагрузки Sysplex |универсального драйвера JDBC DB2, нужно отслеживать глобальный пул транспортных объектов. Глобальный пул транспортных объектов можно отслеживать одним из следующих способов:

| | |
Свойства конфигурации для слежения за глобальным пулом транспортных объектов
|

Свойства конфигурации db2.jcc.dumpPool, db2.jcc.dumpPoolStatisticsOnSchedule и |db2.jcc.dumpPoolStatisticsOnScheduleFile управляют трассировкой глобального пула транспортных объектов.

|

Например, при использовании следующего набора параметров свойств конфигурации |сообщения об ошибках Sysplex и сообщения об ошибках пула дампа будут записываться |каждые 60 секунд в файл /home/WAS/logs/srv1/poolstats:

|
db2.jcc.dumpPool=DUMP_SYSPLEX_MSG|DUMP_POOL_ERROR
|db2.jcc.dumpPoolStatisticsOnSchedule=60
|db2.jcc.dumpPoolStatisticsOnScheduleFile=/home/WAS/logs/srv1/poolstats
|

Запись в файле статистики пула выглядит примерно так:

|
time Scheduled PoolStatistics npr:2575 nsr:2575 lwroc:439 
|hwroc:1764 coc:372 aooc:362 rmoc:362 nbr:2872 tbt:857520 tpo:10

Смысл полей:

|
|
npr
|
Общее число требований, выданных универсальным драйвером JDBC DB2 пулу с момента создания пула. |
|
nsr
|
Число успешных требований, выданных универсальным драйвером JDBC DB2 пулу с момента создания пула. Требование считается успешным, если пул возвратил объект. |
|
lwroc
|
Число объектов, использованных повторно, но отсутствовавших в пуле. Такое может произойти, если объект соединения освобождает транспортный объект в конце транзакции. Если объекту соединения |позднее требуется транспортный объект и если исходный транспортный объект не использовался |никаким другим объектом соединения, объект соединения может использовать этот транспортный объект. |
|
hwroc
|
Число объектов, использованных повторно из пула. |
|
coc
|
Число объектов, созданных универсальным драйвером JDBC DB2 с момента создания пула. |
|
aooc
|
Число объектов, которые удалены из пула после истечения времени простоя, заданного в свойстве конфигурации db2.jcc.maxTransportObjectIdleTime. |
|
rmoc
|
Число объектов, удаленных из пула с момента его создания. |
|
nbr
|
Число требований, выданных пулу универсальным драйвером JDBC DB2, но заблокированных пулом |из-за достижения его максимальной емкости. Заблокированное требование может быть успешным, |если объект возвратился в пул до того, как превышено значение конфигурации |db2.jcc.maxTransportObjectWaitTime и сгенерирована исключительная ситуация. |
|
tbt
|
Общее время в миллисекундах для заблокированных пулом требований. Это время может быть значительно больше времени выполнения программы, если программа использует несколько потоков. |
|
tpo
|
Число объектов, находящихся в текущий момент в пуле. |
|
| |
Интерфейсы API для слежения за глобальным пулом транспортных объектов
|

Можно написать свои программы для сбора статистики по глобальному пулу транспортных объектов. Такие программы создают объекты в классе DB2PoolMonitor и вызывают методы для получения информации о пуле.

|

Например, следующий код создает объект для слежения за глобальным пулом транспортных объектов:

|
import com.ibm.db2.jcc.DB2PoolMonitor;
|DB2PoolMonitor transportObjectPoolMonitor =  
|	DB2PoolMonitor.getPoolMonitor (DB2PoolMonitor.TRANSPORT_OBJECT);
|

После создания объекта DB2PoolMonitor для слежения за глобальным пулом транспортных объектов можно применить следующие методы.

|
|
getMonitorVersion
|
Формат: |
public int getMonitorVersion()
|

Получает версию класса |DB2PoolMonitor, поставляемого с универсальным драйвером JDBC DB2.

|
|
totalRequestsToPool
|
Формат: |
public int totalRequestsToPool()
|

Получает общее число требований, |выданных универсальным драйвером JDBC DB2 пулу с момента создания пула.

|
|
successfullRequestsFromPool
|
Формат: |
public int successfullRequestsFromPool()
|

Получает число успешных требований, |выданных универсальным драйвером JDBC DB2 пулу с момента создания пула. Требование считается успешным, если пул возвратил объект.

|
|
numberOfRequestsBlocked
|
Формат: |
public int numberOfRequestsBlocked()
|

Получает число требований, |выданных пулу универсальным драйвером JDBC DB2, которые пул заблокировал |из-за достижения своей максимальной емкости. Заблокированное требование может быть успешным, |если объект возвратился в пул до того, как превышено значение конфигурации |db2.jcc.maxTransportObjectWaitTime и сгенерирована исключительная ситуация.

|
|
totalTimeBlocked
|
Формат: |
public long totalTimeBlocked()
|

Получает общее время в миллисекундах |для заблокированных пулом требований. Это время может быть значительно больше времени выполнения программы, если программа использует несколько потоков.

|
|
lightWeightReusedObjectCount
|
Формат: |
public int lightWeightReusedObjectCount()
|

Получает число объектов, |использованных повторно, но отсутствовавших в пуле. Такое может произойти, если объект соединения освобождает транспортный объект в конце транзакции. Если объекту соединения |позднее требуется транспортный объект и если исходный транспортный объект не использовался |никаким другим объектом соединения, объект соединения может использовать этот транспортный объект.

|
|
heavyWeightReusedObjectCount
|
Формат: |
public int heavyWeightReusedObjectCount()
|

Получает число объектов, использованных повторно из пула.

|
|
createdObjectCount
|
Формат: |
public int createdObjectCount()
|

Получает число объектов, созданных |универсальным драйвером JDBC DB2 с момента создания пула.

|
|
agedOutObjectCount
|
Формат: |
public int agedOutObjectCount()
|

Получает число объектов, удаленных из пула после превышения |времени простоя, заданного в свойстве конфигурации db2.jcc.maxTransportObjectIdleTime.

|
|
removedObjectCount
|
Формат: |
public int removedObjectCount()
|

Получает число объектов, удаленных из пула с момента его создания.

|
|
totalPoolObjects
|
Формат: |
public int totalPoolObjects()
|

Число объектов, находящихся в текущий момент в пуле.

|
|

Ключевое слово конфигурации CLI/ODBC OleDbReportIsLongForLongTypes

Ключевое слово OleDbReportIsLongForLongTypes поддерживается следующими серверами баз данных:

Описание ключевого слова:
Принуждает OLE DB устанавливать для типов LONG флаг DBCOLUMNFLAGS_ISLONG.
Синтаксис ключевого слова db2cli.ini:
OleDbReportIsLongForLongTypes = 0 | 1
Эквивалентный атрибут оператора:
SQL_ATTR_REPORT_ISLONG_FOR_LONGTYPES_OLEDB
Значение по умолчанию:
У типов LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC и LONG VARGRAPHIC FOR BIT DATA) не установлен флаг DBCOLUMNFLAGS_ISLONG, что может привести к тому, что такие столбцы будут использоваться с условии WHERE.
Замечания по использованию:
 

Механизм указателя клиента OLE DB и OLE DB .NET Data Provider's CommandBuilder генерируют операторы update и delete на основе информации о столбцах, которую сообщает IBM DB2 OLE DB Provider. Если сгенерированный оператор содержит тип LONG в условии WHERE, при выполнении этого оператора возникнет ошибка, так как типы LONG нельзя использовать в запросе поиска с операцией равенства. Если для ключевого слова OleDbReportIsLongForLongTypes задано значение 1, сообщая информацию о типах LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC и LONG VARGRAPHIC FOR BIT DATA) IBM DB2 OLE DB Provider будет устанавливать флаг DBCOLUMNFLAGS_ISLONG. Это предотвращает использование длинных столбцов в условии WHERE.

Ключевое слово конфигурации CLI/ODBC OleDbSQLColumnsSortByOrdinal

Ключевое слово OleDbSQLColumnsSortByOrdinal поддерживается следующими серверами баз данных:

Описание ключевого слова:
Принуждает функцию OLE DB IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) возвращать набор строк, отсортированных по столбцу ORDINAL_POSITION.
Синтаксис ключевого слова db2cli.ini:
OleDbSQLColumnsSortByOrdinal = 0 | 1
Эквивалентный атрибут оператора:
SQL_ATTR_SQLCOLUMNS_SORT_BY_ORDINAL_OLEDB
Значение по умолчанию:
IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) возвращает набор строк, отсортированных по столбцам TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME.
Замечания по использованию:
 

Спецификация Microsoft OLE DB требует, чтобы функция IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) возвращала набор строк, отсортированных по столбцам TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. IBM DB2 OLE DB Provider ведет себя в соответствии с этой спецификацией. Однако прикладные программы, использующие провайдер Microsoft ODBC Bridge (MSDASQL) обычно написаны таким образом, что им требуется набор строк, отсортированных по столбцу ORDINAL_POSITION. Если задать для ключевого слова OleDbSQLColumnsSortByOrdinal значение 1, провайдер будет возвращать набор строк, отсортированных по столбцу ORDINAL_POSITION.

Группа свойств DB2 Data Source для IBM DB2 OLE DB Provider

Для IBM DB2 OLE DB Provider добавлена новая группа свойств: DB2 Data Source. Набор свойств для DB2 Data Source - DBPROPSET_DB2DATASOURCE.

GUID для этого набора свойств - {0x8a80412a,0x7d94,0x4fec,{0x87,0x3e,0x6c,0xd1,0xcd,0x42,0x0d,0xcd}}

DBPROPSET_DB2DATASOURCE содержит три свойства:

DB2PROP_REPORTISLONGFORLONGTYPES

#define DB2PROP_REPORTISLONGFORLONGTYPES 4
Группа свойств: DB2 Data Source 
Набор свойств: DB2PROPSET_DATASOURCE
Тип: VT_BOOL
Типовой R/W: R/W
Описание: Устанавливает флаг IsLong для длинных типов

Механизм указателя клиента OLE DB и OLE DB .NET Data Provider's CommandBuilder генерируют операторы update и delete на основе информации о столбцах, которую сообщает IBM DB2 OLE DB Provider. Если сгенерированный оператор содержит тип LONG в условии WHERE, при выполнении этого оператора возникнет ошибка, так как типы LONG нельзя использовать в запросе поиска с операцией равенства.

Табл. 27. Значения DB2PROP_REPORTISLONGFORLONGTYPES
Значения Описание
VARIANT_TRUE При этом значении IBM DB2 OLE DB Provider, сообщая информацию о типах LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC и LONG VARGRAPHIC FOR BIT DATA), устанавливает флаг DBCOLUMNFLAGS_ISLONG. Это предотвращает использование длинных столбцов в условии WHERE.
VARIANT_FALSE Флаг DBCOLUMNFLAGS_ISLONG не устанавливается для типов LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC и LONG VARGRAPHIC FOR BIT DATA. Это значение по умолчанию.
DB2PROP_RETURNCHARASWCHAR

#define DB2PROP_RETURNCHARASWCHAR 2
Группа свойств: DB2 Data Source 
Набор свойств: DB2PROPSET_DATASOURCE
Тип: VT_BOOL
Типовой R/W: R/W
Описание: Возвращать символы как WChar

Табл. 28. Значения DB2PROP_RETURNCHARASWCHAR
Значения Описание
VARIANT_TRUE OLE DB описывает столбцы типов CHAR, VARCHAR, LONG VARCHAR и CLOB как DBTYPE_WSTR. Кодовой страницей данных в ISequentialStream будет считаться UCS-2. Это значение по умолчанию.
VARIANT_FALSE OLE DB описывает столбцы типов CHAR, VARCHAR, LONG VARCHAR и CLOB как DBTYPE_STR. Кодовой страницей данных в ISequentialStream будет считаться локальная кодовая страница клиента.
DB2PROP_SORTBYORDINAL

#define DB2PROP_SORTBYORDINAL 3
Группа свойств: DB2 Data Source 
Набор свойств: DB2PROPSET_DATASOURCE
Тип: VT_BOOL
Типовой R/W: R/W
Описание: Сортировка по порядковому номеру.

Спецификация Microsoft OLE DB требует, чтобы функция IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) возвращала набор строк, отсортированных по столбцам TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. IBM DB2 OLE DB Provider ведет себя в соответствии с этой спецификацией. Однако прикладные программы, использующие провайдер Microsoft ODBC Bridge (MSDASQL) обычно написаны таким образом, что им требуется набор строк, отсортированных по столбцу ORDINAL_POSITION.

Табл. 29. Значения DB2PROP_SORTBYORDINAL
Значения Описание
VARIANT_TRUE Провайдер будет возвращать набор строк, отсортированных по столбцу ORDINAL_POSITION.
VARIANT_FALSE Провайдер будет возвращать набор строк, отсортированных по столбцам TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Это значение по умолчанию.

Неверный синтаксис URL в синтаксической диаграмме DB2Binder

В теме "Установка универсального драйвера JDBC DB2" в синтаксической диаграмме DB2Binder неверно определен синтаксис URL для универсального драйвера JDBC DB2. Правильный синтаксис этого URL для DB2Binder показан на следующей диаграмме:

Синтаксис DB2Binder
Чтение синтаксической диаграммыПропуск синтаксической диаграммы>>-java--com.ibm.db2.jcc.DB2Binder------------------------------>
 
>---url jdbc:db2://сервер-+---------+-/база-данных-------------->
                          '-:--порт-'
 
>---user ID-пользователя---password пароль---------------------->
 
>--+-------------------+--+--------------------------+---------->
   '--size целое-число-'  '--collection имя-собрания-'
 
>--+------------------------------------+--+-------+-----------><
   |              .-,-----------------. |  '--help-'
   |              V                   | |
   '--tracelevel ---опция-трассировки-+-'
 

Перенаправление клиентов универсального драйвера JDBC DB2

Возможность автоматического перенаправления клиента в DB2 Universal Database (UDB) для Linux, UNIX, и Windows позволяет клиентским прикладным программам восстанавливать работоспособность после потери связи с сервером, благодаря чему они могут продолжать работу после минимального перерыва.

При каждой блокировке сервера все соединенные с ним клиенты получают ошибку связи, которая прекращает соединение и приводит к ошибке прикладной программы. Для высокой доступности следует иметь резервную поддержку установки или восстановления после отказов. (Восстановление после отказов означает способность одного сервера принимать на себя операции при отказе другого сервера.) В любом случае клиент универсального драйвера JDBC DB2 попытается восстановить соединение с первоначальным сервером, который может работать на узле восстановления при отказах, или с новым сервером. После восстановления соединения прикладная программа получит сообщение об исключительной ситуации SQL, информирующее об ошибке транзакции, но сможет продолжить работу со следующей транзакции.

Ограничения

Порядок действий

Когда администратор базы данных задал в экземпляре сервера положение альтернативного сервера для конкретной базы данных, положения первичного и альтернативного серверов возвращаются клиенту во время соединения. Универсальный драйвер JDBC DB2 создает экземпляр объекта DB2ClientRerouteServerList типа Referenceable и сохраняет его в своей временной памяти. При потере соединения универсальный драйвер JDBC DB2 пытается восстановить соединение, используя возвращенную с сервера информацию о серверах.

Свойство DataSource clientRerouteServerListJNDIName обеспечивает дополнительную поддержку перенаправления клиента прямо на клиенте; у свойства clientRerouteServerListJNDIName две функции:

Свойство clientRerouteServerListJNDIName задает ссылку JNDI на экземпляр DB2ClientRerouteServerList в репозитории JNDI с информацией об альтернативном сервере. После успешного соединения с первичным сервером полученная с него информация об альтернативном сервере перезаписывает информацию, содержавшуюся в clientRerouteServerListJNDIName. Если определено свойство clientRerouteServerListJNDIName, универсальный драйвер JDBC DB2 попытается передать обновленную информацию на склад JNDI при восстановлении после отказа. Если задано значение clientRerouteServerListJNDIName, для соединения будет использоваться информация о первичном сервере, заданная в DB2ClientRerouteServerList. Если первичный сервер не задан, будет использоваться информация serverName, заданная в источнике данных.

DB2ClientRerouteServerList - это последовательная функция bean Java с четырьмя свойствами:

Для доступа к этим свойствам определены методы получения и задания. Определение класса DB2ClientRerouteServerList:

package com.ibm.db2.jcc;
public class DB2ClientRerouteServerList 
  implements java.io.Serializable,
  javax.naming.Referenceable
{
  public String[] alternateServerName;
  public synchronized void 
    setAlternateServerName(String[] alternateServer);
  public String[] getAlternateServerName();
  public int[] alternatePortNumber;
  public synchronized void 
    setAlternatePortNumber(int[] alternatePortNumberList);
  public int[] getAlternatePortNumber();
  
  public synchronized void 
    setPrimaryServerName (String primaryServerName);
  public String getPrimaryServerName ();
  public synchronized void setPrimaryPortNumber (int primaryPortNumber)
  public int getPrimaryPortNumber (); 
}

Новое соединение, установленное при восстановлении после отказа, конфигурируется с исходными свойствами источника данных, за исключением имени сервера и номера порта. Кроме того, когда универсальный драйвер JDBC DB2 выполняет восстановление после отказа, восстанавливаются и все специальные регистры DB2 UDB, которые были изменены во время исходного соединения.

При отказе соединения универсальный драйвер JDBC DB2 сначала пытается восстановить соединение с первичным сервером. Если это не удается, драйвер пытается соединиться с альтернативным положением (восстановление после отказа). После восстановления соединения, драйвер передает прикладной программе объект исключительной ситуации java.sql.SQLException с кодом SQLCODE -4498, указывая прикладной программе, что соединение было заново установлено с альтернативным сервером. Прикладная программа может повторить транзакцию.

Как сделать DB2ClientRerouteServerList постоянным

Чтобы сконфигурировать постоянное хранение DB2ClientRerouteServerList:

  1. Создайте экземпляр DB2ClientRerouteServerList и свяжите его с реестром JNDI. Например:
    // Создать начальный контекст для задания имен
    InitialContext registry = new InitialContext();
    // Создать объект DB2ClientRerouteServerList
    DB2ClientRerouteServerList address=new DB2ClientRerouteServerList();
    
    // Задать номер порта и имя сервера для первичного сервера
    address.setPrimaryPortNumber(50000);
    address.setPrimaryServerName("mvs1.sj.ibm.com");
    
    // Задать номер порта и имя сервера для альтернативного сервера
    int[] port = {50002};
    String[] server = {"mvs3.sj.ibm.com"};
    address.setAlternatePortNumber(port);
    address.setAlternateServerName(server);
        
    registry.rebind("serverList", address);
    
  2. Задайте имя JNDI объекта DB2ClientRerouteServerList в качестве значения свойства DataSource clientRerouteServerListJNDIName. Например:
    datasource.setClientRerouteServerListJNDIName("serverList");

Настройка свойств конфигурации универсального драйвера JDBC DB2

Свойства конфигурации универсального драйвера JDBC DB2 позволяют задавать значения свойств, действующих на уровне драйвера. Эти параметры применяются прикладными программами и экземплярами DataSource. Эти параметры можно изменить, не изменяя исходный код прикладной программы и характеристики DataSource.

Параметры свойств конфигурации универсального драйвера JDBC DB2 задаются в следующем формате:

свойство=значение

Если свойство конфигурации начинается с db2.jcc.override, оно применимо ко всем соединениям и переопределяет все одноименные свойства Connection и DataSource. Если свойство конфигурации начинается с db2.jcc или db2.jcc.default, оно используется только по умолчанию. Параметры свойств Connection и DataSource переопределяют это значение.

Порядок действий

Чтобы задать свойства конфигурации:

Можно задать следующие свойства конфигурации универсального драйвера JDBC DB2. Все свойства необязательные.

db2.jcc.override.traceFile
Включает в универсальном драйвере JDBC DB2 трассировку кода драйвера Java и задает базовое имя файлов трассировки.

Задайте полное имя файла в качестве значения свойства db2.jcc.override.traceFile.

Свойство db2.jcc.override.traceFile переопределяет свойство traceFile для объекта Connection или DataSource.

Например, если задать db2.jcc.override.traceFile, как показано ниже, в универсальном драйвере JDBC DB2 будет включена трассировка кода Java в файл с именем /SYSTEM/tmp/jdbctrace:

db2.jcc.override.traceFile=/SYSTEM/tmp/jdbctrace

Свойства трассировки следует задавать под руководством службы программной поддержки IBM.

db2.jcc.sqljUncustomizedWarningOrException
Задает действие универсального драйвера JDBC DB2 при запуске ненастроенной прикладной программы SQLJ. В db2.jcc.sqljUncustomizedWarningOrException могут принимать следующие значения:
0
При запуске ненастроенной прикладной программы SQLJ универсальный драйвер JDBC DB2 не генерирует ни предупреждения, ни исключительную ситуацию. Это значение по умолчанию.
1
При запуске ненастроенной прикладной программы SQLJ универсальный драйвер JDBC DB2 генерирует предупреждение.
2
При запуске ненастроенной прикладной программы SQLJ универсальный драйвер JDBC DB2 генерирует исключительную ситуацию.

Удалена функция db2secFreeToken

Функция db2secFreeToken (Освободить память, удерживаемую маркером) больше не входит в API модуля аутентификации пользователя db2secGssapiServerAuthFunctions_1.

Требуется осторожность при внедрении пользовательских модулей защиты

Целостность установки DB2 Universal Database (UDB) может быть нарушена при внедрении модулей защиты, которые неверно написаны или недостаточно проверены и протестированы. DB2 UDB предпринимает меры предосторожности против многих типичных ошибок, но не может гарантировать полного сохранения целостности при внедрении пользовательских модулей защиты.

Модули защиты

Если вы используете свои пользовательские модули защиты, можно использовать ID пользователя до 255 символов в операторе соединения, передаваемый через CLP или динамический оператор SQL.

Интерфейсы API модулей защиты

Для интерфейсов API db2secGetGroupsForUser, db2secValidatePassword и db2secGetAuthIDs входной параметр dbname может быть пустым, и соответствующий входной параметр длины dbnamelen будет равен 0.

Соглашения об именах модулей защиты (Linux и UNIX)

В настоящее время для библиотек написанных пользователями модулей защиты на всех платформах Linux и UNIX принято расширение .so.

В AIX библиотеки модулей защиты могут иметь расширение .a или .so. Если в библиотеке существуют обе версии модулей, используется версия .a.

Для HP-UX в PA-RISC библиотеки модулей защиты могут иметь расширение .sl или .so. Если в библиотеке существуют обе версии модулей, используется версия .sl.

На всех остальных платформах Linux и UNIX для библиотек модулей защиты поддерживается только расширение имени файла .so.

Ограничения на библиотеки модулей защиты

В AIX библиотеки модулей защиты могут иметь расширение файла .a или .so. Механизм, используемый для загрузки библиотеки модулей, зависит от используемого расширения:

Библиотеки модулей с расширением файла .a
Библиотеки модулей с расширением файла .a считаются архивами, содержащими в качестве элементов совместно используемых объектов. Эти элементы должны называться shr.o (32-битные) или shr64.o (64-битные). Один архив может содержать и 32-битные, и 64-битные элементы, что позволяет внедрять его на платформах обоих типов.

Например, для построения библиотеки модулей в стиле 32-битного архива введите:

  xlc_r -qmkshrobj -o shr.o MyPlugin.c -bE:MyPlugin.exp
  ar rv MyPlugin.a shr.o
Библиотеки модулей с расширением файла .so
Библиотеки модулей с расширением файла .so считаются динамически загружаемыми совместно используемыми объектами. Такой объект может быть 32-битным или 64-битным в зависимости от опций компилятора и компоновщика, используемых при его построении. Например, для построения 32-битной библиотеки модулей:
  xlc_r -qmkshrobj -o MyPlugin.so MyPlugin.c -bE:MyPlugin.exp

На всех платформах, кроме AIX, библиотеки модулей защиты всегда считаются динамически загружаемыми совместно используемыми объектами.

Модули защиты GSS-API не поддерживают аутентификации с несколькими потоками

При аутентификации GSS-API передаются один маркер с клиента на сервер и один маркер с сервера на клиент. Эти маркеры получаются из gss_init_sec_context() на клиенте и из gss_accept_sec_context() на сервере. Если модули GSS-API попытаются создать дополнительные потоки, возникнет непредвиденная ошибка модуля защиты и соединение не будет установлено.

Модули защиты GSS-API не поддерживают шифрование и подпись сообщений

Шифрование и подпись сообщений недоступны в модулях защиты GSS-API.

Неявное завершение транзакций в автономной программе

Независимо от операционной системы при любом завершении программы (нормальном и аварийном) неявно выполняется откат незавершенных единиц работы.

Поддержка распределенных транзакций

В документе Что нового для DB2 Universal Database (UDB) Версии 8.2 в разделе Усовершенствование универсального драйвера JDBC DB2 приведена неверная информация о поддержке распределенных транзакций. Последнее предложение этого раздела неверно. Вот правильный вариант:

В DB2 UDB Версии 8.2 обеспечивает поддержку обработки распределенных транзакций в соответствии со спецификацией XA. Эта поддержка реализует спецификации Java 2 Platform Enterprise Edition (J2EE) Java Transaction Service (JTS) и Java Transaction API (JTA).

[ Начало страницы |Страница назад | Страница вперед | Содержание ]