Автор: Пользователь скрыл имя, 06 Января 2013 в 16:50, реферат
Объектно-реляционная СУБД (ОРСУБД) — реляционная СУБД (РСУБД), поддерживающая некоторые технологии, реализующие объектно-ориентированный подход. Разница между объектно-реляционными и объектными СУБД: первые являют собой надстройку над реляционной схемой, вторые же изначально объектно-ориентированы. Главная особенность и отличие объектно-реляционных, как и объектных, СУБД от реляционных заключается в том, что О(Р)СУБД интегрированы с Объектно-Ориентированным (OO) языком программирования, внутренним или внешним как C++, Java. Характерные свойства ОРСУБД - 1) комплексные данные, 2) наследование типа, и 3) объектное поведение.
Введение
1 Назначение продукта...................................................................................................4
2 Ключевые преимущества............................................................................................4
3 Прикладные характеристики......................................................................................4
3.1 Любой масштаб СУБД...........................................................................................4
3.2 Любые компьютерные платформы и архитектуры............................................4
3.3 Любые типы приложений......................................................................................5
3.4 Любые типы данных...............................................................................................5
3.5 Переносимость приложений на платформе Oracle.............................................5
4 Архитектура и состав...................................................................................................6
4.1 Архитектура системы.............................................................................................6
4.2 Модули.....................................................................................................................6
4.3 Опции.......................................................................................................................7
4.4 Редакции.................................................................................................................10
5 Программирование.....................................................................................................10
5.1 Связывания для языков программирования......................................................11
5.2 Отображение объектов между SQL и Java.........................................................11
5.2.1 Интерфейсы JDBC и SQLJ, утилита JPub.......................................................11
5.2.2 Объектные типы в SQLJ......................................................................................12
5.3 Отображение объектов SQL в C++......................................................................13
5.4 Отображение объектов SQL в XML....................................................................14
5.4.1 Oracle XML DB...................................................................................................15
5.4.2 Генерация XML..................................................................................................15
5.4.3 Хранение XML-документов..............................................................................16
6 Лицензионная политика компании ORACLE.......................................................17
6.1 Named User Plus.....................................................................................................17
6.2 Processor.................................................................................................................17
6.2.1 Многоядерные процессоры...............................................................................17
6.3 Лицензирование резервных систем.....................................................................18
6.3.1 Передача лицензий.............................................................................................18
6.4 Миграция................................................................................................................18
Библиографический список
// Создать Java-класс, который
public class JPurchaseOrder implements SQLData
{
…
public void readSQL (SQLInput stream, String typeName)
throws SQLException {…}
public void writeSQL (SQLOutput stream)
throws SQLException {…}
…
}
Этот Java-класс JPurchaseOrder может быть далее использован в следующей Java-программе для выборки объектов из базы данных.
// Экземпляры объекта можно
ResultSet rs = stmt.executeQuery("select value(p) from
purchase_order_tab p");
rs.next();
JPurchaseOrder jp = (JPurchaseOrder) rs.getObject(1);
String streetName = jp.shipAddr.street;
5.2.2 Объектные типы в SQLJ
В СУБД Oracle9i введена возможность "бесшовно" отображать заданный Java-класс в некоторый объект SQL. Согласно части 2 стандарта SQLJ, SQLJ Object Types (Объектные типы SQLJ), определяется отображение между некоторым объектом SQL и соответствующей реализацией Java-класса. Спецификации SQLJ Object Types находятся в процессе стандартизации в качестве расширения стандарта SQL:99. (Прим. ред. В июле 2002 г. указанное расширение стандарта SQL:1999 было принято в качестве части 13 этого стандарта под названием SQL/JRT, где аббревиатура JRT расшифровывается как Java Routines and Types.)
Рассмотрим следующий пример:
CREATE TYPE ADDRESS_T AS OBJECT EXTERNAL NAME "Address"
LANGUAGE JAVA USING SQLDATA (
STREET VARCHAR(50) EXTERNAL NAME "street",
ZIP_CODE VARCHAR(10) EXTERNAL NAME "zip",
STATIC FUNCTION GET_CITY (VARCHAR zip) RETURN VARCHAR
EXTERNAL NAME "get_city(java.lang.String)
RETURN java.lang.String",
STATIC FUNCTION GET_STATE (VARCHAR zip) RETURN VARCHAR
EXTERNAL NAME "get_state(java.lang.String)
RETURN java.lang.String",
MEMBER FUNCTION CITY RETURN VARCHAR EXTERNAL NAME "getCity()
RETURN java.lang.String",
MEMBER FUNCTION STATE RETURN VARCHAR EXTERNAL NAME
"getState() RETURN java.lang.String");
В данном примере в операторе CREATE TYPE предложение EXTERNAL NAME специфицирует внешнее имя, которое определяет Java-класс, используемый в реализации. Предложение USING специфицирует интерфейс, используемый для доступа к состоянию объекта.
Для каждого атрибута данного объектного типа необязательное предложение EXTERNAL NAME задает имя соответствующего Java-поля. Для методов предложение EXTERNAL NAME определяет имя соответствующей Java-функции и ее сигнатуру.
Приведенная выше информация об отображении хранится как часть метаданных данного типа. Она обеспечивает "бесшовный" доступ к объектам SQL из Java через JDBC, не требуя от пользователя явного применения интерфейса SQLData или регистрации этого класса с помощью отображения типов Java (Java typemap).
Иерархия объектных типов в SQLJ может быть отображена в иерархию наследования Java. Диспетчеризация методов, включая переопределение этих типов, осуществляется в процессе исполнения Java-программы.
5.3 Отображение объектов SQL в C++
Интерфейс уровня вызовов Oracle для C++ (Oracle C++ Call Interface, OCCI) специфицирует отображение объектных типов в C++. Таким образом, можно получить доступ к экземплярам объектных типов в базе данных, и их можно модифицировать из объектов C++ в приложении. Навигационный интерфейс OCCI позволяет получать доступ к объектно-реляционным данным и модифицировать их как объекты C++ без явного использования SQL.
Транслятор объектных типов Object Types Translator (OTT) генерирует по умолчанию классы C++, соответствующие объектным типам, включая иерархии типов. Он также предоставляет по умолчанию реализации методов, необходимых для чтения объектов из базы данных и их записи в базу данных.
Для примера рассмотрим следующую иерархию объектных типов:
CREATE TYPE Person AS OBJECT (name VARCHAR2(100), age NUMBER)
NOT FINAL;
CREATE TYPE Student UNDER Person(dept VARCHAR2(50), advisor REF
Person);
Далее приведены классы C++, сгенерированные OTT для этой иерархии типов. Класс OCCIPObject предоставляется интерфейсом OCCI как базовый класс для классов, обладающих сохраняемыми (persistent) или временными объектами.
class Person : public OCCIPObject { …
void *operator new(size_t size, const OCCIConnection& con,
const OCCIString& table);
static void readSQL(const OCCIAnyData& stream, Person *obj);
static void writeSQL(const Person *obj, OCCIAnyData& stream);
…}
class Student : public Person {…
static void readSQL(const OCCIAnyData& stream, Student *obj);
static void writeSQL(const Student *obj, OCCIAnyData&
stream); …}
Фрагменты кода, соответствующие двум методам, приведены ниже:
void Person::readSQL(const OCCIAnyData& stream, Person *obj){
obj->name = stream.getString(1);
obj->age = stream.getNumber(2); }
void Student::readSQL(const OCCIAnyData& stream, Student *obj) {
Person::readSQL(stream, obj);
obj->dept = stream.getString(3);
obj->advisor = stream.getRef(4); }
Таблица отображения типов поддерживает ассоциацию между именами типов SQL и именами классов C++, и она используется во время исполнения для определения класса, чьи подпрограммы readSQL и writeSQL должны быть вызваны. OTT также обеспечивает для пользователей гибкость расширения сгенерированных классов для добавления дополнительных выполняемых функций.
Следующий фрагмент кода иллюстрирует выборку объекта SQL в экземпляре класса C++:
OCCIResultSet *resultSet =
stmt->executeQuery("select VALUE(p) from person_tab p where
name = "Joe"");
/* выборка объекта создает
соответствующий экземпляр
Student *joe = (Student *)resultSet.getObject(1);
/* dereferencing the REF value yields the object */
Person *joe_advisor = joe->advisor->ptr();
5.4 Отображение объектов SQL в XML
Расширяемый язык разметки XML (Extensible Markup Language) – это метаязык, который быстро становится стандартом де-факто для обмена данными между приложениями и областями бизнеса. (Прим. ред. О языке XML см. например, [9-11].) Язык определения схемы для XML-документов, XML Schema, специфицирует структуру XML-документа в терминах типов данных и композицию каждого элемента в этом документе. СУБД Oracle поддерживает эффективные и гибкие механизмы для отображения объектов SQL в XML, и наоборот.
5.4.1 Oracle XML DB
В СУБД Oracle9i Release 2 введена опция Oracle9i XML Database (Oracle XML DB). Она расширяет СУБД Oracle средствами поддержки XML, делая XML-данные и модели содержимого непосредственно доступными приложениям Oracle9i. Oracle XML DB, высокопроизводительная технология хранения и выборки XML-данных, предоставляется в сервере базы данных Oracle9i Release 2. Она основана на модели данных W3C XML (Прим. ред. В спецификации стандарта XML и других стандартов W3C, основанных на этом языке, часто употребляется термин “модель данных XML”. Однако при этом под “моделью данных” понимается лишь структурный аспект этого понятия. Язык XML не определяет полной модели данных. В частности, в нем не предлагаются какие-либо средства манипулирования XML-данными. Он выполняет лишь функции языка определения данных.) и обеспечивает преимущества двух технологий:
Oracle XML DB – это "чистая" база данных XML. Она предоставляет инфраструктуру для управления данными, независимую от хранения, содержимого и языков программирования. Хотя она тесно интегрирована с SQL-машиной СУБД Oracle, в ней воплощены концепции, никогда ранее не реализованные в реляционных СУБД. Например, объектная модель XML-документов – XML Document Object Model (DOM) – встроена в ядро СУБД Oracle, так что большинство операций с XML-данными может быть выполнено как часть традиционной обработки данных в базе данных. А это позволяет избежать двухшаговой модели – извлечь и обработать.
Благодаря тесной интеграции с объектно-реляционной технологией Oracle и языком PL/SQL, Oracle XML DB одновременно демонстрирует мощность объектно-реляционных баз данных и гибкость XML.
5.4.2 Генерация XML
Пакет DBMS_XMLGEN может принять любой SQL-запрос и отобразить его результаты в XML. Тем самым, весь результирующий набор, возвращенный этим запросом, преобразуется в единый XML-документ. Этот пакет имеет несколько параметров для управления различными аспектами генерации XML, включая генерацию схемы XML Schema, ассоциированной с этим документом (аналогично описанию функциональности), и ограничение числа выбранных строк. Например, следующий фрагмент кода представляет результаты запроса в форме XML-документа, как показано ниже.
qryCtx := dbms_xmlgen.getContextHandle("
scott.emp");
result := dbms_xmlgen.getXMLClob(qryCtx)
<?xml version="1.0" encoding="SHIFT_JIS"?>
<ROWSET>
<ROW>
<EMPNO>30</EMPNO>
<ENAME>Scott</ENAME>
<SALARY>20000</SALARY>
</ROW>
<ROW>
<EMPNO>30</EMPNO>
<ENAME>Mary</ENAME>
<AGE>40</AGE>
</ROW>
</ROWSET>
Для реляционных данных результаты представляют собой плоский XML-документ без вложенности. Чтобы получить вложенные XML-структуры, можно использовать объектно-реляционные данные. Объект отображается в XML-элемент с атрибутами отображения этого объекта на подэлементы родительского элемента. Экземпляр коллекции также отображается в XML-элемент с элементами коллекции, появляющимися как повторяющиеся экземпляры подэлементов.
5.4.3 Хранение XML-документов
Для облегчения "чистого" (native) хранения и доступа к XML-документам был введен новый тип данных, называемый XMLType. Пользователи могут создавать экземпляры и столбцы этого типа данных и использовать методы типа для извлечения, обхода и трансформации XML-документов.
В столбце типа XMLType можно хранить документы либо в целостном виде (как данные типа CLOB), либо в декомпозированном объектно-реляционном виде. Этот тип позволяет выполнять операции запросов XML-документов: extract() – обход документа и извлечение его фрагмента на основе выражения пути и existsNode() – проверка существования узла, удовлетворяющего заданному условию. Пользователь может также определить текстовый индекс Oracle interMedia по этому столбцу и запрашивать этот XML-документ с применением операции Contains и других операций для работы с текстом.
-- выбрать имя заказчика (custname) из всех сообщений, которые
-- являются срочными(urgent) и имеют в PO заказчика (customer)
SELECT extract(e.msgVal, "/po/cust/custname")
FROM message_tab e
WHERE CONTAINS(e.msgVal, "URGENT") > 0
AND existsNode(e.msgVal,"//po/
6. Лицензионная политика компании ORACLE
Программное обеспечение Oracle поставляется
в лицензиях. Лицензия - непередаваемое
и неисключительное право использования
продукта в соответствии с лицензионным
соглашением. Стоимость лицензии не зависит
от версии программного обеспечения Oracle
(8i, 9i, 10g, 11g).
Виды
лицензий: Named User Plus (пользовательские лицензии) и
Processor (лицензия на процессор).
6.1 Named User Plus:
Это человек, авторизованный Заказчиком
к использованию программ, которые установлены
на одном или нескольких серверах, независимо
от того, cколь активно он использует продукты.Устройство,
не управляемое человеком, будет также
считаться пользователем (NUP) в дополнение
к вышеуказанным людям. Если используются
мультиплексирующие программы или устройства,
количество пользователей должно считаться
на входе в эту программу или устройство.
Лицензируя Oracle по NUP, нужно выбирать большее между реальным количеством пользователей и лицензионным минимумом. Количество лицензий на Enterprise Edition Option должно совпадать с количеством лицензий на СУБД Oracle Enterprise Edition.
6.2 Processor
Процессор (Processor, CPU) - это процессор на сервере, на котором установлены и/или работают продукты Oracle. Данная программа лицензирования используется в случае, когда количество пользователей неизвестно или является большим (>25).
6.2.1 Многоядерные процессоры
Для редакций
Standard и Standard Edition One ядра в расчет не берутся.
Для редакции
Enterprise для многоядерных процессоров применяются
слеудющие коэффициенты:
Тип многоядерного процессора |
Лицензионный коэффициент |
Sun UltraSparcT1 (4,6 или 8 ядер, 1GHz или 8 ядер, 1.2 GHz) |
0,25 |
AMD, Intel |
0,5 |
Все остальные многоядерные процессоры |
0,75 |
При получении нецелого числа, нужно округлить в большую сторону. Распространяется как на лицензирование по CPU, так и по NUP.
6.3 Лицензирование резервных систем.
Компания Oracle различает два типа резервных
систем: Failover и StandBy.
Резервная система Failover - основной и резервный
сервера сконфигурированы как кластер.
СУБД Oracle Standard Edition или Enterprise Edition установлена
на оба сервера, но запущена только на
одном сервере. При выходе из строя основного
сервера, запускается СУБД на резервном,
пока снова не начнет работать основной.
В этом случае разрешено не лицензировать
резервный сервер, если он будет использоваться
не более 10 дней в году (причем 10 дней не
подряд).
Резервная
система StandBy - основной и резервный сервера
сконфигурированы как кластер. СУБД Oracle
Standard Ediiton или Enterprise Edition установлена на
два сервера и оба сервера запущены.В случае
выхода из строя одного из серверов продолжает
работать резервный и информация поддерживается
в актуальном состоянии. Нужно лицензировать
ОБА сервера.
6.3.1 Передача лицензий
Лицензия Oracle непередаваема. Перевод лицензий возможен только в случаях изменения имени, слияния или поглощения организации, купившей лицензии на программное обеспечение Oracle, т.е. в случае, если документально можно доказать преемственность права собственности.
6.4 Миграция
Возможен
переход с младшей редакции Oracle на более
старшую (например c Standard Edition на Enterprise
Edition). При этом пользователь оплачивает
разницу в стоимости лицензий на программное
обеспечение и техническую поддержку.
Перейти с более старшей редакции на младшую
нельзя. Расчет стоимости перехода составляется
по индивидуальным запросам.