Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Операция удаления строк (delete) не приводит к освобождению экстентов из сегмента!






 

Небольшой пример. Создадим тестовое табличное пространство и тестовую таблицу.

 

create tablespace test datafile 'D: \oracle\oradata\orcl9\test001.dbf'

size 10m autoextend off

extent management local uniform size 40k

SEGMENT SPACE MANAGEMENT AUTO;

 

create table test1 (num number(8), name varchar2(256)) tablespace test;

 

Table created.

 

Таблице выделен только начальный экстент (в данном случае 40к – этот размер взят из параметров хранения в табличном пространстве test);

 

column segment_name format a24

select segment_name, blocks, bytes, extents

from user_segments

where segment_name ='TEST1';

 

SEGMENT_NAME BLOCKS BYTES EXTENTS

------------------------ ---------- ---------- ----------

TEST1 5 40960 1

 

Заполним таблицу данными (вставим 10000 строк).

 

declare

n number;

begin

for n in 1..10000 loop

insert into test1 values(n, 's '||to_char(n));

end loop;

commit;

end;

SQL> /

 

PL/SQL procedure successfully completed.

 

 

column segment_name format a24

 

select segment_name, blocks, bytes, extents

from user_segments

where segment_name ='TEST1';

 

SEGMENT_NAME BLOCKS BYTES EXTENTS

------------------------ ---------- ---------- ----------

TEST1 25 204800 5

 

Размер таблицы увеличился до 5 экстентов. Т.е. было выделено еще 4 последующих экстента.

 

Теперь удалим строки из таблицы.

SQL> delete from test1;

 

10000 rows deleted.

 

SQL> select segment_name, blocks, bytes, extents

2 from user_segments

3 where segment_name ='TEST1';

 

SEGMENT_NAME BLOCKS BYTES EXTENTS

------------------------ ---------- ---------- ----------

TEST1 25 204800 5

 

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

Выполним команду TRUNCATE (удаляет все строки из таблицы и освобождает экстенты до значения MINEXTENTS):

 

SQL> truncate table test1;

 

Table truncated.

 

SQL> select segment_name, blocks, bytes, extents

2 from user_segments

3 where segment_name ='TEST1';

 

SEGMENT_NAME BLOCKS BYTES EXTENTS

------------------------ ---------- ---------- ----------

TEST1 5 40960 1

 

Теперь ситуация аналогична той, когда таблица была только что создана.

 

Будьте осторожны при выполнении команды TRUNCATE. Если в таблице есть данные, они будут потеряны, т.к. результаты выполнения TRUNCATE нельзя откатить. Используйте ее только удостоверившись, что строк в таблице нет.

 

 


Обзор стандартных табличных пространств СУБД Oracle 10g

 

SYSTEM

 

Каждая БД Oracle всегда имеет в своем составе табличное пространство SYSTEM, создаваемое при выполнение команды CREATE DATABASE. Рекомендуется создаватье его как локально управляемое (впрочем, как и любое другое ТП в БД). Если в БД создано локально управляемое ТП SYSTEM, невозможно будет создать в системе словарно управляемые ТП.

ТП SYSTEM всегда содержит словать данных БД – метаданные о базе в целом. Объекты словаря данных всегда хранятся в первом файле табличного пространства SYSTEM (если их несколько).

Помимо этого, в этом ТП хранятся все хранимые PL/SQL модули (процедуры, функции, пакеты и триггеры). Если БД содержит большое количество подобных объектов, АБД должен позаботиться о дополнительном пространстве внутри ТП SYSTEM.

 

UNDO

 

Табличное пространство UNDO предназначено для хранения данных отката. Другие типы сегментов в этом ТП недопустимы. В БД может существовать несколько ТП подобного типа. Но в режиме автоматического управления откатами в БД может существовать только одно табличное пространство отмены.

Когда в системе запускается SQL-выражение по изменению данных, с транзакцией связывается сегмент отката, которых расположен в текущем табличном пространстве отката. Каждый сегмент отката может обслуживать несколько транзакций. В случае, если же в системе не определено ТП отката по умолчанию, будет использоваться сегмент отката в табличном пространстве SYSTEM, чего нельзя допускать, ибо это негативно скажется на производительности.

Данные отката, точно также, как и данные в других типах ТП хранятся в экстентах и блоках.

 

TEMP

 

Если в системе создано локально управляемое ТП SYSTEM, то для обеспечение выполнения больших операций сортировок необходимо создать временное табличное пространство, обычно называемое TEMP. Локально управляемое ТП SYSTEM не сможет использоваться для хранения временных данных (славарно управляемое может).

 

 

Зачем столько табличных пространств

 

Малые БД могут иметь в своем составе лишь одно ТП SYSTEM, однако специалисты рекомендуют создать в БД хотя бы еще одно дополнительное ТП для хранения данных пользователя отдельно от словаря данных. Это дает вам больше гибкости в проведение различных операций администрирования и уменьшает конкуренцию между объектами словаря и объектами пользователя в рамках одного ТП.

 

Наличие нескольких ТП в БД позволяет:

- Управлять распределением пространства на дисковых массивах для данных БД;

- Указывать квоты на использование пространства для разных пользователей;

- Управлять режимом доступа к отдельным ТП, переводя их в доступное (on-line) либо автономное (off-line) состояние;

- Выполнять операции частичного копирования или восстановления;

- Распределять данные на разных носителях для увеличения производительности.

 

АБД должен уметь создавать новые ТП, добавлять файлы к существующим ТП, изменять параметры хранения для объектов в ТП, делать ТП доступными только для чтения или еще и для записи, создавать ТП для постоянного и временного хранения данных, удалять ТП.

 

 







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.