Функции db


Содержание

Пользовательские SQL-функции в DBS

Этот вариант инструкции CREATE FUNCTION определяет скалярную, табличную или строковую SQL функцию. Данный вариант является наиболее распространенной формой пользовательских функций DB2. Помните, что скалярная функция при вызове возвращает одно значение. Табличную функцию можно использовать в предложении FROM инструкции SELECT, она возвращает таблицу. Строковая функция возвращает строку. Ее можно использовать в качестве функции для преобразования.

В пользовательской SQL функции можно использовать следующие предложения.

Вот пример пользовательской SQL функции, которая возвращает объединенное имя, составленное из значений разных полей.

Дополнительная информация по теме

Описание, как делаются пользовательские формы в офисных приложениям при помощи Visual Basic (VBA)

Предложения которые можно использовать в инструкции CREATE FUNCTION, а также пример написания инструкции

Описан вариант использования внешней функции при применении инструкции CREATE FUNCTION

Какие предложения можно использовать в инструкции CREATE FUNCTION при внешних табличных пользовательских функциях OLE-DB

Система управления базами данных DB2 корпорации IBM

DB2 — это семейство систем управления реляционными базами данных, выпускаемых корпорацией IBM. Это одна из “зрелых” мировых СУБД, постоянный лидер в производительности, по уровню технической реализации, возможностям масштабирования и т.д.

Обзор возможностей IBM DB2

В настоящее время СУБД DB2 представлена версиями на следующих платформах:

  • DB2 for Linux, UNIX and Windows v9 для платформ AIX, HP-UX, Linux, Solaris, Windows и бета-версия для платформы Mac OS X
  • DB2 for z/OS v9 для платформ z/OS и OS/390
  • DB2 Server for VSE & VM v7 для платформ z/VM и z/VSE
  • DB2 for i для платформы IBM i (встроена в систему на аппаратно-программном уровне)

DB2 имеет долгую историю. Это первая СУБД, которая стала использовать SQL. С 1975 по 1982 год прототип DB2 разрабатывался в IBM под названием System Relational, или System R.

СУБД DB2 получила своё название в 1982 году, когда был выпущен первый коммерческий релиз для VM под названием SQL/DS, и затем релиз для MVS под названием DB2.

Развитие DB2 уходит корнями в начало 1970-х, когда доктор Э. Ф. Кодд, работавший на IBM, разработал теорию реляционных баз данных и в июне 1970 года опубликовал модель манипуляции данными. Для воплощения этой модели он разработал язык реляционных баз данных и назвал его Alpha.

IBM DB2 — наиболее высокопроизводительная и мощная СУБД в мире. Ее основное уникальное конкурентное преимущество — возможность расширения (масштабирования) системы без проблем. Это означает, что любое приложение, написанное для DB2, будет работать с серверами данных DB2, работающими на любой распределенной платформе, поддерживаемой DB2 (Windows, HP-UX, Sun Solaris, Linux, Mac OS X и AIX®).

DB2 поставляется в различных редакциях и пакетах, включая очень популярную бесплатную DB2 Express-C с возможностью приобретения лицензии на 12 месяцев и опцией подписки (т.н. Fixed Term License (FTL)): DB2 Express-C FTL. Все редакции и пакеты DB2 построены на одной и той же базе исходного кода; они различаются лишь функциональностью и условиями лицензировании, которые нацеливают возможности, функции и преимущества DB2 по соответствующим сегментам рынка и ценовым группам. Базовой технологией всегда остается DB2, поэтому решение о применении той или иной редакции никак не зависит от таких понятий, как переносимость, простота использования и т.п. Таким образом, если вы используете приложение для бесплатной DB2 Express-C, оно также будет работать на DB2 Personal Edition (DB2 Personal), DB2 Express Edition (DB2 Express), DB2 Workgroup Edition (DB2 Workgroup) и DB2 Enterprise Edition (DB2 Enterprise).

Ниже представлены наиболее важные функциональные возможности DB2.

  • Мультиплатформенность. Даже самая младшая редакция «IBM DB2 Express – C» поддерживает несколько наиболее популярных операционных систем — Windows (включая x64), Linux (серверы POWER и x86), Mac OS X и Solaris x64.
  • Advanced Copy Services (ACS). DB2 ACS позволяет использовать технологию быстрого копирования устройства хранения данных для выполнения работы по копированию данных в операциях резервного копирования и восстановления. Возможность копирования данных средствами устройства хранения данных значительно ускоряет операции резервного копирования и восстановления. Резервное копирование с использованием DB2 ACS называется резервным копированием через мгновенную копию (snapshot backup).
  • Онлайновая реорганизация таблиц (REORG, реорганизация «на месте») позволяет пользователю проводить реорганизацию таблицы без прекращения полного доступа к ней.
  • Поддержка High Availability Disaster Recovery (HADR). Функциональность DB2 HADR обеспечивает поддержку высокой готовности и аварийное переключение для баз данных DB2.
  • Поддержка 64-разрядных экземпляров.
  • Поддержка Materialized Query Tables (таблицы материализованных запросов), Query Parallelism (параллелизм запросов), Mult >Помимо представленных функциональных возможностей так же имеются другие возможности:


Типы данных, определяемые пользователем

Эта версия DB2 дает пользователю возможность определять новые типы данных. Новый тип данных должен соответствовать одному из базовых типов, предоставляемых системой, но для них может быть определена своя семантика. При этом DB2 способна манипулировать такими данными в соответствии с определенной для них логикой. Можно задать набор операций, допустимых для некоторого типа данных, изменив его по сравнению с относящимся к базовому типу.

В DB2 реализован механизм строгой типизации. К данным неопределенного типа применимы при этом только те операции, которые определены для него самого, а не для базового класса. Для СУБД такой подход предоставляет мощный механизм контроля целостности данных.

Большие объекты

DB2/2 и DB2/6000 предоставляют пользователю такие новые типы данных, как большие бинарные объекты (BLOBS) и большие текстовые объекты (CLOBS). BLOBS позволяют хранить данные любого вида размером до двух гигабайт. CLOBS имеют такие же ограничения на размер, но предназначены для хранения текста в виде последовательности однобайтных или двухбайтных символов и могут быть связаны с определенной кодовой страницей.

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

Функции, определяемые пользователем

Функции, определяемые пользователем, позволяют скрывать внутреннее представление данных от приложения, обеспечивая некоторую инкапсуляцию данных. Они также позволяют определять новые операции как для базовых типов данных, так и для типов, определяемых пользователем.

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

Для реализации этих функций используются языки программирования, а для их регистрации в СУБД — введенный в язык определения данных оператор CREATE FUNCTION. Фактически этот оператор связывает пользовательскую функцию с конкретной программой, выполняемой при вызове этой функции. Использование пользовательских функций вместо непосредственного доступа к данным может обеспечить некоторую инкапсуляцию данных, что можно использовать для того, чтобы скрыть от пользователя их внутреннюю структуру.

Кроме того, DB2 поддерживает механизм перегрузки имен пользовательских функций, аналогичный применяемому в ООБД, однако не позволяет связывать функции с конкретными элементами данных, как связаны методы и объекты при объектном подходе.

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

Возможны два варианта взаимодействия функций, определяемых пользователем, с сервером DB2.

Первый заключается в том, что функция имеет прямой доступ к БД, что позволяет достичь максимальной производительности, но представляет собой потенциальную угрозу работоспособности сервера и целостности данных.

Во втором варианте функция выполняется как отдельный от сервера БД процесс, что обеспечивает защиту данных и СУБД, но снижает производительность.

Пользователь может выбирать оптимальный для своей задачи подход в зависимости от ее специфики.

Триггеры

Триггеры определяют набор операций, которые выполняются при возникновении определенных событий в базе данных, например при обновлении таблицы.


Триггеры могут использоваться для выполнения функций, которые при объектно- ориентированном подходе выполняются методами (например, проверка корректности вводимых значений), или конструктором (присвоение значений при создании новой записи).

Использование триггеров позволяет сделать данные «активными», моделировать не только структуру и свойства, но и поведение хранимых в БД объектов данных.

Реляционные расширители

Хорошим примером применения перечисленных новых возможностей являются реляционные расширители DB2 (DB2 Relational Extenders). Они предоставляют широкие возможности для работы с нетрадиционными данными, используя возможность определения пользовательских типов данных и функций. Для хранения мультимедиа данных расширители используют поддерживаемые DB2 большие объекты, а для поддержания целостности по ссылкам — триггеры.

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

Критический анализ СУБД DB2

Рассмотрим плюсы и минусы СУБД, у каждой СУБД есть свои плюсы и минусы, поэтом не надо думать, что одна СУБД лучше другой.

есть хорошая бесплатная версия

в бесплатной версии нет ограничений на размер базы

в бесплатной версии нет ограничителя запросов, это позволяет одновременно обслуживать десятки пользователей

хорошая бесплатная техподдержка

в отличии от PostgreSQL есть возможность получить платную поддержку производителя, что позволяет применять в Entrprise секторе бизнеса

с конфигурациями 1С:Предприятие в автоматическом режиме блокировок работает лучше, чем PostgreSQL (речь а параллельности, область блокировок на уровне строк, а не таблиц)

меньше проблем с неуникальностью индексов (фактически для решения проблемы рекомендуется временно базы загружать в DB2)

лучше обрабатывает ситуации вроде «не хватает памяти для сервера 1С»

нет ограничения на 256 таблиц, что расширяет возможности при работе с RLS

  • мало специалистов и высокая стоимосить Хороших специалистов
  • небольшая распространненость (со всеми вытекающими последствиями)
  • в отличии от MS SQL Server, для новых версий 1С выпускает «адаптированные» версии (в прочем, тоже самое верно и для постгресса)
  • размер баз больше, чем в других субд
  • медленная загрузка dt-файла
  • требуется «тонкая» настройка параметров субд, автоподстройка системы есть, но неполная
  • некоторые сообщения платформой могут не верно обрабатываться, для решения приходиться «понижать уровень» логирования ошибок.
  • 1С:ЦУП собирает длительные запросы, ожидания на блокировках, но не собирает взаимные блокировки!

Обзор редакций IBM DB2

Наименование редакции

Возможности и ограничения

IBM DB2 Express – C

Базовая бесплатная версия СУБД IBM DB2. Тех.поддержка не осуществляется.

Тех. ограничения: используется максимум 2 ядра и 1 процессор, 2 Гб ОЗУ. Нет поддержки репликации и кластеризации, нет гарантии и возможности приобретения доп. пакетов ПО для расширения возможностей СУБД. Версии выпускаются без пакетов обновлений. Поддерживаемые ОС: Windows и Windows x64, Linux, Linux x86, Linux x64, Linux on Power, Solaris, Mac OS X.

Поддерживаемые ОС: Windows, Linux (серверы POWER и x86), Mac OS X и Solaris x64..

Рекомендуется: для небольших ЛПУ, ограниченных в финансовых возможностях и не нуждающихся в тех.поддержке со стороны IBM кол-вом пользователей до 50-70.

Домашняя страница http://www-142.ibm.com/software/products/ru/ru/db2expressc

IBM DB2 Express – C FTL (Fixed Term License)

Первый коммерческий вариант.

Полностью аналогичный предыдущему продукт, но с подпиской на техническую поддержку 12 месяцев IBM 24×7 + поддержка репликации + поддержка кластеров из 2 серверов + выпуск FixPack и поддержка нескольких версий.


Тех. ограничения: используется максимум 2 ядра и 1 процессор, 2 Гб ОЗУ.

Поддерживаемые ОС: Windows, Linux (серверы POWER и x86) и Solaris x64

Рекомендуется: для небольших и средних ЛПУ, ограниченных в финансовых возможностях, но нуждающихся в тех.поддержке со стороны IBM кол-вом пользователей до 50-150.

IBM DB2 Express Edition

Начальная версия IBM DB2 с технической поддержкой на 12 месяцев.

Тех. ограничения: до 4 ядер (процессоры Intel) и до 4 Гб ОЗУ. Можно использовать только на 2-х процессорных 2-х ядерных серверах (для Intel) или слабее.

Поддерживаемые ОС: Windows, Linux (серверы POWER и x86), AIX, Solaris (SPARC и x64), HP-UX (только IA-64)

Рекомендуется: для небольших и средних ЛПУ, нуждающихся в тех.поддержке со стороны IBM кол-вом пользователей до 70-200.

Домашняя страница http://www-142.ibm.com/software/products/ru/ru/db2express-9

IBM DB2 Workgroup Server Edition

Server Edition Представляет собой сервер данных DB2, который предоставляет те же функции, что и DB2 Express, но рассчитан на более высокие требования к рабочей нагрузке, которые требуют больше памяти, вычислительной мощности, большей степени высокой готовности без дополнительной настройки, и имеет более широкий спектр опций развертывания в рамках конкретной платформы.

Тех. ограничения: Можно использовать различные высокопроизводительные мультипроцессорные серверы (включая Power, Itanium, Ultra SPARC и т.д.), но до 16 Гб ОЗУ на все процессоры.

Поддерживаемые ОС: Windows, Linux (серверы POWER, System z и x86), AIX, Solaris (SPARC и x64), HP-UX (только IA-64)

Рекомендуется: для средних и больших ЛПУ, нуждающихся в тех.поддержке со стороны IBM кол-вом пользователей от 100.

Домашняя страница http://www-142.ibm.com/software/products/ru/ru/db2workgroup-9

IBM DB2 Enterprise Server Edition

Высокопроизводительная версия СУБД IBM DB2 для самых крупных учреждений и наиболее высокопроизводительных вычислений.

Поддерживаемые ОС: Windows, Linux (POWER, System z и System x), AIX, Solaris (SPARC и x64) и серверы HP-UX (IA-64 только начиная с DB2 9.5).

Рекомендуется: для больших ЛПУ и сети нескольких ЛПУ, или региональных ЦОДов, нуждающихся в тех.поддержке со стороны IBM кол-вом пользователей от 1000.

Домашняя страница http://www-142.ibm.com/software/products/ru/ru/db2enterprise-9

СУБД DB2 нового поколения

Корпорация IBM представила сервер баз данных нового поколения DB2 9 под кодовым названием Viper, воплотивший самые значительные достижения в развитии технологий баз данных за более чем двадцать лет.

Выпуск DB2 9 знаменует завершение пятилетнего проекта IBM, превратившего традиционные, статичные технологии баз данных в концепцию интерактивного, динамичного сервера баз данных, предоставляющего клиентам более совершенные возможности для управления всеми типами информации, такими как документы, аудио- и видеофайлы, изображения, Web-страницы и XML-транзакции с цифровыми подписями.

Новый сервер баз данных IBM впервые в отрасли позволяет обеспечить беспрепятственное, параллельное движение реляционных и XML-данных, вне зависимости от формата, платформы и размещения.

Более 750 разработчиков ПО из восьми стран внесли вклад в создание СУБД Viper, которая разработана и настроена с ориентацией на управление информацией в средах SOA.

В СУБД DB2 9 реализованы три значительных технологических достижения — запатентованная технология pureXML, революционная технология сжатия данных Venom и передовые средства автономного управления данными. Подобное сочетание новых для отрасли функциональных возможностей, дополненное усовершенствованиями в области обеспечения безопасности и аварийного восстановления, позволит ускорить выполнение информационных запросов и предоставит клиентам неограниченный доступ к информации. Кроме того, новая версия DB2 обеспечивает доступ к информации, хранящейся в обычных базах данных Oracle и MySQL, поставщики которых не предлагают аналогичной возможности.

IBM впервые выпускает сразу три редакции DB2 — для корпоративных клиентов, для компаний малого и среднего бизнеса (DB2 Express) и для разработчиков (DB2 Express-C).

«DB2 Viper обещает изменить конкурентную ситуацию в отрасли баз данных, — говорит Амбудж Гойал (Ambuj Goyal), генеральный менеджер подразделения IBM Information Management. — Мы открываем новую эру технологий серверов баз данных, которые укрепят наши инвестиции и инициативы, направленные на предоставление нашим клиентам возможности расширять бизнес, эффективно используя информацию по требованию».

Клиенты и партнеры, осуществлявшие предварительное тестирование и оценку СУБД DB2 9, предоставили чрезвычайно позитивные отзывы. Zurich Insurance, N.A., ведущий поставщик услуг страхования коммерческой собственности от несчастных случаев, обслуживающий крупные корпорации и клиентов из сферы малого и среднего бизнеса, решил использовать DB2 9, чтобы получить доступ к новой технологии pureXML.

«Отрасль страхования сталкивается с растущими потребностями в хранении огромных массивов документации в формате XML. Технология pureXML обеспечивает беспрецедентный уровень гибкости при определении пользовательских функций и выполнении внешних операций с XML-данными, хранящимися в старых базах данных, — утверждает Джеймс Сербер (James Surber), старший администратор баз данных компании Zurich Insurance N.A. — Возможность хранить различные версии одних и тех же XML-документов с различными структурами в одной таблице позволит нам не затрачивать часы на выполняемые вручную операции по выгрузке и повторной загрузке всей таблицы при изменении нашей XML-структуры».

Новые для отрасли методы управления данными

В СУБД DB2 9 реализовано множество совершенствований и технологических достижений — которые не может предложит ни один из конкурентов, — способных трансформировать и усовершенствовать методы хранения, управления и доступа к информации, в том числе:

Технология pureXML, позволяющая клиентам прозрачно управлять не только обычными реляционными данными, но и XML-данными, без необходимости их переформатирования или размещения внутри крупных объектов в базе данных. Эта уникальная возможность Viper позволяет клиентам повысить уровень готовности информации, скорость работы с ней и использовать самые разнообразные данные при резком сокращении административных затрат, характерных для существующих методов управления инфрмацией. Технология pureXML позволит разработчикам значительно упростить и ускорить создание приложений, способных получать доступ как к реляционным, так и к XML-данным.

Технология сжатия данных под названием Venom, позволяющая администраторам баз данных использовать низкоуровневую компрессию объектов данных, добиваясь значительной экономии дискового пространства, сокращения объемов операций ввода/вывода и потребностей в оперативной памяти — в особенности для крупных таблиц с повторяющимися последовательностями данных. Благодаря технологии Venom СУБД DB2 позволяет использовать в вычислительных средах Linux, UNIX и Windows средства компрессии данных, подобные тем, которые применяются в мэйнфреймах. Технология Venom дополняет имеющиеся в СУБД DB2 технологии компрессии значений таблиц, компрессии индексов в многомерных кластерах и компрессии данных при резервном копировании. Эта революционная технология кардинальным образом отличает DB2 от СУБД Oracle, предлагающей устаревшие средства компрессии на уровне таблиц, и SQL Server, не имеющей никаких значимых средств компрессии.

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


Повышение уровня безопасности. DB2 9 предлагает уникальное средство контроля доступа к данным Label Based Access Control (LBAC), предоставляющее чрезвычайно гибкие возможности для определения иерархий безопасности и уровней классификации, чтобы затем применять эти определения к управляемой информации. Новая возможность присвоения меток предлагает действенные методы контроля доступа к конфиденциальным данным, хранящимся в базе данных. Впервые в отрасли вводится уровень полномочий администратора по безопасности (SECADM), объединяющий ряд привилегий в области безопасности под одним пользователем и обеспечивающий более строгий контроль над тем, кто получает доступ к информации.

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

Передовые возможности секционирования данных, ставшие важной инновацией в области совершенствования управления данными и повышения уровня готовности информации. DB2 9 является первой СУБД, обеспечивающей одновременную поддержку трех распространенных методов секционирования — секционирование по диапазонам, многомерную кластеризацию и хеширование. Эта возможность позволяет организациям выбирать способ систематизации и упорядочивания своей информации, наилучшим образом соответствующий индивидуальным требованиям бизнеса, повышая тем самым производительность приложений.

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

Оптимальная СУБД для разработчиков

Реализованные в СУБД DB2 9 усовершенствования позволяют разработчикам значительно упростить и ускорить создание приложений, работающих одновременно с хранилищами XML- и реляционных данных. Например, технология pureXML поддерживает язык XQuery, предоставляя разработчикам приложений возможность беспрепятственно использовать этот гибридный сервер баз данных. XQuery — это мощный новый языковой стандарт, созданный специально для обработки XML-данных. Для извлечения реляционных или XML-данных разработчики приложений могут использовать языки XQuery, XPath, стандартный язык SQL — или все три одновременно.

Другие новые возможности для разработчиков:

  • Комплексная среда разработки DB2 Developer Workbench, позволяющая создавать, редактировать, отлаживать, тестировать и развертывать хранимые процедуры и определяемые пользователями функции. Среда Developer Workbench может использоваться для разработки SQLJ-приложений, а также для создания, редактирования и исполнения SQL-операторов и XML-запросов.
  • Расширенная поддержка Visual Studio 2005, включающая поддержку Web-сервисов, полную поддержку хранения XML-данных без их преобразования и возможность создавать приложения и Web-сайты без написания программного кода.
  • Обновленный драйвер DB2 Driver for JDBC and SQLJ удовлетворяет спецификациям JDBC 3.0 и поддерживает операторы SQLJ, которые выполняют функции, эквивалентные большинству методов JDBC.

Круг задач, которые можно решать, используя объектные расширения DB2, существенно увеличен по сравнению с классическим реляционным подходом. Заимствовав из объектно-ориентированной модели наиболее необходимые для современных приложений элементы, DB2 сохранила все достоинства реляционной СУБД. Это позволяет использовать при построении корпоративных информационных систем на ее основе как реляционный, так и объектно-ориентированный подход.

Так же хочется предостеречь от заблуждения «бесплатная субд — бесплатное обслуживание субд специалистами». Лучше используйте ту СУБД, которую лучше знаете!

Ссылки для скачивания ПО IBM DB2:

  • Cервер DB2 Express-C http://www-01.ibm.com/software/data/db2/express/download.html
  • Пробные версии DB2 и дополнительное ПО http://www-01.ibm.com/software/data/db2/linux-unix-windows/download.html
  • Клиентское ПО (Необходимо выбрать группу ПО (Product Group) — Information Management и Продукт (Product ) — IBM Data Server Client Packages, а также необходимую версию и платформу) http://www-933.ibm.com/support/fixcentral/
  • Другие редакции DB2 (Скачивание с сайта IBM Passport Advantage. Необходимо иметь подписку на соответствующее ПО) http://www-01.ibm.com/software/howtobuy/passportadvantage/pao_customers.htm

Дополнительные и более подробные сведения:


  • Обзор группы программных продуктов IBM DB2 http://www-142.ibm.com/software/products/ru/ru/atoz/D
  • Статья «Сравнение распределенных серверов данных DB2 9.5» http://www.ibm.com/developerworks/ru/library/0301zikopoulos/0301zikopoulos1.html
  • Статья «Работа 1С:Предприятия 8.1 с СУБД IBM DB2» http://www.gilev.ru/1c/81/db2/
  • Статья о выборе и сравнении различных редакций IBM DB2 http://www.ibm.com/developerworks/ru/library/dm-0611zikopoulos/index.html
  • Статья DB2 и система ценообразования IBM на основе единиц процессора (PVU) http://www.ibm.com/developerworks/ru/library/dm-0611zikopoulos2/?S_TACT=105AGX99&S_CMP=content
  • Статья «Лицензирование распределенных серверов данных DB2 9.5 в средах высокой готовности» http://www.ibm.com/developerworks/ru/library/dm-0612zikopoulos/index.html
  • Сайт, посвященный бесплатной версии DB2 http://db2express.com/ru/

Техническая информация для IT-специалистов по IBM DB2


  • Информационный центр IBM DB2 Database для Linux, UNIX и Windows. http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp
  • IBM Data Studio Administrator 2.1: Новые возможности, уменьшение времени простоев базы данных и повышение производительности администраторов баз данных, http://www.ibm.com/developerworks/ru/library/dm-0902chen/
  • Модель памяти DB2 http://www.ibm.com/developerworks/ru/library/dm-0406qi/index.html
  • Автоматическое обслуживание таблиц DB2
  • http://www.ibm.com/developerworks/ru/library/dm-0706tang/index.html
  • http://www.ibm.com/developerworks/ru/library/dm-0707tang/index.html
  • Как работает многопоточная архитектура в DB2
  • http://www.ibm.com/developerworks/ru/library/dm-0807kharche/index.html
  • Выявление и разрешение проблем блокировки в DB2 для Linux, UNIX и Windows http://www.ibm.com/developerworks/ru/library/0310wilkins/index.htm
  • Введение в восстановление после сбоев базы данных DB2 9 http://www.ibm.com/developerworks/ru/edu/dm0708barsagade/index.html
  • http://www.ibm.com/developerworks/ru/edu/dm-dw-dm-0708barsagade-i.html

  • Lotus Sametime и DB2 pureXML в медицинском приложении
  • http://www.ibm.com/developerworks/ru/library/dm-0902malaika/index.html
  • Независящее от регистра сравнение строк в DB2 для платформ Linux, UNIX и Windows http://www.ibm.com/developerworks/ru/library/dm-0712stolze/index.html
  • Программирование на XML для DB2
  • http://www.ibm.com/developerworks/ru/library/dm-0707singh/index.html
  • http://www.ibm.com/developerworks/ru/library/dm-0708singh/index.html
  • http://www.ibm.com/developerworks/ru/library/dm-0708singh2/index.html
  • Декомпозиция документов XML с помощью технологии pureXML в IBM DB2 http://www.ibm.com/developerworks/ru/library/dm-0801ledezma/index.html

Левченко Ольга Владимировна, «Информационные системы», КУА

НОВОСТИ ФОРУМА
Рыцари теории эфира
01.10.2020 — 05:20: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]69vJGqDENq4[/Youtube][/center]
[center]14:36[/center]
Osievskii Global News
29 сент. Отправлено 05:20, 01.10.2020 г.’ target=_top>Просвещение от Вячеслава Осиевского — Карим_Хайдаров.
30.09.2020 — 12:51: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Ok]376309070[/Ok][/center]
[center]11:03[/center] Отправлено 12:51, 30.09.2020 г.’ target=_top>Просвещение от Дэйвида Дюка — Карим_Хайдаров.
30.09.2020 — 11:53: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]VVQv1EzDTtY[/Youtube][/center]
[center]10:43[/center]

интервью Раввина Борода https://cursorinfo.co.il/all-news/rav.
мой телеграмм https://t.me/peshekhonovandrei
мой твиттер https://twitter.com/Andrey54708595
мой инстаграм https://www.instagram.com/andreipeshekhonow/

[b]Мой комментарий:
Андрей спрашивает: Краснодарская синагога — это что, военный объект?
— Да, военный, потому что имеет разрешение от Росатома на манипуляции с радиоактивными веществами, а также иными веществами, опасными в отношении массового поражения. Именно это было выявлено группой краснодарцев во главе с Мариной Мелиховой.

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

Использование mysql в функциях

Собственно вопрос, как сделать правильнее подключение к БД, чтобы не дублировать подключение к БД в каждой функции.

Потому что так получается, что в функциях как будто база данных не подключена.
Вот не хочется дублировать в каждой функции вот такой вот код:

переменная $db в фуункциях недоступна. и в каждой функции приходится писать такой код. всё это находится в оном файле.

Может как решение щас придумал передавать функции переменную $db ?? помогите решить этот вопрос.

25.11.2012, 02:18

Использование PDO и MySQL
Есть функция, никак не могу понять почему не работает: function developer_get_profile ($login).

Использование псевдонимов таблиц в запросе к БД Mysql
При запросе к БД MYSQL выдает сообщение: #1305 — FUNCTION table1.Code_pgroup does not exist .

Некорректное использование переменной PHP в запросе к базе данных MySQL
Я ещё совсем зелёный в веб-программировании, на днях решил сделать сайт тестирования знаний по ПДД.

Работа PDO в функциях
Люди, всем привет. проблема в следуюшем: когда делаю PDO запрос — работает нормально, но как только.

Использование стракта в функциях
Как сделать, чтобы можно было использовать стракт в функциях? Например, чтобы работал такой код.

ODBC: проблема эффективного ввода/вывода.

Автор: К.М. Максимов
программист, кандидат экономических наук

Опубликовано: 05.09.2003
Исправлено: 13.03.2005
Версия текста: 1.0

Выбор технологии доступа к данным

Создавая программное обеспечение для операционных систем семейства Windows, и предусматривая работу с СУБД, разработчики стоят перед выбором: какие компоненты или библиотеки использовать для доступа к данным. Обычно приходится выбирать один компонент (иногда два и более) из состава Microsoft Data Access Components (MDAC). Вот из чего предлагается выбирать:

  • ActiveX Data Objects (ADO);
  • OLE DB;
  • Open Database Connectivity (ODBC).


Компоненты обеспечивают независимость приложения от конкретного хранилища данных. Эта независимость достигается за счёт использования драйверов. Имеются драйверы двух типов – для работы с файлами данных (текстовыми, электронными таблицами) и для работы с СУБД. На сегодняшний день существует более сотни драйверов для работы со всеми основными типами файлов и баз данных.

Какой компонент выбрать? Для этого необходимо знать их преимущества и недостатки. Все зависит от того, какая решается задача, кто решает эту задачу, в каких условиях предполагается эксплуатировать программный продукт.

Некоторую помощь в решении этой проблемы может оказать сравнительная таблица, которую можно найти в MSDN.

ODBC OLE DB
API для доступа к данным Компоненты для доступа к данным
API в стиле языка C COM-модель
Табличные данные Табличные и многомерные данные
SQL-стандарт COM-стандарт
Tаблица 1.

В общем случае, если вас терзают сомнения, я рекомендую прочитать статью в MSDN «Choosing Your Data Access Strategy». Очевидно лишь одно – в одной и той же программе использовать одновременно несколько компонент неэффективно.

Преимущества и перспективы ODBC API

В этой статье рассматривается «долгожитель» – Open Data-Base Connectivity (ODBC) , а именно некоторые аспекты ввода-вывода с использованием этого API. Если кто-то не знает или забыл, то MFC-классы CDatabase и CRecordset (и соответствующие wizard’ы) используют вызовы ODBC API.

ODBC – это программный интерфейс для доступа к данным, использующий язык SQL. Основной средой функционирования ODBC считается Windows, хотя существуют реализации ODBC для других операционных систем – OS/2, Unix, MacOS и др.

Приложения, использующие ODBC API, могут работать с различными по своей природе источниками данных. Это могут быть реляционные, иерархические и гетерогенные СУБД, файлы с данными и любые другие источники данных. Такую возможность обеспечивают специальные модули – ODBC-драйверы. Менеджер драйверов (Driver Manager) взаимодействует с приложением и обеспечивает загрузку драйвера, необходимого для доступа к конкретному источнику данных. Таким образом, приложение работает с менеджером драйверов, который в свою очередь направляет вызовы API-функций в соответствующий ODBC-драйвер, который обрабатывает их специфично для конкретной СУБД. Для приложения работа с источником данных совершенно прозрачна. Вы всегда легко можете настроить своё приложение для работы с любой СУБД, для которой имеется драйвер. Перекомпилировать или изменять исходный код не требуется.

Первая версия Microsoft ODBC вышла в свет в 1992 году. Сейчас повсеместно используется третья версия ODBC, которая была представлена в 1996 году. Не следует использовать старые версии, потому что именно третья версия соответствует стандартам и спецификациям X/Open и ISO/IEC.

Библиотека ODBC получила широкое признание у программистов всего мира. С одной стороны она предоставляет возможность использовать стандартные SQL-операторы для запросов к базе данных. С другой – она является достаточно низкоуровневой, гибкой и настраиваемой на любой источник данных. Немаловажно и то, что ODBC – это стандартный интерфейс, который существует во многих операционных системах, а в Windows 95 и последующие версии Windows он встроен. К основным преимуществам ODBC API следует отнести высокую скорость работы, гибкость, переносимость исходного кода, наличие тесной связи с языком С/С++.

Основы работы с ODBC API

Прежде чем перейти к проблеме организации эффективного ввода-вывода, давайте рассмотрим основные этапы работы с ODBC API. Для доступа к данным при помощи ODBC любая программа вызывает API-функции, причем в определённой последовательности:

  • подключение к источнику данных;
  • инициализация и настройка параметров SQL-запроса/оператора;
  • формирование и выполнение запроса/оператора;
  • получение результатов;
  • отключение от источника данных.

Для соединения с источником данных с помощью функции SQLAllocHandle следует создать «хэндлы» для среды (environment) и соединения (connection).

ПРИМЕЧАНИЕ

Объявления ODBC-функций и констант находятся в файлах sql.h и sqlext.h, библиотечный файл – odbc32.lib.

Необходимо также указать, что работать мы будем с третьей версией ODBC API. Затем можно подключиться к источнику данных функцией SQLConnect . Этой функции передаются имя источника данных (Data Source Name, DSN), имя пользователя (login), пароль (password) и длины этих строк.

Для строк языка С, которые заканчиваются нулём, можно передавать константу SQL_NTS (Null-Terminated String).

DSN – обязательный параметр, без которого дальнейшая работа программы невозможна. Обычно DSN создают при установке приложения. Например, инсталлятор InstallShield легко справляется с этой задачей, также он устанавливает необходимые ODBC-драйверы.

В этом месте стоит упомянуть о возможности создания «на лету» имени для источника данных (DSN). Функция SQLConfigDataSource позволяет программным путём создать DSN и избавляет конечного пользователя от процесса настройки DSN.

Все последующие этапы связаны с подготовкой и выполнением SQL-запросов. Для выполнения запроса требуется хэндл, который можно получить с помощью функции SQLAllocHandle . Далее может следовать так называемый прямой запрос, который выполняет функция SQLExecDirect , а может – сложный. В последнем случае запрос сначала подготавливается с помощью SQLPrepare , затем для передачи исходных данных или установки связи между переменными и параметрами SQL-оператора применяется функция SQLBindParameter . Когда всё готово для выполнения запроса, вызывают функцию SQLExecute . Для чтения данных обычно используют пару функций SQLFetch и SQLGetData , хотя существуют и другие способы. Например, для быстрого чтения данных из таблиц используют SQLBindCol . По окончании работы с запросом ресурсы следует освободить функцией SQLFreeHandle . Нужно не забыть отключиться от источника данных (функция SQLDisconnect ) и освободить все ресурсы (функция SQLFreeHandle ).

Всегда следует проверять значения, которые возвращают функции ODBC API. Функции в случае успешного выполнения возвращают значения SQL_SUCCESS или SQL_SUCCESS_WITH_INFO. Для того чтобы не выполнять две операции сравнения, существует удобный макрос SQL_SUCCEEDED .

Рисунок 1. Таблица users в базе данных

Проиллюстрируем работу с ODBC API на примере добавления записи в таблицу. Пусть у нас имеется таблица users. Эту таблицу мы будем использовать и для других примеров. В таблице три поля – идентификатор (номер) пользователя, его имя (name) и величина зарплаты (salary). В таблице используются поля трёх наиболее часто используемых типов – целое число, строка символов и число с плавающей точкой.

Эффективный ввод/вывод через ODBC API

В процессе работы над проектом, который строился по технологии клиент-сервер, я столкнулся с проблемой организации эффективного ввода/вывода информации из базы данных. Под эффективностью понималась не только быстрая работа программ (клиентской и серверной), но и хорошая организация исходного кода, его мобильность и гибкость. Учитывая высокую скорость работы ODBC API, было решено использовать его для реализации серверной части программы, которая работала с СУБД.

В этой статье я хочу поделиться с читателями интересными результатами, которые я получил и использовал в своей работе.

Всем известно, что существует несколько программных «обёрток» для ODBC API, которые призваны облегчить процесс доступа к данным. Из них наиболее популярна библиотека MFC, а точнее её классы CDatabase, CRecordset и соответствующие wizard’ы. Следует напомнить о довольно удобном в использовании классе CODBCRecordset, которому ранее бала посвящена статья “Универсальный ODBC Recordset” в журнале «Программист» №2/2001.

Казалось бы, MFC-классы упрощают программный код. На самом же деле wizard MFC для каждого SQL-запроса создаёт производный класс, а это не всегда удобно, особенно когда требуется выполнять много различных SQL-запросов. Можно самому создать несколько производных классов, но, по-моему, это не лучшее решение. И базовые, и производные классы не отличаются функциональностью, а область их применения сильно ограничена. Таких классов в большом проекте может стать очень много. Такая организация программы, как мне кажется, усложняет процесс разработки, отладки и сопровождения. Кроме того, на начальных этапах разработки почти всех проектов изменяется структура базы данных. А еженедельно вносить изменения в классы, которые сгенерировал wizard – утомительно и неэффективно. Это главная причина, по которой пришлось отказаться от wizard’ов и MFC-классов для работы с базой данных.

Можно было бы использовать класс CODBCRecordset, однако и от него пришлось отказаться. Во-первых, исходный код начал превращаться в сплошной блок «try-catch», в котором одна половина кода «ловила» исключительные ситуации, а другая половина выполняла полезную работу. Во-вторых, и в этом классе были обнаружены недочёты.

В конце концов, весь исходный код для работы с базой данных был переписан без использования классов. Однако результат меня не устраивал. В программе довольно много SQL-операторов, для каждого из которых требовалось писать «обвязочный» код вроде последовательности SQLAllocHandle – SQLExecDirect – SQLFetch – SQLGetData – SQLFreeHandle.

Недолго думая, я решил выявить ту общую часть «обвязочного» кода, которая многократно повторяется, и перенести её в отдельную функцию. Осталась одна проблема – требовалось создать универсальную «начинку» для такой функции, чтобы иметь возможность выполнять различные SQL-операторы.

Таким образом, появились две небольшие функции db_printf и db_scanf . В именах функций отражена их суть – они предназначены для вывода и ввода данных. О них пойдёт речь далее. Здесь существует большая аналогия с библиотечными функциями printf и scanf . И те, и другие принимают переменное число аргументов и работают со спецификаторами. Время показало, что функции db_printf и db_scanf позволяют эффективно выполнять SQL-запросы, вызывать и передавать параметры в хранимые процедуры, манипулировать таблицами, создавать, изменять или удалять какие-либо записи в таблице. Исходный текст любого приложения становится намного компактнее, появляется возможность оперативно вносить в него изменения.

Функция db_printf

Эта функция осуществляет вывод (вставку и модификацию) данных любого типа посредством выполнения SQL-оператора.

hDbc – хэндл (дескриптор) соединения с источником данных;
szSQL – строка с SQL-оператором для выполнения запроса;
szFmt – строка формата с управляющими символами-спецификаторами;
argument – один или более аргументов для SQL-оператора.

Количество обработанных аргументов или -1 при возникновении ошибки.


Область применения функции очень обширна. Приведём несколько примеров, в которых предполагается, что вы уже подключились к базе данных и в переменной hDbc лежит хэндл этого соединения. Контроль за подключением (отключением) к (от) источнику данных остаётся за программистом, остальную часть работы по выполнению SQL-запросов берут на себя функции db_printf и db_scanf. Предположим, что требуется программным путём создать таблицу users, изображённую на рисунке 1. Нет ничего проще:

Следующий фрагмент кода добавляет новую запись в уже известную таблицу users с использованием функции db_printf. В начале статьи был приведён пример, в котором такая операция потребовала нескольких строк кода, а теперь всё выглядит очень компактно:

Совершенно очевидно, что структура исходного текста приложения улучшилась по сравнению с первым примером. Выполнение SQL-операторов теперь сократилось до одной-двух строчек кода.

Напомню, что в языке SQL, который реализован в ODBC, чтобы указать драйверу на то, что значения можно получить у вызывающего приложения, используется символ «?». Обратите внимание на строку спецификаторов и на то, что в примере в функцию передаются аргументы трёх разных типов. Именно спецификаторы указывают соответствующий тип аргумента. Отличительной особенностью функции db_printf является то, что она работает с аргументами, которые имеют машинное (двоичное) представление. Исходные данные и параметры могут быть строкой символов, а могут быть в двоичном/машинном виде. То есть float n = 10.25; это совсем не то что char n[] = «10.25» . Разницу чувствуете? SQL-оператор – это строка символов. Как туда передавать число, время и т.д. Есть различные форматы. Чтобы избежать использования этих форматов и конвертирования (замедления) можно работать с двоичными/машинными объектами. У вас никогда не возникнет проблем с преобразованием типов аргументов, которые иногда случаются в других программах. Например, преобразование строки «1003.14» в число не всегда проходит гладко, потому что в качестве разделителя целой и дробной частей числа может быть или точка, или запятая, или любой другой символ.

Теперь, когда вы знаете, как использовать функцию db_printf, можно посмотреть как она устроена.

Необходимо дать некоторые пояснения к исходному коду. Взгляните на объявление функции db_printf и обратите внимание на многоточие в конце списка параметров. В языке С, как вы помните, это означает, что количество аргументов у функции может быть произвольным. Это позволило создать функцию, которая может выполнять почти любые SQL-операторы с переменным количеством параметров. Строка формата szFmt позволяет контролировать количество и тип этих параметров.

Вернёмся к исходному тексту функции. Как известно, в любую функцию аргументы передаются через стек.

ПРИМЕЧАНИЕ

Есть исключение: иногда компилятор можно заставить передавать аргументы в функцию через регистры процессора.

В функции db_printf используются макросы va_list, va_arg , которые извлекают из стека значения в соответствии с тем, что указано в строке спецификаторов. Центральное место занимает процесс обработки строки спецификаторов. В цикле последовательно перебираются символы, пока не закончится строка или пока не встретится управляющий символ % . Далее начинает работать конструкция switch , в которой имеется три ветви – для обработки аргументов трёх типов: строковых ( %s ), целых чисел ( %d ) и вещественных чисел ( %f ). Остальные символы в строке спецификаторов не обрабатываются. В общем случае совсем необязательно (но желательно) реализовывать поддержку всех типов данных, т.к. ODBC при необходимости осуществляет преобразование типов.

ПРИМЕЧАНИЕ

Таблица преобразования типов есть в MSDN в разделе «Converting Data from C to SQL Data Types».

Тип CHAR является универсальным, его можно использовать везде. Например, дату и время (TIMESTAMP) можно записать так: ts ‘2003-01-31 23:19:54.999’.

В цикле шаг за шагом формируется запрос к источнику данных, подставляются функцией SQLBindParameter исходные значения (адреса переменных привязываются к внутренним структурам ODBC-драйвера) и, наконец, выполняется запрос (функция SQLExecute ).

На заключительном этапе вызывается функция SQLFreeHandle . Эта функция выполняет важную работу, в том числе отвязывает переменные от параметров SQL-запроса. Это серьёзный момент, потому что, мы установили связь между стеком, который постоянно изменяется, и параметрами SQL-запроса. В общем случае, устанавливая связь между автоматической переменной (ячейкой памяти), размещаемой на стеке, и параметром SQL-запроса (читай внутренней структурой ODBC-драйвера), программист должен контролировать время жизни такой переменной и своевременно удалять связи. Связь существует до тех пор, пока не будет корректно завершено выполнение запроса функцией SQLFreeHandle. Завершается функция оператором return, который возвращает количество обработанных аргументов или -1 в случае ошибки.

Функция db_scanf

При работе с базами данных часто требуется осуществлять выборку данных. Как вы догадались, настала очередь функции db_scanf . Функция считывает в переменные информацию из источника данных посредством выполнения SQL-оператора SELECT. Функция db_scanf годится для выполнения SQL-операторов, которые возвращают ограниченное число записей или значений.

hDbc – хэндл (дескриптор) соединения с источником данных;
szSQL – строка с SQL-оператором для выполнения запроса;
szFmt – строка формата с управляющими символами-спецификаторами;
argument – адреса переменных, в которые считывается информация.

Число считанных значений или -1 при возникновении ошибки.

Прочитанные данные функция db_scanf записывает в переменные, адреса которых передаются в качестве аргументов. При знакомстве с исходным текстом этой функции вы увидите, что в ней реализована поддержка трёх типов данных – строк, целых чисел и вещественных чисел. Обычно этого набора типов достаточно. Ещё раз напоминаю, что ODBC API умеет при необходимости конвертировать данные в операциях ввода-вывода.

Продемонстрируем на простых примерах использование функции db_scanf. В примере определяется число записей в таблице users. Результат записывается в переменную n.

В другом примере делается поиск клиента с id равным 10:

Обратите внимание, что в функцию передаются не значения, а адреса переменных (оператор &). По указанным адресам функция db_scanf запишет данные, которые будут получены в результате выполнения SQL-оператора. Приведённых примеров должно быть достаточно, чтобы начать использовать функции db_printf и db_scanf для работы с базами данных.

Переходим к рассмотрению исходного текста функции db_scanf:

В комментариях исходный текст функции db_scanf не нуждается, потому что его внутренняя структура очень похожа на структуру предыдущей функции. Здесь точно также в цикле обрабатывается строка спецификаторов, используется такой же принцип извлечения параметров из стека. После выполнения прямого запроса (функция SQLExecDirect ) результаты подготавливаются (функция SQLFetch ) и считываются функцией SQLGetData . Спецификаторы ( %s , %d или %f ) указывают какой использовать тип данных. При необходимости ODBC самостоятельно выполнит необходимые преобразования типов. Переменная cb помогает контролировать процесс ввода и показывает количество полученных байтов.

Функцию db_scanf следует оценить критически и отметить, что область применения этой функции немного ограничена. Она не лучшим образом подходит для чтения больших таблиц. Явный недостаток этой функции – это невозможность корректно обработать SQL-оператор вида «SELECT * FROM users». Вместо целой таблицы функция сможет прочитать и вернуть только единственную последнюю запись. Для таких SQL-операторов можно написать свой код, с использованием ODBC API-функции или существующих классов, например CRecordset. Совместное использование функций db_printf/db_scanf и MFC-класса CDatabase удобно, потому что функции db_printf и db_scanf легко «прикручиваются» к этому классу. Известно, что в классе CDatabase есть переменная-член m_hdbc , которая и обеспечивает связь предложенных в этой статье функций и MFC-классов. Один из вариантов совместной работы:

Вот и всё, о чём хотелось рассказать в статье. Напоследок лишь проинформирую тех читателей, которых волнует переносимость исходного кода. Существует хорошая реализация ODBC для операционных систем, отличных от Windows. На сайте http://www.unixodbc.org можно свободно загрузить такую версию и использовать её в соответствии с GNU-лицензией. Программисты, занимающиеся CGI-скриптами, по достоинству оценят эту библиотеку. Она снимает ещё одну проблему переноса исходных текстов на платформу или с платформы Unix. Вот ещё несколько серверов, где можно найти интересную информацию по теме: http://www.iodbc.org, http://www.microsoft.com/data/odbc/.

Благодарности

Выражаю благодарность Максиму Туйкину — главному редактору журнала “Программист” за помощь в оформлении и подготовке статьи.

Функции для работы с базой данных

db_query — любой SQL запрос

Для запросов DELETE, UPDATE и мульти INSERT , функция возвращает количество затронутых записей.

Для обычного INSERT запроса, функция вернёт ID созданного объекта

id нового покупателя в переменной $user_id, в моём случае:

db_quote — валидация SQL запроса

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

Функция возвращает готовый SQL запрос в виде строки.

function ‘DB’

Функция Asterisk: читает или записывает во внутреннюю БД Asterisk (astdb.sqlite3).

Описание Данная функция может читать или записывать значения в базу данных Asterisk.
В режиме чтения, функция возвращает соответствующее значение из БД в переменную DB_RESULT,
или ничего, если не существует. Чтобы убедиться, что запись существует, используйте функцию function ‘DB_EXISTS’.


Синтаксис

Пример set value

Переадресация с внешним CallerID при помощи диалплана

Назначение

Подстановка CallerID внешнего абонента при переадресации принятого вызова на другой внутренний номер.

Описание

В данном примере, функция DB вычисляет длину CallerID вызывающего абонента и если длина более 3-х знаков,
определяет callerid, как внешний и устанавливает его для передачи в качестве CallerID внутреннего абонента, если вызов, в дальнейшем, будет переадресован.
По завершении вызова, фальшивое CALLTRACE очищается при помощи функции DB_DELETE.
(опция ‘e’, команды Dial, указывает выполнить расширение ‘h’, по завершению вызова.)

В примере: внутренние номера 1ХХ, вызовы из контекста [from-internal]

Интеграция технологий управления данными в DB2

Статья содержит обзор современного состояния СУБД IBM DB2 с точки зрения интеграции классических и новых технологий в едином инструментарии управления данными. Особое внимание уделяется серверу баз данных DB2 Universal Database v.7 — ключевому программному продукту для хранения и обработки данных в решениях от IBM.

Когда в конце 70-х создавалась СУБД System R, ее разработчики из IBM в качестве главной своей цели определили простоту и удобство использования данных. Продумывая архитектуру системы, они одновременно ориентировались на поддержку запросов произвольного вида и на обработку потока многочисленных коротких стандартных изменений в базе данных. Иначе говоря, на те области применения, которые сегодня можно назвать «информационно-аналитические задачи и приложения оперативной обработки данных». Родоначальница современных серверов реляционных баз данных, System R стала источником языка SQL и предшественником современной СУБД DB2.

Рассматривая внутреннюю архитектуру современных серверов баз данных, легко заметить, что в них присутствуют все те же базовые элементы, заложенные когда-то в System R ее создателями. Среди них: механизмы исполнения транзакций, механизмы конкурентного доступа к данным, архитектурное разделение системы на подсистемы разбора непроцедурных запросов и подсистему непосредственного доступа к данным, разнообразные методы оптимизации запросов, индексирования данных и увеличения производительности. В то же время внешняя функциональность и внутренняя реализация современных серверов баз данных, в том числе и DB2, претерпели значительные усовершенствования.

Сегодняшние СУБД характеризуются новыми сферами применения, увеличением объемов данных, разнообразием их типов, многообразием источников и их распределенностью, усложнением самих методов обработки данных. Современные серверы баз данных вобрали в себя массу технологий. Что же стоит за подобным разнообразием: органичное ли это здание на фундаменте единой архитектуры или механическая упаковка компонентов?

Интеграция новых функций и компонентов может принимать форму различных архитектур с разной ролью, которая отводится серверу баз данных. Многозвенная архитектура серверов приложений предлагает пользователю свои специальные интерфейсы и оставляет СУБД роль системы ресурсов заднего плана. В других решениях сама СУБД берет на себя роль шлюза доступа к разнообразным ресурсам и предоставляет пользователям язык запросов SQL или его расширения, представляя внешние ресурсы, как свои собственные. Наконец, существует подход, предполагающий действительное встраивание новых функций в сервер баз данных.

Универсальный сервер баз данных

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

Объектно-реляционная архитектура DB2

Одна из основных особенностей DB2 Universal Database — расширяемость ее типов. Под расширяемостью в данном случае подразумевается способность хранить и оперировать не только традиционными реляционными таблицами с символами и числами, но и мультимедийными данными, комплексными объектами (документы, изображения, аудио, видео, пространственные данные, временные ряды и т.д.). Кроме того, можно манипулировать и специфическими для конкретной отрасли объектами. Основа для реализации такой функциональности — так называемая объектно-реляционная архитектура DB2, позволяющая добавлять собственные типы данных и деловые функции. IBM реализовала такую возможность еще в 1995 году в DB2 Common Server v.2.

Опыт эксплуатации реляционных баз данных привел в свое время к появлению поколения так называемых расширенных реляционных баз данных. К этой категории относятся системы, поддерживающие ряд дополнительных возможностей, выходящих за рамки реляционной алгебры: триггеры, хранимые процедуры, контроль целостности и т.д. Целью исследовательского проекта IBM Starburst в конце 80-х годов было создание расширяемой системы, где под расширяемостью понималась органическая возможность поддерживать новые методы хранения данных, добавлять новые методы доступа, предоставлять пользователям возможность определять свои операции над данными и встраивать новые методы оптимизации. Практическим результатом проекта Starburst и последующего проекта Starwings было появление в 1993 году СУБД DB2 Common Server для платформ Wintel и Unix. В DB2 Universal Database поддерживается целый ряд ключевых объектно-реляционных возможностей (все они соответствуют стандарту SQL3 и поэтому реализуют открытый, а не внутрикорпоративный подход).

Расширяемая система типов предполагает поддержку определяемых пользователями типов данных (UDT — user-defined type), включая структурированные типы с наследованием, с возможностями использовать строковые типы, идентификаторы объектов и ссылки. Определяемые пользователем типы данных, как и встроенные, могут использоваться в качестве столбцов таблиц или параметров функций.

Определяемые пользователем функции (UDF — user-defined function) позволяют включать в запросы вычислительные и поисковые методы. DB2 предлагает для реализации UDF на выбор языки программирования Cи, Java или механизм OLE. Кроме того, можно назначить исполнение UDF внутри или вне серверных процессов менеджера базы данных. Благодаря UDF можно создать наборы функций для работы с пользовательскими типами, определив их семантику. SQL-оптимизатор учитывает семантику и стоимость исполнения пользовательских функций, что позволяет работать с этими функциями абсолютно аналогично встроенным функциям. Механизм пользовательских функций DB2 достаточно мощный, особенно учитывая возможность исполнять функцию внутри серверного процесса, что позволяет встраивать в сервер баз данных так называемые тесносвязанные компоненты. По сравнению с компонентами, встраиваемыми при помощи стандартного SQL-доступа, тесносвязанные компоненты обеспечивают более высокую производительность.

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

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

С помощью механизма деловых правил в базе данных можно определить комплексные правила для поддержки целостности данных. Ключевые возможности деловых правил: установка значений по умолчанию, проверка ограничений и ссылочной целостности и активный механизм триггеров. Эти правила дополнительно расширяют объектно-ориентированные возможности; с их помощью можно расширить функции, существующие только в виде неизменяемого кода.

Расширения DB2 Extenders

На основе объектно-реляционной инфраструктуры DB2 построены специализированные расширения DB2 Extenders. Каждое расширение представляет собой набор предопределенных пользовательских типов UDT, пользовательских функций UDF, триггеров, ограничений и хранимых процедур, решающих задачи определенной прикладной области. С помощью стандартных расширений пользователи могут хранить в таблицах DB2 текстовые документы, изображения, видео- и аудиоролики. Собственно данные могут храниться как внутри таблицы, так и вне нее во внешних файлах. Кроме того, новые типы данных имеют атрибуты, описывающие различные аспекты их внутренней структуры, такие как, например, «язык» и «формат» для текстовых данных. Каждое расширение включает необходимые функции для создания, обновления, удаления и поиска данных с новыми типами, определенными в расширении. Пользователи могут включать эти новые типы данных и функции в операторы SQL, обеспечивая интегрированный поиск по содержимому для всех типов. Серверы DB2 стандартно комплектуются расширениями для работы с текстом, изображениями, аудио и видео информацией, к которым в седьмой версии добавляются XML, Spatial, Intelligent Miner Scoring и Net.Search.

Текстовое расширение Text Extender позволяет использовать в SQL-запросах средства полнотекстового поиска. DB2 может хранить сами текстовые документы объемом до 2 Гбайт, а также ссылки на внешние файлы. Text Extender предоставляет метод поиска в таких документах. Технология TextExtender позволяет определить для текстовых столбцов баз данных различные типы индексов, в том числе для поиска по точному совпадению, для лингвистического поиска, для нечеткого поиска при помощи так называемых индексов Ngram. Среди словарей, стандартно входящих в Text Extender, есть словарь и для русского языка.

Использование XML становится все более важным для организации обмена данными между различными приложениями. Хотя текстовое расширение Text Extender поддерживает обработку XML-документов, целый ряд дополнительных функций предлагается новым расширением XML Extender, стандартно входящим теперь в состав сервера DB2. Это расширение позволяет хранить, искать и выбирать в базе данных XML-документы, которые могут быть сохранены в DB2, в одном столбце специального XML-типа или как коллекция элементов, распределенных между несколькими столбцами и таблицами (рис. 1). В XML Extender входит графический административный компонент для визуального определения соответствия между элементами XML-документа, таблицами и столбцами DB2. Специальные хранимые процедуры и триггеры XML Extender используются для преобразования XML-документов в коллекции данных в DB2 и, наоборот, при формировании таких документов. DB2 UDB также поддерживает специальную индексацию и функции поиска в XML-документах.

Для управления геоинформационными данными обычно используются специализированные системы, которые ограничены в возможностях интеграции геоинформационных данных с традиционными. В то же время существует значительное число прикладных задач, требующих подобной интеграции. Базы данных многих производителей могут поддерживать хранение геоинформационных данных в виде больших двоичных объектов (LOB), что позволяет использовать СУБД для хранения, но не позволяет эффективно применять поисковые средства СУБД. Кроме того, геоинформационные системы могут хранить часть своих данных стандартных типов в таблицах реляционной базы данных. Подход, который совместно с компанией ESRI реализован в DB2 Spatial Extender, предполагает, что геоинформационные данные становятся новыми типами в объектно-реляционной базе. Подход основан на использовании поддерживаемых DB2 абстрактных типов с подтипами и наследованием вместе с определяемыми пользователями функциями. Spatial Extender использует предопределенные геоинформационные типы данных, операции с этими данными, специальные механизмы индексирования и оптимизации запросов. При запросах к геоинформационным данным можно использовать все средства SQL, а также ряд специальных функций, реализующих операции преобразования, сравнения, измерения. Кроме объектно-реляционного подхода, Spatial Extender поддерживает хранение данных в соответствии со спецификацией Open GIS Consortium в текстовом и двоичном видах. DB2 Spatial Exender позволяет пополнять базу геоинформационных данных путем выборки из описательной информации, генерации новых сведений с помощью операций над уже имеющимися геоинформационными данными, импорта из внешних источников в различных форматах.

Параллельная база данных

Сегодняшняя индустриальная СУБД должна уметь разделять запрос на отдельные подзадачи и параллельно исполнять их на нескольких процессорах. Архитектура DB2 UDB поддерживает параллельное исполнение большинства операций, включая запросы, вставку, обновление и удаление данных, создание индексов, загрузку и экспорт данных. DB2 UDB была специально разработана для работы на параллельных системах архитектур MPP (массовый параллелизм) и SMP (симметричная многопроцессорность).

Концепцию параллельной базы данных реализует версия DB2 UDB Enterprise Extended Edition (EEE). В отличие от стандартной версии, EEE обладает возможностью распределения данных по разделам (узлам). В каждом разделе базы данных один менеджер базы является ответственным за свою порцию данных. Факт, что данные реально распределены между разделами, остается скрытым для пользователей и приложений. В каждой распределенной базе данных есть один раздел, на котором была выполнена команда на создание базы; этот раздел ведет системный каталог для всей базы и называется каталоговым узлом (catalog node). Взаимодействие пользователя с базой может происходить через любой раздел, к которому он подсоединен; этот раздел выступает для пользователя координирующим (coordinator node).

DB2 UDB EEE распараллеливает исполнение большей части своих команд; операторы SELECT, INSERT, UPDATE и DELETE исполняются параллельно на разделах базы данных. Все активности менеджера базы данных: сканирование данных, индексирование, соединения, создание и реорганизация данных и исполнение утилит — могут выполняться параллельно на всех разделах. В частности, загрузку очень больших объемов данных можно выполнить на параллельной базе намного быстрее, чем на обычной. При росте числа пользователей или объема данных, параллельная СУБД может быть расширена путем добавления к системе новых серверов и определения на них новых разделов. EEE предоставляет средства для автоматизированного перераспределения данных на новый узел и балансировки нагрузки.

Для распределения данных по разделам EEE использует технологию хеширования (hashing). Если необходимо распределить между несколькими узлами обработку большой таблицы, для этого выделяется группа разделов и определяется ключ распределения. Внутренне DB2 создает карту распределения, играющую основную роль при хешировании. При загрузке или вставке новых данных СУБД определяет, в какой раздел попадут записи в соответствии со значениями ключевых полей новых данных и картой распределения.

При исполнении запроса оптимизатор DB2 UDB решает, выполнять ли запрос параллельно и какие стадии исполнения будут распараллелены. Решение основывается на возможностях аппаратного обеспечения (числе процессоров, узлов, дисков), параметрах конфигурации, информации о распределении данных и сложности запроса. Внутрираздельный параллелизм (рис. 2) означает, что исполнение будет распределено между ресурсами одного экземпляра менеджера баз данных на разделе. Межраздельный параллелизм предполагает участие нескольких разделов, например, когда исполнение запроса требует данных из таблиц, расположенных на нескольких разделах. Тогда координирующий узел будет рассылать запрос на выполнение операций по разделам (function shiping). Менеджер данных на каждом разделе будет сканировать, сортировать, отбирать свои данные и, наконец, отсылать отобранные данные обратно координирующему узлу. На координирующем узле после окончательной обработки данные будут отправлены запросившему их приложению.

Федеративная база данных

Достаточно часто случается, что необходимая информация хранится в нескольких совершенно различных базах или часть информации находится в файловой системе, либо вообще недоступна для непосредственного доступа с сервера баз данных. Целый ряд технологий совместно позволяют реализовать на СУБД DB2 концепцию федеративной базы данных, работающую с разнообразными распределенными источниками данных многих типов. Эта концепция предусматривает и логическую интеграцию данных, когда пользователь имеет единый доступ ко всей совокупности данных, в том числе и внешних, и физическую интеграцию, предполагающую сбор и перемещение данных на платформу исполнения.

Общий подход к интеграции разнородных систем и приложений, предлагаемый технологиями IBM, предполагает использование промежуточного программного обеспечения, которое берет на себя разрешение проблем взаимодействия приложений. Среди разнообразных архитектур промежуточного слоя можно назвать MQSeries — систему управления очередями сообщений, предоставляющую механизмы гарантированной кроссплатформенной доставки данных и интеграции разнородных приложений. Промежуточное хранение передаваемых сообщений в очередях позволяет реализовать асинхронную промежуточную обработку. DB2 UDB обладает возможностями участия в распределенной транзакции между базой данных и очередями сообщений MQSeries, что позволяет координировать состояние внутренних ресурсов базы с данными, поступающими или отправляемыми в виде сообщений во внешние системы. Последний выпуск DB2 UDB v7.2 предоставляет новые расширения для пользователей DB2, позволяющие использовать в SQL-операторах пользовательские функции посылки и приема сообщений, функции групповой обработки сообщений, публикации сообщений по определенной теме и доступ к содержимому очередей сообщений с помощью специальных представлений.

Для доступа к гетерогенным базам данных разработана технология DB2 DataJoiner, обеспечивающая использование единого диалекта SQL при работе с СУБД разных производителей: Oracle, Informix, Microsoft SQL Server, Sybase и источниками ODBC. Эта технология, реализованная в виде компонента DB2 Relational Connect, обладает возможностями исполнения распределенного запроса, включающего таблицы из нескольких источников. Кроме того, DB2 UDB может выступать как OLE DB-источник данных, а также через свои скалярные и табличные функции и хранимые процедуры, предоставляя доступ к другим OLE DB-источникам. С помощью этих функций внешние данные из OLE-серверов могут использоваться в SQL-запросах к DB2.


Несмотря на широкое распространение серверов реляционных баз данных, большая часть данных по-прежнему хранится в виде файлов. Хотя эти данные могут быть перенесены в СУБД в форме больших двоичных объектов, часто есть много причин для их сохранения в виде файлов. Поскольку файловая система не обладает многими возможностями СУБД по исполнению транзакций, контролю целостности, восстановлению, для DB2 UDB была разработана технология DataLinks. Ее задача — предоставить приложениям, использующим работу с файловой системой доступ к поисковым возможностям СУБД и внешним данным для SQL-ориентированных приложений. DataLinks предоставляет несколько уровней контроля для внешних данных, включая контроль доступа, ссылочную целостность, координацию при сохранении и восстановлении данных и целостность транзакций.

Когда изначально DB2 появилась на мэйнфреймах в средах MVS, VM, VSE она была ориентирована на централизованные приложения для хостов. При этом поддержка обращений удаленных пользователей возлагалась на промежуточное ПО наподобие менеджера транзакций CICS. Впоследствии, в условиях популяризации архитектуры клиент-сервер, потребовалась дополнительная поддержка прямого удаленного доступа с ПК и Unix-станций к базам данных на мэйнфреймах и системах типа AS/400. Для этого была предложена открытая спецификация DRDA (Distributed Relational Database Architecture), описывающая протоколы взаимодействия удаленного клиента с базами данных. Реализация DRDA должна была позволить продуктам разных производителей баз данных прозрачно взаимодействовать, в частности, образуя единую распределенную базу. Подход DRDA позволяет решить многочисленные проблемы кросс-платформного взаимодействия, в частности, конвертацию данных ASCII и EBCDIC, различия в диалектах SQL, командах, типах данных и строении каталогов. Сегодня архитектуру DRDA поддерживают все серверы семейства DB2, а многие другие производители реализовали так называемые DRDA-реквесторы, которые позволяют прикладным программам-клиентам обращаться к базам DB2 на хостах, в частности, к DB2/390 и DB2/400. Типичный пример такого DRDA-реквестора производства IBM — DB2 Connect, работающий в средах OS/2, Linux, Windows NT/2000, IBM AIX, Sun Solaris, и который может служить многопользовательским шлюзом к DB2 на хостах для множества пользователей локальной сети, или, в случае однопользовательского варианта, работать на компьютере клиента.

Вывод в Internet корпоративного бизнеса приводит к формированию новой концепции базы данных. Современная СУБД должна предоставлять пользователям Internet доступ к существующим базам данных, а с другой стороны база данных может быть специально предназначена для обслуживания Internet-приложений. В составе DB2 UDB имеются два компонента для доступа через Сеть: Net.Data и WebSphere. Кроме того, поддерживаются интерфейсы и средства разработки для языка Java, а ряд расширений DB2 Extenders ориентированы на использование в Сети.

Net.Data — компонент для Web-сервера, поддерживающий взаимодействие между ним и СУБД DB2 (рис. 3). В основе программирования для Net.Data лежит создание макросов, которые получают через HTML-формы параметры для запроса от Web-сервера, динамически генерируют и передают запросы к DB2 UDB. Когда Net.Data получает результаты запросов, происходит формирование ответа в виде HTML-страницы, возвращаемой пользователю. Кроме очевидного преимущества ускорения процесса разработки приложений для Web-сервера, Net.Data может поддерживать пул постоянных соединений с DB2 и тем самым снизить затраты на переустановку соединений.

Потребность в использовании Java для Internet-приложений привела к целому ряду дополнений, интерфейсов и компонентов для серверов баз данных. Кроме ставшего обычным интерфейса JDBC, в DB2 UDB поддерживается язык SQLJ (т.е. встроенный в Java язык SQL-запросов), что позволяет использовать «настоящий» статический SQL, когда результаты предкомпиляции SQL-запросов хранятся в сервере баз данных, что обеспечивает более высокую производительность, чем при динамическом исполнении. DB2 UDB дает возможность также писать хранимые процедуры и пользовательские функции на Java.

Исполнение приложений на Internet-серверах увеличило роль серверов приложений. IBM WebSphere — группа инструментальных средств разработки и исполнения приложений на Web-сайтах. В основе лежит сервер приложений WebSphere Application Server, поддерживающий технологии Java Server Pages, сервлетов, Enterprise JavaBeans и CORBA и поставляемый вместе с IBM HTTP Server, созданным на базе Apache.

От хранилищ к раскопкам данных

На решение задачи детального анализа накопленных данных с последующим формированием решений на его основе нацелено целое направление современной программной индустрии, так называемые средства «бизнес-интеллекта» (BI — business intelligence).

Поддержка очень больших баз данных

Анализ данных требует использования консолидированных наборов из многочисленных оперативных источников, объединенных в хранилище, а поскольку хранилища призваны хранить большие и очень большие объемы данных, то для СУБД основными становятся требования высокой производительности и масштабирования. Кроме того, опыт применения хранилищ указывает на тенденцию использования очень сложных запросов для построения отчетов и анализа. В основе DB2 UDB лежат несколько ключевых технологий по поддержке хранилищ больших объемов: расширяемый оптимизатор запросов, технология распараллеливания операций, специальные функции для поддержки онлайновой аналитической обработки, а также инструментальные средства администрирования очень больших баз.

Существенная особенность DB2 UDB — создание и хранение промежуточных агрегаций. Администратор базы может предопределить наборы соединений и агрегаций в форме так называемых таблиц автоматических суммирований (AST — automatic summary table). Использование таблицы суммирований позволяет быстрее, часто в несколько раз, исполнять запросы. При этом для пользователя не требуется вносить изменения в форму запроса — оптимизатор знает и учитывает существование таблиц суммирований. Поддержание таблиц суммирований в актуальном состоянии может выполняться при использовании различных сценариев с немедленными или отложенными обновлениями.

Построение хранилища данных

В свое время в IBM был разработан специальный пакет для построения и администрирования хранилищ данных — VisualWarehouse, который в седьмой версии интегрирован в DB2 Universal Database. Сейчас в составе всех серверных продуктов семейства DB2 UDB включается Data Warehouse Center — облегченная версия DataWarehouse Manager, с помощью этого менеджера администратор имеет возможность шаг за шагом, с единой графической консоли выполнять операции с хранилищем.

DataWarehouse Manager может получать данные из DB2, других баз и файлов различных форматов (рис. 4). DataWarehouse Manager обладает рядом технологий, которые позволяют эффективно организовать управление хранилищем, в частности: архитектурой на базе распределенных агентов, использованием технологических и деловых метаданных, возможностями вызова написанные пользователем или третьими фирмами компонентов для дополнительной обработки данных. Архитектура DataWarehouse основана на использовании агентов, работающих на различных платформах и управляемых из единого центра DataWarehouse Manager. Агенты занимаются преобразованием и передачей данных. В отличие от альтернативных продуктов, DataWarehouse Manager не требует пересылки данных через центральный промежуточный сервер, что может быть причиной снижения производительности.

DataWarehouse Manager содержит административные компоненты, отвечающие за безопасность и авторизацию, процедуры сохранения и восстановления, мониторинг и настройку, планирование и выполнение операций, представляя полное решение для управления хранилищем данных. Интеграция DataWarehouse Center и компонента для OLAP-анализа DB2 OLAP Starter Kit в одном пакете позволяет через DataWarehouse Center загружать данные в многомерные базы и автоматически выполнять при загрузке предварительные вычисления и агрегации данных. Полнофункциональный DB2 Warehouse Manager по сравнению с DataWarehouse Center включает ряд дополнений, в том числе дополнительных агентов для ряда платформ, дополнительные программы-«трансформеры» — для очистки и закачки данных, и, наконец — Information Catalog, предназначенный для публикации информации о данных, содержащихся в хранилище.

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

DataWarehouse Manager поддерживает предложенную ассоциацией Metadata Coalition спецификацию Metadata Interchange Specification (MDIS) для обмена метаданными с другими программными средствами. Например, компания ETI предлагает набор инструментальных средств EXTRACT Tool Suite для создания приложений, занимающихся выборкой и преобразованием данных. IBM совместно с ETI интегрирует EXTRACT с DataWarehouse Manager путем обмена метаданными, исполнения программ EXTRACT под управлением DataWarehouse Manager и использования библиотек ETI для доступа к дополнительным источникам данных, таким как SAP R/3.

Система DB2 Query Patroller позволяет администратору управлять средой исполнения запросов. Query Patroller действует как агент в интересах конечного пользователя. Когда конечный пользователь через прикладную программу, например, генератор отчетов, отправляет запрос на исполнение, запрос попадает в среду Query Patroller, где происходит анализ стоимости исполнения запроса по ресурсам. Затем устанавливаются приоритеты и составляется расписание исполнения запросов наиболее эффективным образом (запрос может исполняться немедленно или сохраняется для последующего исполнения). Результаты могут храниться в виде промежуточной выборки для последующего возвращения пользователю.

OLAP-анализ и поиск закономерностей

Основным продуктом IBM в категории средств оперативной аналитической обработки является DB2 OLAP Server, в котором реализована трехзвенная архитектура клиент-сервер (рис. 5). На среднем уровне располагается собственно OLAP-сервер, разработанный совместно с Hyperion Solutions на базе продукта Essbase, и отвечающий за оперативную аналитическую обработку многомерных данных. В качестве менеджера хранения могут выступать реляционная СУБД DB2 или специализированная многомерная MD Essbase.

В качестве клиентских компонентов и API-интерфейса DB2 OLAP Server поддерживает те же модули, что и Hyperion Essbase, что расширяет для него базу инструментальных средств и готовых пакетов.

Одним из направлений развития СУБД является интеграция функций OLAP в ядро реляционной СУБД. При этом к данным могут применяться и средства OLAP, и SQL-запросы. DB2 UDB поддерживает ряд возможностей для функционирования OLAP-расширения, в том числе динамические битовые индексы, данные в звездообразной схеме, специальные классы cube и rollup, таблицы автоматических суммирований и агрегаций. Работая с DB2, можно группировать и агрегировать различными способами столбцы в результирующей выборке данных, используя в запросе классы ROLLUP и CUBE.

Направление раскопки данных (data mining) объединяет целый класс технологий для сложного анализа данных и поиска в них скрытых закономерностей. В системе IBM Intelligent Miner предусмотрено несколько технологий сложного анализа и поиска данных, в том числе статистические методы, кластеризация баз данных, генерация ассоциативных правил, выявление временных последовательностей, построение классифицирующих моделей на базе нейронных сетей и др. Многие алгоритмы Intelligent Miner обладают способностями для автоматической генерации гипотез о данных и получении качественных оценок. Средства визуализации позволяют представлять полученные результаты конечным пользователям, а система открытых API-интерфейсов позволяет интегрировать Intelligent Miner с другими средствами поддержки решений и создавать прикладные системы, использующие сложные алгоритмы поиска. Значительным шагом является интеграция алгоритмов раскопки данных непосредственно в сервер баз данных. Расширение DB2 Intelligent Miner Scoring позволяет стандартному серверу DB2 выполнять сложный анализ данных. В качестве стандартного сценария использования Intelligent Miner Scoring, предусматривается, что описание классифицирующей модели или процедуры кластеризации может быть сделано в IBM Intelligent Miner или в аналитическом пакете от третьей фирмы, а модели и поисковые процедуры задаются в виде языка PMML (Predictive Modeling Markup Language) на базе XML.

Особенности архитектуры DB2

Интеллектуальный оптимизатор запросов

Оптимизатор располагает информацией о среде и физическом распределении данных и должен принимать решение о способе исполнения запроса. В свое время IBM в рамках проекта Starburst сделала значительные инвестиции в теоретическую и практическую разработку стоимостного оптимизатора запросов к базам данных. Результатом стал расширяемый оптимизатор для DB2 UDB. Возможности расширять семантику оптимизатора позволяют дополнять его новыми функциями SQL, различными формами распараллеливания запросов или новыми индексными методами доступа к данным.

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

Оптимизатор выполняет анализ запросов с точки зрения оценки их стоимости, сравнивая различные методы доступа к данным и выбирая наиболее эффективный. Оптимизатор использует информацию о том, как базовые таблицы и таблицы промежуточных результатов распределены по системе, оценивает различные параллельные методы соединения таблиц и выбирает наилучшую стратегию исполнения. В результате оптимизатор определяет наилучший план доступа, который может быть визуализирован при помощи такого инструмента, как DB2 Explain.

Хранимые процедуры

Использование хранимых процедур повышает общую производительность СУБД при сокращении объема пересылаемых по сети данных и обеспечивает для пользователей среду исполнения программируемой логики на сервере. Хранимые процедуры для DB2 UDB могут быть написаны на многих языках программирования, в том числе на Java, процедурном варианте SQL, Кобол и Cи.

Графический инструментарий DB2 Stored Procedure Builder генерирует код хранимых процедур на языках Java и SQL и поддерживает полный цикл разработки хранимых процедур, включая создание, модификацию, исполнение и удаленное копирование хранимых процедур. В своих хранимых процедурах DB2 UDB поддерживает статический и динамический SQL, а начиная с седьмой версии для разработки хранимых процедур поддерживается SQL Procedure Language (использование языков программирования в хранимых процедурах обычно усложняет жизнь администраторам, более знакомым с самим SQL). SQL Procedure Language базируется на стандарте ANSI/ISO Persistent Stored Modules и обладает рядом возможностей, включая процедурные расширения к SQL, блочные структуры, обработку исключений и возможность хранить исходный код в базе данных.

Средства администрирования

Главным инструментом администрирования является DB2 Control Center, с помощью которого можно создавать, удалять, модифицировать базы данных, табличные пространства, таблицы, индексы и триггеры и получать информацию об их состоянии и параметрах. Кроме создания и администрирования объектов, Control Center интегрирован в единую среду со SmartGuides, помогающую начинающим администраторам шаг за шагом выполнять задачи сохранения и восстановления базы данных, создания базы, таблиц, табличных пространств и индексов, настройки производительности. Ряд компонентов (Performance Monitor, Event Monitor и Event Analyzer) позволяют выполнять тонкую настройку и мониторинг работы DB2, используются для мониторинга производительности и анализа активности различных объектов базы данных (таблицы, табличное пространство и др.). Visual Explain позволяет исследовать план исполнения запроса — анализировать, каким путем DB2 UDB обращается к данным и обрабатывает их.

Заключение

На сегодняшний день DB2 является одной из ведущих СУБД, позволяющей решать широкий спектр деловых задач. Основная же задача СУБД остается по сути прежней — обеспечение простого и удобного доступа к разнообразным данным. Интегрируя новые технологии с сервером баз данных, DB2 UDB реализует различные архитектурные решения. Происходит и непрерывное развитие функциональности сервера баз данных DB2 путем встраивания новых расширений.

Подход IBM к интеграции компонентов различает слабую и тесную связь с ядром сервера баз данных. Доступ к данным с помощью стандартных средств SQL (клиентский доступ или серверный доступ в форме хранимых процедур) является более надежным и менее производительным, нежели тесная серверная интеграция, например, реализуемая в виде так называемых «неогороженных от серверного процесса» пользовательских функций (non-fenced UDF), подхода более мощного по своим возможностям.

Важнейшим моментом является полнота и актуальность используемых данных; соответственно важно и решение задач интеграции данных. На создание единого логического представления для всего многообразия данных направлена концепция федеративной базы данных с такими компонентами СУБД, как DB2 Relational Connect (DataJoiner), DataLinks, табличные функции.

Николай Игнатович (ignatovich@ru.ibm.com) — эксперт компании IBM East Europe/Asia (Москва).

Поделитесь материалом с коллегами и друзьями


Функции для работы с базой данных

db_query — любой SQL запрос

Для запросов DELETE, UPDATE и мульти INSERT , функция возвращает количество затронутых записей.

Для обычного INSERT запроса, функция вернёт ID созданного объекта

id нового покупателя в переменной $user_id, в моём случае:

db_quote — валидация SQL запроса

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

Функция возвращает готовый SQL запрос в виде строки.

Использование mysql в функциях

Собственно вопрос, как сделать правильнее подключение к БД, чтобы не дублировать подключение к БД в каждой функции.

Потому что так получается, что в функциях как будто база данных не подключена.
Вот не хочется дублировать в каждой функции вот такой вот код:

переменная $db в фуункциях недоступна. и в каждой функции приходится писать такой код. всё это находится в оном файле.

Может как решение щас придумал передавать функции переменную $db ?? помогите решить этот вопрос.

25.11.2012, 02:18

Использование PDO и MySQL
Есть функция, никак не могу понять почему не работает: function developer_get_profile ($login).

Использование псевдонимов таблиц в запросе к БД Mysql
При запросе к БД MYSQL выдает сообщение: #1305 — FUNCTION table1.Code_pgroup does not exist .

Некорректное использование переменной PHP в запросе к базе данных MySQL
Я ещё совсем зелёный в веб-программировании, на днях решил сделать сайт тестирования знаний по ПДД.

Работа PDO в функциях
Люди, всем привет. проблема в следуюшем: когда делаю PDO запрос — работает нормально, но как только.

Использование стракта в функциях
Как сделать, чтобы можно было использовать стракт в функциях? Например, чтобы работал такой код.

db2_execute — Executes a prepared SQL statement

(PECL ibm_db2 >= 1.0.0)

db2_execute — Executes a prepared SQL statement

Описание

db2_execute() executes an SQL statement that was prepared by db2_prepare() .

If the SQL statement returns a result set, for example, a SELECT statement or a CALL to a stored procedure that returns one or more result sets, you can retrieve a row as an array from the stmt resource using db2_fetch_assoc() , db2_fetch_both() , or db2_fetch_array() . Alternatively, you can use db2_fetch_row() to move the result set pointer to the next row and fetch a column at a time from that row with db2_result() .

Refer to db2_prepare() for a brief discussion of the advantages of using db2_prepare() and db2_execute() rather than db2_exec() .

Список параметров

A prepared statement returned from db2_prepare() .

An array of input parameters matching any parameter markers contained in the prepared statement.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Preparing and executing an SQL statement with parameter markers

The following example prepares an INSERT statement that accepts four parameter markers, then iterates over an array of arrays containing the input values to be passed to db2_execute() .

= array( 0 , ‘cat’ , ‘Pook’ , 3.2 );

$insert = ‘INSERT INTO animals (id, breed, name, weight)
VALUES (?, ?, ?, ?)’ ;

$stmt = db2_prepare ( $conn , $insert );
if ( $stmt ) <
$result = db2_execute ( $stmt , $pet );
if ( $result ) <
print «Successfully added new pet.» ;
>
>
?>

Результат выполнения данного примера:

Пример #2 Calling a stored procedure with an OUT parameter

The following example prepares a CALL statement that accepts one parameter marker representing an OUT parameter, binds the PHP variable $my_pets to the parameter using db2_bind_param() , then issues db2_execute() to execute the CALL statement. After the CALL to the stored procedure has been made, the value of $num_pets changes to reflect the value returned by the stored procedure for that OUT parameter.

Результат выполнения данного примера:

Пример #3 Returning XML data as an SQL ResultSet

The following example demonstrates how to work with documents stored in a XML column using the SAMPLE database. Using some pretty simple SQL/XML, this example returns some of the nodes in a XML document in an SQL ResultSet format that most users are familiar with.

= db2_connect ( «SAMPLE» , «db2inst1» , «ibmdb2» );

$query = ‘SELECT * FROM XMLTABLE(
XMLNAMESPACES (DEFAULT \’http://posample.org\’),
\’db2-fn:xmlcolumn(«CUSTOMER.INFO»)/customerinfo\’
COLUMNS
«CID» VARCHAR (50) PATH \’@Cid\’,
«NAME» VARCHAR (50) PATH \’name\’,
«PHONE» VARCHAR (50) PATH \’phone [ @type = «work»]\’
) AS T
WHERE NAME = ?
‘ ;

$stmt = db2_prepare ( $conn , $query );

$name = ‘Kathy Smith’ ;

if ( $stmt ) <
db2_bind_param ( $stmt , 1 , «name» , DB2_PARAM_IN );
db2_execute ( $stmt );

while( $row = db2_fetch_object ( $stmt )) <
printf ( » $row -> CID $row -> NAME $row -> PHONE \n» );
>
>
db2_close ( $conn );

Результат выполнения данного примера:

Пример #4 Performing a «JOIN» with XML data

The following example works with documents stored in 2 different XML columns in the SAMPLE database. It creates 2 temporary tables from the XML documents from 2 different columns and returns an SQL ResultSet with information regarding shipping status for the customer.

= db2_connect ( «SAMPLE» , «db2inst1» , «ibmdb2» );

$query = ‘
SELECT A.CID, A.NAME, A.PHONE, C.PONUM, C.STATUS
FROM
XMLTABLE(
XMLNAMESPACES (DEFAULT \’http://posample.org\’),
\’db2-fn:xmlcolumn(«CUSTOMER.INFO»)/customerinfo\’
COLUMNS
«CID» BIGINT PATH \’@Cid\’,
«NAME» VARCHAR (50) PATH \’name\’,
«PHONE» VARCHAR (50) PATH \’phone [ @type = «work»]\’
) as A,
PURCHASEORDER AS B,
XMLTABLE (
XMLNAMESPACES (DEFAULT \’http://posample.org\’),
\’db2-fn:xmlcolumn(«PURCHASEORDER.PORDER»)/PurchaseOrder\’
COLUMNS
«PONUM» BIGINT PATH \’@PoNum\’,
«STATUS» VARCHAR (50) PATH \’@Status\’
) as C
WHERE A.C > B.PO > A.NAME = ?
‘ ;

$stmt = db2_prepare ( $conn , $query );

$name = ‘Kathy Smith’ ;

if ( $stmt ) <
db2_bind_param ( $stmt , 1 , «name» , DB2_PARAM_IN );
db2_execute ( $stmt );

while( $row = db2_fetch_object ( $stmt )) <
printf ( » $row -> CID $row -> NAME $row -> PHONE $row -> PONUM $row -> STATUS \n» );
>
>

Результат выполнения данного примера:

Пример #5 Returning SQL data as part of a larger XML document

The following example works with a portion of the PRODUCT.DESCRIPTION documents in the SAMPLE database. It creates a XML document containing product description (XML data) and pricing info (SQL data).

= db2_connect ( «SAMPLE» , «db2inst1» , «ibmdb2» );

$query = ‘
SELECT
XMLSERIALIZE(
XMLQUERY(\’
declare boundary-space strip;
declare default element namespace «http://posample.org»;

<
for $prod in $doc/product
where $prod/description/price <$start>,
<$end>,

\’ passing by ref DESCRIPTION AS «doc»,
PROMOSTART as «start»,
PROMOEND as «end»,
PROMOPRICE as «promo»
RETURNING SEQUENCE)
AS CLOB (32000))
AS NEW_PRODUCT_INFO
FROM PRODUCT
WHERE P >’ ;

$stmt = db2_prepare ( $conn , $query );

if ( $stmt ) <
db2_bind_param ( $stmt , 1 , «pid» , DB2_PARAM_IN );
db2_execute ( $stmt );

while( $row = db2_fetch_array ( $stmt )) <
printf ( » $row [ 0 ] \n» );
>
>

Илон Маск рекомендует:  Asp события приложения
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL