Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы бд.doc
Скачиваний:
27
Добавлен:
04.11.2018
Размер:
1.37 Mб
Скачать
  1. Субд Oracle. Табличные пространства. Сегменты, экстенты и блоки данных.

Вот, наконец, с системными, объектами мы немного разобрались, теперь пора переходить к объектам, которые имеют названия "пользовательские объекты БД". Пользовательские объекты это те объекты, которые содержатся в контексте БД, собственно для них сама БД и создавалась. Этот тип объектов не находится в исключительном ведении самой БД, а скорее в ведении пользователей самой БД. К такого рода объектам в частности, относятся и файлы данных, так как при создании табличных пространств, создаются и файлы данных, но файлы данных являются так же "физическими объектами БД", об этом не следует забывать. Итак, рассмотрим первое понятие - "файлы данных".

Файл данных БД, представляет собой реальный файл, операционной системы. Он доступен для просмотра, но выполнять с ним какие либо действия рекомендуется только с помощью средств БД! Файлы данных хранят "табличные пространства", что это такое чуть позже, а пока скажу только, что один файл данных хранит только одно "табличное пространство"! А создаются файлы данных с помощью, команд CREATE TABLESPACE и ALTER TABLESPACE. Размер, этих файлов определяется при создании и может быть изменен в процессе работы, как в сторону увеличения, так и в сторону уменьшения, но не меньше чем объем данных, которые в нем находятся! Так же, если вы создали файл данных (объявив новое табличное пространство), скажем 20Мгб, то файл и будет размером 20Мгб, не смотря на то, что будет в нем, таблица с одной строкой или с миллионом строк! Просмотреть все файлы данных ("табличные пространства") можно заглянув в каталог, C:\Oracle\ORADATA\proba, все файлы с расширением dbf и есть файлы данных или "табличные пространства". Либо можно дать, такой запрос в SQL*Plus, естественно войдя пользователем SYSTEM с паролем MANAGER:

SQL> SELECT tablespace_name, file_name, bytes

2 FROM dba_data_files

3 ORDER BY tablespace_name, file_name

4 /

TABLESPACE_NAME FILE_NAME BYTES

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

INDX C:\ORACLE\ORADATA\PROBA\INDX01.DBF 2097152

OEM_REPOSITORY C:\ORACLE\ORADATA\PROBA\OEMREP01.DBF 5242880

RBS C:\ORACLE\ORADATA\PROBA\RBS01.DBF 26214400

SYSTEM C:\ORACLE\ORADATA\PROBA\SYSTEM01.DBF 146800640

TEMP C:\ORACLE\ORADATA\PROBA\TEMP01.DBF 2097152

USERS C:\ORACLE\ORADATA\PROBA\USERS01.DBF 3145728

6 rows selected

Отсюда хорошо видно, что мы имеем 6-ть файлов данных, или - "табличные пространства".

Итак, что это такое? Это собственно и есть те самые файлы данных, основные табличные пространства, которые создаются при автоматической установке БД, хорошо видно из предыдущего запроса, а именно:

  1. SYSTEM - хранит все словари данных и системные объекты.

  2. USERS - для хранения пользовательских объектов.

  3. INDX - табличное пространство для организации индексов БД.

  4. RBS - табличное пространство сегментов отката.

Вспомогательные:

  • OEM_REPOSITORY - специальное пространство, которое использует администратор БД (чуть позже).

  • TEMP - для нужд, остальных пространств.

Данная классификация весьма не полная, но пока это, для того чтобы было понятнее. Табличные пространства, это еще одна сущность сервера БД Oracle. То есть вся система собственно и базируется на табличных пространствах. Их основное отличие от файлов данных, это то, что табличное пространство может содержать несколько файлов данных, по этому не путайте эти два понятия! Табличное пространство, следуя строгим определениям, не что иное, как логическая структура, используемая для группировки данных с однотипными методами доступа. Надеюсь это понятно. Так же табличные пространства, это основные объекты операций резервного копирования и восстановления. Кстати, есть скептики, которые считают, что разделение табличных пространств на отдельные файлы системы не очень хорошо, но с этим можно поспорить, если учитывать физическую структуру БД. Хотя в таких БД как InterBase, Access, все хранится в одном физическом файле. Но это не всегда оправдывает себя. И структура организации табличных пространств группой файлов все же имеют свое преимущество. Так же, данные о табличных пространствах можно получить с помощью такого запроса:

SQL> SELECT a.TABLESPACE_NAME, a.PCT_INCREASE, a.STATUS

2 FROM DBA_TABLESPACES a

3 ORDER BY TABLESPACE_NAME

4 /

TABLESPACE_NAME PCT_INCREASE STATUS

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

INDX 50 ONLINE

OEM_REPOSITORY 50 ONLINE

RBS 50 ONLINE

SYSTEM 50 ONLINE

TEMP 50 ONLINE

USERS 50 ONLINE

6 rows selected

Как видите, мы снова, воспользовались, словарем данных, который так же хранится в табличном пространстве SYSTEM. Надеюсь теперь понятно, что же такое табличное пространство. :)

Теперь - "расширения" (extents). Сформулирую сразу. Расширения - это объекты информационной структуры данных, образованные непрерывными блоками БД Oracle, одним или несколькими. Так как каждый сегмент БД состоит из одного или нескольких расширения, "экстентов". Скажу прямо, у меня долго был туман в голове, прежде чем я все-таки понял, что такое расширение. Во-первых, что такое "сегмент", забегая чуть вперед, (это приходится делать постоянно, так как без этого не обойтись!) это созданный пользователем объект БД, а именно таблица, процедура, функция и т.д. Каждый сегмент, имеет одно или несколько расширений, количество расширений для сегмента БД, зависит от параметра CREATE. Так вот объясняю понятнее. Допустим, вы создавали таблицу учета избирателей по округу. Вы создали таблицу, затем стали заливать в нее данные, что-то получилось, что-то не получилось. Вы добавляли записи, удаляли, меняли, структуру таблицы и т.д. в результате у вас получился полный хаос в табличном пространстве, ваша таблица, по мере заполнения и создания, стала занимать скажем 1000000 блоков, в пяти расширениях. Если эта таблица, после того как вы закончили имеет, скажем, 2000000 записей, но находится в таком плачевном состоянии, то сделать к ней производительный запрос вряд ли удастся, если ее даже оптимизировать и проиндексировать. Я поступал так. После того, как моя таблица была готова, я создавал, новое табличное пространство и заливал туда мою готовую таблицу в результате все ложилось, одним расширением ("экстентом")! То есть таблица не имела рваных блоков и расширений. Что собственно неизбежно при создании. Сейчас есть более элегантные методы "переукладки" табличного пространства, например, в Oracle 9i такое средство администрирования, как Enterprise Manager может оптимизировать табличное пространство, как speeddisk в Windows! Но как это делается "ручками" тоже полезно знать, если вы истинный администратор БД! Вот собственно, что такое "расширение":

  • 1 - Это цепочка блоков образующих расширение или экстент.

  • 2 - Это само расширение.

  • 3 - Это, какое-либо табличное пространство.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]