оракул база данных обучение
Курсы и сертификации Oracle
Программирование и СУБД
Oracle
Корпорация Oracle – крупнейший в мире поставщик программного обеспечения для управления информацией и вторая в мире компания по поставке программного обеспечения. Благодаря расширенным возможностям, надежности и масштабируемости, Oracle сегодня является самой популярной системой управления базами данных среди крупных компаний, банков и государственных организаций. Лидирующее положение компании и сложность программных продуктов позволяет администраторам и разработчикам Oracle (особенно сертифицированным) быть одними из самых востребованных и высокооплачиваемых IT-специалистов в мире. Отличное знание Oracle — это пригласительный билет на престижную работу практически в любую точку мира, включая США, Канаду, Австралию и другие страны.
Курсы обучения Oracle в Центре «Специалист» призваны научить слушателей выполнять установку, управление, диагностику, мониторинг, настройку безопасности и многое другое в СУБД Oracle.
Курсы Oracle ориентированы как на начинающего администратора базы данных Oracle, так и на разработчика приложений Oracle, решившего перейти к администрированию. В процессе обучения Oracle Вы научитесь использовать SQL для работы с базой данных и автоматизировать сложные задачи с помощью PL/SQL.
Изложение ведется по принципу «от простого к сложному». Сначала рассматриваются основы баз данных, включая такие фундаментальные понятия, как «таблица», «строка», «запись», «столбец» и «поле», а затем объясняется, как сохранять, извлекать и модифицировать данные, управлять программой SQL*Plus, создавать SQL-функции и, наконец, писать программы на PL/SQL.
Под руководством опытных и сертифицированных преподавателей Центра «Специалист» Вы станете настоящими администраторами СУБД Oracle!
В нашем Центре Вы можете пройти обучение на курсах бизнес-аналитики Oracle и получить все необходимые знания и навыки для успешной работы в системе Oracle Business Intelligence Enterprise Edition (OBIEE).
10 приёмов работы с Oracle
В Сбере есть несколько практик Oracle, которые могут оказаться вам полезны. Думаю, часть вам знакома, но мы используем для загрузки не только ETL-средства, но и хранимые процедуры Oracle. На Oracle PL/SQL реализованы наиболее сложные алгоритмы загрузки данных в хранилища, где требуется «прочувствовать каждый байт».
Автоматическое журналирование компиляций
На некоторых базах данных Oracle в Сбере стоит триггер на компиляцию, который запоминает, кто, когда и что менял в коде серверных объектов. Тем самым из таблицы журнала компиляций можно установить автора изменений. Также автоматически реализуется система контроля версий. Во всяком случае, если программист забыл сдать изменения в Git, то этот механизм его подстрахует. Опишем пример реализации такой системы автоматического журналирования компиляций. Один из упрощённых вариантов триггера на компиляцию, пишущего в журнал в виде таблицы ddl_changes_log, выглядит так:
В этом триггере получают название и новое содержимое компилируемого объекта, дополняют его предыдущим содержимым из словаря данных и записывают в лог изменений.
Как быть, если хочется сделать вьюшку с параметрами
Такое желание может часто посещать разработчика на Oracle. Почему можно сделать процедуру или функцию с параметрами, но не бывает вьюшек с входными параметрами, которые можно использовать при вычислениях? В Oracle есть чем заменить это недостающее, на наш взгляд, понятие.
Рассмотрим пример. Пусть есть таблица с продажами по подразделениям за каждый день.
Такой запрос сравнивает продажи по подразделениям за два дня. В данном случае, 30.04.2020 и 11.09.2020.
Вот вьюшка, которую хочется написать для обобщения такого запроса. Хочется передавать даты в качестве параметров. Однако синтаксис не позволяет такое сделать.
Предлагается такое обходное решение. Создадим тип под строку из этой вьюшки.
И создадим тип под таблицу из таких строк.
Вместо вьюшки напишем pipelined функцию с входными параметрами-датами.
Обращаться к ней можно так:
Этот запрос и выдаст нам такой же результат, как запрос в начале этой заметки с явным образом подставленными датами.
Pipelined функции могут быть также полезны, если нужно передать параметр внутрь сложного запроса.
Например, рассмотрим сложную вьюшку, в которой поле field1, по которому хочется отфильтровать данные, запрятано где-то глубоко во вьюшке.
И запрос из вьюшки с фиксированным значением field1 может иметь плохой план выполнения.
Т.е. вместо того, чтобы сначала отфильтровать deep_table по условию field1 = ‘myvalue’, запрос может сначала соединить все таблицы, обработав излишне большой объём данных, а потом уже фильтровать результат по условию field1 = ‘myvalue’. Такой сложности можно избежать, если сделать вместо вьюшки pipelined функцию с параметром, значение которого присваивается полю field1.
Использование динамической статистики в запросах
Бывает, что один и тот же запрос в БД Oracle обрабатывает всякий раз различный объём данных в использующихся в нём таблицах и подзапросах. Как заставить оптимизатор всякий раз понимать, какой из способов соединения таблиц на этот раз лучше и какие индексы использовать? Рассмотрим, например, запрос, который соединяет порцию изменившихся с последней загрузки остатков по счетам со справочником счетов. Порция изменившихся остатков по счетам сильно меняется от загрузки к загрузке, составляя то сотни строк, то миллионы строк. В зависимости от размера этой порции требуется соединять изменившиеся остатки со счетами то способом /*+ use_nl*/, то способом /*+ use_hash*/. Всякий раз повторно собирать статистику неудобно, особенно, если от загрузки к загрузке изменяется количество строк не в соединяемой таблице, а в соединяемом подзапросе. На помощь тут может прийти хинт /*+ dynamic_sampling()*/. Покажем, как он влияет, на примере запроса. Пусть таблица change_balances содержит изменения остатков, а accounts – справочник счетов. Соединяем эти таблицы по полям account_id, имеющимся в каждой из таблиц. В начале эксперимента запишем в эти таблицы побольше строк и не будем менять их содержимое.
Сначала возьмём 10% изменений остатков в таблице change_balances и посмотрим, какой план будет с использованием dynamic_sampling:
Итак, видим, что предлагается пройти таблицы change_balances и accounts с помощью full scan и соединить их посредством hash join.
Теперь резко уменьшим выборку из change_balances. Возьмём 0.1% изменений остатков и посмотрим, какой план будет с использованием dynamic_sampling:
На этот раз к таблице change_balances таблица accounts присоединяется посредством nested loops и используется индекс для чтения строк из accounts.
Если же хинт dynamic_sampling убрать, то во втором случае план останется такой же, как в первом случае, и это не оптимально.
Подробности о хинте dynamic_sampling и возможных значениях его числового аргумента можно найти в документации.
Как сохранить план запроса при вставке данных через database link
Решаем такую задачу. На сервере-источнике данных имеются таблицы, которые нужно соединить и загрузить в хранилище данных. Допустим, на сервере-источнике написана вьюшка, которая содержит в себе всю нужную ETL-логику преобразований. Вьюшка написана оптимально, в ней указаны хинты оптимизатору, подсказывающие, как соединять таблицы и какие индексы использовать. На стороне сервера хранилища данных нужно сделать несложную вещь – вставить данные из вьюшки в целевую таблицу. И тут могут возникнуть сложности. Если вставку в целевую таблицу осуществить командой вида
, то вся логика плана запроса, содержащаяся во вьюшке, из которой читаем данные по database link, может быть проигнорирована. Все хинты, зашитые в этой вьюшке могут быть не учтены.
Чтобы сохранить план запроса во вьюшке, можно воспользоваться вставкой данных в целевую таблицу из курсора:
в отличие от вставки
сохранит план запроса, заложенный во вьюшку на сервере-источнике.
Запуск процедур в параллельных сессиях
Часто стоит задача запустить из некоторой родительской процедуры несколько параллельных расчётов и, дождавшись завершения каждого из них, продолжить выполнение родительской процедуры. Это может быть полезно при параллельных вычислениях, если ресурсы сервера позволяют это. Есть много способов сделать это.
Опишем очень простой вариант реализации такого механизма. Параллельные процедуры будем выполнять в параллельных “одноразовых” джобах, родительская же процедура в цикле будет ожидать завершения всех этих джобов.
Создадим таблицы с метаданными для этого механизма. Для начала сделаем таблицу с группами параллельно запускаемых процедур:
Далее создадим таблицу со скриптами, которые будут параллельно выполняться в группах. Наполнение этой таблицы может быть как статическим, так и создаваться динамически:
И сделаем таблицу журнала, где будем собирать лог того, какая процедура когда в каком джобе запускалась:
Теперь приведём код процедуры по запуску параллельных потоков:
Проверим, как работает процедура run_in_parallel. Создадим тестовую процедуру, которую будем вызывать в параллельных сессиях.
Заполним название группы и таблицу со cкриптами, которые будут выполняться параллельно.
Запустим группу параллельных процедур.
По завершении посмотрим лог.
RUN_ID | GROUP_ID | PROC_SCRIPT | JOB_ID | START_TIME | END_TIME |
1 | 1 | begin sleep(5); end; | 1 | 11.09.2020 15:00:51 | 11.09.2020 15:00:56 |
1 | 1 | begin sleep(10); end; | 2 | 11.09.2020 15:00:51 | 11.09.2020 15:01:01 |
Видим, что время выполнения экземпляров тестовой процедуры соответствует ожиданиям.
Протягивание остатков
Опишем вариант решения достаточно типовой банковской задачи по “протягиванию остатков”. Допустим, имеется таблица фактов изменения остатков по счетам. Требуется на каждый день календаря указать актуальный остаток по счёту (последний за день). Такая информация часто бывает нужна в хранилищах данных. Если в какой-то день не было движений по счёту, то нужно повторить последний известный остаток. Если объёмы данных и вычислительные мощности сервера позволяют, то можно решить такую задачу с помощью SQL-запроса, даже не прибегая к PL/SQL. Поможет нам в этом функция last_value(* ignore nulls) over(partition by * order by *), которая протянет последний известный остаток на последующие даты, в которых не было изменений.
Создадим таблицу и заполним её тестовыми данными.
Нижеприведённый запрос решает нашу задачу. Подзапрос ‘cld’ содержит календарь дат, в подзапросе ‘ab’ группируем остатки за каждый день, в подзапросе ‘a’ запоминаем перечень всех счетов и дату начала истории по каждому счёту, в подзапросе ‘pre’ для каждого счёта составляем календарь дней с начала его истории. Финальный запрос присоединяет к календарю дней активности каждого счёта последние остатки на каждый день и протягивает их на дни, в которых не было изменений.
Результат запроса соответствует ожиданиям.
DT | ACCOUNT_ID | BALANCE_AMT | TURNOVER_AMT |
01.01.2020 | 1 | 23 | 23 |
02.01.2020 | 1 | 23 | 0 |
03.01.2020 | 1 | 23 | 0 |
04.01.2020 | 1 | 23 | 0 |
05.01.2020 | 1 | 44 | 21 |
06.01.2020 | 1 | 44 | 0 |
07.01.2020 | 1 | 44 | 0 |
08.01.2020 | 1 | 44 | 0 |
09.01.2020 | 1 | 44 | 0 |
10.01.2020 | 1 | 44 | 0 |
05.01.2020 | 2 | 77 | 77 |
06.01.2020 | 2 | 77 | 0 |
07.01.2020 | 2 | 72 | -5 |
08.01.2020 | 2 | 72 | 0 |
09.01.2020 | 2 | 72 | 0 |
10.01.2020 | 2 | 72 | 0 |
Объединение нескольких историй в одну
При загрузке данных в хранилища часто решается задача, когда нужно выстроить единую историю по сущности, имея отдельные истории атрибутов этой сущности, пришедшие из различных источников. Допустим, имеется некоторая сущность с первичным ключом primary_key_id, о которой известна история (start_dt — end_dt) трёх её различных атрибутов, расположенная в трёх различных таблицах.
Целью является загрузка единой истории изменения трёх атрибутов в одну таблицу.
Ниже приведён запрос, решающий такую задачу. В нём сначала формируется диагональная таблица q1 с данными из разных источников по разным атрибутам (отсутствующие в источнике атрибуты заполняются null-ами). Затем с помощью функции last_value(* ignore nulls) диагональная таблица схлопывается в единую историю, а последние известные значения атрибутов протягиваются вперёд на те даты, в которые изменений по ним не было:
Результат получается такой:
PRIMARY_KEY_ID | START_DT | END_DT | ATTRIBUTE1 | ATTRIBUTE2 | ATTRIBUTE3 |
1 | 01.01.2014 | 31.12.2014 | 7 | NULL | NULL |
1 | 01.01.2015 | 31.12.2015 | 8 | 4 | NULL |
1 | 01.01.2016 | 31.12.2016 | 9 | 5 | 10 |
1 | 01.01.2017 | 31.12.2017 | 9 | 6 | 20 |
1 | 01.01.2018 | 31.12.9999 | 9 | 6 | 30 |
2 | 01.01.2014 | 31.12.2014 | 17 | NULL | NULL |
2 | 01.01.2015 | 31.12.2015 | 18 | 14 | NULL |
2 | 01.01.2016 | 31.12.2016 | 19 | 15 | 110 |
2 | 01.01.2017 | 31.12.2017 | 19 | 16 | 120 |
2 | 01.01.2018 | 31.12.9999 | 19 | 16 | 130 |
Нормалайзер
Иногда встаёт задача о нормализации данных, пришедших в формате поля с разделителями. Например, в виде такой таблицы:
Такой запрос нормализует данные, расклеив соединённые запятой поля в виде нескольких строк:
Результат получается такой:
ID | VAL | COLUMN_VALUE |
1 | aaa | 1 |
1 | cccc | 2 |
1 | bb | 3 |
2 | ddd | 1 |
3 | fffff | 1 |
3 | e | 2 |
Визуализация в формате SVG
Часто возникает желание как-то визуализировать числовые показатели, хранящиеся в базе данных. Например, построить графики, гистограммы, диаграммы. В этом могут помочь специализированные средства, например, Oracle BI. Но лицензии на эти средства могут стоить денег, а настройка их может занять больше времени, чем написание “на коленке” SQL-запроса к Oracle, который выдаст готовую картинку. Продемонстрируем на примере, как с помощью запроса быстро нарисовать такую картинку в формате SVG.
Предположим, у нас есть таблица с данными
dt – это дата актуальности,
val – это числовой показатель, динамику которого по времени мы визуализируем,
radius – это ещё один числовой показатель, который будем рисовать в виде кружка с таким радиусом.
Скажем пару слов о формате SVG. Это формат векторной графики, который можно смотреть в современных браузерах и конвертировать в другие графические форматы. В нём, среди прочего, можно рисовать линии, кружки и писать текст:
Ниже SQL-запрос к Oracle, который строит график из данных в этой таблице. Здесь подзапрос const содержит различные константные настройки – размеры картинки, количество меток на осях графика, цвета линий и кружочков, размеры шрифта и т.д. В подзапросе gd1 мы приводим данные из таблицы graph_data к координатам x и y на рисунке. Подзапрос gd2 запоминает предыдущие по времени точки, из которых нужно вести линии к новым точкам. Блок ‘header’ – это заголовок картинки с белым фоном. Блок ‘vertical lines’ рисует вертикальные линии. Блок ‘dates under vertical lines’ подписывает даты на оси x. Блок ‘horizontal lines’ рисует горизонтальные линии. Блок ‘values near horizontal lines’ подписывает значения на оси y. Блок ‘circles’ рисует кружочки указанного в таблице graph_data радиуса. Блок ‘graph data’ строит из линий график динамики показателя val из таблицы graph_data. Блок ‘footer’ добавляет замыкающий тэг.
Результат запроса можно сохранить в файл с расширением *.svg и посмотреть в браузере. При желании можно с помощью какой-либо из утилит конвертировать его в другие графические форматы, размещать на веб-страницах своего приложения и т.д.
Получилась такая картинка:
Приложение поиска по метаданным Oracle
Клиентская часть не сложная. Веб-интерфейс получает введённую пользователем поисковую строку, список серверов для поиска и логин пользователя. Веб-страница передаёт их в хранимую процедуру Oracle на сервере-обработчике. История обращений к поисковику, т.е. кто какой запрос выполнял, на всякий случай журналируется.
Получив поисковый запрос, серверная часть на поисковом сервере Oracle запускает в параллельных джобах несколько процедур, которые по database links на выбранных серверах Oracle сканируют следующие представления словаря данных в поисках искомой строки: dba_col_comments, dba_jobs, dba_mviews, dba_objects, dba_scheduler_jobs, dba_source, dba_tab_cols, dba_tab_comments, dba_views. Каждая из процедур, если что-то обнаружила, записывает найденное в таблицу результатов поиска (с соответствующим ID поискового запроса).
Когда все поисковые процедуры завершили работу, клиентская часть выдаёт пользователю всё, что записалось в таблицу результатов поиска с соответствующим ID поискового запроса.
Но это ещё не всё. Помимо поиска по словарю данных Oracle в описанный механизм прикрутили ещё и поиск по репозиторию Informatica PowerCenter. Informatica PowerCenter является популярным ETL-средством, использующимся в Сбербанке при загрузке различной информации в хранилища данных. Informatica PowerCenter имеет открытую хорошо задокументированную структуру репозитория. По этому репозиторию есть возможность искать информацию так же, как и по словарю данных Oracle. Какие таблицы и поля используются в коде загрузок, разработанном на Informatica PowerCenter? Что можно найти в трансформациях портов и явных SQL-запросах? Вся эта информация имеется в структурах репозитория и может быть найдена. Для знатоков PowerCenter напишу, что наш поисковик сканирует следующие места репозитория в поисках маппингов, сессий или воркфловов, содержащих в себе где-то искомую строку: sql override, mapplet attributes, ports, source definitions in mappings, source definitions, target definitions in mappings, target_definitions, mappings, mapplets, workflows, worklets, sessions, commands, expression ports, session instances, source definition fields, target definition fields, email tasks.
Автор: Михаил Гричик, эксперт профессионального сообщества Сбербанка SberProfi DWH/BigData.
Профессиональное сообщество SberProfi DWH/BigData отвечает за развитие компетенций в таких направлениях, как экосистема Hadoop, Teradata, Oracle DB, GreenPlum, а также BI инструментах Qlik, SAP BO, Tableau и др.
Курсы Oracle
Oracle – крупнейший производитель ПО для управления базами данных. В Учебном центре Softline проводятся авторизованные курсы Oracle разных уровней сложности.
Учебный центр Softline – авторизованный провайдер образовательных программ Oracle.
В программе обучения соблюдаются все рекомендации вендора, курсы проводят сертифицированные тренеры, используются учебные материалы от разработчика, дополняемые практическими наработками специалистов Softline.
Этот курс начинается с введения в PL/SQL и продолжается рассмотрением преимуществ этого мощного языка программирования. Слушатели ознакомятся с тем, как создавать блоки PL/SQL в коде приложения, которые могут совместно использоваться формами, отчётами и в приложениях управления данными. Дополнительно, создание анонимных блоков PL/SQL, также как и хранимых процедур и функций, рассматривается в этом курсе.
Курс позволит вам получить навыки работы с Oracle Application Express (APEX)
Цель курса: совершенствование/приобретение новых компетенций, необходимых для разработки веб-приложений, основанных на БД с помощью Oracle Application Express.
В курсе вы изучите анализ производительности и задачи настройки, ожидаемые от DBA: проактивное сопровождение посредством встроенных средств анализа производительности и инструментария, диагностика и настройка компонентов экземпляров баз данных Oracle, а также диагностика и настройка производительности SQL-запросов.
Данный курс обучает слушателей продвинутым возможностям PL/SQL для проектирования и настройки PL/SQL на эффективное взаимодействие с базой данных и прочими приложениями. Инструкторы-эксперты университета Oracle помогут слушателям исследовать продвинутые возможности разработки программ, пакетов, курсоров, продвинутых методов взаимодействия и коллекций.
Курс научит вас как интерпретировать концепцию иерархических запросов, созданию иерархически-структурированных отчетов, форматированию иерархических данных и исключению отдельных частей из структуры иерархии.
В курсе рассматриваются новые возможности базы данных Oracle 18c, которые отсутствовали в прежних версиях. Нововедения касаются развития контейнерной архитектуры, новых возможностей утилиты для резервирования и восстановления данных RMAN, новых преимуществ в защите базы данных, повышения производительности базы данных, нового функционала для хранилищ и усовершенствований при сегментировании данных.
Слушатели познакомятся с новыми возможностями базы данных Oracle 18c, которые отсутствовали в прежних версиях. Нововедения касаются развития кластерной файловой системы, менеджера динамических томов, реальных кластеров приложений. Рассмотрены новые возможности для Oracle Data Guard, автоматического управления хранением, частных временных таблиц.
Данный курс посвящен новым и расширенным возможностям Oracle Database 12c Release 2 (12.2.0.1) в таких областях, как безопасность, доступность, партиционирование, производительность и and Information Lifecycle Management (ILM). Программа предназначена для администраторов баз данных, системных администарторов. Слушатели получат представление о новых и расширенных возможностях Oracle Database 12c Release 2 в таких областях администрирования, как Unified Auditing, Transparent Data Encryption (TDE) и в других вопросах безопасности, Recovery Manager, online операций, Oracle Data Pump, SQL*Loader, новых методов партиционирования, Automatic Data Optimization, In-Memory Column Store, Full Database In-Memory Caching и Automatic Big Table Caching.
В данном курсе изучается архитектура Oracle ASM. Опытные преподаватели Oracle помогут вам глубже понять стандартные приложения ASM и Flex ASM. В этом курсе вы познакомитесь с облачной службой Oracle Database Exadata. Изучаются надежные, безопасные и простые способы управления производительностью, оптимизация рабочей нагрузки базы данных, снижение стоимости IT и обеспечение более высокого качества сервисов путем консолидации в облака баз данных, для чего рассмотрены Oracle Database 12c Grid Infrastructure и особенно Oracle ASM.
Данный курс является курсом начального уровня и предназначен для программистов и разработчиков, незнакомых с Java и желающих изучить основные концепции и элементы языка, используемые типы данных. В курсе рассматривается обработка исключений, выражения Lambda и модульное программирование. В курсе используется последние актуальные версии JDK. Слушатели выполнят большое количество лабораторных работ для закрепления полученных знаний.
В курсе рассматриваются основы объектно-ориентированного программирования с использованием языка Java. Слушатели научатся создавать приложения Java с использованием следующих возможностей языка: циклы и методы, определяющие ход выполнения программы; базовые концепции объектно-ориентированного программирования, такие как наследование, инкапсуляция, абстрагирование; использовать и манипулировать ссылками на объекты и создавать простой код для обработки ошибок; использовать пакеты java.time и java.time.format для работы с датами и временем; использовать выражения Predicate Lambda. Для закрепления полученных знаний предусмотрено выполнение лабораторных работ.
Java EE 7: Back-End Server Application Development курс научит вас, как создавать и развертывать корпоративные приложения, которые соответствуют Java Platform, Enterprise Edition 7 Full Profile. Научитесь разрабатывать приложения с использованием следующих технологий: корпоративных JavaBeans (EJB), API Persistence API Java (JPA), JDBC, Java Transaction API (JTA), Contexts и Dependency Injection (CDI), Java Message Service (JMS), Bean Validation, Batch API, Timer services, Java EE Concurrency и другим.
В курсе рассматриваются ключевые возможности языка и программные интерфейсы (API), которые используются для создания объектно-ориентированных приложений на базе платформы Java Standard Edition (SE) 8.
Код | Название экзамена | Время | Стоимость |
Код | Название экзамена | Время | Стоимость |
1Z0-070 | Oracle Exadata X5 Administration 1Z0-070 | мин | 30 600руб. |
1Z0-134 | Oracle WebLogic Server 12c: Advanced Administrator II 1Z0-134 | мин | 30 600руб. |
1Z0-338 | Oracle Exadata Database Machine and Cloud Service 2017 Implementation Essentials 1Z0-338 | мин | 30 600руб. |
1Z0-342 | JD Edwards EnterpriseOne Financial Management 9.2 Implementation Essentials 1Z0-342 | мин | 30 600руб. |
1Z0-343 | JD Edwards EnterpriseOne Distribution 9.2 Implementation Essentials 1Z0-343 | мин | 30 600руб. |
1Z0-344 | JD Edwards EnterpriseOne Configurable Network Computing 9.2 Implementation Essentials 1Z0-344 | мин | 30 600руб. |
1Z0-404 | Oracle Communications Session Border Controller 7 Basic Implementation Essentials 1Z0-404 | мин | 30 600руб. |
1Z0-435 | Oracle Business Process Management Suite 12c Essentials 1Z0-435 | мин | 30 600руб. |
1Z0-499 | Oracle ZFS Storage Appliance 2017 Implementation Essentials 1Z0-499 | мин | 30 600руб. |
1Z0-580 | Oracle Solaris 11 Installation and Configuration Essentials 1Z0-580 | мин | 30 600руб. |
1Z0-750 | Oracle Application Express 18: Developing Web Applications 1Z0-750 | мин | 30 600руб. |
1Z0-808 | Java SE 8 Programmer I / Программист Java SE 8, ступень I 1Z0-808 | мин | 30 600руб. |
1Z0-809 | Java SE 8 Programmer II / Программист Java SE 8, ступень II 1Z0-809 | мин | 30 600руб. |
1Z0-954 | Oracle Communications Session Border Controller Troubleshooting 2017 Implementation Essentials 1Z0-954 | мин | 30 600руб. |
1Z0-817 | Upgrade OCP Java 6, 7 & 8 to Java SE 11 Developer / Повышение уровня OCP Java 6, 7 & 8 до Разработчика Java SE 11 1Z0-817 | мин | 30 600руб. |
Oracle – крупнейший производитель ПО для управления базами данных. В Учебном центре Softline проводятся авторизованные курсы Oracle разных уровней сложности.
Учебный центр Softline – авторизованный провайдер образовательных программ Oracle.
В программе обучения соблюдаются все рекомендации вендора, курсы проводят сертифицированные тренеры, используются учебные материалы от разработчика, дополняемые практическими наработками специалистов Softline.