Главная > SQL > Большие объекты (LOB) в ORACLE


Большие объекты (LOB) в ORACLE

Oracle 11G

Что такое LOB

Large Objects (LOB) это тип данных используемый для хранения больших объектов — различные форматы текстов, изображения, видео, звуковые файлы. Использование LOB для хранения данных позволяет эффективно манипулировать данными в приложении.

Компоненты LOB

LOB состоит из локатора и значения.

Локатор – это внутренний указатель на фактическое значение большого объекта.

Значение – это реальное содержимое объекта.

LOB хранит локатор в таблице и данные в различных сегментах, за исключением случая,  когда размер данных меньше 4000 байт.

Максимальный размер LOB составляет ( 4 GB (4 294 967 295 байт) — 1 ) *  (значение CHUNK parameter of LOB storage); размер может достигать до 128 терабайт.

Типы данных LOB

SQL Datatype Описание
BLOB Двоичный большой объект (Binary Large OBject)
Хранит данные в двоичном формата, используется для хранения изображений, аудио и видео, а также компилированного программного кода
CLOB Символьный большой объект (Character Large Object)
Хранит текстовые данные в формате БД
NCLOB Национальный символьный большой объект (National Character Set Large Object)
Хранит текстовые данные в национальной кодировке.
BFILE Внешний двоичный файл (External Binary File)
Файл хранящийся вне базы данных, как файл операционной системы, но доступный из таблиц БД. BFILEs имеет доступ только для чтения.
Когда LOB удаляется, Oracle сервер не удаляет сам файл.
BFILE поддерживает только случайное(не последовательное) чтение, не участвует в транзакции.

 

Виды LOB

Как внутренние, так и внешние большие объекты могут быть использованы как столбцы таблицы, переменные в pl/sql, атрибуты объектов.

Internal LOB

Внутренние большие объекты — хранятся в табличных пространствах БД, поддерживаются следующие типы данных: BLOB, CLOB, and NCLOB.

Persistent and Temporary LOB

Внутренние большие объекты могут быть временными или постоянными.
Постоянные LOB существуют в строках таблицы БД.
Временные LOB создается для использования только в пределах локального приложения.
Временный экземпляр становится постоянным если его вставить в строку таблицы.

Свойства Temporary LOB
  • Данные хранятся не в таблице, а во временном табличном пространстве
  • Временные LOB быстрее чем постояннные, так как не генерируется redo и rollback данные
  • Используется только в сесии. По окончанию сесии удаляется
  • Для создания временного LOB используется DBMS_LOB.CREATETEMPORARY
External LOB

Внешние большие объекты — вид данных, который хранится в файлах операционной системы, вне табличных пространств БД. Используется тип данных – BFILE. BFILE может быть только внешним.

Использование пакета DBMS_LOB

DBMS_LOB предоставляет методы манипулирования внутренними и внешними LOBами.

Методы DBMS_LOB можно условно разделить на два типа mutators и observers:

  • mutators — могут изменять LOB : APPEND, COPY, ERASE, TRIM, WRITE, FILECLOSE, FILECLOSEALL, and FILEOPEN.
  • observers — могу читать LOB: COMPARE, FILEGETNAME, INSTR, GETLENGTH, READ, SUBSTR, FILEEXISTS, and FILEISOPEN.

Для инициализации LOB локаторов используются следующие функции:

  • EMPTY_CLOB() — функция возвращает LOB локатор для CLOB колонки
  • EMPTY_BLOB() — функция возвращает LOB локатор для BLOB колонки

CLOB и BLOB колонки, так же могут быть инициализированы с помощью символьной или raw строки, если длина не превыщает 4000 байт.

 

Основные правила работы с DBMS_LOB

 

    • Нельзя использовать в качестве параметра пустой локатор или локатор, имеющий значение null

    • Прежде чем осуществить доступ к внешнему LOBу, ассоциированный с ним файл должен быть открыт

    • Перед завершение pl/sql блока нужно закрывать файл объекта bfile

    • Прежде чем выполнять запись во внутренний большой объект, необходимо заблокировать строку, которая содержит столбец этого объекта. Это можно сделать явными блокировками или sql операторами: select for update, update, insert.

    • Правила работы с согласованными по чтению и обновленными локаторами применимы ко всем процедурам и функциям данного пакета.

Похожие записи:

  • No Related Posts
Categories: SQL Tags:
  1. 2 Февраль 2013 в 13:20 | #1

    Автор, мне кажется, неправильно вслух читать с выражением маны голосом Левитана. Любой уважающий себя ораклоид знает о существовании http://docs.oracle.com и (теоретически) считается, что умеет сам прочитать руководства. Краткие пересказы еще менее полезны, потому что создают у дилетантов опасную иллюзию всезнайства. Значительно более полезным было бы писать то, чего в манах НЕТ. Оригинальные решения, основанные, опять-таки, на ваших хнаниях руководств. И тому подобное.

  2. хз
    17 Июнь 2013 в 09:50 | #2

    @Юрий

    поддерживаю:!:

  3. 18 Март 2014 в 13:15 | #3

    rudev, спасибо за статью!

  4. ииии
    27 Март 2015 в 16:02 | #4

    @Юрий
    не нравится — не читай

  5. Шан Мырк
    27 Март 2015 в 16:48 | #5

    @Юрий
    Юрий !censored!

  6. helgisbox
    19 Сентябрь 2017 в 11:00 | #6

    Спасибо за ликбез автору!

    Юрию не стоит снисходить до нашего уровня и писать такие @#$еры. Пусть невылазно пребывает в своем docs.oracle.com.

  7. Аноним
    25 Июнь 2018 в 15:48 | #7

    спасибо, автору

  8. Вася
    16 Декабрь 2019 в 11:33 | #8

    Бесхитростному, слегка глуповатому троллю Юре надо посетить курсы мастерства этого дела.

  1. Пока что нет уведомлений.