Александр В.Хьюнольд

Следом за SCOTT/TIGER
(Following SCOTT/TIGER, by Alexander W. Hunold)

Источник: журнал Oracle Magazine, no.4, 2002 http://www.oracle.com/oramag/oracle/02-jul/o42schema.html

В этой статье подробно рассматриваются новые демонстрационные схемы Oracle9i Database.

В большинстве примеров на SQL и PL/SQL, представленных в документации Oracle , учебных курсах, демонстрационных примерах и литературе третьих фирм, которые вы видели, используются, скорее всего, объекты пользователя scott(с паролем «tiger»). Схема scott названа в честь Брюса Скотта (Bruce Scott), одного из первых сотрудников Software Development Laboratories (компании, которая стала Oracle ). Тигром (tiger) звали кота Брюса Скотта.

В Oracle9i Database появилась новая коллекция демонстрационных схем. Эта статья описывает новые схемы и дает информацию, которая поможет собрать соответствующую схему для тестирования. А всем, кто регулярно тестирует SQL-предложения или скрипты, статья подскажет простой способ пересоздания демонстрационных схем.

История

Первоначально в Oracle была только схема scott. Для демонстрирования технологий в Oracle много лет использовалось несколько наборов таблиц, включая множество вариантов схемы scott и популярной схемы Summit Sporting Goods (Высококачественные спортивные товары).

Однако с конца 1999г. богатый выбор типов данных и сложных объектов, доступных в Oracle8i Database, стал намного опережать демонстрационные возможности простых объектов схемы scott. Поэтому для демонстрирования мощности Oracle8i, корпорация Oracle создала целый набор взаимосвязанных схем, каждая из которых имеет свой уровень сложности и назначение.

Описание схем

Процесс установки Oracle9i Database исполняет набор скриптов SQL*Plus и других файлов из директории $ORACLE_HOME/demo/schema. Эти скрипты добавляют демонстрационные схемы Oracle9i в созданную во время установки базу данных. Заметьте, что создание демонстрационных схем можно отложить, выбрав установку "Software Only" («Только программы»).

В набор входят двенадцать демонстрационных схем Oracle9i:

*   hr (Human Resources - Персонал)

*   oe (Order Entry - Заказы)

*   pm (Product Media – Медиа-товары)

*   sh (Sales History - История продаж)

*   qs (Queued Shipping - Продажи в порядке очереди)

*   qs_adm (QS Administration - Администрирование очередей продаж)

*   qs_cb (QS Customer Billing (CB) - Регистрация поставщиков очереди продаж)

*   qs_cbadm (QS CB Administration - Администрирование регистрации поставщиков)

*   qs_cs (QS Customer Service - Очереди потребителей продаж)

*   qs_es (QS Eastern Shipping - Отгрузка на восток в порядке очереди)

*   qs_os (QS Overseas Shipping - Отгрузка за море в порядке очереди)

*   qs_ws (QS Western Shipping - Отгрузка на запад в порядке очереди)

Установка демонстрационных схем

Независимо от момента создания демонстрационных схем, во время установки базы данных или нет, Database Configuration Assistant (DBCA) проходит через процесс создания или удаления баз данных, а также добавления новых компонентов, например interMedia или демонстрационных схем. Для поддержки секретности DBCA по умолчанию создает базу данных с набором учетных записей, которые заблокированы и имеют недокументированные пароли. По окончании процесса создания базы данных можно нажать на кнопку Password Management («Управление паролем»), чтобы разблокировать учетные записи и установить пароли.

Рис 1: Демонстрационные схемы hr и oe

Для того чтобы выполнить какой-нибудь запрос или предложение из примеров этой статьи, необходимо установить Oracle9i Database Enterprise Edition. Во время установки создайте базу данных "General Purpose " («Общего назначения») и не забудьте нажать кнопку Password Management, как только база данных будет создана. Чтобы установить пароль, который необходим для доступа к созданным схемам, разблокируйте учетные записи демонстрационной схемы, щелкнув мышью в графе Locked, и введите пароль в полях «пароль» и «подтверждение пароля», расположенных в таблице управления паролем. Для запуска примеров этой статьи необходимо присоединиться к серверу, на котором установлена база данных Oracle9i General Purpose. Установите переменную окружения ORACLE_SID в соответствии с документацией по ОС. Когда появится приглашение для соединения, введите тот же пароль, который был введен и подтвержден во время управления паролем демонстрационных схем.

Выбор описаний схем

Схема hr (Human Resources) – это схема, которая предоставляет поддержку большинства примеров, где использовались таблицы emp и dept схемы scott. hr – простая схема, в которой используются только скалярные типы данных и хранятся небольшие таблицы. Присоединившись пользователем hr, выполните следующий запрос, чтобы получить список таблиц схемы hr и их размеры:

SQL> SELECT table_name, num_rows "# of rows",
  2  COUNT(*) "# of columns"
  3   FROM user_tables NATURAL JOIN user_tab_columns
  4   GROUP BY table_name, num_rows
  5   ORDER BY 2;

Web-локатор

Документация по демонстрационным схемам находится в otn.oracle.com/docs

Схема oe (Order Entry) состоит из двух частей: самой схемы и ее объектно-реляционной части – подсхемы oc (Online Catalog). Структура схемы oe поддерживает основные упрощенные сценарии заказов и включает большой выбор типов данных, в том числе и новых, появившихся в Oracle9i. Схема oe содержит также синонимы таблиц схемы hr. В большинстве случаев можно присоединяться к схеме oe и использовать таблицы обеих схем без переключения соединений.

Схема oe содержит 10 таблиц и 27 объектных типов. Чтобы убедиться в этом и увидеть количество индексов, LOB-ов, триггеров и других объектов схемы, выполните следующий запрос, присоединившись пользователем oe:

SQL> SELECT object_type, COUNT(*)
  2  FROM user_objects
  3  GROUP BY object_type;

Одна из таблиц схемы oe, product_descriptions (описания товаров), содержит названия товаров и их описания на 30 языках. Если выполнить запрос к представлению products (товары) при различных значениях параметра NLS, то можно заметить, что описания товаров изменяются в соответствии со значением этого параметра. На рисунке 1 показаны основные таблицы и их столбцы, которые содержатся в схемах hr и oe. Имена столбцов, выделенные красным, обозначают первичные ключи.

Схема pm (Product Media) предназначена для управления содержимым. Таблица online_media схемы pm позволяет использовать Oracle interMedia, а в таблице print_media используются типы данных для больших объектов (large-object – LOB). Столбец ad_textdocs_ntab таблицы print_media представляет собой вложенную таблицу. Таблицы схемы pm содержат видео, аудио, изображения, документы и текстовые файлы для некоторых товаров схемы oe.

Схема sh (Sales History) – намного больше всех демонстрационных схем. Эта схема может использоваться для тестирования на больших объемах данных. В некоторых случаях в схеме sh используется секционирование, двоичные соединенные (bitmap join) индексы, внешние таблицы и аналитическая обработка в режиме реального времени (OLAP - class=bodycopy> Garamondonline analytical processing). Две существующие таблицы, sales и costs, содержат три четверти миллиона и миллион строк, соответственно. На рисунке 2 показаны таблицы схемы sh.

Логическая схема qs (Queued Shipping) состоит из группы схем. Все названия схем группы начинаются с "qs". Эти схемы управляют очередями сообщений и позволяют экспериментировать с возможностями Advanced Queuing.

Рис. 2: Схема sh

Обзор метаданных

Для ознакомления с новыми объектами и типами базы данных демонстрационных схем используйте Oracle Enterprise Manager (OEM). Модуль Schema Manager из OEM позволяет просмотреть список объектов демонстрационных схем, сгруппированный по типам объектов. Щелкнув два раза правой кнопкой мыши на объекте демонстрационной схемы, выберите один из следующих вариантов:

*   Dependencies (Зависимости). Показывает, как объект используется в других объектах, и от какого родительского объекта зависит.

*   Show Object DDL (Показать DDL объекта). Генерирует из метаданных SQL-предложение для создания объекта.

Возможно, вы предпочитаете строковый режим просмотра метаданных. Запрос, показанный ниже, представляет собой быстрый способ использования этого режима для получения данных о демонстрационных схемах. Присоединитесь пользователем oe и выполните следующий запрос:

SQL> DESCRIBE customer_typ
 
customer_typ is NOT FINAL
 
Name                 Type
____________         _________
CUSTOMER_ID          NUMBER(6)
CUST_FIRST_NAME      VARCHAR2(20)
CUST_LAST_NAME       VARCHAR2(20)
CUST_ADDRESS         CUST_ADDRESS_TYP
PHONE_NUMBERS        PHONE_LIST_TYP
NLS_LANGUAGE         VARCHAR2(3)
NLS_TERRITORY        VARCHAR2(30)
CREDIT_LIMIT         NUMBER(9,2)
CUST_EMAIL           VARCHAR2(30)
CUST_ORDERS          ORDER_LIST_TYP

Для получения более подробной информации можно увеличить глубину описания.

SQL> SET DESCRIBE DEPTH 2
SQL> DESCRIBE customer_typ
SQL> SET DESCRIBE DEPTH 3
SQL> DESCRIBE customer_typ

Использование объектов демонстрационной схемы

Предположим, вы решили проверить, как работают соединения типа natural, возможность которых появилась в Oracle9i Database. Схема hr хороша для реляционных запросов, но чтобы создать более интересный запрос обратимся к некоторым таблицам схемы oe.

Результат примерного запроса для соединения типа natural– это список адресов всех складов с товарами, заказ которых оплачен, а товар отгружен. Посмотрите на диаграмму схемы (Рис.1) для определения таблиц, необходимых для этого запроса:

*   oe.warehouses можно соединить с таблицей hr.locations , чтобы получить адреса.

*   oe.product_information можно соединить с oe.warehouses через oe.inventories. Это классическая взаимосвязь «многие-ко-многим».

*   oe.orders со столбцом order_status и oe.order_items со столбцом product_id формируют две последние связи в цепочке.

В соединение входит шесть таблиц, поэтому от одной таблицы к другой требуется пять переходов. Вместо написания, по крайней мере, пяти предикатов для оператора WHERE можно построить natural-соединение. Если учетные записи еще не разблокированы, а пароли не введены во время установки, начните с разблокировки и присоединения к необходимым схемам, подтверждая возможность доступа к необходимой информации, как показано на Листинге 1. Замените пароль 8Wpo7 из листинга на свой собственный.

Подробнее

На Oracle Technology Network (OTN) предоставлены наборы примеров по Oracle9i (OBE - Oracle9 by Example), в которых содержатся пошаговые инструкции по применению различных технологических решений бизнес задач, основанных на новых демонстрационных схемах Oracle9i. otn.oracle.com/obe
С помощью Database Configuration Assistant (DBCA) демонстрационные схемы можно добавлять в любую базу данных Oracle9i (9.0.1 и выше).

Из Листинга 1 видно, что доступ к требуемым объектам имеется, хотя они и расположены в схеме схеме hr. Как идентифицировать открытые заказы? Столбец order_status – числовой. Каждая из таблиц демонстрационной схемы и их столбцы содержат комментарии. Выберите комментарии к столбцу order_status, как показано ниже:

SELECT comments FROM user_col_comments
  WHERE column_name='ORDER_STATUS';
COMMENTS
___________________________________________
0: Not fully entered, 1: Entered, 2: Canceled - bad credit,
3: Canceled - by customer, 4: Shipped - whole order,
5: Shipped - replacement items, 6: Shipped - backlog on items,
7: Shipped - special delivery, 8: Shipped - billed,
9: Shipped - payment plan, 10: Shipped - paid

Теперь, когда имеются идентифицирующие таблицы и список открытых заказов, выполните запрос-соединение типа natural из Листинга 2.

Переустановка демонстрационных схем

После выполнения в демонстрационных схемах команд data manipulation language (DML – манипулирование данными) и data definition language (DDL – манипулирование метаданными), необходимо иметь возможность приведения демонстрационных схем обратно в их исходное состояние путем их пересоздания. Заметьте, что в демонстрационных схемах не следует хранить важные данные, так как при пересоздании схем восстанавливаются только те данные, которые созданы по умолчанию. Для переустановки схем выполните следующую команду:

$ sqlplus /nolog
SQL> @?/demo/schema/mksample

Знак вопроса указывает на переход в $ORACLE_HOME. Это SQL-предложение работает как под UNIX, так и под Microsoft Windows. Перед тем, как начать переустановку демонстрационных схем, убедитесь, что никто к ним не присоединен. Пользователь или схема не могут быть удалены и, следовательно, пересозданы, если есть присоединенные к ним сессии. Чтобы проверить, есть ли присоединенные пользователи, выполните следующий запрос:

SELECT username
  FROM  v$session
WHERE (username in ('HR','OE','SH','PM')
  OR username like 'QS%');

Скрипт mksample.sql не блокирует пересозданные учетные записи демонстрационных схем; он запрашивает только пароль.

Заключение

С появлением все большего числа демонстрационных приложений, документов и учебных курсов, использующих стандартный набор схем, можно тратить меньше времени на попытку понять логическую модель и больше времени на создание своих собственных тестов, демонстрационных приложений и примеров. Многочисленные виды и размеры объектов демонстрационных схем позволяют легче найти точное соответствие для большинства возможных примеров. Лучше всего ваши примеры будут работать без дополнительной подготовки почти в любой базе данных Oracle9i.

---

Александр В. Хьюнольд (alexander.hunold@oracle.com) является управляющим учебным курсом по QA в Oracle Corporation.

---
 Листинг 1: Получение доступап и присоединение к схеме OE 
 
 
$ sqlplus oe/8Wpo7
 
ERROR:
ORA-28000: the account is locked
Enter user-name: system/
 
SQL> ALTER USER oe ACCOUNT UNLOCK IDENTIFIED BY 8Wpo7;
User altered.
 
SQL> SELECT * FROM tab;
TNAME                                   TABTYPE   CLUSTERID
_____________________                   _______   __________  
 
BOMBAY_INVENTORY                        VIEW
CATEGORIES_TAB                          TABLE
COUNTRIES                               SYNONYM
CUSTOMERS                               TABLE
DEPARTMENTS                           SYNONYM
EMPLOYEES                             SYNONYM
INVENTORIES                           TABLE
JOBS                                  SYNONYM
JOB_HISTORY                           SYNONYM
LOCATIONS                             SYNONYM
OC_CORPORATE_CUSTOMERS                VIEW
OC_CUSTOMERS                          VIEW
OC_INVENTORIES                        VIEW
OC_ORDERS                             VIEW
OC_PRODUCT_INFORMATION                VIEW
ORDERS                                TABLE
ORDER_ITEMS                           TABLE
PRODUCTS                              VIEW
PRODUCT_DESCRIPTIONS                  TABLE
PRODUCT_INFORMATION                   TABLE
PRODUCT_PRICES                        VIEW
PRODUCT_REF_LIST_NESTEDTAB            TABLE
SUBCATEGORY_REF_LIST_NESTEDTAB        TABLE
SYDNEY_INVENTORY                      VIEW
TORONTO_INVENTORY                     VIEW
WAREHOUSES                            TABLE
 
26 rows selected.
 
 Листинг 2: SELECT с использованием соединения из пяти таблиц типа Natural
 
SQL> SELECT
  2          DISTINCT (street_address),(postal_code),(city)
  3    FROM
  4          locations         NATURAL JOIN warehouses
  5                            NATURAL JOIN inventories
  6                            NATURAL JOIN products
  7                            NATURAL JOIN order_items
  8                            NATURAL JOIN orders
  9    WHERE
 10          order_status = 10
 11    ; 
 
STREET_ADDRESS            POSTAL_CODE      CITY                                     
___________________       ___________      _____
 
12-98 Victoria Street     2901             Sydney
1298 Vileparle (E)        490231           Bombay
147 Spadina Ave           M5V 2L7          Toronto
2004 Charade Rd           98199            Seattle
2007 Zagora St            50090            South Brunswick
2011 Interiors Blvd       99236            South San Francisco
2014 Jabberwocky Rd       26192            Southlake
40-5-12 Laogianggen       190518           Beijing
Mariano Escobedo 9991     11932            Mexico City