Oracle разработка что это
В распоряжении разработчиков имеется много IDE и инструментов, позволяющих представлять данные и создавать более сложные приложения для работы с базой данных Oracle Database. В данной статье мы опишем основные инструменты и среды разработки (IDE), которые Oracle предлагает для разработки приложений: Oracle JDeveloper, Oracle SQL Developer и Oracle Developer Suite. Комплект Developer Suite, который иногда называют Oracle Internet Developer Suite, включает программы Oracle Forms Developer, Oracle Reports Developer, Oracle Designer, Oracle Discoverer Administrative Edition и Oracle Portal.
Кто такой разработчик Oracle и что он делает
когда говорят о разработчике, который работает в компании Oracle;
когда говорят о разработчике, которы й работает с продуктами компании Oracle.
Что делает разработчик Oracle, который работает с продуктами компании
разрабатывает и поддерживает базы данных;
пишет SQL-запросы;
ищет и устраняет уязвимости в базах данных;
обслуживает сервер ы ;
собира ет и обрабатыва ет необходимую информацию из баз данных;
улучша ет систему хранения информации;
и др.
Stand by копия
Вышеупомянутые архивные файлы можно отправлять по сети и на лету применять к копии БД. Таким образом у вас всегда под рукой будет горячая копия с минимальным запаздыванием данных. В некоторых приложениях, где нет необходимости показывать данные с точностью до последнего момента, можно настроить такую БД только на чтение и разгрузить основной экземпляр БД, причем таких экземпляров на чтение может быть несколько.
Еще пара заметок для программиста
Если у вас колонка имеет тип VARCHAR2(100), то попытка туда запихнуть строку longString.substring(0, 100) не факт, что увенчается успехом, так как ограничение 100 в определении колонки по умолчанию относится к количеству байтов, а не символов, поэтому при наличии двухбайтовых символов вы можете попасть впросак. На самом деле данное поведение можно немного сконфигурировать, подробнее можно почитать тут. Хорошо если вы еще не пытаетесь выполнить вставку в бесконечном цикле, по принципу делать пока не получиться, ведь это «получиться» в данном случае никогда не наступит.
Ну и общая рекомендация для всех типов БД: никогда не делайте update всех колонок в таблице при изменении одного поля объекта. Кажется весьма очевидным, но как показывает практика, данный антипаттерн часто имеет место быть, поэтому я настоятельно рекомендую проверить, что ваши фреймворки делают UPDATE только действительно измененных полей.
Oracle Reports Developer
Программа Oracle Reports Developer предоставляет среду разработки и развертывания для быстрого построения и публикации отчетов в Сети с помощью системы Reports for Oracle Application Server. Данные могут быть представлены в виде таблиц, матриц, отчетов с группировкой, графиков или сочетания всего перечисленного. Высокое качество презентации достигается с помощью каскадных таблиц стилей (CSS).
Почему существующие туториалы — плохие
Я немного поясню, почему я считаю существующие туториалы плохими. Апекс — это не язык программирования, это такой очень высокоуровневый инструмент разработки, ближайшим идейным аналогом которого я бы назвал MS Access. Соответственно, большая часть разработки на апексе состоит из работы с веб-интерфесом этой среды: нажимания на кнопки, перехода по ссылкам, заполнение полей с названиями компоментов, выбора значений из списков и так далее. Что делает типовой туториал? Он показывает скриншоты этих самых экранов с подписями "нажмите туда-то". При этом сама IDE достаточно удобная и понятная, почти все элементы снабжены справочными пояснениями, есть встроенная помощь. В итоге, если нужно объяснить пользователю, как создать приложение, в туториале будет большой скриншот, объясняющий, как нажать на кнопку "Create a new app". Вот, посмотрите сами на официальный оракловый туториал:
Они бы еще объяснили со скриншотами, что "клик" — это однократное нажатие на левую кнопку манипулятора типа "мышь".
Конечно, полезная информация в таких туториалах тоже есть, но ее там крохи. Процентов на 80 туториалы состоят из таких вот скриншотов, причем по своему опыту я могу сказать, что человек, не читавший никаких туториалов вообще, самостоятельно найдет, как создать приложение, добавить страницу, поместить на нее отчет и так далее. А потом ему нужно будет организовать более-менее нетривиальное взаимодействие нескольких элементов апекса, и оказывается, что этот вопрос туториалом почти не покрывается. Приведу аналогию: вы только-только учитесь программировать, изучили переменные, массивы, циклы, условия, и получили задание, в рамках выполнения которого вам нужно отсортировать массив. Как-то отсорировать массив — достаточно просто, но как только задание усложнится до "отсортировать большой массив быстро", окажется, что имеющихся у вас знаний недостаточно. Погуглив, покопав Stackoverflow и форумы, вы найдете алгоритм быстрой сортировки. Конечно, кто-то и сам переизобретет этот алгоритм рано или поздно, но более эффективным путем было бы сразу прочитать книжку с разбором типовых алгоритмов. И вот как раз такого набора "типовых алгоритмов" для апекса обычно нигде нет, а на помощь приходят те же самые метод научного тыка, поисковики, форумы и Stackoverflow (и, я надеюсь, этот туториал).
Обзор IDE
Стартовый экран, который вы увидите сразу после входа в IDE:
Главные элементы здесь — это 4 большие кликабельные картинки:
- "App Builder": это, собственно, то место, где можно создавать приложения и где вы будете проводить до 99% времени.
- "SQL Workshop": заменитель обычной IDE для работы с СУБД Oracle. Там вы можете посмотреть объекты БД (таблицы, индексы, пакеты, и т. п.) и выполнять SQL-запросы. Если у вас есть возможность делать все это через "обычные" IDE (вроде Oracle SQL Developer или PL/SQL Developer) — делайте через них. Тем не менее, этот раздел тоже может быть полезен и о нем я тоже расскажу.
- "Team Development": инструменты для командной разработки. Честно говоря, я ни разу не видел, чтобы хоть кто-то ими пользовался на практике (включая меня). Любопытства ради я туда тоже заглядывал и совсем бесполезным этот раздел я бы не назвал, хотя и очень хочется.
- "App Gallery": раздел с демо-приложениями. К тому моменту, когда он появился, я уже неплохо знал апекс и почти не заглядывал туда, но начинающим, думаю, это будет полезно. Там много разных простеньких приложений, на их примере можно изучать, как использовать те или иные возможности.
В меню в самом верху страницы продублированы эти же 4 пункта.
Кроме этого, есть еще несколько малополезных вещей: ниже есть некоторое количество статистической информации (типа наиболее часто редактируемых приложений или наиболее активных разработчиков). И есть колонка справа, где также немного статистики и дополнительных ссылок.
Рассмотрим App Builder и SQL Workshop подробнее.
App builder
Эта страница выглядит примерно вот так:
Основные элементы этой страницы: четыре большие кнопки как на предыдущей странице, список уже имеющихся приложений, правая колонка со списком последних измененных приложений и дополнительными действиями. Четыре кнопки — это:
- "Create": создать новое приложение. Эта же функция продублирована чуть ниже (синяя кнопка "Create" над отчетом со списком приложений). Кнопка запускает мастер создания приложений.
- "Import": импортировать приложение. Апекс позволяет переносить приложения с одного сервера на другой в виде текстовых файлов (которые, по сути, являются длииииными PL/SQL скриптами с вызовами функций создания всех элементов приложения).
- "Dashboard": малополезное сборище статистики разработки приложений. Кто, когда, где, сколько изменений сделал. Думаю, даже вашему начальнику будет неинтересно туда смотреть.
- "Workspace Utilities": набор дополнительных инструментов для управления приложением. Честно говоря, туда я тоже почти не заглядываю.
Так же хочу обратить ваше внимание на вот такую маленькую кнопочку в панели отчета:
Она переключает вид отчета с такого, как на скриншоте выше (с "картинками" приложений) на отчет в виде таблицы:
Похожие отчеты встречаются и в других разделах IDE. Я предпочитаю табличный вид, поэтому далее все скриншоты будут с ним.
После того, как вы создадите приложение или откроете существующее, вы увидите следующую страницу (очень похожую на предыдущую по структуре):
На эту страницу вы будете заходить очень часто, и полезных функций здесь тоже очень много. Большие кнопки с картинками:
- "Run Application": эта кнопка запускает ваше приложение. Оно откроется в отдельном окне. По умолчанию — именно в окне, а не во вкладке браузера, но это поведение настраивается (об этом позже).
- "Supporting Objects": этот раздел служит для решения вопросов, связанных с установкой, обновлением и удалением приложений. Обычно им почти не пользуются.
- "Shared Components": я бы сказал, это первый или второй по важности раздел IDE (еще один — редактор страниц). Если вы будете много разрабатывать на апексе, то очень скоро заметите, что выучили структуру этого раздела как "Отче наш".
- "Utilities": еще один набор (мало)полезных вспомогательных функций.
- "Export / Import": позволяет экспортировать или импортировать приложения или отдельные части приложения.
И две дополнительные кнопки, которые обведены оранжевой рамкой на скриншоте:
- Кнопка "Edit application properties". Нажав на нее, вы попадете на страницу настроек свойств приложения. Возможно, вы не будете заходить в этот раздел часто, но он очень важен, потому что там хранятся настройки приложения, от которых много чего зависит. Далее, если я буду упоминать где-то "свойства приложения" — ищите их в этом разделе.
- В кои-то веки полезная функция в правой панели: "Delete this Application". В то время как многие функции в апексе продублированы в разных местах, эта функция есть только здесь, и с непривычки первый раз ее найти сложно.
Application properties
Здесь прежде всего интересна организация доступа к большому количеству настроек.
Настройки сгруппированы в 4 группы (см. верхнюю рамку), а в каждой группе есть еще по нескольку подгрупп (см. нижнюю рамку), у каждой группы есть свое название. Похожим образом настройки организованы в очень многих местах в апексе. В дальнейшем я буду просто указывать путь к нужной настройке примерно так: "Application Properties" → "Definition" → "Name" → "Version".
Также, если вы посмотрите на хлебные крошки вверху страницы, вы увидите, что там написано "Edit Application Definition", хотя заходили вы, казалось бы, в "Application Properties". Просто не обращайте внимания.
Shared Components
Shared Components — это наше всё. Этот раздел является промежуточным пунктом на пути к конкретным компонентам приложений. Покажу здесь общий вид, просто чтобы вы представляли, где что находится:
Совсем неважной ерунды здесь почти нет. Каждый раздел вам так или иначе может понадобиться. Названия разделов говорят сами за себя, добавить почти нечего:
- "Application Logic": средства управления логикой приложения.
- "Security": вопросы безопасности и управления доступом к приложению целиком и к отдельным компонентам в зависимости от ролей пользователей.
- "Other Components": это "все остальные компоненты". По-хорошему, этому разделу следовало бы быть последним, но он почему-то здесь. А подпункт "List of Values" я бы вообще в Application Logic перенес.
- "Navigation": компоненты приложения для обеспечения навигации.
- "User Interface": настройка внешнего вида приложения, стилей и т. п.
- "Files": раздел для файлов (например, css или js). Незаменим, если у вас нет доступа к ОС, и все равно удобен, даже если доступ есть.
- "Data Sources": работа с источниками данных (для загрузки и выгрузки).
- "Reports": отчеты, очевидно.
- "Globalization": раздел для перевода приложений на другие языки.
Перевод приложений в апексе сделан просто ужасно (честно, я пытался придумать, как сделать его хуже — и не смог), и нет никаких свидетельств того, что в будущем станет лучше.
Ужасно с точки зрения архитектуры и удобства работы над переводом. Могу только сказать разработчикам: "Спасибо, что хотя бы без багов" (но тут как посмотреть: переводы устроены так, что некоторые особенности их работы мало чем отличаются от багов).
Приходится с этим жить.
Page Designer
Page Designer — редактор страниц. Это, наверное, главное место в IDE. Здесь вы будете создавать то, с чем напрямую взаимодействует пользователь, — страницы приложения. Здесь просто куча функций, почти как в кабине самолета. Чтобы попасть в Page Designer, нужно кликнуть по ссылке с названием страницы на странице приложения (извините за тавтологию). На скриншоте разноцветными рамками выделены основные составляющие редактора:
Панель кнопок вверху (в красной рамке):
- Поле для ввода номера страницы, стрелки вверх и вниз и кнопка "Go": навигация по страницам приложения. Каждая страница имеет номер, тут вы можете либо ввести номер нужной страницы, либо стрелками перейти к следующей/предыдущей, либо нажать на самую левую кнопку и в появившемся модальном окне выбрать страницу из списка.
- Кнопка с замком: позволяет заблокировать страницу от изменений другими разработчиками.
- Кнопки Undo/Redo
- Две кнопки с доступом к вспомогательным функциям.
- Кнопка-ссылка на Shared Components. Полезная, потому что туда-сюда ходить приходится постоянно. (Я сам, правда, предпочитаю просто держать Shared Components в отдельной вкладке — так еще быстрее).
- Кнопка "Save": сохраняет изменения на странице.
- Кнопка "Run": "запускает" страницу, то есть вы ее видите так, как ее потом увидит пользователь.
Слева (в оранжевой рамке) — панель с компонентами страницы. В этой панели есть 4 закладки:
- "Rendering": показывает, из каких составных частей состоит страница, какие процессы выполняются при рендеринге;
- "Dynamic Actions": действия, выполняемые на клиенте (например, обработчики событий javascript);
- "Processing": серверные процессы, связанные со страницей;
- "Page Shared Components": для прямого перехода к используемым на странице общим компонентам (те самые Shared Components).
По центру (в зеленой рамке) — панель, содержащая много разнородной информации. В верхней части панели есть 5 закладок, на которых можно найти:
Также центральная панель имеет снизу еще одну дополнительную панель, которую можно использовать для быстрого добавления компонентов на страницу.
Справа (в синей рамке) — панель свойств. Тут все просто — она показывает свойства выбранного в данный момент компонента. Часть свойств компонентов — простые: текст, число, значение из списка. Но у более сложных свойств компонентов есть дополнительные интерфейсные возможности, сильно облегчающие жизнь при работе с ними.
Свойство, представляющее собой большой текст. Например, код на PL/SQL или JavaScript. Выглядит так:
Можно писать код прямо так, в этом поле, а можно щелкнуть по кнопке вверху страва, и тогда откроется модальное окно с редактором кода, где доступны подсветка синтаксиса (для SQL, JavaScript, CSS, HTML), поиск в тексте и другие функции редактора.
Свойство — Shared Component. Если свойство является одним из компонентов приложения (Shared Component), то выбирать конкретный компонент можно из списка, а нажав на кнопку справа от списка
можно переместиться в раздел Shared Components непосредственно в свойства выбранного компонента (чтобы, например, их изменить).
Если у вас значение свойства выбирается из списка, иногда справа можно увидеть другую дополнительную кнопку:
Она называется "Quick pick" и используется, когда вариантов очень много. "Quick pick" дает чуть более быстрый доступ к небольшому подмножеству вариантов — как правило, там находятся наиболее часто используемые варианты. "Часто используемые варианты" здесь — не вами используемые, а "вообще". Это жестко заданный список и со временем не меняется.
SQL Workshop
Как я уже говорил, SQL Workshop — это заменитель обычной IDE (если у вас по каким-то причинам нет возможности ее использовать).
Он состоит из 5 разделов:
- "Object Browser": браузер объектов БД (таблиц, пакетов, функций и процедур, индексов, сиквенсов и прочего);
- "SQL Commands": раздел, где можно выполнить любой SQL запрос или PL/SQL код;
- "SQL Scripts": здесь можно загрузить текстовый файл со скриптом и выполнить его;
- "Utilities": разные дополнительные возможности, связанные с БД: например, есть графический построитель запросов (но не только);
- "RESTful Services": создание REST сервисов. Апекс тоже имеет REST (причем давно, еще в версии 4.2 они уже были)!
Object Browser
Здесь есть все, что нужно для работы с объектами БД: создание, изменение, удаление, просмотр свойств объектов, ввод данных в таблицы — для всего этого в этом разделе есть графический интерфейс. Вверху слева в выпадающем списке можно выбрать тип объектов (на скриншоте показаны таблицы), вверху справа можно выбрать схему, объекты которой вы можете посмотреть. В списке доступных схем вы не увидите все схемы сразу — это нормально. Как сделать схемы видимыми в апексе, я расскажу, когда дойду до администрирования.
Также я не вижу большого смысла описывать этот раздел подробнее: если вы знаете, что значит фраза "добавить столбец в таблицу", вы без труда догадаетесь, когда вам нужно будет нажимать на кнопку "Add Column" и что вас может ждать дальше.
SQL Commands
В этом разделе можно выполнять SQL запросы и PL/SQL код.
По возможностям этот раздел почти не уступает полноценным средам разработки. Не хватает разве что автодополнения кода и подсветки синтаксиса (а в Object Browser подсветка синтаксиса есть, кстати). Имеющиеся возможности:
- выполнение SQL, в том числе с параметрами (для ввода значений параметров появится отдельное окно);
- выполнение PL/SQL с возможностью вывода текста через dbms_output (вывод появится в окне ниже);
- выполнение только выделенной части кода (выделить текст мышкой, затем "Run");
- просмотр плана запроса;
- сохранение запросов.
Это, как вы понимаете, далеко не всё, что есть в IDE APEX, но на данном этапе не имеет смысла углубляться дальше. Отдельные элементы интерфейса апекса будут разобраны более подробно в темах, которые имеют к ним непосредственное отношение.
P. S. Я пока не могу сказать, что четко продумал структуру этого туториала, возможно, в будущем я добавлю еще скриншоты и описания в эту статью или опишу дополнительные возможности в других статьях. Осталось придумать, как оповещать заинтересованных о значительных правках старых статей.
СУБД Oracle обычно используется для хранения данных, которые извлекаются приложениями. Описанные в этом разделе средства и соответствующие продукты применяются для создания таких приложений. Мы решили отдельно рассмотреть программирование баз данных и возможности их расширения. Далее в моем блоге я опишу инструменты разработки и другие продукты, встроенные в СУБД, отвечающие особым потребностям развертывания приложений.
Расширяемость базы данных
Работа в Интернете и в корпоративных сетях интранет выдвигает новые требования к хранению данных нетрадиционных типов и манипулированию ими. Если нужно расширить стандартную функциональность базы данных для хранения изображений, аудио, видео, пространственных данных и временных рядов, то эти возможности можно добавить путем расширения стандартного языка SQL. Дополнительную информацию об этом вы найдете в новых моих статьях.
Таблицы бывают разные
Кроме обычных таблиц в oracle как и во многих других БД есть так называемые индекс-таблицы, когда данные таблицы непосредственно лежат в индекс-дереве первичного ключа. Таким образом достигается сразу две вещи: во первых для чтения данных по первичному ключу вы имеете на одно чтение меньше, во вторых данные в таблице получаются упорядоченными по первичному ключу, так что операция ORDER BY PK будет выполняться без дополнительной сортировки. К недостаткам можно отнести тот факт, что отличить логирование в оперативные журнальные файлы данного индекса вы уже не сможете.
Еще один замечательный тип таблиц — это кластерные таблицы, которые позволяют хранить данные из двух или более таблиц кластеризованные по одному значению ключа в одном блоке данных. Это может быть весьма эффективно если вы всегда используете какие-нибудь таблицы совместно.
На основе кластерных таблиц есть еще кластерные хэш-таблицы, в которых для доступа вместо B-дерева используется таблица на основе хеша кластерного ключа. Звучит, конечно, очень интересно, но, честно говоря, на практике никогда не сталкивался.
Подсистема Oracle Spatial Option
Подсистема Oracle Spatial Option включена только в редакцию Oracle Enterprise Edition. Она позволяет оптимизировать выборку и отображение данных, привязанных к координатам, и применяется при разработке геоинформационных систем (ГИС). Некоторые производители таких систем уже включили ее в свои продукты и применяют в качестве механизма поиска и выборки.
Oracle Portal
IDE Oracle Portal привнес в WebDB важное усовершенствование – возможность создания и использования портлетов, позволяющих разбить веб-страницу на отдельные области, способные отображать информацию и взаимодействовать с пользователем независимо друг от друга. Например, из портлетов можно независимо обращаться к компонентам Answers, Discoverer и Reports.
Следующий продукт Oracle, реализующий инфраструктуру для создания порталов, – WebCenter – был выпущен в 2006 году и первоначально поставлялся как дополнительный компонент к Application Server.
Нужно ли программисту прикладных приложений понимать как работает БД? Том Кайт, признанный специалист Oracle, автор знаменитой колонки asktom, в своей книге «Oracle для профессионалов. Архитектура и основные особенности.» настаивает, что это просто необходимо. Даже если в вашей команде есть грамотный администратор, знание того, как работает СУБД Oracle поможет вам лучше понимать друг друга и эффективней взаимодействовать, не говоря уже о случае, когда такого специалиста у вас нет. В данном топике я упомяну об основных вещах, понимание которых позволит грамотно работать с БД Oracle и использовать некоторые её особенности с большой отдачей для вашего приложения. Если же вы уже прочитали вышеупомянутую книгу Тома Кайта, то можете просто исползовать эту статью в качестве памятки. Одно замечание — книжку я читал давно, и тогда еще последней версией БД Oracle была 9i, курсы по администрированию я тоже проходил по девятке, так что, если в десятке и выше что-то поменялось и добавилось, то не обессудьте. Хотя я пишу о довольно фундаментальных вещах, которые вряд ли сильно поменяись.
Неблокирующее чтение и сегмент отката
Одной из наиболее замечательных особенностей СУБД Oracle является неблокирующее чтение, которое достигается за счет сегмента отката. Запросы к Oracle на чтение никогда не блокируются, так как данные почти всегда могут быть прочитаны из сегмента отката.
Сегмент отката дает еще одну плюшку: из него можно попытаться считать немного устаревшие данные для какой-нибудь таблицы, которые были в ней на определенный момент. Называется данная фича — flashback.
Однако иногда сегмент отката может подложить свинью: если у вас есть большой job для bulk удаления данных (удаление генерирует всех больше данных в сегменте отката), то вы можете получить ORA-01555: snapshot too old. Главное что в этом случае надо помнить — это то, что не надо переписывать ваш job, чтобы он коммитил через каждые N операций, а нужно использовать отдельный специально созданный сегмент отката для таких операций.
Oracle Discoverer Administration Edition
Программа Oracle Discoverer Administration Edition позволяет настроить и администрировать уровень Discoverer End User Layer (EUL), принадлежащий предыдущему поколению инструментов бизнес-анализа для Oracle. Назначение этого уровня – оградить от сложности SQL бизнес-аналитиков, использующих Discoverer как инструмент для выполнения произвольных запросов и анализа результатов. На всем протяжении процедуры построения EUL администратору помогают мастеры. Кроме того, администратор может ограничить ресурсы, доступные аналитикам; за превышением квот будет следить входящий в Discoverer менеджер запросов.
Поддержка национальных языков
Подсистема поддержки национальных языков (National Language Support, NLS) предоставляет наборы символов и прочие данные, например форматы записи чисел и дат, для различных языков. В Oracle Database 11g добавлена поддержка Unicode 5.0. Кодировка Unicode позволяет хранить все данные или постепенно переводить на нее отдельные столбцы. Кодировки UTF-8 и UTF-16 обеспечивают поддержку более 57 языков и 200 наборов символов. Многие вещи локализованы изначально (например, форматы данных), но при желании с помощью утилиты Oracle Locale Builder можно создать нестандартную локаль.
Включен также инструментарий Globalization Toolkit для создания приложений, поддерживающих несколько языков.
Драйверы базы данных
Oracle и веб-службы
Начиная с версии Oracle Database 11g, СУБД может служить поставщиком веб-служб, реализованных в базе данных с помощью технологии XML DB. Веб-службы позволяют создавать запросы на языках SQL или XQuery и получать результаты в формате XML либо вызывать PL/SQL-функции или функции в составе пакета и получать их результаты. Реализация XQuery в Oracle Database 11g поддерживает пока еще обсуждаемый стандарт JSR-225 и включает ряд мер, повышающих производительность.
Oracle Designer
Программа Oracle Designer представляет собой графическую систему IDE быстрой разработки приложений (Rapid Application Development, RAD), охватывающую весь процесс создания приложения для работы с базой данных – от построения бизнес-модели до проектирования схемы, генерации и развертывания. Проекты и изменения хранятся в многопользовательском репозитории. Инструмент позволяет выполнять реинжиниринг имеющихся таблиц и схем из баз данных как Oracle, так и других производителей, для повторного использования и перепроектирования.
Designer включает также генераторы приложений для Oracle Developer, HTML-клиентов, обращающихся к Oracle Application Server, и на языке C++. Designer может генерировать новые приложения и реконструировать имеющиеся приложения, в том числе модифицированные. Это позволяет реализовать процесс кругового конструирования (round-trip engineering), когда разработчик сначала генерирует приложение с помощью Designer, потом модифицирует его, реконструирует и помещает изменения обратно в репозиторий Designer.
Индексы
Кроме всем известных индексов в виде B-деревьев в Oracle еще есть так называемые битовые индексы, которые показывают очень высокую производительность на запросах к таблицам в которых есть колонки с очень разреженными значениями. Особенно эффективно в этом случае будут работать запросы (по сравнению с обычными индексами) в которых присутствуют сложные комбинации OR и AND к разряженным столбцам. Данный индекс храниться не в B-дереве, а в битовых картах, что и дает возможность быстрого выполнения описанных запросов. Вопрос в количестве уникальных значений в таблице при которых данный индекс еще будет более предпочтителен весьма сложен: это может быть как 10 уникальных значений, так и 10 000. Здесь надо создавать индекс на конкретной таблице и смотреть что получается. Главное не пытайтесь использовать данный индекс на таблицах с большим количеством вставок и обновлений индексируемой колонки, так как такие операции будут блокировать довольно большие участки в индексируемой таблице и ваша система может встать колом или даже поймаете deadlock.
Одна из вещей, которая меня всегда очень радовала в Oracle — это возможность создания индекса по функции. Т.е. если вам в запросах приходиться использовать какую-нибудь функцию, то вы можете построить по ней индекс и значительно ускорить операции чтения.
Еще одно интересное свойство индексов, о котором необходимо знать, это то, что в индексе не хранятся значения NULL. Таким образом если вы будете делать запросы с условием или <> по индексируемой колонке, то в ответ строчек со значением NULL в индексируемой колонке вы обратно не получите. С другой стороны данное свойство можно очень эффективно использовать дня некоторых специфичных случаев. Например, у вас есть очень большая табличка в которой хранятся ордера, которая никогда не чистится. И существует фоновый процесс, который обязан все ордера отсылать в какую-нибудь backoffice систему. Первое решение, которое напрашивается — это завести еще одну колонку с флагом is_sent, где изначально стоит 0 и при отсылке мы будем проставлять 1. Т.е. фоновый процесс при каждом запуске будет делать запрос к таблице с условием is_sent=0. Битовый индекс вы здесь использовать не можете, так как табличка очень активно пополняется. Обычный индекс на основе В-дерева будет занимать очень много места, так как нужно хранить ссылки на огромное количество строчек. Но если мы слегка поменяем нашу логику и в качестве пометки отсылки, и в колонку is_sent будем класть NULL вместо 1, то индекс у нас будет крошечный, так как в любой момент в нем будут храниться только не NULL значения, а их будет очень мало.
Программирование баз данных Oracle
Описываемый стандартом ANSI язык Structured Query Language (SQL) включает базовые средства манипулирования данными, управления транзакциями и извлечения записей из базы данных. Бизнес-пользователи по большей части взаимодействуют с Oracle посредством приложений или инструментов бизнес-анализа, которые предоставляют интерфейсы, скрывающие SQL и присущую ему сложность.
Oracle SQL Developer
SQL Developer распространяется бесплатно, его можно загрузить с сайта Oracle Technology Network. Имеются версии для Windows, Linux и Apple Mac OS X. Кроме того, Oracle поддерживает на сайте Oracle Technology Network форум, посвященный SQL Developer.
PL/SQL
PL/SQL – это разработанное Oracle процедурное расширение языка SQL. Обычно на нем реализуются логические программные модули для приложений. На языке PL/SQL можно писать хранимые процедуры, триггеры, циклы, условные предложения и обработку ошибок. Процедуры на PL/SQL можно откомпилировать и сохранить в базе данных. Блоки, написанные на PL/SQL, можно также исполнять непосредственно с помощью интерактивного инструмента SQL*Plus, имеющегося во всех версиях Oracle. Программные блоки на PL/SQL можно скомпилировать заранее.
Включение Java в СУБД Oracle позволяет программистам, владеющим Java, применить свои знания к разработке приложений для Oracle. Java-приложения можно развертывать на стороне клиента, внутри сервера приложений или в базе данных – в зависимости от конкретных обстоятельств. Oracle Database 11g включает JIT-компилятор Java, по умолчанию активированный.
Некоторых аспектов разработки на Java мы еще коснемся в будущих статьях моего блога.
Подвисание некоторых запросов на запись
При зависании некоторых ваших запросов в произвольный момент времени стоит заглянуть в alert.log на предмет наличия incomplete checkpoint. Это говорит о том, что ваши оперативные журнальные файлы слишком большие или их слишком мало, таким образом, защищаемые ими данные не успевают сбрасываться из кэша на диск, а СУБД заполнила уже все доступные оперативные журнальные файлы и хочет использовать их по кругу повторно, чего делать ни в коем случае нельзя, вот и появляется пауза. Хотя если ваше приложение работает на java, то в первую очередь я бы загляну на наличия Full GC в логах.
Управление контентом в Oracle
К средствам управления контентом относится подсистема Content Database Option, позволяющая сохранять в базе данных документы, а также приложения для управления контентом компании Stellent, приобретенной Oracle в 2007 году: Universal Content Management, Universal Records Management и Information Rights Management.
Средства поиска в Oracle
В состав продуктов Oracle Database и Application Server входит инструмент поиска Ultra Search. Обычно он применяется для сбора информации о местонахождении различных текстовых данных, хранящихся в корпоративной сети. Выборка документов базируется на правах доступа конкретного пользователя. Кроме того, предлагается альтернативная система Secure Enterprise Search, обладающая большей гибкостью в среде, не основанной целиком на продуктах Oracle.
Заключение
Теперь вы точно знаете, кто такой и что делает разработчик Oracle , в каком бы контексте н и употреблялось это выражение. Как работа в компании Oracle, так и просто понимание ее инструментов — это отличный опыт и серьезный вклад в ваше резюм е д ля дальнейшего продвижения по карьерной лестнице.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Недавно я с удивлением обнаружил, что, оказывается, толковых туториалов по Oracle Application Express (он же APEX, он же апекс, но не путать с языком apex, который используется в Salesforce) в природе не существует.
Это не самая распространенная технология, конечно, но, тем не менее, довольно востребованная. Есть десятки блогов об апексе (англоязычные, в основном), пара тысяч вопросов на Stackoveflow, специальный раздел по апексу на официальных форумах оракла, сам апекс существует уже 15 лет и все время развивается. Я был уверен, что и хороших туториалов полно. Но нет!
Мне тут же пришла в голову гениальная мысль восполнить этот пробел.
Оглавление
Пустые строки
В оракл есть одна очень интересная особенность, от которой они теперь уже никогда не смогут избавиться. Дело в том, что если вы кладете в БД пустую строку, то она сохраниться как NULL. Таким образом при последующем чтении вы никогда не получите пустой строки, а только NULL. Имейте так же в виду, что по этой же причине пустые строки не попадают в индекс, так что если вы будете делать запросы, план выполнения которых, будет использовать индекс, то ваше пустые (вернее NULL) строки вы никогда не получите, но об этом чуть позже.
Вводная информация
Предполагается, что читатель знаком с Oracle Database версии хотя бы с 11-й, SQL, PL/SQL и особенно с тем, что такое EXECUTE IMMEDIATE и как оно работает.
Я начну с обзора наиболее часто используемых разделов IDE. Я тоже покажу несколько скриншотов. Куда же без них, раз всё здесь сделано из визуальных компонентов. Но их будет не так много, как в плохих туториалах, и в основном они будут в начальных главах, а дальше я буду просто указывать название раздела IDE, в котором находятся необходимые вещи. Сразу обращу ваше внимание, что это просто первое знакомство с IDE. Более подробная информация о том, когда на какую кнопку нажимать и где что смотреть, будет дана дальше, когда я перейду к конкретным темам.
Интерфейс уровня вызовов Oracle
Опытный программист, стремящийся добиться максимальной производительности, может определить команду SQL в виде символьной строки объемлющего языка, затем явно разобрать эту команду, привязать к ней переменные и выполнить ее с помощью интерфейса уровня вызовов Oracle (Oracle Call Interface, OCI). Интерфейс OCI гораздо детальнее предыдущих, для работы с ним и последующей отладки программисту придется затратить много времени и усилий. Разработка приложений с помощью OCI может занять много времени, но расширение функциональности и повышение быстродействия оправдают дополнительные затраты. Например, если механизм обеспечения высокой доступности реализован так, что несколько систем разделяют общие диски с помощью подсистемы Real Application Clusters, то OCI дает возможность написать программу, которая позволит пользователю прозрачно присоединиться ко второму серверу, если первый выйдет из строя.
Связывание переменных
Наверное об этом уже наслышан каждый программист, но я все же упомяну о такой обязательной техники, как связывание переменных. Дело в том, что для каждого уникального запроса строится план разбора и кладется в кэш. Если различных запросов очень много, как, например, весьма распространенный запрос по ID, то на каждый запрос буден генериться свой план, к тому же они будут вытеснять из кэша все другие планы, что может в разы увеличить время отклика вашей базы данных.
Стоит так же заметить, что не стоит этим злоупотреблять и использовать связывание для столбцов с небольшим количеством различных значений, как-то флаг is_deleted, ведь различных запросов в этом случае будет не так много, а, возможно, для более конкретного запроса СУБД удастся построить более эффективный план.
Языки третьего поколения (3GL)
Программисты могут обращаться к базе данных Oracle из программ, написанных на языках C, C++, Java или COBOL, встраивая в них команды SQL. Перед тем как подавать такое приложение на вход платформенного компилятора, его необходимо пропустить через прекомпилятор. Последний заменяет команды SQL вызовами библиотечных функций, понятных стандартному компилятору. Oracle поддерживает такую методику с помощью дополнительного прекомпилятора Pro*C для языков C и C++ и прекомпилятора Pro*COBOL для языка COBOL.
В последние версии Oracle включен прекомпилятор SQLJ для языка Java, который заменяет команды SQL обращениями к библиотеке времени выполнения SQLJ, также написанной на Java.
Что такое Oracle
проектированием, производством и продажей программных и аппаратных продуктов;
финансированием и инвестированием IT-стартапов;
обучением;
консалтингом;
предоставлением хостинг-услуг;
разработкой и созданием инструментов для СУБД;
и др.
Позвольте Oracle кэшировать ваши данные эффективно
В Oracle все данные читаются-пишутся не прямо на диск, а через кэш. По умолчанию кэш основан на LRU алгоритме, так что если вы читаете какую-нибудь очень большую табличку по идентификатору в больших количествах, запрашивая в каждый раз новую строчку, то такие запросы могут вытеснять из кэша небольшую статическую табличку, которой бы самое милое дело постоянно находиться в кэше. Для таких целей при создании таблицы вы можете указать специальный вид кэша, куда будут ходить запросы к вашим таблицам. Так для первой таблицы в вышеописанном примере подойдет кэш RECYCLE, который по сути не хранит никакие данные, а сразу их выбрасывает из кэша. А для второй таблицы подойдет кэш KEEP, который позволить хранить в кэше небольшие статические таблице и запросы ко всем остальным таблицам не будут вытеснять данные статических таблиц из кэша.
Oracle JDeveloper
Oracle представила программу Oracle JDeveloper в 1998 году. Эта среда программирования IDE позволяет разрабатывать простые приложения на языке Java без написания кода. Сейчас JDeveloper распространяется бесплатно, ее можно загрузить с сайта Oracle Technology Network. В нее входят: мастер форм данных Data Form Wizard, мастер Beans Express Wizard для создания компонентов JavaBeans и классов BeanInfo и мастер развертывания Deployment Wizard. JDeveloper включает также средства для работы с базой данных: различные драйверы для Oracle, редактор соединений Connection Editor, позволяющий скрыть сложность JDBC API, компоненты для привязки визуальных элементов управления к данным и прекомпилятор SQLJ, позволяющий встраивать в код на Java команды SQL для доступа к базе данных. Приложения, разработанные на JDeveloper, можно развертывать на сервере приложений Oracle Application Server. Хотя мастеры JDeveloper позволяют программисту создавать Java-объекты без какого-либо кодирования, конечным результатом все же является сгенерированный код на Java.
Объектно-ориентированное программирование
Инфраструктура объектов для поддержки объектно-ориентированного подхода в программировании существовала со времен Oracle8i. Например, программист мог создать определяемый пользователем тип данных, содержащий методы и атрибуты. Поддержка объектов в Oracle включает механизм Object Views, с помощью которого объектно-ориентированные программы могут работать с уже хранящимися в базе реляционными данными. Хранить объекты в базе данных можно в виде массивов переменной длины (VARRAY), вложенных таблиц или индекс-таблиц (index organized tables, IOT). Объектно-ориентированные средства Oracle мы обсудим в будущих статьях блога.
Заключение
Я попытался описать большинство вещей, который на мой взгляд могут пригодится программисту. Так как их довольно много, то я их только обозначил, часто не вдаваясь в детали. Как конкретно сделать необходимую настройку можно всегда прочитать в упомянутой книжке Тома Кайта, найти в колонке asktom или просто нагуглить. Главное знать что гуглить, и, надеюсь, данный топик вам это подсказал.
В процессе поиска работ ы ч асто можно встретить такую вакансию, как разработчик Oracle. Для те х к то хоть немного интересуется программированием , компания Oracle будет на слуху , а потому эти люди с могут привести о ней несколько фактов. Но кто такой разработчик Oracle и что он делает? На эти и другие вопросы мы сегодня постараемся ответить.
Oracle Forms Developer
Oracle Forms Developer – это инструмент создания диаграмм и приложений на базе форм, которые могут быть развернуты как традиционные клиент-серверные приложения или для работы в трехуровневой архитектуре. В последнем случае приложение исполняется в браузере и обращается к серверу приложений Oracle Application Server. Developer – это язык четвертого поколения (4GL). Приложение на таком языке пишется не в виде процедурного кода, а путем задания значений свойств. Developer поддерживает широкий спектр клиентов, в том числе написанных на Java. Программа Forms Builder включает встроенную виртуальную Java-машину для тестирования веб-приложений.
Подсистема Oracle Multimedia
Подсистема Oracle Multimedia (бывшая interMedia) предоставляет средства манипулирования текстом, изображениями, аудио- и видеоинформацией, географическими координатами, а именно:
- часть Multimedia, относящаяся к тексту (Oracle Text), может распознать смысл документа, производя в нем поиск по темам и ключевым фразам;
- часть Multimedia, относящаяся к изображениям, умеет сохранять и извлекать изображения в различных форматах; начиная с версии Oracle Database 11g, поддерживается формат DICOM медицинских изображений;
- части Multimedia, относящиеся к аудио- и видеоинформации, способны сохранять и извлекать аудио- и видеоклипы соответственно;
- часть Multimedia, относящаяся к геоинформации, умеет извлекать данные о пространственных координатах.
Что делает разработчик Oracle, который работает в самой компании
Тесты. Тесты проходят все: кто устраивается программистом или любым другим сотрудником. Тесты проходят онлайн , и состоят они из нескольких десятков разносторонних вопросов, которые затронут 4 основные сферы: ваши интеллектуальные способности, коммуникацию и работу в команде, основы программирования, практическое программирование. Тест должен выполн ять ся за определенное время.
Техническое собеседование. Проводится онлайн или в офисе. На этом этапе вам нужно будет ответить на вопросы технического плана, затрагивающие область вашей будущей работы. Если вы устраиваетесь разработчиком, то на этом этапе вам нужно будет показать свои технические навыки.
HR-собеседование. На этом собеседовании вас могут спросить чт о у годно: начиная от программирования и заканчивая рассказом о своей семье. Суть этого собеседования — выяснить , какой вы человек.
Большие объекты
Интерес к применению больших объектов (LOB) постоянно растет, особенно в контексте хранения таких нетрадиционных типов данных, как изображения. В базе данных Oracle уже довольно давно можно было хранить большие объекты. В Oracle8 появилась возможность иметь в одной таблице несколько LOB-столбцов. В Oracle Database 10g по существу было снято ограничение на размеры больших объектов. В Oracle Database 11g внедрена технология SecureFiles, что заметно повысило производительность операций выборки и вставки больших объектов. Для LOB-данных с применением SecureFiles поддерживается прозрачное шифрование.
Уровни изоляции транзакций
В Oracle вообще нет уровня изоляции READ_UNCOMMITED. Дело в том, что в других базах данных он используется для достижения максимального параллелизма путем удаления блокировок чтения. Но в Oracle чтение и так всегда выполняется без блокировок, таким образом мы уже имеем все преимущества, которые может дать этот уровень, не вводя никаких дополнительных ограничений.
Вообще, в Oracle явно доступно всего два уровня изоляции: по умолчанию используется READ_COMMITTED, но при желании вы можете установить SERIALIZABLE.
Однако на уровне операторов (SELECT, UPDATE и т.д.) у вас по умолчанию уже есть REPEATABLE_READ, т.е. в рамках одного оператора вы всегда получаете согласованное чтение, что достигается конечно же за счет сегмента отката. Мне всегда очень нравился пример приводимый Томом Кайтом для описания того, что это дает. Допустим у вас есть очень большая таблица со счетами и вы выполняете SELECT на получение суммы. В Oracle, в отличие от многих других БД, даже если в середине вашего запроса другая транзакция переведет некоторую суммы с первого счета на последний, вы в итоге все равно получите данные актуальные на начало вашего запроса, так как дойдя до последний строчки ваш SELECT увидит, что строчка была изменена, пойдет в сегмент отката и прочитает данные, которые были в этой ячейке на момент начала выполнения запроса. Во многих других базах данных, вы получите ответ в виде суммы, никогда не существующей в вашей таблице. Однако в Oracle в данном случае есть опасность получить ORA-01555: snapshot too old.
В дополнение к стандартным уровням изоляции в Oracle еще есть так называемые READ_ONLY транзакции, которые дают REPEATABLE_READ в рамках всей транзакции, а не только в рамках одного оператора. Но как следует из названия, в такой транзакции вы можете выполнять только чтение.
XML DB
Поддержка типа данных XML была встроена в СУБД Oracle9i. Структурированный XML-объект хранится в объектно-реляционной базе данных в соответствии со спецификацией W3C DOM. Встраивание синтаксиса XPath в поисковые запросы на языке SQL отвечает спецификациям группы SQLX. Язык XQuery также поддерживается.
Механизм восстановления данных
В СУБД Oracle можно включить архивацию вышеописанных оперативных журнальных файлов, и все изменения будут архивироваться. Таким образом при потере любого диска с блоками данных мы можем восстановить их на любой момент времени, включая момент прямо перед падением, накатив на последние архивные журнальные файлы текущий оперативный журнал.
Что позволяет БД Oracle работать так быстро?
Когда вы меняете данные в БД, то ваши изменения сначала идут в кэш, а потом асинхронно в нескольких потоках (число можно сконфигурировать) пишутся на диск. Синхронно же пишется специальных лог (оперативный журнальный файл), чтобы была возможность восстановить данные после сбоя, если они еще не успели с кэша сброситься на диск. Данный подход позволяет выиграть в скорости, так как в этом случае на диск все пишется последовательно в один файл, причем можно настроить так, чтобы писалось параллельно на два или больше дисков, тем самым увеличивая надежность защиты от потери изменений. Описанных файлов должно быть несколько, и они используются по кругу: как только все данные защищенные одним из лог файлов были записаны фоновым процессом в блоки данных на диск, то данный лог файл может быть переиспользован. Таким образом в какой-то мере это позволяет еще и сэкономить, имея ультрабыстрые диски небольшого размера только для небольших журнальных файлов используемых по кругу.
Обычно я рассказываю об этом, когда мне предлагают что-то сохранять просто в файл на диске, так как это будет «быстрее» за счет того, что мы будет писать все данные последовательно и головке жесткого диска не надо будет бегать и искать рэндомные блоки. Я все же настаиваю, что мы тут ничего не выиграем, так как будем писать на медленный диск, который скоро всего активно используется множеством других процессов для записи огромного количества различных логов, а Oracle синхронно тоже пишет у себя на диск только последовательно, как я описал выше.
Читайте также: