Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Топ:
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Интересное:
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2022-12-20 | 19 |
5.00
из
|
Заказать работу |
|
|
Раз попавшие в библиотечный буфер объекты можно закреплять в ОЗУ для того, чтобы они не участвовали в схеме освобождения памяти под новые объекты. Для этого имеется системный пакет DBMS_SHARED_POOL. Процедуры KEEP и UNKEEP этого пакета закрепляют или открепляют от памяти объекты следующих типов в соответствии с указанием поля FLAG:
P или p | Пакет, процедура или функция |
Q или q | Генератор уникальных номеров |
R или r | Триггерная процедура |
T или t | Тип (версия 8.1 и выше) |
Любой другой символ (логично указывать C или с) | Курсор |
Перечень закрепленных в памяти объектов можно получить в таблице V$DB_OBJECT_CACHE.
Процедура SIZES позволяет выдать список объектов, размер которых не превышает аргумент этой функции, задаваемый в килобайтах, например:
SET SERVEROUTPUT ON SIZE 100000
EXECUTE SYS. DBMS_SHARED_POOL.SIZES (70)
Процедура ABORTED_REQUEST_TRESHOLD позволяет задать порог в байтах на размер размещаемого в памяти нового объекта. Если размер нового размещаемого объекта больше порогового значения и в shared pool нет места для размещения, Oracle не будет пытаться освободить для такого объекта место, удаляя не используемые в данный момент объекты.
Размер подпрограмм – кандидатов на закрепление в памяти можно посмотреть непосредственно из таблицы DBA_OBJECT_SIZE или из DBA_KEEPSIZES (создается при заведении DBMS_SHARED_POOL).
Сценарий создания пакета хранится в файлах dbmspool. sql и prvtpool. plb в rdbms/ admin.
Фирма Oracle не гарантирует, что пакет DBMS_SHARED_POOL в будущих версиях останется, но пока он не отменен.
Манипулирование большими неструктурированными объектами
Главный системный пакет в этой области – DBMS_LOB (сценарий dbmslob. sql). С его помощью можно выполнять следующие операции над разными типами объектов (полный список см. в документации):
|
Операция | BFILE | BLOB | CLOB | NCLOB |
APPEND | X | X | X | |
COMPARE | X | X | X | X |
COPY | X | X | X | |
ERASE | X | X | X | |
FILECLOSE | X | |||
FILECLOSEALL | X | |||
FILEEXISTS | X | |||
FILEGETNAME | X | |||
FILEISOPEN | X | |||
FILEOPEN | X | |||
GETLENGTH | X | X | X | X |
INSTR | X | X | X | X |
LOADFROMFILE | X | X | X | X |
READ | X | X | X | X |
SUBSTR | X | X | X | X |
TRIM | X | X | X | |
WRITE | X | X | X |
(Длина LOB-объекта в версии 8.1.7 может быть до 4 Гб -1).
Пояснение.
LOB-объект хранится в базе самостоятельно, а в полях таблиц (и в переменной PL/SQL) хранится указатель на него. Если в поле типа LOB указатель отсутствует, значение поля считается как NULL:
SQL> DECLARE c CLOB;
2 BEGIN IF c IS NULL THEN DBMS_OUTPUT.PUT_LINE ('NULL'); END IF; END;
3 /
NULL
Если в поле типа LOB указатель направляет на LOB-объект нулевой длины, считается, что оно пусто (empty). На один LOB-объект может быть заведено несколько указателей. Список LOB-объектов можно посмотреть в таблице SYS.DBA_LOBS.
Пример использования пакета:
DECLARE
document CLOB;
initext VARCHAR2 (4000):= ‘Приказ № 1’;
BEGIN
DBMS_LOB.CREATETEMPORARY (document, TRUE, DBMS_LOB.SESSION);
DBMS_LOB.WRITE (document, length (initext), 1, initext);
-- Продолжаем работу с документом...
--
DBMS_LOB.FREETEMPORARY (document);
END;
/
Пояснение примера.
Здесь в программе использовалась «временная LOB-переменная», то есть переменная, временно хранимая в базе. Срок хранения указан третьим параметром, DBMS_LOB.SESSION – это сеанс. Процедура DBMS_LOB.FREETEMPORARY способна удалить такую переменную раньше.
На временную LOB-переменную не распространяются обычные транзакционные правила существования.
Процедура DBMS_LOB.CREATETEMPORARY по правилам своей работы создает пустой LOB-объект, а инициализация и занесение значения в него выполняются в данном случае процедурой DBMS_LOB.WRITE.
Начиная с версии 9.2 некоторые операции с объектами LOB стало возможным оформлять без пакета DBMS_LOB, с использованием традиционного синтаксиса для строк (в том числе LIKE, SUBSTR и др.). Так, пример выше может быть переписан проще:
|
DECLARE
document CLOB;
initext VARCHAR2 (4000):= ‘Приказ № 1’;
BEGIN
document:= initext;
-- Продолжаем работу с документом...
--
DBMS_LOB.FREETEMPORARY (document);
END;
/
... или даже еще проще:
SET SERVEROUTPUT ON
DECLARE
document CLOB:= ‘Приказ № 1’;
BEGIN
IF document LIKE '%№ 1%' THEN DBMS_OUTPUT.PUT_LINE ('One'); END IF;
-- Продолжаем работу с документом...
--
DBMS_LOB.FREETEMPORARY (document);
END;
/
В последних двух примерах обращаться к процедуре DBMS_LOB.FREETEMPORARY не обязательно (по завершении сеанса память, выделенная здесь неявно для объекта LOB, освободится автоматически), но рекомендуется: по той же причине, по которой советуют закрывать открытые в программе курсоры.
Еще пример:
CREATE DIRECTORY docdir AS 'c:\crs';
CREATE TABLE documents (descr VARCHAR2(60), doc BLOB);
DECLARE
file_loc BFILE:= BFILENAME('DOCDIR', 'sql971.doc');
doc_loc BLOB;
BEGIN
INSERT INTO documents
VALUES ('Programming Oracle with SQL', EMPTY_BLOB())
RETURNING doc INTO doc_loc;
DBMS_LOB. FILEOPEN (file_loc, DBMS_LOB.FILE_READONLY);
DBMS_LOB. LOADFROMFILE
(dest_lob => doc_loc
,src_bfile => file_loc
,amount => DBMS_LOB. GETLENGTH (file_loc));
COMMIT;
DBMS_LOB. FILECLOSE (file_loc);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception: ' || SQLERRM);
END;
/
Пояснение примера.
Системная функция BFILENAME позволяет инициализировать BFILE-переменную ссылкой на файл. Системная функция EMPTY_BLOB позволяет инициализировать поле таблицы пустым BLOB-объектом (нулевой длины).
Замечание. Если задача состоит только в загрузке строк, содержащих поля типа LOB, ее можно решить также с помощью программы SQL*Loader.
|
|
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!