Игорь Мельников
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.
Ссылки
Последние комментарии