Понимание сегментов Lob (SYS_LOB) в Oracle? - PullRequest
19 голосов
/ 10 февраля 2009

В большинстве таблиц (если не во всех) есть поле "blob". Одна из таблиц, в которой хранятся журналы действий пользователя, теперь выросла до 8 ГБ (около 5 миллионов записей).

И наш администратор БД увидел, что эта схема теперь пожирает пространство в геометрической прогрессии. Мы немного исследовали и обнаружили, что есть одна из таблиц с (SYS_LOB), которая занимает около 116 ГБ базы данных 140 ГБ.

Наш администратор БД сказал нам, что эта таблица связана с таблицей, в которой хранятся журналы действий пользователя (8 ГБ)

Кто-нибудь знает, что делают эти таблицы SYS_LOB? Сохранен ли настоящий BLOB-объект в таблице, которую мы создали, ИЛИ Oracle действительно хранит этот BLOB-объект в другой таблице (если да, то SYS_LOB будет этой таблицей)?

1 Ответ

41 голосов
/ 10 февраля 2009

В базе данных Oracle нет таблицы SYS_LOB (по крайней мере, нет такой таблицы, которая является частью базовой установки базы данных. Существует таблица DBA_LOBS, которая отображает информацию обо всех столбцах больших объектов в базе данных. , но на самом деле он не хранит никаких данных больших объектов, только метаданные. Фактические сегменты больших объектов в базе данных имеют сгенерированные системой имена, которые принимают форму SYS_LOB идентификатор $$.

Я предполагаю, что ваш администратор баз данных идентифицировал сегмент с именем SYS_LOB идентификатор $$, который занимает 116 ГБ пространства. Предполагая, что это правильно, вы можете узнать, к какому столбцу какой таблицы относится данный столбец LOB, используя таблицу DBA_LOBS, т.е.

SELECT owner, table_name, column_name
  FROM dba_lobs
 WHERE segment_name = 'SYS_LOB<<identifier>>$$'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...