Oracle tablespace как посмотреть

Обновлено: 06.07.2024

Для управления табличными пространствами в базе данных Oracle Database нужно познакомиться с несколькими ключевыми табличными пространствами:

  • DBA_TABLESPACES
  • DBA_FREE_SPACE
  • DBA_SEGMENTS
  • DBA_DATA_FILES
  • DBA_TABLESPACE_GROUPS

В дополнение к этим табличным пространствам для управления и мониторинга табличных пространств в базе данных также очень пригодятся динамические представления производительности V$DATAFILE и V$FILESTAT . Ниже мы кратко опишем ключевые представления словаря, касающиеся табличных пространств.

DBA_TABLESPACES

Представление DBA_TABLESPACES — очень важное представление словаря для управления табличными пространствами. С помощью этого представления можно много узнать о табличных пространствах, например, отключены или подключены ли они в данный момент (offline/online); являются ли они undo, постоянными или временными; тип управления экстентами, тип расширения, тип управления пространством сегментов;состоят они из bigfile или smallfile. В статье наших блогов “Создание табличных пространств” уже были даны примеры применения этого представления. Представление словаря DBA_TABLESPACES служит для поиска важной информации о табличном пространстве, в том числе:

  • размер начального экстента;
  • размер следующего экстента;
  • максимальное количество экстентов по умолчанию;
  • статус (онлайновое, отключенное, только для чтения);
  • содержимое (постоянное, временное или undo);
  • тип управления экстентами ( DICTIONARY или LOCAL );
  • управление пространством сегмента ( AUTO или MANUAL ).

DBA_FREE_SPACE

Представление DBA_FREE_SPACE сообщает о том, сколько свободного места в базе данных имеется на каждый данный момент. Запрос из листинга 1 ниже позволяет узнать,сколько свободного места есть в табличных пространствах. Обратите внимание, что место, относящееся к удаленной таблице, которая находится в “корзине”, отображается в этом представлении как свободное. Однако его нельзя использовать для размещения любого другого объекта. Вы получаете это пространство обратно только после того, как окончательно удалите элемент оператором ALTER TABLE. PURGE .

DBA_SEGMENTS

Как вам известно, база данных Oracle содержит несколько видов сегментов: таблиц,индексов, undo и т.д. Представление словаря данных DBA_SEGMENTS , помимо прочего,показывает имя и тип сегмента вместе с табличным пространством, к которому он относится. Это представление отображает детальную информацию о различных сегментах базы данных, что видно из листинга 2.

DBA_DATA_FILES

Представление словаря данных DBA_DATA_FILES — еще одно исключительно полезное представление, к которому вы будете часто обращаться при управлении пространством хранилища базы данных. Это представление запрашивается для нахождения имен всех файлов данных, табличных пространств, к которым они относятся, и информации об этих файлах, такой как количество байтов и блоков, а также относительный номер файла. Простой запрос к представлению DBA_DATA_FILES отображает все файлы данных, как показано в листинге 3.

Представление DBA_DATA_FILES особенно полезно, когда вы соединяете его с другим представлением словаря данных, как в примере, который иллюстрирует листинг ниже. Этот запрос производит отчет, показывающий размеры табличных пространств, свободное и занятое место, а также процент занятого места в каждом табличном пространстве. В конце вы также получаете сумму всего пространства хранилища, выделенного всем табличным пространствам, а также распределение свободного и занятого пространства в базе данных.

Представление DBA_TEMP_FILES — аналог представления DBA_DATA_FILES , дающего информацию о временных файлах временных табличных пространств.

DBA_TABLESPACE_GROUPS

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

V$DATAFILE

Представление V$DATAFILE содержит информацию об имени файла данных, номер табличного пространства, статус, временную метку последнего изменения и т.п. Представление V$TEMPFILE показывает ту же информацию о файлах временных табличных пространств. Представление V$DATAFILE отображает важную информацию, когда его соединить с представлением V$FILESTAT .

V$FILESTAT

Представление V$FILESTAT снабжает детальной информацией о статистике чтения/записи файла, включая количество физических операций чтения и записи, время,потребовавшееся на эти операции, а также среднее время одной операции чтения и записи в миллисекундах. Представление V$TABLESPACE содержит информацию о табличных пространствах. Листинг 5 демонстрирует, как можно соединить представления V$DATAFILE, V$TABLESPACE и V$FILESTAT для получения полезной информации о дисковых операциях ввода-вывода.

Блоки данных (Data Block) - мельчайший строительный блок базы данных Oracle, состоящий из определенного количества байт на диске. Блок данных Oracle - логический компонент базы данных. Диски на которых располагаются блоки Oracle, сами делятся на блоки данных. Обычно блоки данных диска соответствуют блокам данных Oracle. Размер блока базы данных Oracle устанавливается параметром DB_BLOCK_SIZE в файле init.ora. Размер блока следует воспринимать, как минимальную единицу обновления, выбора или вставки данных. Общепринятый размер блока - 8 KByte. Если выбрать размер блока 64 KByte, то даже при извлечении имени длиной в четыре символа, придется прочесть весь блок размером 64 KByte, в котором содержатся интересующие четыре буквы.

Все блоки данных можно разделить на две основные части: часть строк данных и часть свободного пространства.

Экстенты (extent)

Экстенты (extent) - это два или более последовательных блоков данных Oracle, представляющий собой единицу выделения места на диске. Когда комбинируется несколько непрерывных блоков данных, они называются экстентом. Когда вы создаете объект базы данных вроде таблицы или индекса, вы выделяете им некоторый начальный объем пространства, называемый начальным экстентом, и, кроме того, указываете размер следующего экстента. Однажды размещенные в таблице или индексе, экстенты остаются выделенными конкретному объекту, пока вы не удалите этот объект из базы данных - тогда пространство, занимаемое им, вернется в пул свободного пространства базы данных.

Сегменты (segments)

Сегменты (segments) - набор экстентов, которые вы выделяете логической структуре, такой как таблица или индекс (или некоторый другой объект). Набор экстентов формирует следующую более крупную единицу хранения, именуемую сегментом. Oracle называет сегментом все пространство, выделенное любому конкретному объекту базы данных. Поэтому если у вас есть таблица по имени Customer, вы просто ссылаетесь на пространство, выделенное для нее, как на “сегмент Customer”. Когда вы создаете индекс, он получает свой собственный сегмент, названные его именем. Сегменты данных и индексов - наиболее распространенный тип сегментов Oracle. Есть также временные сегменты, которые база данных использует в транзакциях, включающих сортировку, а также сегменты отката, которые база использует для хранения информации отката. Когда все экстенты сегмента заполнены, Oracle автоматически выделяет дополнительные экстенты при необходимости и эти сегменты могут быть непрерывными.

Администраторы баз данных Oracle создают и управляют объектами схем, включая таблицы, индексы, представления, материализованные представления, синонимы, триггеры, ссылки на базы данных и т.д. Однако прежде чем рассматривать различные объекты схем, следует посмотреть, как управлять важнейшими табличными пространствами Oracle. Табличные пространства — это логические сущности, и каждая из прикладных таблиц и индексов хранятся в сегменте, в то время как сегменты хранятся в файлах данных, являющихся частью табличного пространства. Таким образом, табличное пространство - это логически веденное пространство для размещения объектов схемы Oracle. Однако не существует отношения “один к одному” между объектами схемы вроде таблицы или индекса и табличным пространством.

Когда вы используете словосочетание табличное пространство, то на самом деле имеете в виду непрерывное табличное пространство — место, где хранятся объекты вашей схемы. (Если вы перешли от базы данных выпуска, предшествовавшего Oracle Database 10g, то сначала потребуется создать табличное пространство Sysaux). Все постоянные табличные пространства создаются с использованием файлов данных Oracle. В дополнение к постоянным табличным пространствам существуют следующие важные типы табличных пространств Oracle.

    служат для хранения объектов, существующих на протяжении существования пользовательского сеанса. Вы используете временные файлы вместо файлов данных для создания временного табличного пространства.
  • Табличные пространства отмены (undo) — разновидность постоянных табличных пространств, служащих для хранения данных отмены, которые используются для возврата измененных данных в исходное состояние.

Каждое табличное пространство Oracle должно иметь обязательные табличные пространства System и Sysaux. Табличное пространство System является постоянным и содержит важнейшую информацию словаря, которая помогает работе базы данных. Табличное пространство System — это первое табличное пространство, которое вы создаете при создании новой базы данных. Табличное пространство Sysaux дополняет табличное пространство System, храня метаданные для различных приложений Oracle,а также оперативные данные для внутренних инструментов управления производительностью вроде Automatic Workload Repository. Табличные пространства System и Sysaux трактуется иначе, чем другие табличные пространства. Ни одно из них нельзя переименовывать либо удалять.

Прежде чем создать таблицы или индексы, вы должны создать табличные пространства для хранения данных. Табличные пространства состоят из одного или более файлов данных (или временных файлов, если речь идет о временном табличном пространстве). Хотя ваши данные и объекты располагаются в файлах операционной системы,организация этих файлов в табличные пространства Oracle облегчает группировку взаимосвязанной информации.

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

На заметку! Табличные пространства не уникальны для Oracle. СУБД DB2 также имеет табличные пространства, а вот базы данных Microsoft SQL Server их не используют. База данных tempdb в СУБД SQL Server соответствует временному табличному пространству в Oracle.

Установка размера экстента табличного пространства и управление пространством

Прежде чем вы в действительности создадите табличное пространство, следует разобраться в двух других важных концепциях: установке размеров экстента (extent sizing) и управлении пространством сегмента (segment space management).

Выделение размера экстента: AUTOALLOCATE или UNIFORM

Всякий раз, когда объект Oracle нуждается в увеличении своего размера, дополнительное место добавляется ему в виде экстентов. Когда вы создаете локально управляемые табличные пространства, то есть два варианта управления размерами экстентов: можно позволить базе данных автоматически выбирать размер экстента (указав опцию AUTOALLOCATE) или же специфицировать для табличного пространства добавление экстентов унифицированного размера (опция UNIFORM).

Если выбрана опция UNIFORM, потребуется специфицировать конкретное значение размера новых экстентов в конструкции SIZE. Если вы пропустите конструкцию SIZE,то Oracle будет создавать все экстенты с унифицированным размером в 1 Мбайт, но при желании можно указать и намного большее значение.

Однажды создав табличное пространство, вы не можете изменить размер экстента. Если вы полагаете, что все сегменты в табличном пространстве будут примерно одного размера, и они будут расти сходным образом, можете применить опцию размера экстента UNIFORM. И если вы поступите так, то сможете выбрать несколько размеров экстентов, создать все табличные пространства с одним из этих размеров и размещать объекты в табличных пространствах на основе их размера.

Традиционно администраторы баз данных Oracle беспокоятся о количестве экстентов в сегменте. Вы должны более внимательно относиться к выбору размера экстентов, поскольку это влияет на производительность чтения и записи в сегменте.

Например, если выбран очень маленький размер экстента UNIFORM, база данных не сможет выполнять упреждающее чтение данных либо многоблочное чтение, что плохо отразится на производительности. Oracle рекомендует следующие размеры экстентов, если вы решите устанавливать их самостоятельно:

  • 64 Кбайт — для малых сегментов;
  • 1 Мбайт — для средних сегментов;
  • 64 Мбайт — для крупных сегментов.

При выборе опции AUTOALLOCATE Oracle управляет размером экстентов автоматически. Размер экстента начинается с 64 Кбайт и увеличивается базой данных прогрессивно до 64 Мбайт. База данных автоматически решает, каким должен быть размер нового экстента для объекта — на основе шаблона расширения экстента. Интересно, что Oracle в этом случае увеличивает размер экстента с ростом объекта! Автоматическое выделение особенно удобно, если вы не представляете коэффициента роста объекта и предоставляете Oracle право позаботиться об этом.

На заметку! По умолчанию для управления экстентами табличного пространства выбирается опция AUTOALLOCATE.

Если вы точно знаете потребности в пространстве для ваших объектов, можете выбрать опцию экстентов UNIFORM, что позволит эффективно использовать доступное пространство. Например, предположим, известно, что ваши крупнейшие таблицы потребуют большого пространства, и потому будут иметь очень большой размер экстента. Создавайте для них табличное пространство с очень большим унифицированным размером экстента.

Если вы не уверены в том, какой размер экстента будет наилучшим, то AUTOALLOCATE позволит базе данных определить размер экстента, но при этом она может впустую потратить некоторое пространство ввиду переменной величины экстентов.

Совет. Oracle рекомендует, что если только все объекты в табличном пространстве не имеют один и тот же размер, следует использовать AUTOALLOCATE. В дополнение к простоте управления опция AUTOALLOCATE для размеров экстентов может потенциально сэкономить существенный объем дискового пространства по сравнению с опцией UNIFORM.

Сравнение автоматического и ручного управления пространством сегментов

Пространство в блоке Oracle можно использовать в двух целях: для вставки свежих данных либо для обновления существующих данных в блоках. Когда вы удаляете данные из блока или обновляете их, изменяя размер данных в меньшую сторону, в блоке увеличивается свободное пространство. Управление пространством сегментов определяет то, как Oracle управляет свободным пространством внутри индивидуальных блоков данных Oracle.

Если вы специфицируете ручное управление размерами сегментов (посредством ключевого слова MANUAL), то база данных управляет свободным пространством сегментов в табличном пространстве, используя сущности, называемые свободными списками (freelists), и пары параметров хранения — PCTFREE и PCTUSED. Oracle отслеживает наличие свободного пространства в блоках данных, поддерживая свободные списки. Каждая таблица или индекс поддерживает список всех своих блоков данных, размер которых превышает PCTUSED. То есть свободные списки содержат список всех блоков, пригодных для вставки данных. Сначала Oracle проверяет соответствующий свободный список, прежде чем выполнить вставку в таблицы или индексы. База данных Oracle вынуждена выполнять много работы по поддержанию свободных списков, по мере того, как блоки достигают порогового значения PCTUSED при вставке и возвращаются к значениям ниже порогового при удалении.

Параметр PCTFREE позволяет резервировать определенный процент пространства в каждом блоке данных для будущих обновлений существующих данных. Например, в некотором блоке могут быть данные, содержащие адрес лица. Если позднее вы обновите этот адрес так, что он станет больше, то в идеале в существующем блоке должно быть место, чтобы вместить увеличенный адрес. Именно это и обеспечивает параметр PCTFREE: место для роста существующих строк. Параметр PCTUSED, с другой стороны,имеет дело с пороговым значением свободного пространства, превышение которого позволит вставлять новые данные в блок. Например, если параметр PCTFREE установлен в 40%, Oracle не сможет вставлять новые данные в блок до тех пор, пока объем занятого пространства не упадет ниже порогового значения.

Вы можете легко увидеть, как параметры PCTFREE и PCTUSED вместе позволяют оптимизировать использование пространства внутри блока Oracle. Предположим, что 80% пространства в блоке занято данными. Это будет максимальным объемом данных, которые вы сможете вставить внутрь блока, если параметр PCTFREE установлен в значение 20%. Если в блоке произойдут какие-то удаления, появится место для потенциальной вставки новых строк, однако Oracle применяет параметр PCTUSED интеллектуальным образом, не позволяя использовать немедленно любое освободившееся пространство для новых вставок. Попытки Oracle воспользоваться свободным пространством в блоках данных сопряжены с накладными расходами, поэтому Oracle ждет, пока использованное пространство не упадет ниже установки PCTUSED, прежде чем задействовать его.Поэтому, даже несмотря на то, что может быть свободное пространство в частично занятых блоках, Oracle игнорирует их и применяет для вставки данных новые блоки.

Параметры PCTFREE и PCTUSED вместе со свободными списками представляют собой ручной способ проверки пространства, поскольку вы заставляете Oracle непрерывно проверять блоки на наличие достаточного свободного пространства. В базе данных с интенсивными обновлениями, вставками и удалениями это может привести к замедлению транзакций.

Если вы предпочтете автоматическое управления пространством сегментов при создании табличного пространства (указав значение AUTO), то база данных использует битовые карты (bitmaps) для отслеживания доступного свободного пространства в сегменте. Битовая карта, которая содержится в специальном блоке, указывает, составляет ли свободное пространство в блоке объем менее 25%, либо между 25 и 50%, между 50 и 75% или же свыше 75%. Для индексного блока битовая карта может сообщить, является блок пустым или форматированным.

Переход от табличных пространств, управляемых словарем, к локально управляемым табличным пространствам

Хотя локально управляемые табличные пространства являются стандартными для выпуска Oracle Database 11g, если вы переходите к этому выпуску от более старых версий, то можете перевести свои табличные пространства из управляемых словарем к локально управляемым. Для этого нужно просто создать новые табличные пространства, которые будут по умолчанию локально управляемыми, и затем перенести все таблицы в новое табличное пространство командой ALTER TABLE, как показано ниже:

Чтобы перенести индексы, используйте команду ALTER INDEX REBUILD, как показано ниже:

Завершив миграцию всех объектов в новые локально управляемые табличные пространства, удалите старые табличные пространства, чтобы освободить занимаемое ими место.Если вы не хотите создавать новые табличные пространства или боитесь сложностей переноса всех таблиц и индексов, можете прибегнуть к PL/SQL-пакету DBMS_SPACE_ADMIN, который позволит выполнить миграцию имеющихся табличных пространств. Сначала потребуется выполнить миграцию к локально управляемым всех табличных пространств кроме System, а затем перевести в локально управляемые табличное пространство System. Если вы поступите наоборот, то все прочие табличные пространства станут доступными только для чтения. Не забудьте перед миграцией создать резервную копию базы данных. Ниже приведен пример переноса управляемого словарем табличного пространства (USERS) в локально управляемое табличное пространство:

Процедура TABLESPACE_MIGRATE_TO_LOCAL может быть использована в оперативном режиме, пока пользователи занимаются выборкой и модификацией данных. Однако если некоторые операции DML нуждаются в выделении новых экстентов, они будут блокированы до окончания миграции.

После перевода всех рабочих табличных пространств в локально управляемые можно перевести табличное пространство System. Ниже показана команда (предварительно потребуется выполнить некоторую черновую работу вроде переключения прочих табличных пространств в режим доступа только для чтения и т.п.):

Обратите внимание, что если вы применяете пакет DBMS_SPACE_ADMIN для миграции от управляемых словарем к локально управляемым табличным пространствам, то не имеете возможности переключения на использование нового средства автоматического управления пространством сегментов (Automatic Segment Space Management). Все управляемые словарем табличные пространства используют по умолчанию старое ручное управления пространством сегментов, и вы не можете изменить его на автоматическое, когда переходите на локально управляемые табличные пространства. Поскольку автоматическое управление пространством сегментов предоставляет много преимуществ (вроде возможности использования онлайнового сжатия сегментов из Segment Advisor), вероятно лучше убить двух зайцев и запланировать перевод всех объектов во вновь созданные локально управляемые табличные пространства. По умолчанию Oracle создает все новые табличные пространства как локально управляемые с автоматическим управлением пространством сегментов.

Вдобавок, если ваши текущие управляемые словарем табличные пространства имеют проблему фрагментации свободного места, эта проблема не исчезнет, когда вы преобразуете их в локально управляемые табличные пространства посредством миграции “по месту” с помощью пакета DBMS_SPACE_ADMIN. В этом случае лучше создать новое локально управляемое табличное пространство и переместить необходимые объекты в него. Далее в блоге будет показано, как легко выполнить эту миграцию с помощью средств онлайновой реорганизации таблиц Oracle.

Oracle рекомендует использовать автоматическое управление сегментами и отмечает, что оно как масштабируемо, так и эффективно, когда речь идет об управлении пространством. Особенно заметен выигрыш в производительности, если объекты базы данных имеют строки различного размера. Поддержка этих битовых карт требует дополнительного места, однако оно составляет не более 1% от размера самых крупных объектов.

На заметку! Управление пространством сегментов, которое специфицируется во время создания табличного пространства, применяется ко всем сегментам, создаваемым позднее в этом табличном пространстве.

Табличные пространства это хранилище для данных схемы, включая словарь данных (который находится в схеме SYS). У всех баз данных обязаны быть табличные пространства SYSTEM и SYSAUX и (для работы с БД) временное табличное пространство и пространство undo. Обычно эти четыре табличных пространства создаются на этапе создания БД. В дальнейшем DBA может создавать много других табличных пространств для пользовательских данных, и возможно дополнительные пространства для undo и временных данных.

Создание табличного пространства

Для создания табличного пространства с помощью Enterpise Manager Database Control с домашней страницы базы данных перейдите на вкладку Server и нажмите на ссылку Tablespaces в разделе Storage. На рисунке 5-3 отображается результат для БД по умолчанию.

Рисунок 5-3 – Табличные пространства в БД ocp11g

Рисунок 5-3 – Табличные пространства в БД ocp11g

Для каждого табличного пространства отображаются:

  • Allocatedsize –размер файла/ов данных табличного пространства. Это текущее значение, а не максимальное до которого может быть расширено
  • Spaceused – это пространство использованное сегментами
  • Allocatedspaceused (%) – графическое представление предыдущих значений
  • Allocatedfreespace – пространство доступное на данный момент в табличном пространстве
  • Status – зелёная галочка отображает что табличное пространтсво в рабочем состоянии и объекты этого пространства доступны для использования. Выключенное табличное пространство (offline) будут отображаться как красный крестик
  • Datafiles – колчиество файлов данных (или временных файлов для временного табличного пространства) которые входят в табличное пространство
  • Type – типы объектов, которые могут храниться в этом табличном пространстве. Постоянные пространства (permanent) могут хранить обычные объекты схемы, такие как таблицы и индексы. Временные табличные пространства могут хранить управляемые системой временные а сегменты, а пространства undo только системно управляемые сегменты undo
  • Extentmanagement – метод выделения экстентов для сегмента. LOCAL значение по умолчанию и всегда должно использоваться
  • Segmentmanagement – метод выделения блоков доступных для вставки данных. AUTO значение по умолчанию и рекомендуется для всех табличных пространств содержащих пользовательские данные.

Эту же информацию можно получить написав запрос к предсатвлениям словаря данных DBA_TABLESPACES, DBA_DATA_FILES, DBA_SEGMENTS и DB_FREE_SPACE. К примеру результатом выполнения запроса

t.status, d.cnt, contents, t.extent_management extman,

from dba_tablespaces t,

(select sum(bytes) allocated, count(file_id) cnt from dba_data_files

(select sum(bytes) free from dba_free_space

(select sum(bytes) used from dba_segments

42

На этой же странице нажмите кнопку CREATE для создания нового табличного пространства. Новое окно создания запросит название нового табличного пространства, значения для Extent Management, Type и Status. В большинстве случаев значения по умолчанию валидны: Local, Permanent и Read Write. Затем кнопка ADD позволяет указать один или более файлов данных для нового табличного пространства. Для каждого файла необходимо указать имя файла и размер, также опционально можно включить autoextend до максимального допустимого размера файла. Возможность autoxtend позволяет Oracle серверу самому увеличиваться размер файлов данных при необходимости, что позволит избежать ошибок из-за нехватки места. На рисунках 5-4 и 5-5 отображены окна Database Control для создания табличного пространства NEWTS с одним файлом данных.

Рисунок 5-4 Окно создания табличного пространства Рисунок 5-5 Окно добавления файла данных

Нажав кнопку CONTINUE вы вернётесь к окну создания табличного пространства. Нажатие кнопки SHOW SQL отобразит сгенерированный запрос

45

Рассмотрим эту команду построчно

3 SIZE 100M AUTOEXTEND ON NEXT 100K MAXSIZE 200M – Файл данных будет создан размеров 100 Мб, при заполнении будет автоматически выделяться 100Кб до максимально допустимого значения в 200 Мб. По умолчанию автоматическое выделения места не включено.

4 LOGGING – Все операции над сегментами в табличном пространстве будут генерировать данные для повтора изменений (redo): это значение по умолчанию. Возможно отключить генерацию redo только для нескольких операция (таких как создание индекса)

5 EXTENT MANAGEMENT LOCAL – табличное пространство будет использовать битовые карты для выделения экстентов; значение по умолчанию

6 SEGMENT SPACE MANAGEMENT AUTO – Сегменты в табличном пространстве будут использовать битовые карты для отслеживания использования блоков; значение по умолчанию

Если выбрать вкладку Storage в окне создания табличного пространства то можно управлять параметрами управления экстентами и сжатия – Рисунок 5-6.

Рисунок 5-6 Дополнительные параметры создания табличного пространства

Рисунок 5-6 Дополнительные параметры создания табличного пространства

Когда используется локальное управление экстентами, возможно включить функционал согласно которому все экстенты в табличном пространстве будут одного размера. Также доступны опции сжатия, логирования.

Пример команды создания табличного пространства выполненной в SQL* Plus показан на рисунке 5-7.

47

Табличное пространство STORETABS состоит из двух файлов данных, оба без автоинкремента. Единственное различие от команды по умолчанию это указание размера extent-а в 5 МБ. Первый запрос на рисунке показывает что файлы не большие иначе нельзя было бы создать два файла данных. Второй запрос на рисунке отображает информацию о табличном пространстве TEMP, используемом для хранения временных объектов. Важно понимать что временное табличное пространство использует временные файлы, а не файлы данных. Временные файлы перечислены в пресдатвлении V$TEMPFILE и DBA_TEMP_FILES, когда файлы данных перечислены в V$DATAFILE и DBA_DATA_FILES. Также важно отметить что V$ и DBA показывают разную информацию. В V$TABLESPACE находится информация является ли табличное пространтсво «большим» и в V$TEMPFILE (или V$DATAFILE) размер файлов. Этой информации нет в представлениях DBA. Но представления DBA содержат детальную информацию о экстентах и сегментах. Разная информация доступна либо там либо там, так как некоторая информация хранится в файле контроле (и доступна только в V$ представлениях), а другая хранится в словаре данных (и видима в DBA представлениях). Остальная информация дублируется.

Изменение табличных пространств

Изменения происходящие над табличным пространством после создания обычно

  • Переименование
  • Включение выключение (online/offline)
  • Переключение в режим только-чтение и обратно
  • Изменение размера
  • Изменение уровня препупреждений

Переименование табличного пространтсва и его файлов

ALTER TABLESPACE tablespaceoldname RENAME TO tablespacenewname;

Первая команда изменяет имя табличного пространства. Это самая легкая часть. Затем табличное пространство выключается, и выполняются команды операционной среды переименовать файлы. Затем две команды ALTER DATABASE изменяют имена файлов в файле контроля, и Oracle сможет их найти. И наконец табличное пространство включается.

Включение и выключение табличного пространтсва (Online/Offline)

Включенным табличным пространством является пространство готовое к использованию; выключенное табличное пространство определено в словаре данны и файле контроля, но его нельзя использовать. Табличное пространтсво может быть включенным, но один или несколько файлов данных внутри него могут быть выключены. Такая ситуация может привести к неожиданным результатам и следует избегать её возникновения.

Синтаксис для выключения табличного пространства

ALTER TABLESPACE tablespacename OFFLINE [NORMAL|IMMEDIATE|TEMPORARY]

Обычное выключение (NORMAL – значение по умолчанию) запустит создание контрольной точки для всех файлов данных этого пространства. Все грязные буфферы в кэше которые содержат блоки из табличного пространтсва будут записаны в файлы данных и табличное пространство и файлы данных будут выключены.

Режим IMMEDIATE выключает табличное пространтсво и файлы данных сразу, без очищения буфера. Это значит что файлы данных станут повреждёнными (не содержат подтверждённые изменения) и необходимо будет восстанавливать их состояние (путём чтения и применения лога изменений) перед тем как можно будет их включить. Этот режим стоит использовать только если файлы были повреждены и контрольная точка не может быть создана.

Режим TEMPORARY создаст контрольную точку для всех файлов для которых она может быть создана и затем по порядку выключит файлы и табличное пространство. Любые повреждённые файлы будут выключены сразу. Если только один некоторые файлы были повреждёны, этот режим поможет ограничить количество файлов которые надо восстанавливать.

Режим только-чтения (Read only)

Чтобы понять эффект режима только чтения изучите рисунок 5-9. Синтаксис команды говорит сам за себя

ALTER TABLESPACE tablespacename [READONLY|READ WRITE];

После перевода в режим только-чтения, объекты не могут быть созданы используя DML команды. Но они могут быть удалены. Выглядит нелогично но давайте подумаем. Удаление таблицы на самом деле не выполняет каких-либо действий над таблицей. Это транзакция над словарём данных, которая удаляет строки описывающие таблицу и её столбцы; словарь данных находится в табличном пространстве SYSTEM и оно не только для чтения. Создание таблицы в пространстве находящемся в режиме только для чтения также будет неуспешно, так как кроме DDL запроса должно выделиться физическое место для первого экстента таблицы (если не включен deferred segment creation. Если включен то место не будет выделяться и запрос выполниться успешно, однако при попытке добавить строки в созданную таблицу будет ошибка).

49

Изменение размера табличного пространста

Размер табличного пространства может быть изменён как добавлением файлов данных в него так и изменением размера существующих файлов. Файлы данных могут быть увеличены автоматически при необходимости если была указана опция AUTOEXTEND при создании. Иначе вам придётся делать это вручную используя команду ALTER DATABASE

ALTER DATABASE DATAFILE filename RESIZE n [M|G|T]

M G и T это мегабайт, гигабайт и терабайт соответсвенно.

alter dtabase datafile ‘/oradata/users_02.dbf’resize 10m;

Из команды вы не знаете станет ли файл больше или меньше. Размер может быть увеличен только если в файловой системе достаточно свободного места. Уменьшение размера возможно только если внутри файла сущесвует достаточно места не выделенного под сегменты.

Изменение уровня предупреждений

Чтобы посмотреть или изменить эти значения в Database Control можно выбрать Tablespace на вкладкe Server и нажать EDIT. Затем в окне управления пространством перейти на вкладку Thresholds. На рисунке 5-10 показан пример для пространства EXAMPLE.

Рисунок 5-10 Окно управления предупреждениями

Рисунок 5-10 Окно управления предупреждениями

На этом рисунке “Available Space” указано как 32Гб. Что полностью неверно, так как выделенное место как видно на рисунке 5-3 всего 100МБ. Это происходит так как включен AUTOEXTENSION. Если AUTOEXTEND указан для файла и не установленм MAXSIZE, тогда файл может увеличиваться до платформо-зависимого ограничения, в нашем случае 32 ГБ. Конечно это не значит что у системы есть место для таких файлов. Система предупреждения рассчитыает лимиты и использует максимально допустимый размер файла как основу для вычисления, и это абсолютно быссмесленно если у вас включен AUTOEXTEND и не указан MAXSIZE.

Становится понятно что при использовании автоматического управления размером желательно указывать максимальное значение. Это можно сделать и Database Control или командой ALTER DATABASE.

Удаление табличных пространств

Для удаления табличного пространтсва используется команда

DROP TABLESPACE tablespacename [INCLUDING CONTENTS [AND DATAFILES]];

Если не указано INCLUDING CONTENS то удаление не выполнится если существуют объекты в табличном пространстве. Используя этот параметр вы указываете Oracle вначале удалить все объекты, а затем удалить табличное пространство. И даже эта команда может быть выполнена неуспешно если например в табличном пространстве создана таблица родитель для внешнего ключа таблицы созданной в другом табличном пространстве.

Если не указано AND DATAFILES тогда табличное пространство и его содержимое будет удалено однако файлы данных не будут удалены с диска. Oracle не будет знать ничего об этих файлах после удаления табличного пространства и файлы можно будет удалить только командами операционной системы.

Oracle Managed Files (OMF)

Использование OMF должно избавить DBA от необходимости знать что-либо о файловой системе. Создание файлов БД может быть полностью автоматическим. Для включения OMF необходимо установить параметры экземпляра

Параметр DB_CREATE_FILE_DEST определяет путь по умолчанию дял файлов данных. Параметры DB_CREATE_ONLINE_LOG_DEST_n указывают путь файла текщих логов. Параметр DB_RECOVERY_FILE_DEST определяет путь к файлам архивных логовов и резервных копий. OMF будет использовать эти пути и создавать файлы со сгенерированными именами и (по умолчанию) устанавливать размер файлов. При включенном OMF всё равно можно указать имя вручную при создании табличного пространства.

Читайте также: