Как подключить базу данных oracle
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Подключение базы данных Oracle к Visual Studio
В этой статье поговорим про подключение базы данных Oracle к Visual Studio в качестве источника данных. А также рассмотрим пример написания простейшего запроса к базе данных.
БД Oracle – как источник данных в VS
У меня имеется база данных “Книжный интернет-магазин”, созданная с помощью СУБД Oracle. Будем использовать эту БД в качестве примера источника данных в данной статье.
Итак, вначале создадим в Visual Studio проект: “Приложение Windows Forms”.
После того, как проект создан, в меню “ПРОЕКТ” выберем “Добавить новый источник данных…”.
Появится окно “Мастер настройки источника данных”. В этом окне выберем элемент “База данных” и нажмем кнопку Далее.
В следующем окне выбираем элемент “Набор данных” и жмем кнопку Далее.
Теперь необходимо выбрать подключение к базе данных. Оно у нас пока отсутствует, поэтому его необходимо создать. Нажмем кнопку “Создать подключение…”.
В качестве источника данных выберем “База данных Oracle”. В разделе “Connection Details” укажим данные для своего подключения.
В пункте “Database service name” я указал “XE”, потому что использую Express edition версию Oracle.
Выполним тест подключения. Для этого нажмем кнопку “Проверить подключение”.
В окне “Добавить подключение” нажмем кнопку ОК. Теперь, когда подключение создано, в Мастере настройки источника данных нажмем кнопку Далее.
В следующем окне поставим галочку напротив пункта “Да, сохранить подключение как” и нажмем кнопку Далее.
В последнем окне Мастера настройки источника данных выберем объекты, которые необходимо использовать в качестве набора данных в программе. И укажем имя этого набора. Нажмем кнопку Готово.
Теперь продемонстрируем использование данных из подключенной базы данных. Добавим в форму WIndows Forms элемент управления DataGridView. Щелкнем мышью на треугольничек в правом верхнем углу DataGridView, откроется меню “Задачи”. В этом меню можно выбрать источник данных проекта.
Выберем таблицу “Book” из базы данных.
В элементе управления DataGridView отобразятся данные из выбранной таблицы.
Пример запроса к БД Oracle из Visual Studio
Для написания запросов необходимо подключить к проекту через ссылку (References) библиотеку System_Data_OracleClient.dll (ссылка для скачивания этой библиотеки находится внизу страницы).
Приведем пример запроса к базе данных, для этого будем использовать язык C#. Получим название книги по ее ID.
Начало работы с соединителем базы данных Oracle
Используя соединитель базы данных Oracle, вы можете создавать рабочие процессы, использующие данные из существующей базы данных. Соединитель позволяет подключаться к базе данных Oracle, размещенной локально или на виртуальной машине Azure. С помощью соединителя вы можете:
Этот соединитель не поддерживает следующие элементы:
В этой статье показано, как использовать соединитель базы данных Oracle в приложении логики.
Предварительные требования
Поддерживаемые версии Oracle:
Установите локальный шлюз данных. Этот процесс описан в статье Подключение к локальным данным из приложений логики. Шлюз является обязательным компонентом для подключения к локальной базе данных Oracle или виртуальной машине Azure, на которой установлена база данных Oracle.
Локальный шлюз данных используется как мост для передачи данных между приложением логики и локальными (не расположенными в облаке) источниками. Один шлюз может использоваться с несколькими службами и источниками данных. Поэтому, как правило, шлюз устанавливается один раз.
Если клиент Oracle не установлен, при попытке создать или использовать соединение будет возникать ошибка. Описание ошибок приводится в соответствующем разделе этой статьи.
Добавление соединителя
Этот соединитель не содержит триггеров. В нем есть только действия. Поэтому при создании приложения логики следует добавить отдельный триггер для запуска приложения логики, например Расписание — Периодичность или Запрос/ответ — Ответ.
Создайте пустое приложение логики на портале Azure.
Для запуска приложения логики выберите триггер Запрос/ответ — Запрос:
Щелкните Сохранить. При сохранении данных автоматически создается URL-адрес запроса.
Выберите одно из этих действий, например База данных Oracle — Получение строки. Установите флажок Connect via on-premises data gateway (Подключение через локальный шлюз данных). Введите имя сервера Oracle, метод аутентификации, имя пользователя и пароль, а также выберите шлюз:
Следующий пример возвращает данные о задании из базы данных «Human Resources»:
На этом шаге в создаваемый рабочий процесс можно добавить любой другой соединитель. Если вам достаточно просто проверить получение данных из Oracle, отправьте полученные из Oracle данные себе по электронной почте, применив любой из соединителей отправки электронной почты, например Office 365 Outlook. Используйте динамические маркеры из таблицы Oracle для формирования полей Subject и Body в сообщении электронной почты:
Сохраните приложение логики, а затем выберите Выполнить. Закройте конструктор и проверьте состояние приложения в журнале запусков. Если вы увидите сообщение об ошибке, выберите эту строку. Откроется конструктор, в котором вы увидите, какой шаг привел к сбою, а также сведения об ошибке. Если действие будет выполнено успешно, вы получите сообщение электронной почты со сведениями, которые только что добавили.
Идеи для рабочих процессов
Распространенные ошибки
Ошибка. Шлюз недоступен
Причина. Локальный шлюз данных не может подключиться к облаку.
Устранение. Убедитесь, что шлюз работает на локальной машине, где он установлен, и что он может подключаться к Интернету. Мы рекомендуем не устанавливать шлюза на компьютере, который может быть выключен или переведен в спящий режим. Можно также попытаться перезапустить локальную службу шлюза данных (PBIEgwService).
Ошибка. Используемый поставщик является устаревшим. Для System.Data.OracleClient требуется клиентское программное обеспечение Oracle версии 8.1.7 или более поздней. Перейдите по ссылке https://go.microsoft.com/fwlink/p/?LinkID=272376, чтобы установить официальный поставщик.
Причина. На компьютере, где выполняется локальный шлюз данных, не установлен пакет SDK для клиента Oracle.
Решение. Скачайте и установите пакет SDK для клиента Oracle на компьютере, где установлен локальный шлюз данных.
Ошибка. В таблице [Имя_таблицы] не определены ключевые столбцы.
Причина. В таблице отсутствует первичный ключ.
Решение. Соединитель базы данных Oracle можно использовать только с таблицей, в которой есть столбец первичного ключа.
Сведения о соединителях
Информацию о существующих ограничениях, а также о триггерах и действиях, определенных в Swagger, см. в статье со сведениями о соединителях.
Справочные сведения
Мы рекомендуем посетить страницу Майкрософт с вопросами и ответами по Azure Logic Apps, где вы сможете задать вопросы, помочь другим пользователям и узнать, что они делают.
Чтобы улучшить Logic Apps и соединители, внесите свои предложения или проголосуйте за уже внесенные на сайте https://aka.ms/logicapps-wish.
Дальнейшие действия
Создайте приложение логики и просмотрите в списке интерфейсов API другие доступные соединители в Logic Apps.
Использование SQL*Plus и Oracle Enterprise Manager
Подключаться и работать с базами данных Oracle можно многими способами.Однако чаще всего для этого применяется предлагаемый в Oracle интерфейс и набор команд SQL*Plus. Интерфейс SQL*Plus, по сути, открывает окно в базу данных Oracle и потому очень широко используется разработчиками Oracle для создания программных единиц SQL и PL/SQL. Для администраторов баз данных Oracle этот интерфейс тоже является очень ценным инструментом по следующим причинам.
В этой статье я начинаю рассказывать о том, как использовать SQL*Plus для выполнения типичных задач по администрированию баз данных Oracle, о важных командах SQL*Plus, а также, вкратце, о том, как с помощью SQL*Plus создавать отчеты. Возможно, применять интерфейс SQL*Plus для создания большинства отчетов и не придется, но знать,как работают его многочисленные средства для генерации отчетов, совершенно не помешает.
Запуск сеанса SQL*Plus
Интерфейс SQL*Plus представляет собой утилиту, которая чаще всего применяется для подключения и работы с базами данных Oracle. Он поставляется в составе как серверного программного обеспечения Oracle Database 11g, так и клиентского программного обеспечения Oracle Client, а также нового программного обеспечения Oracle Instant Client.
После установки SQL*Plus на сервере или клиентской машине процесс подключения к серверу или клиенту и запуска сеанса SQL*Plus выглядит очень просто. Из-за того, что каждый сеанс SQL*Plus подразумевает установку соединения с базой данных (если только не применяется параметр /NOLOG), все, что требуется для запуска SQL*Plus и подключения к базе данных — это действительное имя пользователя и пароль.
Настройка среды
Перед вызовом SQL*Plus потребуется сначала правильно настроить среду Oracle.В частности, необходимо установить значения для таких переменных среды, как ORACLE_SID, ORACLE_HOME и LD_LIBRARY_PATH. Помимо этого иногда нужно установить значения и для таких переменных среды, как NLS_LANG и ORA_NLS11.
В случае не установки правильных значений для необходимых переменных среды будет возникать ошибка. Например, не установка надлежащего значения для переменной ORACLE_HOME перед запуском SQL*Plus будет приводить к появлению следующей ошибки:
В случае получения показной выше ошибки достаточно установить значение для переменной среды ORACLE_HOME:
Программное обеспечение SQL*Plus Instant Client
Для использования SQL*Plus инсталлировать полностью все серверное программное обеспечение Oracle Database вовсе не обязательно. Если нужно взаимодействовать через интерфейс SQL*Plus с базой данных, которая находится на другом сервере,вполне хватит и программного обеспечения SQL*Plus Instant Client. С помощью этого программного обеспечения к любой базе данных Oracle, функционирующей под управлением любой операционной системы, можно подключаться удаленным образом за счет указания ее имени и применения идентификатора сетевого подключения Oracle.Единственным требованием для подключения к удаленной базе данных подобным образом является указание имени удаленной базы данных в файле tnsnames.ora. Именно поэтому для SQL*Plus Instant Client требуется задавать переменную среды ORACLE_HOME.Существует также метод, который не требует применения на клиентском сервере файла tnsnames.ora. Называется он методом простого подключения (easy connect). Ниже приведен пример, показывающий, как с помощью идентификатора простого подключения установить от имени пользователя OE подключение к базе данных testdb, расположенной на сервере myserver:
В этом примере 1521 — это порт, используемый слушателем для получения запросов на установку подключения.
Запуск сеанса SQL*Plus из командной строки
Прежде чем подключаться к сеансу SQL*Plus, необходимо сначала правильно настроить среду и указать, с какой базой данных на сервере должно устанавливаться соединение по умолчанию. Делается это с помощью переменной среды ORACLE_SID.
После указания базы данных, которая должна использоваться по умолчанию (в приведенном примере это orcl) в переменной среды ORACLE_SID, можно получать доступ к SQL*Plus из приглашения командной строки, просто вводя команду sqlplus безо имени пользователя и пароля. SQL*Plus предложит ввести имя пользователя и пароль. В случае предоставления имени пользователя вместе с командой (например: sqlplus salapati),SQL*Plus будет приглашать ввести только пароль. Администратор баз данных должен входить от имени одной из административных учетных записей.
На заметку! На серверах UNIX ввод должен обязательно выполняться в нижнем регистре. В Windows интерфейс не чувствителен к регистру символов. За исключением этой небольшой детали, во всем остальном командный интерфейс SQL*Plus работает одинаково и на платформе Windows, и на всех вариантах платформ UNIX и Linux.
Разумеется, вводить имя пользователя и пароль можно и непосредственно при вызове SQL*Plus, но тогда пароль будет виден другим при его вводе. Ниже приведен пример:
Приглашение SQL (SQL>) означает, что соединение с SQL*Plus инициировано, и можно начинать вводить команды и операторы SQL, PL/SQL и SQL*Plus.
Для того чтобы подключиться к другой базе данных, а не той, что установлена по умолчанию, нужно использовать следующую команду:
Определенные операции, например запуск и завершение работы, разрешено выполнять только в случае подключения к SQL*Plus с привилегиями SYSDBA или SYSOPER. При наличии привилегий SYSDBA (или SYSOPER) подключаться к SQL*Plus можно следующим образом:
Конструкция AS позволяет устанавливать привилегированные подключения пользователям, которым были выданы системные привилегии SYSDBA или SYSOPER.
Если в базе данных была создана учетная запись аутентифицированного пользователя операционной системы (ранее называвшаяся OPS$имя; см. главу 12), устанавливать подключение можно и просто указанием символа косой черты (/), как показано ниже:
Можно также подключаться через метод аутентификации операционной системы, за счет включения владельца программного обеспечения Oracle в группу администраторов баз данных (DBA):
Обратите внимание, что во всех предыдущих примерах имя базы данных при подключении через SLQ*Plus не указывалось. Объясняется это тем, что подключение устанавливалось к принятому по умолчанию экземпляру, т.е. к базе данных, на которую указывает значение переменной среды ORACLE_SID. Указывать имя базы данных при использовании SQL*Plus для подключения к принятой по умолчанию базе данных не обязательно. Для подключения к другой базе данных, доступной по сети, нужно обязательно использовать идентификатор подключения (имя сетевой службы).
На заметку! Имя экземпляра, имя базы данных и имя службы могут как совпадать, так и отличаться.
С теоретической точки зрения, подключаться к базе данных можно с использованием полного синтаксиса идентификатора подключения, как показано в следующем примере, где для подключения к базе данных orcl применяется весь адрес целиком:
Однако за счет использования имени сетевой службы, определенного в сетевом файле tnsnames.ora, можно подключаться к базе данных более простым образом:
Кроме того, для подключения к базе данных можно применять простой метод подключения. Синтаксис простого метода подключения выглядит так:
Например, вот как подключиться с помощью этого метода к базе данных orcl:
Обратите внимание, что в случае применения простого метода подключения сетевой файл (tnsnames.ora) не нужен.
Какой бы из перечисленных методов не использовался, в конечном итоге будет обязательно успешно устанавливаться сеанс SQL*Plus либо с базой данных по умолчанию,либо с той, что была указана в идентификаторе подключения.
Установка подключения с помощью команды CONNECT
В SQL*Plus поддерживается команда CONNECT, которая позволяет после входа в SQL*Plus выполнять подключение от имени другого пользователя. Кроме того, она позволяет после подключения к одной базе данных подключаться к другой базе данных.Ниже приведен пример использования команды CONNECT для выполнения подключения от имени другого пользователя:
Следующий пример демонстрирует, как в SQL*Plus подключаться к другой базе данных за счет предоставления идентификатора подключения в виде части команды CONNECT:
Перед подключением к другой базе данных необходимо проверять, что в файле tnsnames.ora присутствует необходимая информация о подключении к удаленной базе данных.
Команду CONNECT можно использовать в SQL*Plus вместе с синтаксисом / AS SYSDBA и / AS SYSOPER, как показано ниже:
Запуск сеанса SQL*Plus без установки подключения к базе данных с помощью параметра /NOLOG
Сеанс SQL*Plus можно также запускать и без установки подключения к базе данных,счет указав вместе с командой sqlplus параметр /NOLOG. В подобном может возникать необходимость, например, при запуске базе данных или просто для использования доступных в SQL*Plus команд для записи или редактирования сценариев. После запуска сеанса SQL*Plus для подключения к базе данных всегда можно применить команду CONNECT.
Ниже приведен пример использования параметра /NOLOG:
Подключение к SQL*Plus через графический интерфейс Windows
Работать с утилитой SQL*Plus можно как в ручном, так и в сценарном не интерактивном режиме. Само собой разумеется, что уязвимые административные задачи, вроде восстановления базы данных, лучше выполнять в интерактивном режиме. Что же касается рутинных операций по обработке SQL, то их выполнение лучше автоматизировать с помощью сценариев. И в том и в другой случае сами команды будут выглядеть одинаково — отличаться будет лишь режим, в котором они будут выполняться.
Ниже показан синтаксис команды подключения к SQL*Plus:
Подключаться от имени пользователя с привилегиями SYSOPER, SYSDBA или SYSASM необходимо для выполнения привилегированных операций, вроде завершения работы и запуска базы данных или резервного копирования либо восстановления базы данных.Привилегия SYSAM является новой в Oracle Database 11g и предназначена для разделения обычных операций по администрированию баз данных и операций автоматического управления памятью (Automatic Storage Management — ASM).
Работа в SQL*Plus
После подключения к интерфейсу SQL*Plus можно начинать вводить в нем любые команды SQL*Plus, SQL или PL/SQL. Как будет объясняться позже в этой главе, операторы SQL оканчиваются либо символом точки с запятой (;), либо символом косой черты (/), а блоки кода PL/SQL — только символом косой черты (/). Вывод можно как просматривать на экране, так и при желании записывать в файл. Команды SQL*Plus всегда оканчиваются символов новой строки. При вводе команды SQL*Plus клиентская программа SQL*Plus анализирует ее, и если та представляет собой оператор SQL или PL/SQL, отправляет ее серверу баз данных для обработки.
В этом примере из-за перехода на вторую строку после дефиса (-), который еще так же является и знаком минус, утилита SQL*Plus автоматически интерпретировала его как символ продолжения и выдала ошибку, потому что оператор получился синтаксически некорректным (select 200 100 from dual). Избежать этой проблемы можно за счет использования в конце первой строки второго дефиса (знака минус) для выполнения роли символа продолжения:
В Oracle для выполнения определенных запросов необходимо использовать таблицу DUAL, поскольку в поддерживаемом Oracle синтаксисе SQL наличие конструкции FROM в операторе SELECT является обязательным (например, SELECT sysdate FROM dual;).В базах данных Microsoft SQL Server, с другой стороны, использовать таблицу DUAL не требуется, потому что в синтаксисе SQL Server допускается применение операторов SELECT без конструкции FROM.
Завершение сеанса SQL*Plus
Завершается сеанс SQL*Plus вводом команды EXIT, причем как в нижнем, так и в верхнем регистре. С помощью команды QUIT осуществляется выход в операционную систему (регистр символов тоже роли не играет).
Внимание! В случае выполнения аккуратного выхода из SQL*Plus по команде EXIT (или QUIT) будет немедленно происходить фиксация всех транзакций. Если не нужно, чтобы происходила фиксация транзакций, перед выходом потребуется выполнить команду rollback.
Как подключить базу данных oracle
Версия Oracle database 12c внесла существенное новшество в 30-ти летний продукт. Теперь внутренний системный «словарь» экземпляра разделён на части, что позволяет создавать «облегчённые» базы данных с усечённым «пользовательским словарём». Такие базы могут быть легко «извлечены» из одной контейнерной базы и «подключены» в другую, как одно целое. При этом такое существенное изменение в продукте остаётся полностью прозрачным для правильно написанного приложения.
В предлагаемой заметке я привожу пример установки Оракла 12c, создания контейнерной и подключаемой баз и включения Enterprise Manager Express.
Прежде чем мы продолжим, я хотел бы привести строки из Евангелия:
Вернёмся к нашим техническим деталям.
В 12-том Оракле данные пользователя и приложений должны храниться исключительно в «подключаемых» базах. «Контейнерная» база содержит только «системную» часть словаря, «корневую» системную базу и «начальную» базу-пустышку. Возможно создание «монолитной» базы «по старинке», так же как это делалось в 10 и 11 версиях, но от этого способа надо как можно скорее отказываться.
Установка ОС и Oracle 12c в silent режиме
Как всегда, всё начинается с операционной системы. Установим Oracle Linux Server release 5.8 в виде виртуальной или физической машины. Я использую Virtual Box и просто «клонирую» уже имеющуюся систему:
Во время установки, запуска и тестирования базы наблюдайте за производительностью вашей ОС. В моём случае я наблюдаю за самим «хостом», а не за «виртуалкой»:
Теперь распакуем архив файла поставки:
Подготовка к установке
Теперь подключимся к машине через ssh, X11 forwarding не понадобится, и проверим состав каталогов и наличие файла «ответов» для программы установки Оракла:
Запуск программы установки
Я предпочитаю устанавливать Oracle Database в «молчаливом» режиме, который позволяет мне чётко видеть происходящее, обнаруживать ошибки, легко повторять установку на нескольких машинах (узлах кластера?) и продлевать срок службы мышки.
Действия после установки
После установки, как указано в лог файле, мы запустим скрипт от имени суперпользователя:
Настройка и запуск Network Listener
После того, как все двоичные файлы и библиотеки Оракла были установлены на предыдущем этапе, нам надо начать с конфигурирования и запуска сетевых процессов. Для подготовки listener файла мы будем использовать «помощника сетевой конфигурации»:
Создание «Контейнерной» базы данных, без схем пользователя
Для создания пустой «контейнерной базы» я использую тот же самый Database Configuration Assistant.
Уже очевидно, что мы сможем подключиться к базе CDB через SQL*Plus. Но как же графики и картинки? Тут ситуация на удивление улучшилась значительно!
Регистрация новой «Контейнерной» базы в Enterprise Manager Express
Повторюсь, EM Express не является J2EE приложением, не требует Weblogic или других локальных контейнеров. Это простое и изящное продолжение DB Control’a, с добавкой дополнительных возможностей, взятых из SQL Active Reports. И всё это находится непосредственно внутри базы, использует только XML DB и не имеет внешних зависимостей.
Откроем вебброузер и зайдём на адрес «http://db12c.localdomain:8080/em». Убедитесь что дополнения вроде NoScript, Adblock and FlashBlock не блокируют веб сайт. Зайдите под именем пользователя «sys/oracle», отметив при этом опцию «as sysdba».
Отключить EM Express также просто:
Создание «Подключаемой» базы из существующего «образца»
Проверим появилась ли новая база в нашем «общем» системном словаре Oracle:
В процессе создания PDB появляются записи в alert log, здесь я пересоздаю PDB повторно:
Заметьте появление «container=3» в вызове «ALTER SYSTEM». Также наличие «inst=0» наводит нас на мысль что pluggable databases работают и в RAC 🙂 В ОС были созданы следующие файлы и новая подключаемая база была зарегистрирована для listener как новая сетевая служба (service):
Подключение к новой PDB
Заметим, что «контейнерная» база CDB предоставляет «общий» tablespace UNDO для всех «подключаемых» баз PDB, но при этом каждая из PDB имеет свою собственную «копию» SYSTEM, SYSAUX и TEMP.
Также запомним что «локальный» администратор подключаемой базы PDB не может подсоединиться к «корню» контейнерной базы CDB:
Работа с подключаемой базой
Проверить параметры одной PDB можно так.
Кроме того, пользователь «SYS» из контейнерной базы CDB, но подключенный к PDB, не сможет изменить «системную» часть «разделённого» словаря Oracle. Этот же пользователь сможет выполнить эту же самую операцию, но подключившись к контейнеру «CDB$ROOT». Это сделано в качестве попытки защитить ДБА от самих себя?
Также «разделённый» словарь Oracle означает что при обновлении (upgrade) Oracle Home нам понадобится запускать скрипт только на CDB. Множество мелких PDB не потребуют обновлений, поскольку PDB могут «видеть» (но не изменять!) уже обновлённые объекты из «общей» части системного словаря CDB. Внутренние механизмы под названием «metadata link» и «object link» позволяют всем PDB видеть «общую» часть стандартных объектов, поставляемых Ораклом в составе «database dictionary».
Демонстрируя смену текущего контейнера, попытаюсь ввести некие ограничения на объём дискового пространства, потребляемого одной PDB. Предположим, что моя PDB должна «укладываться» со всеми её tablespaces (users, sys and temp) в рамки 2 Гб и при этом не потреблять более 0.8 Гб «общего» TEMP tablespace, предоставляемого CDB.
Что бы это значило?
В общем, похоже нас ожидают интересные времена и Oracle не даёт нам скучать 🙂