(no subject)

Jul 02, 2005 10:00

Дочитал Шагала.

Сейчас читаю
Хотка Дэн
Oracle 9i
СПб.: ООО "ДиаСофтЮП", 2002 г., 560 стр.

Oracle9i Development by Example. Dan Hotka. Que. 2002
Перевод с английского.


Интересно, что нигде не указан автор перевода. В переводе (и, возможно, в оригинале)
много ошибок, опечаток, неточностей. Не всё (что написано ниже) можно принимать на веру. И надо
осторожно ссылаться на эту книгу. Лучше сначала проверить. Очень много
скриншотов и листингов, в т. ч. бессмысленных. Уровень совершенно разный в
разных главах (описание языка SQL vs. описание оптимизатора Oracle). Почему-то в
качестве примера ОС автор использует Windows NT, а не Windows 2000. Автор
постоянно путает UNION и JOIN. Ещё кажется, что у переводчика оплата была за
количество знаков, объём текста книги можно смело сократить раза в полтора
без малейшей потери смысла.

Содержание
http://tid.com.ua/scripts/ishop.exe/addonres?id=2895
http://www.quepublishing.com/title/0789726718#

19 ...... Введение
23 ...... Часть 1. Изучение основ Oracle9i
24 ...... Глава 1. Введение в Oracle9i
24 ...... Реляционная база данных Oracle
25 ...... Определение базы данных
29 ...... Введение в SQL
32 ...... Средства Oracle9i
33 ...... Средства объектно-ориентированного программирования, применяемые в
базе данных Oracle9i
34 ...... Новые средства Oracle9i
37 ...... Основные сведения об инструментальных средствах Oracle
38 ...... Oracle Developer версии 6.i (формы, отчеты и графические средства)
41 ...... SQL*Plus
42 ...... SQL*Loader
44 ...... Внешние таблицы
45 ...... Net8
46 ...... Log Miner
47 ...... Export/Import
53 ...... Резюме
53 ...... Обзорные вопросы
53 ...... Контрольные вопросы
54 ...... Темы, рассматриваемые в следующих главах
56 ...... Глава 2. Основы языка SQL
56 ...... Основные сведения о языке SQL
57 ...... Регистрация в базе данных
58 ...... Редактор кода SQL
62 ...... Введение в SQL
62 ...... Создание таблиц emp/dept
63 ...... Изучение основ
64 ...... Запросы SQL
69 ...... Манипулирование данными в языке SQL
75 ...... Создание объектов с применением операторов языка SQL
97 ...... Резюме
97 ...... Обзорные вопросы
98 ...... Контрольные вопросы
99 ...... Практические упражнения
100 ..... Темы, рассматриваемые в следующих главах
101 ..... Глава 3. Основы языка PL/SQL
101 ..... Определение и области применения языка PL/SQL
103 ..... Основные синтаксические конструкции языка PL/SQL
105 ..... Переменные PL/SQL
112 ..... Курсоры PL/SQL
115 ..... Управление ходом выполнения кода PL/SQL
116 ..... Организация циклов
118 ..... Отладка кода PL/SQL
119 ..... Обработка ошибок в языке PL/SQL
122 ..... Резюме
122 ..... Обзорные вопросы
122 ..... Контрольные вопросы
123 ..... Практические упражнения
124 ..... Темы, рассматриваемые в следующих главах
125 ..... Часть 2. Разработка приложений на основе Oracle9i
126 ..... Глава 4. Создание базы данных Oracle9i
126 ..... Проект реляционной схемы и конструкция базы данных
127 ..... Краткий обзор таблиц и индексов, включая ограничения ссылочной
целостности
133 ..... Пример создания базы данных приложения
133 ..... Размещение объектов базы данных в табличном пространстве
136 ..... Создание базы данных (таблицы, индексы и ограничения)
139 ..... Создание триггеров базы данных
140 ..... Резюме
140 ..... Обзорные вопросы
141 ..... Контрольные вопросы
141 ..... Практические упражнения
142 ..... Темы, рассматриваемые в следующих главах
143 ..... Глава 5. Создание форм Oracle
143 ..... Создание форм с использованием программы Developer 6.0 или 61
143 ..... Применение программы Oracle Developer для создания форм
157 ..... Операции, выполняемые программой Oracle Forms по умолчанию
162 ..... Разработка приложений с интерфейсом в виде вкладок
184 ..... Преобразование форм в код HTML
186 ..... Рекомендации по настройке форм для работы в среде Web
187 ..... Рекомендации по разработке форм для работы в среде Web
188 ..... Резюме
188 ..... Обзорные вопросы
188 ..... Контрольные вопросы
190 ..... Практические упражнения
190 ..... Темы, рассматриваемые в следующих главах
191 ..... Глава 6. Создание отчетов Oracle
191 ..... Построение отчетов с использованием программы Developer 6.0 или 6.1
196 ..... Формирование отчетов с использованием программы Oracle SQL*Plus
204 ..... Преобразование отчетов в код HTML
206 ..... Дополнительные функции формирования отчетов для просмотра в Web
209 ..... Применение пиктограмм в окне приложения
210 ..... Резюме
210 ..... Обзорные вопросы
210 ..... Контрольные вопросы
211 ..... Практические упражнения
211 ..... Темы, рассматриваемые в следующих главах
212 ..... Глава 7. Применение сложных средств языка SQL и методов формирования
отчетов SQL*Plus
212 ..... Сложные методы SQL
213 ..... Функции
221 ..... Условия соединения таблицы
225 ..... Подзапросы SQL
230 ..... Сложные представления
230 ..... Непротиворечивость чтения
233 ..... Сложные методы формирования отчетов в программе SQL*Plus
238 ..... Резюме
238 ..... Обзорные вопросы
239 ..... Контрольные вопросы
240 ..... Практические упражнения
240 ..... Темы, рассматриваемые в следующих главах
241 ..... Глава 8. Разработка Web-сайтов на основе Oracle9i
245 ..... Планирование Web-сайта для покупателей автомобилей
247 ..... Краткое описание сервера приложений Oracle9i
248 ..... Способы обеспечения доступа к данным через Web
249 ..... PL/SQL
249 ..... Java
250 ..... Portal V3.0
251 ..... Резюме
251 ..... Обзорные вопросы
251 ..... Контрольные вопросы
252 ..... Практические упражнения
252 ..... Темы, рассматриваемые в следующих главах
253 ..... Глава 9. Применение языка PL/SQL для построения Web-сайтов
253 ..... Применение языка PL/SQL
255 ..... Вывод изображений с помощью кода HTML, сформированного сценарием
PL/SQL
259 ..... Передача параметров из кода PL/SQL в код HTML
260 ..... Создание Web-сайта
273 ..... Резюме
273 ..... Обзорные вопросы
274 ..... Контрольные вопросы
274 ..... Практические упражнения
275 ..... Темы, рассматриваемые в следующих главах
276 ..... Глава 10. Применение языка Java для построения Web-сайтов
277 ..... Определение виртуальной машины Java
277 ..... Инструментальные средства разработки на языке Java
277 ..... Применение языка Java
277 ..... Создание сервлета Java в среде разработки JDeveloper версии 3.0
282 ..... Подготовка к эксплуатации приложения, основанного на применении
сервлета Java
283 ..... Вызов на выполнение приложения, основанного на использовании
сервлета Java
285 ..... Сервер приложений Oracle9i и опции картриджа Java
288 ..... Вывод на экран изображений и передача параметров при использовании
кода Java
290 ..... Многократное использование кода Java
291 ..... Создание Web-сайтов на языке Java
299 ..... Резюме
300 ..... Обзорные вопросы
300 ..... Контрольные вопросы
300 ..... Практические упражнения
301 ..... Темы, рассматриваемые в следующих главах
302 ..... Глава 11. Применение страниц PL/SQL, страниц Java и XML с Web-сервером
Apache и сервером приложений Oracle9i
303 ..... Опции настройки Web-сервера Apache и сервера приложений Oracle9i
303 ..... Настройка виртуальных каталогов Apache
304 ..... Настройка приемника и дескриптора доступа к базе данных
305 ..... Настройка дескриптора доступа к базе данных с помощью Web-сервера
Apache
306 ..... Применение страниц PL/SQL
320 ..... Применение страниц Java
327 ..... Применение языка XML
337 ..... Применение языка XML для работы с беспроводными устройствами
341 ..... Резюме
341 ..... Обзорные вопросы
342 ..... Контрольные вопросы
343 ..... Практические упражнения
343 ..... Темы, рассматриваемые в следующих главах
344 ..... Глава 12. Применение инструментальных средств Portal версии 3.0
(WebDB)
344 ..... Общее описание компонента Portal версии 3.0/WebDB
345 ..... Администрирование пакета Portal версии 3.0
348 ..... Применение программы Portal версии 3.0 для разработки приложений
348 ..... Создание приложений с помощью программы Portal версии 3.0
351 ..... Создание Web-сайта с применением программы Portal версии 3.0
353 ..... Резюме
356 ..... Обзорные вопросы
356 ..... Контрольные вопросы
356 ..... Практические упражнения
357 ..... Темы, рассматриваемые в следующих главах
358 ..... Часть 3. Средства настройки Oracle9i
358 ..... Глава 13. Опции индексации Oracle9i
359 ..... Общие сведения об индексах
361 ..... Сбалансированные древовидные индексы
362 ..... Общие сведения об индексно-организованных таблицах
363 ..... Опции индексации Oracle9i
364 ..... Битовые соединительные индексы
364 ..... Индексы с обратным ключом
365 ..... Практический пример применения индексно-организованных таблиц
366 ..... Советы и рекомендации
366 ..... Уникальные и неуникальные индексы
366 ..... Индексы с обратным ключом
366 ..... Контроль над использованием индексов
367 ..... Рекомендации по использованию пространства, распределенного для
индекса
367 ..... Рекомендации по реорганизации индексов
368 ..... Рекомендации по использованию индексно-организованных таблиц
368 ..... Рекомендации по использованию битовых индексов и битовых
соединительных индексов
369 ..... Обзорные вопросы
369 ..... Контрольные вопросы
370 ..... Практические упражнения
371 ..... Темы, рассматриваемые в следующих главах
372 ..... Глава 14. Настройка операторов SQL приложений Oracle9i
372 ..... Общее определение пояснительного плана SQL
373 ..... Оптимизаторы Oracle
381 ..... Настройка операторов SQL
389 ..... Применение хранимых рекомендаций
390 ..... Часто применяемые параметры файла INIT.ORA
391 ..... Рекомендации по оформлению операторов SQL
392 ..... Резюме
392 ..... Обзорные вопросы
392 ..... Контрольные вопросы
393 ..... Практические упражнения
394 ..... Темы, рассматриваемые в следующих главах
395 ..... Глава 15. Средства секционирования в версии Oracle9i
395 ..... Общие сведения о секционировании
396 ..... Опции секционирования Oracle9i
397 ..... Диапазонное секционирование
399 ..... Секционирование по хеш-ключу
400 ..... Комбинированное секционирование
400 ..... Списковое секционирование
401 ..... Опции секционирования индекса Oracle9i
402 ..... Разновидности методов секционирования индексов
403 ..... Сопоставление префиксных и непрефиксных секционированных индексов
403 ..... Преимущества и недостатки различных опций секционирования индекса
405 ..... Резюме
405 ..... Обзорные вопросы
405 ..... Контрольные вопросы
406 ..... Темы, рассматриваемые в следующих главах
407 ..... Часть 4. Инструментальные средства и утилиты Oracle9i
408 ..... Глава 16. Применение инструментального средства TOAD в процессе
разработки
408 ..... История развития программы TOAD
409 ..... Применение основного интерфейса TOAD
413 ..... Подготовка сценариев SQL и PL/SQL с помощью программы TOAD
415 ..... Работа с кодом SQL
415 ..... Работа с кодом PL/SQL
418 ..... Применение отладчика PL/SQL
419 ..... Применение других утилит программы TOAD
420 ..... Утилита Schema Browser
422 ..... Утилита SQL Modeler
424 ..... Утилита DBA программы TOAD
424 ..... Программа-мастер SQL*Loader
427 ..... Планировщик заданий TOAD
428 ..... Контроль за ходом разработки исходного кода в программе TOAD
428 ..... Резюме
429 ..... Обзорные вопросы
429 ..... Контрольные вопросы
429 ..... Практические упражнения
430 ..... Темы, рассматриваемые в следующих главах
431 ..... Глава 17. Применение утилит SQL*Loader, Export/Import и внешних таблиц
431 ..... Утилита SQL*Loader
432 ..... Применение утилиты SQL*Loader
435 ..... Примеры применения утилиты SQL*Loader
438 ..... Внешние таблицы
439 ..... Синтаксическая структура определения внешней таблицы
440 ..... Применение языка SQL для обработки данных внешних таблиц
441 ..... Преобразование управляющих файлов SQL*Loader
443 ..... Применение утилит Export и Import
443 ..... Синтаксическая структура параметров утилит Export/Import
445 ..... Пример применения утилиты Export
446 ..... Применение утилит Export/Import для резервного копирования и
восстановления
449 ..... Резюме
449 ..... Обзорные вопросы
449 ..... Контрольные вопросы
450 ..... Практические упражнения
451 ..... Темы, рассматриваемые в следующих главах
452 ..... Утилита Log Miner
452 ..... Глава 18. Применение утилиты Log Miner
453 ..... Интерфейс утилиты Log Miner
455 ..... Назначение утилиты Log Miner
457 ..... Расширения Oracle9i
458 ..... Резюме
458 ..... Обзорные вопросы
458 ..... Контрольные вопросы
458 ..... Практические упражнения
459 ..... Темы, рассматриваемые в следующих главах
460 ..... Часть 5. Итоговый пример
461 ..... Глава 19. Итоговый пример: приложение Sales Tracking
461 ..... Общие требования к приложению
462 ..... Приложение Sales Tracking
462 ..... Компоновка базы данных
467 ..... Программы
472 ..... Резюме книги
473 ..... Часть 6. Приложения
474 ..... Приложение А. Ответы на вопросы
514 ..... Приложение В. Архитектура Oracle9i и все сценарии инсталляции
приложения Sales Tracking
540 ..... Приложение С. Web-сайты с программным обеспечением
540 ..... Предметный указатель

Цитаты, выдержки
стр. 44
стр. 45
стр. 46
стр. 47
стр. 61
стр. 63
стр. 74
стр. 80
стр. 82
стр. 198
стр. 202
стр. 204
стр. 232
стр. 234
стр. 237
стр. 276
стр. 363
стр. 373
стр. 378
стр. 383
стр. 389
стр. 391
стр. 395
стр. 415
стр. 516
стр. 519
стр. 522

стр. 44
Внешние таблицы - это новое средство Oracle9i, позволяющее рассматривать
двумерные файлы как реляционные таблицы для использования в целях загрузки. При
работе с внешними таблицами можно обойтись без использования SQL*Loader.
Поскольку в Oracle9i двумерный файл рассматривается как таблица, преобразование
данных можно легко выполнить с помощью языка SQL, применить параллельную
загрузку или прямую загрузку с поддержкой индексов. Это новое средство также
полностью совместимо с программой SQL*Loader; при его использовании можно
считывать управляющий файл SQL*Loader и подготавливать необходимые операторы DDL
для нового объектного типа.
...
Существенная разница между форматами операторов двух типов состоит в том, что
оператор типа INSERT INTO emp SELECT * FROM EMP_LOAD позволяет выполнить один
проход по данным в процессе загрузки таблиц Oracle, тогда как внешние таблицы
позволяют выполнить немного более сложную обработку, например:
INSERT INTO EMP
SELECT * FROM EMP_LOAD
WHERE EMP_LOAD.EMPNO NOT IN (
SELECT EMPNO
FROM EMP);
...
Для работы с внешними таблицами может также применяться API-интерфейс,
позволяющий создавать операторы DDL и XML для объектов, которые определены в
настоящее время. Соответствующий новый пакет DBMS_METADATA имеет две опции:
GET_DDL и GET_XML. Эти опции могут применяться для загрузки и обработки
всевозможных объектов данных, а не только обычных реляционных таблиц.

стр. 45
Компонент Net8 (который носил название SQL*Net в версиях вплоть до Oracle 7)
является основой технологии клиент/сервер.

стр. 46
Компонент Log Miner, который был впервые введён в версии Oracle 8.1,
представляет собой инструментальное средство, позволяющее просматривать
оперативные журналы восстановления и архивные журнальные файлы. Затем эта
информация может применяться для создания операторов REDO языка SQL, позволяющих
повторять транзакции в другой системе, и операторов UNDO языка SQL, позволяющих
исправить ошибку пользователя.
...
В версиях Oracle8i и 9i в этом инструментальном средстве используется программа
SQL*Plus и ряд процедур PL/SQL. В Oracle9i поддерживается также графический
интерфейс компонента Log Miner, к которому можно получить доступ через интерфейс
Oracle Enterprise Manager.
Компонент Log Miner теперь позволяет работать с объектами базы данных, которые
включают сцеплённые и перемещённые строки, содержат данные, введённые в базу
данных по методу прямой вставки, и данные таких дополнительных типов, как LONG и
LOB, а также с некоторыми объектными типами, в том числе создаваемыми с помощью
операторов DDL.
В новой версии этого компонента операторы SQL, создаваемые при использовании
средств REDO и UNDO, обеспечивают поддержку первичных ключей (в версии для
Oracle8i применялись идентификаторы строк ROWID), что позволяет упростить
использование выработанного кода в других целевых базах данных Oracle.
Пользователь может также увеличивать степень детализации и формировать операторы
REDO и UNDO для конкретных пользователей, объектов или даже действий на
конкретном столбце.
Это стало возможным благодаря введению двух новых столбцов в представлении
V$LOGMNR_CONTENTS, redo_value и undo_value. Кроме того, в пакете DBMS_LOGMNR
было предусмотрено для обеспечения информационного анализа журналов четыре новые
функции PL/SQL: COLUMN_PRESENT, MINE_VARCHAR, MINE_NUMBER и MINE_DATE. Эти новые
столбцы позволяют пользователю обращаться к журналам и сравнивать содержащиеся в
них значения. Функция COLUMN_PRESET позволяет пользователю обращаться к
информации о конкретных столбцах в журнале с помощью кода SQL. Благодаря этому,
администратор базы данных получает возможность контролировать конкретные
операции обновления интересующих его столбцов определённых таблиц без
использования трудоёмких функций аудита базы данных Oracle.

стр. 47
Export и Import - две утилиты для работы в символьном режиме, которые были
впервые включены корпорацией Oracle в версию Oracle4.
...
В последних версиях Oracle привычные утилиты Export и Import были в значительной
степени доработаны. Теперь они не только поддерживают все объекты в конкретном
табличном пространстве, но и позволяют использовать шаблоны при выборе объектов
таблицы для экспорта.
... позволяют устранять некоторые виды фрагментации.
...
Файлы, создаваемы утилитой Export, известны под названием файлов дампа. Файлы
дампа представлены в собственном формате Oracle и могут применяться только для
работы с утилитой Import.

стр. 61
START filename param1 param2... или @filename param1 param2...
Команда START выполняет операторы командного файла SQL*Plus, заданного
параметром filename, и передаёт в него все входные параметры...
Различия между командами START и GET состоят в том, что команда GET считывает
содержимое файла операционной системы и передаёт его в буфер SQL. Команда START
действует так же, но затем выполняет операторы, записанные в буфер SQL.

стр. 63
Скотт Брюс (SCOTT) был одним из первых разработчиков корпорации Oracle. Как
гласит легенда, Тигр (TIGER) - это кличка его любимого кота!

стр. 74
Для удаления всех строк из таблицы могут применяться два простых способа. Первый
из них состоит в использовании оператора DELETE без фразы WHERE, а второй -
оператора TRUNCATE. Различия, в основном, сводятся к следующему: оператор DELETE
оставляет нетронутыми блоки, распределённые для таблицы, и удаляет только
строки, а оператор TRUNCATE освобождает также блоки, в которых были записаны
удаляемые данные, и передаёт их в распоряжение других объектов. Иногда в
приложении возникает необходимость записывать на время в таблице произвольный
объём данных, использовать их для составления отчёта, а затем удалять. В
подобных случаях для очистки таблицы лучше использовать оператор TRUNCATE.
Оператор TRUNCATE следует всегда применять для окончательного удаления всех
строк из таблицы. В сочетании с оператором TRUNCATE не могут применяться
операторы COMMIT или ROLLBACK, поскольку при его использовании эти средства
защиты данных отменяются.

стр. 80
Основные поля фразы STORAGE:
PCT_FREE - определяет объём свободного места, которое должно быть
зарезервировано в блоке на случай применения к строкам операторов UPDATE,
которые заполнят поля NULL или увеличат размеры существующих полей типа VARCHAR2
PCT_USED - определяет процентную долю свободного места, освободившегося в блоке
после удаления строк с помощью операторов DELETE, по достижении которой блок
снова может применяться для добавления или обновления данных.
INITIAL_EXTENT - какое число смежных блоков данных должно быть собрано в одну
единицу хранения (экстент) и назначено данной таблице во время её создания.
Значение должно быть достаточно велико для размещения всех данных, передаваемых
на хранение во время первоначальной загрузки строк в таблицу, а также для
размещения дополнительных строк примерно в течение первых трёх месяцев после
создания таблицы.
NEXT_EXTENT
MIN_EXTENTS - сколько экстентов должно быть первоначально распределено для
таблицы.
MAX_EXTENTS - вместо этого параметра может применяться новая конструкция
управления экстентами, UNLIMITED EXTENTS. Применение этого средства может
оказать отрицательное влияние на производительность БД.

PCT_FREE и PCT_USED обычно используются вместе и устанавливают способ
распределения места в каждом из блоков данных Oracle9i. Применяя эти параметры,
важно учитывать характер данных в таблице.

MIN_EXTENTS и MAX_EXTENTS сообщают БД, какое количество экстентов может
использоваться для данной таблицы или индекса.

стр. 82
В версию Oracle9i был добавлен новый оператор DROP column. Он позволяет удалить
одновременно только один столбец и удаляемый столбец не может быть последним или
единственным столбцом в таблице. Данные этого столбца немедленно удаляются, и
место в блоках данных освобождается. Ещё один вариант состоит в том, что можно
отметить столбец как неиспользуемый с помощью фразы UNUSED, а затем удалить
неиспользуемые столбцы с помощью DROP. Данные столбца физически не удаляются из
блоков данных, но способа отменить удаление столбца не существует.
Оба оператора исключают дальнейшее использование столбца. Оба они позволяют
немедленно использовать повторно то же имя столбца. Однако следует отметить, что
это будет уже другой столбец и все данные, связанные с удалённым или
неиспользуемым столбцом, будут уже недоступны.

стр. 198
Для группировки данных, полученных в результате выполнения оператора SQL, может
применяться команда BREAK. Эта команда SQL*Plus, используемая в сочетании с
фразой ORDER BY, позволяет исключить повторяющиеся значения в столбце, по
которому выполняется группировка данных, в результате чего отчёт приобретает
форму главный/подчинённый.
Для создания промежуточных и главных итогов в сочетании с командой BREAK
применяется команда COMPUTE программы SQL*Plus. Команда COMPUTE позволяет
выполнять более сложные действия, чем простое суммирование значений полей (опция
SUM):
AVG - средняя величина значений, отличных от NULL
COUNT - число значений, отличных от NULL
MAX - максимальное значение
MIN - минимальное значение
NUMBER - число строк
STD - среднеквадратическое отклонение
VAR - дисперсия

стр. 202
COLUMN dummy NOPRINT - не выводить столбец.

стр. 204
SET MARKUP HTML ON - эта команда принимает выходной отчёт и переводит его в
формат HTML.
SET FEEDBACK OFF (?)
SET VERIFY OFF (?)
SET TERMOUT OFF (?)
SET ECHO OFF (?)

стр. 232
В версии Oracle9i поддерживается новое средство, получившее название
ретроспективных запросов. Это средство позволяет получить непротиворечивое по
чтению представление данных в БД на определённую дату и время. Оно также
позволяет определить или даже построить сценарий восстановления случайно
удалённых строк или сформировать отчёт, который не включает результаты
последующего обновления.
exec dbms_flashback.enable_at_time

стр. 234
define DEPT_NO = &1 - переменная программы SQL*Plus
column DNAME new_value VAR_DNAME noprint

Команда COLUMN с опцией NEW_VALUE может применяться для загрузки из таблиц БД
переменных для их использования в других запросах SQL в том же сценарии
SQL*Plus.

SELECT dname FROM DEPT WHERE DEPTNO = &DEPT_NO;

стр. 237
Выбираем различные данные по разным отделам, склеиваем всё с помощью UNION,
после этого перегруппировываем строки с помощью ORDER BY. Получаем отчёт,
сгруппированный по отделам.

ttitle 'Employee Detail | by Department'

column dummy noprint
break on deptno

select 1 dummy, deptno, 'Department: '||dname from dept
union
select 2 dummy, deptno, '---------------------' from dept
union
select 3 dummy, deptno, ename||to_char(sal, '$999,999') from emp
union
select 4 dummy, deptno, '=================' from dept
union
select 5 dummy, deptno, 'Total: '||to_char(sal, '$999,999') from
(select deptno, sum(sal) sal from emp group by deptno)
union
select 6 dummy, deptno, ' ' from dept
order by 2,1,3

Employee Detail
by Department
10 Department: ACCOUNTING
---------------------
Clark $2,450
King $5,000
Miller $1,300
=================
Total: $8,750
20 Department: RESEARCH
---------------------
Adams $1,100
Ford $3,000
Jones $2,300
=================
Total: $6,100

стр. 276
Хранимые процедуры Java выполняются намного быстрее по сравнению с их аналогами
на языке PL/SQL. Хранимые процедуры Java с операторами SELECT или операторами
SQL типа DML, как правило, выполняются быстрее на 20-40%, а хранимые процедуры
Java без операторов SQL выполняются примерно в 10 раз быстрее по сравнению с их
аналогами на языке PL/SQL.
(ave: интересно, с чем это связано; объяснения в книге нет; одна декларация)

стр. 363
В версии Oracle8 индексно-организованные таблицы (ИОТ) не имели псевдостолбца ROWID,
поэтому на них нельзя было определять индексы. В версии Oracle8i поддерживается
логический псевдостолбец ROWID, поэтому дополнительные столбцы в
индексно-организованной таблице также могут иметь свои собственные индексы.

В версии Oracle9i поддерживается несколько опций индексации, которые позволяют
повысить производительность традиционных сбалансированных древовидных индексов.
В версии Oracle7.3 введены битовые индексы, звездообразные запросы, гистограммы
и хешированные соединения. В версии Oracle8 впервые представлены
индексно-организованные таблицы и индексы с обратным ключом, а в Oracle8i
реализованы индексы, основанные на функции. Версия Oracle9i позволяет
воспользоваться битовыми соединительными индексами.

Каждая битовая позиция в битовом индексе связана с определённым идентификатором
ROWID в таблице. Если строка содержит ключевое значение, то в строке индекса,
соответствующей этому значению, находится бит 1... такие индексы отличаются по
своей структуре от сбалансированных древовидных индексов, поскольку имеют другое
назначение: они должны обеспечивать поиск требуемых строк за одну операцию
чтения битовой индексной структуры. Эта опция индексации предназначена для
столбцов с небольшим числом элементов данных, например, с данными о цвете, поле
и т. д.
Пример запроса, который позволяет определить столбцы таблицы, потенциально
применимые для создания на них битового индекса (БИ):
SELECT OWNER, INDEX_NAME, DISTINCT_KEYS FROM DBA_INDEXES WHERE DISTINCT_KEYS <
15;
CREATE BITMAP INDEX ON DEPT (DEPTNO);

В версии Oracle9i впервые введены битовые соединительные индексы (БСИ), которые
представляют собой дальнейшее развитие технологии битовых индексов и позволяют
быстрее обрабатывать условия соединения таблиц в операторах SQL.
БСИ позволяют не только сократить время доступа к данным, но и уменьшить
потребность во временном пространстве памяти (которое распределяется при
обработке вложенных циклов, соединений путём слияния и т. д.), поскольку они
позволяют отслеживать строки в первичной таблице (так называют таблицу с БИ),
которые соответствуют критериям условия соединения, и строки индексируемого
столбца.

Индексы с обратным ключом (ИОК), которые впервые были введены в версии Oracle8,
предусматривают инвертирование порядка байтов в цифровом ключе. В результате
появляется возможность легко отслеживать все лист-блоки в сбалансированной
древовидной индексной структуре с относительно равномерным распределением
различных значений. ИОК целесообразно применять на столбцах с порядковыми
номерами или с последовательно возрастающими значениями.
ИОК могут применяться только для выборки отдельных строк. В БД Oracle не
выполняется поиск значений, принадлежащих к диапазону, ко ИОК.

Если во фразе WHERE, в которой упоминается индексированный столбец, применяется
функция, то БД Oracle не использует этот индекс. Но если будет создан индекс,
основанный на функции, который предусматривает выполнение математической
операции, заданной во фразе WHERE, этот индекс используется... Индексы,
основанные на функции (ИОФ), могут быть также созданы как битовые индексы.
В БД Oracle ИОФ не используется, если в операторе SQL не указана фраза WHERE.

По принципу индексно-организованных таблиц могут быть созданы таблицы, в которых
редко происходят обновления, но некоторые столбцы часто используются.

В уникальных индексах хранятся идентификаторы ROWID блоков данных таблицы наряду
с ключевыми значениями, что позволяет обеспечить быструю выборку отдельных строк
из блока данных таблицы. Неуникальные индексы включают пары идентификаторов
ROWID, что упрощает поиск в БД Oracle значений, принадлежащих к определённому
диапазону.

ИОК в БД Oracle обеспечивают лучшее уравновешивание индексных блоков в сбалансированной древовидной структуре (что приводит к более эффективному использованию пространства, распределённого для индекса), но БД Oracle не обеспечивает выполнения поиска в диапазоне при использовании ИОК.
Если в приложении часто осуществляется чтение и обновление данных, расположенных под одним и тем же ключевым значением, то на время выполнения подобных операций DML на лист-блок налагается блокировка. В подобных случаях применение ИОК позволяет предотвратить возможную взаимоблокировку, связанную с одновременным выполнением нескольких операций, поскольку операции доступа по ключу распределяются по многим лист-блокам.

Неиспользуемые индексы не только бесполезно занимают дисковое пространство, но и требуют выполнения базой данных Oracle сопровождения лишней структуры данных во время операций DML. В версии Oracle9i поддерживается метод текущего контроля, позволяющий определить, используется ли в приложении конкретный индекс.
ALTER INDEX ind1 MONITORING USAGE;

SELECT * FROM V$OBJECT_USAGE;

В БД Oracle не предусмотрено физическое удаление неиспользуемых лист-блоков. Неиспользуемые блоки остаются после каждой операции удаления данных, поэтому число таких блоков постоянно растёт. Поскольку в БД Oracle при обработке диапазона ключей поиск всегда начинается с самого левого лист-блока (имеющего наименьшее значение ключа), то при наличии большого количества пустых или почти пустых блоков продолжительность обработки операторов SQL намного увеличивается.
Если индекс первоначально был создан с большим значением параметра PCTFREE, в дальнейшем операция разбиения индексных блоков, выполняемая в БД Oracle во время первоначальной загрузки данных, в значительной степени упрощается. С другой стороны, небольшое значение PCTFREE позволяет резервировать некоторый объём пространства в лист-блоках для последующих обновлений и вставок без необходимости выполнять операции разбиения. Значение PCTFREE, равное 0, может применяться для индексов (отличных от ИОК) с такими ключами, которые представляют собой последовательные номера, вставляемые только с одного конца. Поскольку ключи никогда не переставляются в середину индекса, то нет необходимости резервировать место для выполнения операции вставки такого типа.
В версиях Oracle8i и 9i автоматически учитывается тип индексных строк, добавляемых с помощью обычных операторов INSERT. Если данные ключей всегда имеют случайное распределение, то БД Oracle версии 8.1.6 распознает такую ситуацию и загружает индексные блоки на 70%, игнорируя значение PCTFREE, заданное во фразе STORAGE. Если же обнаруживается, что ключи имеют последовательное распределение, то БД Oracle версии 8.1.6 заполняет лист-блоки на 95% и опять игнорирует значение PCTFREE, заданное во фразе STORAGE.

analize index ind1 validate structure
/
select name, height, blocks, distinct_keys from index_stats;

Параметр height представляет собой число уровней, содержащихся в индексе. Чем меньше число уровней, тем более высокую производительность обеспечивает этот индекс. При использовании более крупных индексов рекомендуется выполнять их реорганизацию при изменении параметра height. Для реорганизации индексов можно либо выполнять их уничтожение, а затем повторное создание, либо применять оператор
alter index ind1 rebuild;

Для успешного выполнения последнего оператора необходимо иметь в табличном пространстве достаточно места для хранения обоих индексов, но этот метод гарантирует возможность применения индекса в приложениях в процессе его реорганизации.

При использовании ИОТ необходимо следить за тем, чтобы в каждом индексном лист-блоке всегда находилось достаточно большое число строк. Если лист-блок содержит лишь несколько строк данных, то применение такого индекса теряет смысл. И наоборот, если к основной части данных можно получить доступ за сравнительно короткое время, то остальные данные (возможно, редко применяемые) можно разместить в таблице переполнения, тщательно рассчитав значения параметров PCTTHRESHOLD и INCLUDING. ИОТ являются идеальным средством индексации данных типа LONG, BLOB, CLOB. Все ключевые поля могут храниться в ИОТ, а поля с данными большого объёма - в области переполнения. Но основное преимущество ИОТ состоит в том, что не требуется дублирование данных и в индексе, и в таблице.

Если на таблице определено два или более БИ, то в БД Oracle могут выполняться эффективные теоретико-множественные операции (and/or/minus) с битовыми строками. В БД Oracle очень быстро выполняются также операции подсчёта числа строк, удовлетворяющих запросу, поскольку для этого достаточно подсчитать число битов 1 в БИ.
Блок БИ отличается по своей структуре от блока сбалансированного древовидного индекса; в частности, но не содержит какой-либо информации заголовка блока данных Oracle. Чем меньше уникальных идентификаторов содержит индексируемый столбец, тем меньше строк и лист-блоков содержит БИ и тем быстрее он работает. С другой стороны, в БД Oracle при вставке строк в базовую таблицу приходится перебирать большое число идентификаторов ROWID, поэтому операции DML на таблицах с БИ выполняются очень медленно по сравнению с операциями DML на таблицах с обычными сбалансированными древовидными индексами.
При использовании БИ не происходит блокировки на уровне строки. Отсутствует также список выполняемых транзакций или другая информация заголовков, которая позволяет контролировать операции отмены и/или повторного выполнения для формирования представлений, целостных по чтению, или отката транзакций. При выполнении операции DML с любым БИ на всю таблицу налагается исключительная блокировка.
БИ поддерживаются только оптимизатором по стоимости (ОСТ). Оптимизатор по синтаксису (ОСИ) их просто игнорирует.
БИ хорошо подходят для приложений поддержки принятия решений, для хранилищ данных с большим объёмом строк (и со столбцами, содержащими лишь небольшое число уникальных значений) и т. д.
Previous post Next post
Up