В базе данных Oracle есть и другие структуры данных, которые могут оказаться полезными при некоторых обстоятельствах.
Последовательности
Одна из серьезных проблем в многопользовательской базе данных - порождение уникальных числовых значений для ключей или идентификаторов. Для решения этой задачи Oracle предлагает объект, называемый последовательностью. Когда кто-нибудь запрашивает значение из последовательности, Oracle возвращает его и увеличивает внутренний счетчик,
избегая конкуренции и временных затрат на взаимодействие с запрашивающим приложением. Oracle может кэшировать диапазон последовательных значений, так что для получения следую- щего числа не потребуется обращаться к диску - запрос будет удовлетворен из диапазона, хранящегося в SGA.
Для задания последовательности нужно указать имя, значение инкремента и некоторую дополнительную информацию. Последовательности существуют независимо от таблиц, так что одну и ту же последовательность можно использовать для нескольких таблиц.
Посмотрим, что могло бы случиться, если бы в Oracle не было последовательностей. Например, можно сохранить последний порядковый номер в столбце некоторой таблицы. Пользователь, желающий получить очередной номер, должен прочитать значение из этого столбца, увеличить его на фиксированное приращение и записать обратно. Но если получить номер одновременно попытаются сразу несколько пользователей, то каждый может прочитать
«последнее» значение до того, как кто-то успеет его обновить. А можно поставить блокировки на строку таблицы, столбец которой содержит порядковый номер, но это приведет к задержкам, поскольку остальным пользователям придется ждать снятия блокировки. Так что же делать? Создайте последовательность.
В версии Oracle Database llg разрешено обращаться к последовательностям в выражениях PL/SQL.
Синонимы
Все структуры данных в базе Oracle принадлежат какой-то схеме. Схема ассоциируется с именем конкретного пользователя; обращаясь к объекту, следует указывать перед его именем имя схемы.
Например, пОлное имя таблицы EMP в схеме DEMO - DEMO.EMP. Если имя схемы не указано, Oracle ищет структуру в схеме для текущего имени пользователя.
Схемы удобны потому, что имена объектов должны быть уникальны только в пределах схемы, которой принадлежат. Однако задавать полностью квалифицированные имена объектов утомительно, особенно для конечных пользователей. Чтобы упростить имена, сделав их более удобными для восприятия, можно создать синоним для любой таблицы, представления, моментальной копии, последовательности, PL/ SQL-процедуры, функции или пакета.
Синоним может быть публичным (тогда к нему может обратиться любой пользователь базы данных) или приватным (доступным только владельцу содержащей его схемы).
Например, если пользователь DEMO создаст публичный синоним EMP для таблицы EMP в своей схеме, то все остальные пользователи смогут обращаться к таблице DEMO.EMP просто по имени EMP. Но предположим, что DEMO не создал публичный синоним, а пользователь SCOTT захотел обратиться к таблице EMP в схеме DEMO по сокращенному имени EMP. Тогда SCOTT может создать приватный синоним в собственной схеме. Разумеется, это будет работать, только если SCOTT имеет доступ к таблице EMP в схеме DEMO.
Применение синонимов упрощает доступ к структурам данных. Но синонимы позволяют и скрывать местоположение конкретной структуры данных. Это повышает степень переносимости данных и безопасность таблицы за счет скрытия имени владельца схемы.
До версии Oracle Database 10g* при изменении местоположения объекта, на который ссылается синоним, необходимо было перекомпилировать все PL/SQL-процедуры, где этот синоним встречался.
Достарыңызбен бөлісу: |