Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Топ:
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
|
из
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.
|
|
|
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!