oracle lobsegment что это
Oracle lobsegment что это
select segment_name from dba_SEGMENTS where tablespace_name=’USERS’ and segment_type=’LOBSEGMENT’ AND
SEGMENT_NAME IN (select distinct(SEGMENT_name) from dba_extents where TABLESPACE_NAME=’USERS’
and BLOCK_ID>720000 and SEGMENT_TYPE=’LOBSEGMENT’);
SEGMENT_NAME
———————————
SYS_LOB0000056919C00006$$
SYS_LOB0000057898C00003$$
SYS_LOB0000057887C00006$$
SYS_LOB0000057887C00005$$
SYS_LOB0000004033C00007$$
SELECT * FROM DBA_TAB_COLUMNS WHERE DATA_TYPE LIKE ‘%LOB%’ AND OWNER=’GC’;
select * from dba_segments where segment_name=’SYS_LOB0000057898C00003$$’;
� ��� � ����� ����� ������� ���� �������� ������� � �� LOB-��������, ���� ������ �� �����!? 🙂
| |
Denis Popov Member ������: �����-��������� | DBA_LOBS |
28 ��� 08, 12:40����[6119312] �������� | ���������� �������� ���������� |
| |||
����� Member ������: |
| ||
28 ��� 08, 12:45����[6119361] �������� | ���������� �������� ���������� |
| |
����� Member ������: | ��� ���������� ����� ����������� LOB-��������� �� ������� ���� �������������? ���� ����, �� ���? 🙂 |
28 ��� 08, 13:02����[6119485] �������� | ���������� �������� ���������� |
| |||
����� Member ������: |
alter index gc.SYS_IL0000057887C00005$$ rebuld * ERROR at line 1: ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW option | ||
28 ��� 08, 13:12����[6119555] �������� | ���������� �������� ���������� |
| |
StarBlade Member | |
28 ��� 08, 13:20����[6119626] �������� | ���������� �������� ���������� |
| |
StarBlade Member ������: ������ ���� �� �� ��� | ���������� � ��� �� �������� �����. �� ��� �� ��������. ���� >0 ����� |
28 ��� 08, 13:24����[6119664] �������� | ���������� �������� ���������� |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
����� Member alter table GC.XSL$TEMPLATES move TABLESPACE LARGE_TAB lob(TEMPLATE) store as SYS_LOB000005789803$$; ��� select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME from DBA_SEGMENTS WHERE SEGMENT_NAME=’SYS_LOB0000057898C00003$$’ /привет/мир/etcНепериодические заметки о программировании понедельник, 25 мая 2015 г.О работе с большими объектами в СУБД OracleУказанные типы данных можно использовать в СУБД Oracle для определения столбцов таблиц, атрибутов объектных типов и переменных PL/SQL. Вот краткая характеристика этих типов: Итак, по месту хранения LOB’ы делятся на а по содержанию на Для работы с LOB’ами cоздам таблицу со столбцами соответствующих типов: Вместе с таблицей были созданы сегменты для хранения больших объектов: Значение типа LOB может быть Пустые LOB значения создаются функциями EMPTY_CLOB и EMPTY_BLOB : Начиная с версии Oracle 9i в SQL и PL/SQL поддерживается неявная конвертация между (N)CLOB и VARCHAR2, что позволяет манипулировать значениями в (N)CLOB столбцах и переменных так, как будто это значения типа VARCHAR2: Как видим, функции и операторы, работающие с VARCHAR2, перегружены для типа (N)CLOB! При этом преодолеваются ограничения в 4000 символов, свойственные SQL типу VARCHAR2: А вот операторы сравнения для (N)CLOB работают только в PL/SQL и не работают в SQL: Выше я воспользовался функциями TO_NCLOB и TO_CLOB для явной конвертации значений VARCHAR2 в значения (N)CLOB. В следующей таблице представлены все функции для конвертации в LOB типы и обратно:
Как видим, функция TO_RAW недоступна в SQL и, отсюда, возможности конвертации между BLOB и RAW в SQL ограничены. Например: Зато в PL/SQL работают явная и неявная конвертации между BLOB и RAW: Рассмотренные возможности по работе со значениями LOB как с VARCHAR2 получили название SQL семантика для LOB’ов (SQL semаntics for LOBs). С их использованием связаны некоторые ограничения, как мы увидим ниже. С точки зрения PL/SQL большие объекты делятся на: В вышеприведенных примерах с PL/SQL мы имели дело с временными LOB’ами. Изменения внутренних постоянных LOB’ов (в отличие от внешних или временных) в СУБД Oracle подчиняются транзакциям. Убедимся в этом, отменив только что сделанные изменения: Типичный алгоритм для чтения или изменения постоянного LOB’а с помощью PL/SQL таков: Приведу пример выгрузки данных из постоянного CLOB’а во внешний файл. Для доступа к внешним файлам потребуется создать директорию, например: Альтернативно, можно выгрузить CLOB во внешний файл, пользуясь SQL семантикой для LOB и не прибегая к DBMS_LOB : Тип данных BFILE содержит указатель на внешний файл, который Пример чтения BFILE и записи во временный BLOB:
Вместо чтения BFILE по частям пакет DBMS_LOB позволяет Пример загрузки текстового файла во временный CLOB (аналогично можно загрузить и в постоянный CLOB): Приведу неполный список процедур и функций DBMS_LOB для чтения, анализа и изменения значений BLOB, CLOB и NCLOB:
Следующий эксперимент покажет разницу между внутренними и внешними постоянными LOB’ами. Помещу в поле bfile_col таблицы lobs_tab объект BFILE и скопирую единственную строку таблицы во вторую строку: Команда INSERT привела к тому, что значения bfile_col в обеих строках связаны с одним и тем же внешним файлом, и его изменение отразится на обоих значениях. Аналогично, при присваивании BLOB и (N)CLOB переменных в PL/SQL мы получаем независимые копии LOB’ов: Как освободить место в табличном пространстве за счет LOB сегмента.В статье описано как освободить место в табличном пространстве за счет LOB сегмент Можно переместить LOB сегмент в табличное пространство, которое располагаются на более медленных устройствах хранения, но больших по объему и относительно дешевых. Чтобы освободить место в табличном пространстве за счет LOB сегмента, можно использовать три способа: ВНИМАНИЕ: Во время выполнения запросов из способов B) и C) LOB сегмент блокируется. Если LOB сегмент большой, то это может занять значительное время. Поэтому эти операции рекомендуется проводить во вне рабочее время. Сначала определяем, с какими сегментами мы будем работать 1) Сегмент может занимать больше места, чем в нем содержится данных. Этим запросом можно определить, сколько места занимают реальные данные конкретного сегмента. A.1) Процедура показывает, сколько места можно освободить командой ALTER TABLE … DEALLOCATE UNUSED. A.2) Если такого места много его можно освободить командой B.1) Процедура показывает, сколько места можно освободить командой ALTER TABLE … DEALLOCATE UNUSED. C.1) Запрос которым LOB сегмент переноситься в другое табличное пространство Опыт использования таблиц с LOB-столбцамиТихомиров Владимир Вадимович, |
Существует несколько типов LOB объектов: BLOB (двоичный большой объект), CLOB (символьный большой объект), NCLOB (национальный символьный большой объект) и BFILE (внешний двоичный файл). LOB объекты делятся на внутренние и внешние.
Внешние большие объекты External LOB – вид данных, который хранится в файлах операционной системы, вне базы данных, а в базе данных на них хранятся ссылки (локаторы). Внешние LOB используют тип данных – BFILE.
Инструментом работы с LOB выступает пакет DBMS_LOB. Он предоставляет методы манипулирования внутренними и внешними LOBами.
В данной статье рассматриваются только постоянные внутренние LOB объекты.
Сегменты LOB объектов Oracle
Таким образом, если в таблице было указано N столбцов типа LOB, то получим 2*N LOB-сегментов.
LOB сегменты можно увидеть из представления DBA_LOBS запросом:
Команда создания таблицы имеет вид:
LOB сегменты этой таблицы можно увидеть из представления DBA_LOBS указанным выше запросом:
В результате получаем:
Мы видим, что в именах сегментов имеются символы SYS_LOB для LOB-сегментов и SYS_IL для индексных сегментов.
Используя представление Oracle DBA_SEGMENTS (при наличии данных в LOB), можно получить размер в байтах, занимаемых LOB-сегментами и LOB-индексными сегментами. Например, для LOB столбца XMLOUT число байтов, занимаемых сегментом, определяется запросом, указанным ниже. При этом в запросе в поле segment_name подставляется имя сегмента, полученного из представления DBA_LOBS.
В результате работы запроса получаем:
Для работы с LOB удобным является запрос, в котором используются оба указанных выше представления: DBA_SEGMENTS и DBA_LOBS. Данный запрос покажет (при наличии данных в LOB) не только LOB сегменты всей таблицы и ее индексов, но и размеры в байтах, которые они занимают.
Иногда важно посмотреть объем, занимаемый самой таблицей без LOB объектов. Это можно увидеть (при наличии данных в таблице) запросом:
Как видно, сама таблица составляет порядка 8 MB, в то время как один из LOB занимает 6900 MB. В силу чего таблица была размещена в табличном пространство ADATA среднего размера, в то время как LOB большого объема был размещен в другом существенно большем табличном пространстве LOBTBS. О табличных пространствах LOB изложено ниже.
Задание табличного пространства для LOB столбцов таблицы
По умолчанию LOB-сегмент со своим LOB индексным сегментом создается в том же табличном пространстве, что и таблица, в которой находятся LOB столбец. При этом весьма важный момент: LOB-сегмент и LOB-индекс всегда находятся в одном и том же табличном пространстве.
Однако порой целесообразно помещать LOB сегмент в табличное пространство, отличное от пространства таблицы. При этом сами LOB столбцы так же могут размещаться в различных табличных пространствах.
Для размещения LOB в другое табличное пространство, отличное от пространства таблицы, используется структура STORE (начиная с Oracle 11g можно использовать структуру STORE AS SECUREFILE) в команде CREATE таблицы. При этом фразу STORE можно указать только при создании таблицы, т.е. STORE нельзя вставить в процессе модификации таблицы.
Замечание. При создании таблицы по команде Create table с LOB столбцами в ней автоматически для каждого LOB столбца таблицы создается структура STORE. Например, для столбца XMLOUT типа LOB по умолчанию создалась бы структура STORE вида:
В ней по умолчанию табличным пространство LOB-а становиться табличное пространство таблицы ADATA и автоматически создаются несколько параметров.
Если есть необходимость управлять табличным пространством или параметрами STORE, надо явно описать конструкцию STORE при создании таблицы (что и было сделано при создании таблицы AIS.SERVICEMSGXML по каждому LOB столбцу). При этом, если используется конструкция STORE AS SECUREFILE, то ее необходимо явно прописывать в команде Create table.
Вычислить процент строк, в которых LOB типа BLOB составляют менее 4000 байт можно по запросу
Вывод. При создании STORE cледует оценить, что эффективнее: хранить LOB в таблице или вынести их из таблицы (режим ENABLE или DISABLE), обосновать целесообразность кэширования LOB и определить более эффективный размер CHUNK.
Модификация атрибутов конструкции STORE
Ряд атрибутов STORE могут быть добавлены или модифицированы в любой момент после создания таблицы командой ALTER TABLE (не модифицируются такие атрибуты как CHUNK и ENABLE/DISABLE STORAGE IN ROW).
Например, для столбца XMLIN таблицы SERVICEMSGXML модификация атрибутов NOCACHE на CACHE осуществляется так же по команде ALTER
Для режима STORE AS SECUREFILE можно модифицировать или добавлять новые атрибуты. Например, добавить DEDUPLICATE и модифицировать COMPRESS с LOW на HIGH по команде:
Особенности очистки табличного пространства, занимаемого LOB объектами
В отличие от обычных таблиц удаление данных из таблицы с LOB не освобождает табличное пространство, занимаемое LOB. Для освобождения табличного пространства используется команда SHRINK либо TRUNCATE таблицы или (что более эффективно) TRUNCATE секции для секционированных таблиц.
Сжатие пространства для не секционированной таблицы осуществляется по команде
Для секционированной таблицы команды с shrink и truncate имеют вид:
Фраза UPDATE GLOBAL INDEXES в TRUNCATE обеспечивает исправность глобальных индексов после очистки секции по Truncate.
Работа с большими объектами в PL/SQL (BFILE, LOB, SecureFiles)
Тема работы с большими объектами весьма объемна, поэтому мы не сможем рассмотреть все ее аспекты. Данную статью блога следует рассматривать как введение в программирование больших объектов для разработчиков PL/SQL. Мы познакомимся с некоторыми нюансами, которые необходимо учитывать, и рассмотрим примеры важнейших операций. Хочется надеяться, что представленный материал станет хорошей основой для ваших дальнейших исследований в этой области.
Прежде чем переходить к основному материалу, необходимо указать, что все примеры данного раздела основаны на следующем определении таблицы (см. файл source_code.sql):
Рис. 1. Водопад Драйер-Хоуз возле Мунисинга (штат Мичиган)
Таблица содержит информацию о водопадах, расположенных в северной части штата Мичиган. На рис. 1 изображен водопад Драйер-Хоуз возле Мунисинга; в замерзшем состоянии его часто посещают альпинисты.
Понятие локатора LOB
Рис. 2. Локатор LOB указывает на объект в базе данных
Этот механизм в корне отличается от того, как работают другие типы данных. Переменные и значения в столбцах LOB содержат локаторы больших объектов, которые идентифицируют реальные данные, хранящиеся в другом месте базы данных или вне ее. Для работы с данными типа LOB нужно сначала извлечь локатор, а затем с помощью встроенного пакета DBMS_LOB получить и/или модифицировать реальные данные. Так, для получения двоичных данных фотографии, локатор которой хранится в столбце BLOB из приведенной ранее таблицы, необходимо выполнить следующие действия:
Не все эти действия являются обязательными; не огорчайтесь, если что-то пока остается непонятным. Далее все эти операции будут описаны более подробно.
LOB-ДАННЫЕ В ДОКУМЕНТАЦИИ ORACLE
Если вам часто приходится работать с большими объектами, настоятельно рекомендуем ознакомиться со следующими документами Oracle:
Большие объекты — пустые и равные NULL
Очень важно понимать это различие, потому что у типов LOB способ проверки наличия либо отсутствия данных получается более сложным, чем у скалярных типов. Для традиционных скалярных типов достаточно простой проверки IS NULL :
Итак, проверять нужно два условия вместо одного.
Для создания пустого объекта BLOB используется функция EMPTY_BLOB (). Для типов CLOB и NCLOB используется функция EMPTY_CLOB ().
Запись данных в объекты LOB
Чтение данных из объектов LOB
В результате выполнения этого кода выводится следующий текст:
Особенности типа BFILE
Как упоминалось ранее, типы данных BLOB, CLOB и NCLOB представляют внутренние большие объекты, хранящиеся в базе данных, в то время как BFILE является внешним типом. Между объектами BFILE и внутренними LOB существуют три важных различия:
Создание локатора BFILE
Локатор BFILE — всего лишь комбинация псевдонима каталога и имени файла. Реальный файл и каталог даже не обязаны существовать. Иначе говоря, Oracle позволяет создавать псевдонимы для несуществующих каталогов, а BFILENAME — локаторы для несуществующих файлов. Иногда это бывает удобно.
Доступ к данным BFILE
Результат выполнения этого кода:
Использование BFILE для загрузки столбцов LOB
Не путайте предупреждения с ошибками PL/SQL; загрузка все равно будет выполнена в соответствии с запросом.
Следующий пример SQL*Plus демонстрирует загрузку данных из внешнего файла с использованием LOADCLOBFROMFILE :
SecureFiles и BasicFiles
По данным тестирования Oracle, повышение быстродействия от использования SecureFiles составляет от 200 до 900%. В простом тесте с загрузкой файлов PDF на сервер Microsoft Windows я наблюдал снижение времени загрузки от 80 до 90% от 169 секунд до 20–30 секунд (в зависимости от конфигурации и количества загрузок). В системе x86 Linux выигрыш был более скромным. Возможно, в вашей ситуации цифры будут другими, но ускорение будет наверняка!
Если вы не уверены относительно базы данных, обратитесь за помощью к администратору.
Устранение дубликатов
Сжатие
Чтобы включить режим устранения дубликатов одновременно со сжатием, укажите соответствующие параметры в определении LOB :
При включении обоих режимов сначала выполняется устранение дубликатов, а затем сжатие.
Шифрование
Созданный бумажник необходимо открывать заново после каждого перезапуска экземпляра. Открытие и закрытие бумажника выполняется следующим образом:
Временные объекты LOB
Создание временного объекта LOB
Другой способ создания временного объекта LOB основан на объявлении переменной LOB в коде PL/SQL и присваивании ей значения. Например, следующий фрагмент создает временные объекты BLOB и CLOB :
Освобождение временного объекта LOB
Процедура DBMS_LOB.FREETEMPORARY освобождает временный объект типа BLOB или CLOB в текущем временном табличном пространстве. Заголовок процедуры:
В следующем примере сначала создаются, а затем освобождаются два временных объекта LOB :
После вызова FREETEMPORARY освобожденный локатор LOB ( lob_loc ) помечается как недействительный. Если присвоить его другому локатору с помощью обычного оператора присваивания PL/SQL, то и этот локатор будет освобожден и помечен как недействительный.
PL/SQL неявно освобождает временные объекты LOB при выходе за пределы области действия блока.
Проверка статуса объекта LOB
Функция ISTEMPORARY позволяет определить, является ли объект с заданным локатором временным или постоянным. Она возвращает целочисленный код: 1 для временного объекта, 0 для постоянного.
Управление временными объектами LOB
Временные большие объекты обрабатываются не так, как обычные постоянные. Для них не поддерживаются транзакции, операции согласованного чтения, откаты и т. д. Такое сокращение функциональности имеет ряд следствий:
Встроенные операции LOB
Семантика SQL
Возможности, упомянутые в предыдущем разделе, Oracle называет «поддержкой семантики SQL для LOB ». С точки зрения разработчика PL/SQL это означает, что с LOB можно работать на уровне встроенных операторов (вместо отдельного пакета).
Следующий пример демонстрирует некоторые возможности семантики SQL:
Маленький фрагмент кода в этом примере содержит несколько интересных моментов:
Семантика SQL может создавать временные объекты LOB
Чтобы получить описание местонахождения водопада в верхнем регистре, сохранив возможность обновления исходного описания, необходимо получить два локатора LOB :
Влияние семантики SQL на быстродействие
А теперь представьте, сколько времени потребуется для создания копии каждого объекта CLOB для его преобразования к верхнему регистру, для выделения и освобождения пространства временных объектов CLOB во временном пространстве и для посимвольного поиска данных в CLOB средним объемом в 1 Гбайт. Конечно, такие запросы навлекут на вас гнев администратора базы данных.
Oracle Text и семантика SQL
За дополнительной информацией о CONTAINS и индексах Oracle Text, игнорирующих регистр символов, обращайтесь к документации Oracle Text Application Developer’s Guide.
Функции преобразования объектов LOB
Oracle предоставляет в распоряжение программиста несколько функций преобразования больших объектов. Перечень этих функций приведен в табл. 2.
- Участник акционер бенефициар в чем разница
- oem или odm что это