Разработка .NET-хранимых процедур для Oracle10g Database for Windows. Профессионалу-разработчику

Игорь Мельников melnikov_ii@mail.ru

СОДЕРЖАНИЕ


Введение

Признавая популярность платформы Microsoft .NET среди разработчиков приложений на платформе Windows, Oracle Corporation, начиная с версии 10g Rel.2 интегрировала .NET CLR в свою СУБД. Теперь разработчики приложений для Oracle Database for Windows могут создавать хранимые процедуры в виде сборок .NET. Интеграция с CLR предлагает множество выгод разработчикам приложений для Oracle Database:
  • Стало возможным, для разработки серверной бизнес-логики базы данных, использовать любой язык программирования .NET Framework. Теперь разработчики не ограничены только PL/SQL и Java Stored Procedure.
  • Дополнительно к увеличению производительности разработчика, компании также выиграют, так как разработчики на платформе .NET могут разрабатывать логику приложения базы данных без необходимости изучать специализированный язык PL/SQL.
  • Разработчики приложений теперь могут выбрать - они могут развернуть логику приложения в слое базы данных, в среднем слое, или на компьютере клиента.
  • Платформа .NET имеет в своем составе мощную библиотеку классов. Разработчики баз данных могут увеличить свою продуктивность, используя эту библиотеку. Не требуется создавать собственные библиотеки с "нуля", как это часто происходит в случае с PL/SQL. Дополнительно, на рынке имеется большое количество готовых .NET-компонентов - они также могут быть использованы при создании .NET -хранимых процедур в Oracle Database.
В настоящей статье будет рассмотрены следующие практические вопросы:
    1. Установка и конфигурирование Oracle Database 10g Rel.2 для выполнения .NET-хранимых процедур
    2. Создание .NET-хранимых процедур в среде MS Visual Studio 2005 и .NET Framework 2.0
    3. Публикация хранимых процедур .NET в среду выполнения на сервер Oracle Database
    4. Вопросы отладки и распространения .NET-хранимых процедур из среды разработки в промышленную среду
Теория

Рассмотрим технологию создания и выполнения .NET-хранимых процедур. Ключевым инструментом для создания .NET-хранимых процедур является Oracle Developer Tools for .NET [ODT .NET] - представляет собой набор свободно доступных инcтрументов разработчика для платформы .NET. В состав ODT .NET входят подключаемые модули (plug-ins) к средам разработки Microsoft Visual Studio .NET 2003/2005.

ODT .NET позволяет, наряду с разработкой .NET-хранимых процедур, также создавать клиентские приложения работающие с СУБД Oracle Database. Для взаимодействия с базами данных Oracle используются механизмы ADO .NET.
В случае если для выполнения приложений используется окружение NET Framework версии 1.1, то для разработки используется MS Visual Studio 2003 и ADO .NET 1.1. Если же приложения планируется выполнять в окружении .NET Framework версии 2.0 - для разработки используется MS Visual Studio 2005 и ADO .NET 2.0.

Для трансляции высокоуровневых вызов ADO .NET в "родные" (native) низкоуровневые вызовы Oracle Call Interface, корпорация Oracle поставляет свой собственный провайдер ADO DB .NET. В составе клиентского программного обеспечения Oracle Database 10g Rel.2 Client поставляется два провайдера доступа - для версий ADO .NET 1.1 и ADO .NET 2.0.

Для выполнения хранимых процедур, реализованных в сборках .NET, на сервере базы данных, предназначен компонент Oracle Database Extensions for .NET [ODE .NET]. Указанный компонент входит в дистрибутив Oracle Database 10.2.0 for Windows.

Рис.1 Поддержка технологий .NET в Oracle Database for Windows
Установка

    Установка Oracle Database Прежде всего, необходимо отметить тот очевидный факт, что возможность создания .NET-хранимых процедур возможна только для Oracle Database на платформе MS Windows. Поддержка выполнения .NET-хранимых процедур доступна во всех редакциях СУБД Oracle: начиная от бесплатной версии (Express Edition) и заканчивая корпоративной редакцией (Enterprise Edition). Для включения возможности выполнения .NET-хранимых процедур, при установке программного обеспечения Oracle Database 10g Rel.2 for Windows, в списке компонентов необходимо выбрать Oracle Database Extensions for .NET.

Рис.2 Выбор установки ODE.NET в среде Oracle Universal Installer
    Установка ODE .NET 10.2.0.2 Следующим шагом, для включения поддержки .NET Framework версии 2.0 в .NET-хранимых процедурах, нужно установить обновление (patch) ODE .NET 10.2.0.2. ODE .NET 10.2.0.2 входит в состав Oracle Developer Tools for .NET. Загрузить ODT .NET можно с сайта Oracle Technology Network по следующему адресу: /technology/software/tech/dotnet/utilsoft.html При установке обновления ODT .NET 10.2.0.2, в списке компонентов необходимо выбрать Oracle Database Extensions for .NET

Рис.3 Выбор Oracle Database Extensions for .NET при установке ODT .NET
Нужно обратить внимание, что ODE .NET необходимо устанавливать в тот же каталог, в который установлен Oracle Database.

Рис.4 Выбор при установке ODE 10.2.0.2, каталога с установленной Oracle Database
Далее, следует выбрать: с помощью какой версии .NET Framework будут созданы и будут далее выполняться .NET-хранимые процедуры.

Рис.5 Выбор версии .NET Framework для выполнения .NET-хранимых процедур
После установки обновления ODE .NET 10.2.0.2, в среде SQL*Plus следует скомпилировать новую версию пакета DBMS_CLR, с помощью следующего набора команд: SQL> connect / as sysdba
SQL> @?/rdbms/admin/dbmsclr.plb
    Установка Oracle Developer Tools for Visual Studio .NET Для поддержки процесса разработки .NET-хранимых процедур, необходимо установить подключаемый модуль, входящий в состав ODT .NET, к среде MS Visual Studio.
В случае установки Oracle Developer Tools for Visual Studio .NET на машине с уже установленной Oracle Database, ODT .NET необходимо установить в отдельный каталог (ORACLE_HOME). Oracle Developer Tools for Visual Studio .Net, также как и ODE .NET, входит в состав Oracle Developer Tools for .NET 10.2.0.2.

Рис.6 Установка Oracle Developer Tools for Visual Studio .NET
На следующем шаге необходимо выбрать набор компонентов для соответствующей версии MS Visual Studio .NET:

Рис.7 Выбор компонентов для MS Visual Studio .NET 2005
Конфигурирование Процесс настройки ПО Oracle Database для выполнения .NET-хранимых процедур состоит из двух шагов:
  • установки ключей реестра для соответствующего ORACLE_HOME;
  • настройки прослушивающего процесса Oracle Listener.
    Настройка реестра MS Windows Для определения версии .NET Framework, которая будет использоваться при создании и выполнении .NET-хранимых процедур, необходимо вручную создать строковый ключ реестра с именем ".NETFramework" в разделе: "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_(HOMENAME)\ODE"
Где: HOME_NAME - внутреннее имя для домашнего каталога, в который установлено ПО Oracle Database. Значения ключа ".NET Framework" могут быть следующими:
  • v1.0.3705
  • v1.1.4322
  • v2.0.50727

Рис.8 Определение версии .NET Framework 2.0 для выполнения .NET-хранимых процедур
На Рис.8 приведен пример определения Net Framework версии 2.0 в качестве среды выполнения .NET-хранимых процедур.     Настройка сетевого прослушивающего процесса Oracle Listener В случае создания сетевого прослушивающего процесса с помощью Net Configuration Assistant, файлы listener.ora и tnsnames.ora создаются автоматически, но также их можно создать и вручную. Содержимое файла listener.ora (ПО Oracle Database в данном случае установлено в каталог c:\oracle\product\10.2.0\db) должно иметь следующий вид:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = c:\oracle\product\10.2.0\db)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = c:\oracle\product\10.2.0\db)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mypc)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
Содержимое файла tnsnames.ora должно включать в себя два алиаса: ORACLR_CONNECTION_DATA и EXTPROC_CONNECTION_DATA:
ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )
В заключение, необходимо убедиться, что запущены два сервиса, которые необходимы для выполнения .NET-хранимых процедур:
  • Oracle(KEY_NAME)ClrAgent
  • Oracle(KEY_NAME)TNSListener

Рис.9 Для выполнения .NET-хранимых процедур на сервере должны быть запущены сервисы TNSLlistener и CLRAgent

Создание .NET-хранимых процедур в среде MS Visual Studio 2005 и .NET Framework 2.0 В данном разделе будет рассмотрен процесс создания и выполнения .NET-хранимых процедур с помощью среды разработки MS Visual Studio 2005 и среды выполнения .NET Framework 2.0.
После установки ODT .NET в среде MS Visual Studio 2005 доступен новый шаблон проекта "Oracle Projects".

Рис.10 Выбор шаблона проекта "Oracle Project" в среде MS Visual Studio 2005

После выбора шаблона проекта "Oracle Project", автоматически генерируется следующий шаблон кода (используется язык программирования C#):
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

namespace OraNetSPSample1
{
    public class Class1
    {
        public static void StoredProcedure1()
        {
          // enter you code here
        }
    }
}
В качестве примера, будет создана хранимая функция getDatabaseVersionStr, возвращающая строку с версией базы данных Oracle Database:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

namespace OraNetSPSample1
{
    public class Class1
    {
        public static String getDatabaseVersionStr()
        {
            String v_xResult;

            // Получаем объект соединения с базой данных:
            OracleConnection v_xConnection = new OracleConnection();
            v_xConnection.ConnectionString = "context connection=true";
            
            //открываем соединение:
            v_xConnection.Open();

            //создаем команду-запрос к базе даных:
            OracleCommand v_xCommand = v_xConnection.CreateCommand();
            v_xCommand.CommandText = "select * from v$version";

            //выполняем запрос:
            OracleDataReader v_xReader = v_xCommand.ExecuteReader();

            //считываем результат
            v_xReader.Read();
            v_xResult = v_xReader.GetString(0);

            //освобождаем объекты
            v_xReader.Close();
            v_xCommand.Dispose();

            //Возвращаем результат:
            return v_xResult;
        }
    }
}
В одной сборке может содержаться несколько .NET-хранимых процедур. Все они должны быть реализованы как статические методы класса. Публикация .NET-хранимых процедур в среду выполнения на сервере Oracle Database Процесс публикации .NET-хранимой процедуры на сервере Oracle Database состоит из двух шагов:
  • копирование скомпилированной сборки на файловую систему сервера с установленной БД Oracle Database;
  • создание PL/SQL-оболочки для прозрачного вызова .NET-процедуры в коде PL/SQL.
В отличие от Java-хранимых процедур, PL/SQL-оболочка создается не явным образом, а в виде зашифрованной PL/SQL-процедуры с вызовами внутреннего системного пакета DBMS_CLR. Генерацию этой процедуры-оболочки производит мастер установки (deploy wizard) ODT .NET. В ходе процесса публикации, также создается внешняя библиотека (library) базы данных Oracle. Указанная библиотека ссылается на dll-файл сборки .NET. В случае, если в результате процесса разработки изменится тип или число формальных параметров NET-процедуры, то необходимо заново перегенерировать PL/SQL-оболочку. В случае же изменения только тела .NET-процедуры, достаточно просто скопировать файлы сборки на хост-машину c Oracle Database. Для запуска мастера публикации сборки необходимо в среде MS Visual Studio выбрать пункт меню "Build/Deploy <имя проекта>".

Рис.11 Запуск мастера публикации сборки на сервере Oracle Database
В появившемся диалоговом окне необходимо создать соединение к нужной базе данных:

Рис.12 Создание соединения к базе даных
Следует обратить внимание, что пользователь, указанный в соединении, должен иметь роль SYSDBA. В следующем диалоговом окне необходимо выбрать режим публикации сборки с хранимой процедурой на стороне сервера Oracle Database. Всего возможны три режима публикации:
  • Copy assembly and generate stored procedure;
  • Copy assembly only
  • Generate stored procedures only.
При первой установке .NET-хранимой процедуры следует выбрать пункт "Copy assembly and generate stored procedure".

Рис.13 Выбор режима публикации .NET-процедуры
В следующем диалоговом окне необходимо указать имя библиотеки (external library) Oracle Database; по умолчанию устанавливается имя dll-файла сборки.

Рис.14 Определение имени внешней библиотеки (external library) Oracle Database
В следующем шаге мастера публикации происходит выбор для копирования файлов, от которых зависит сборка.

Рис.15 Выбор файлов дял копирования на сервер
Для определения схемы БД, в которой будет опубликована .NET-хранимая процедура, предназначен следующий шаг мастера.

Рис.16 Определение схемы БД для публикации хранимой процедуры
Важным аспектом публикации .NET-хранимой процедуры является установка соответствия между типами ее параметров и типами PL/SQL. Установка соответствия производится с помощью выбора кнопки "Parameter Type Mapping:".

Рис.17 Установка соответствия типов .NET и Oracle Database
Более полная информация по соответствию типов содержится в документе OracleR Data Provider for .NET Developer's Guide 10g Release 2 (10.2.0.2)B28089-01 На заключительном шаге можно просмотреть и сохранить SQL-скрипт создания PL/SQL-оболочки для .NET-хранимой процедуры.

Рис.18
Выполнение .NET-хранимых процедур После публикации .NET-хранимой процедуры на сервере базы данных Oracle Database, ее вызов аналогичен вызову любой другой PL/SQL-процедуры.
Для проверки работоспособности процедуры можно выполнить в среде SQL*Plus следующий набор команд:
SQL> conn spnet_demo/spnet_demo
Соединено.
SQL> set serveroutput on
SQL> exec dbms_output.put_line(GetDatabaseVersionStr);
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod

Процедура PL/SQL успешно завершена.


  Отличительной особенностью .NET-хранимых процедур является возможность 
	их отладки на стороне клиента. Для этого достаточно заменить строку 
	соединения в свойстве ConnectionString класса OracleConnection 
	на соединение к удаленной базе данных. Для этого можно использовать либо 
	макроподстановку, либо глобальную строковую переменную:
v_xConnection.ConnectionString = v_xConnectionStr;
В преведенным выше примере кода, простой заменой значения переменной v_xConnectionStr на значение"context connection=true", можно обеспечить возможность выполнения статических методов на сервере БД Oracle.
Для разработки .NET-хранимых процедур можно использовать любые среды и языки программирования которые поддерживают Microsoft .NET, например Borland Delphi 2005/2006. Для этого необходимо лишь сгенерировать процедуру создания PL/SQL оболочки в среде MS Visual Studio 2003, и перевести заголовок класса в соответствующий эквивалент на языке Object Pascal. Для публикации сборки, созданной в Borland Delphi, на сервер Oracle Database, достаточно просто скопировать dll-файл сборки в каталог %ORACLE_HOME\bin\clr. Заключение Обеспечив возможность создания и выполнения .NET-хранимых процедур, корпорация Oracle предоставила в распоражение разработчиков мощные возможности по созданию приложений .NET которые работают с Oracle Database на платформе MS Windows.
Использование .NET-хранимых процедур позволит объединить огромную мощь серверов Oracle Database10g с новыми технологическими и архитектурными решениями которые предлагает платформа Microsoft .NET. Ссылки


Опубликовал admin
4 Окт, Среда 2006г.



Программирование для чайников.