Вы создаете табличные пространства оператором CREATE TABLESPACE. Для создания временного табличного пространства должен использоваться оператор CREATE TEMPORARY TABLESPACE, а для создания табличного пространства отмены — оператор CREATE UNDO TABLESPACE. Первый шаг в создании табличного пространства состоит в создании структуры каталогов, в которой база данных размещает файлы данных. Поэтому в следующем разделе мы сначала поговорим о файлах данных.
Файлы данных и табличные пространства
Табличное пространство в базе Oracle Database может иметь один или более файлов данных, а файл данных может принадлежать только одному табличному пространству. Oracle создает файл данных для табличного пространства, когда во время создания табличного пространства указывается ключевое слово DATAFILE. Создаваемому файлу данных выделяется определенный объем физического дискового пространства на диске операционной системы. Когда Oracle впервые создает файл данных, он пуст, но выделен исключительно для использования Oracle, а свободное место, которое показывает команда df –k, отражает его как занятое место с точки зрения операционной системы.
По мере роста размера сегмента Oracle выделяет ему экстенты из свободного пространства файлов данных. Когда табличное пространство заполняется, вы можете либо добавить ему новые файлы данных, либо увеличить размер имеющихся файлов данных,используя команду RESIZE.
В простейшем случае локально управляемые табличные пространства всегда необходимо создавать с опцией AUTOALLOCATE по умолчанию, если только не ожидается,что табличное пространство будет содержать объекты одинакового размера, требующие экстентов одинакового размера. Аналогично выбирайте автоматическое управление пространством сегмента (указав SEGMENT SPACE MANAGEMENT AUTO при создании табличного пространства), потому что это дает лучшую производительность и использование пространства, чем ручное управление пространством сегмента. Как упоминалось ранее, AUTOALLOCATE принято по умолчанию для управления экстентами, и автоматическое управление пространством сегментов — стандарт для управления пространством сегментов.
Давайте создадим постоянное табличное пространство, используя команду CREATE TABLESPACE. Обратите внимание на необходимость указания конструкции DATAFILE перед спецификацией файла, поскольку это постоянное табличное пространство. Для временного табличного пространства вместо этого нужно применять конструкцию TEMPFILE.
SQL> CREATE TABLESPACE test01 2 DATAFILE '/pasx02/oradata/pasx/test01.dbf' 3* SIZE 500M; Tablespace created. SQL>
На заметку! Пользователи, не являющиеся администраторами баз данных, должны иметь системную привилегию CREATE TABLESPACE, чтобы получить возможность создания табличного пространства.
В предыдущем операторе табличного пространства не было специфицировано ни-какого управления экстентами (локального или словарем), размера экстента (унифицированного или с автовыделением) или управления пространством сегмента (автоматического или ручного).
Теперь давайте выполним следующий запрос, чтобы определить умолчания для управления экстентами, типом выделения экстентов и управления пространством сегмента:
SQL> SELECT extent_management, 2 allocation_type, 3 segment_space_management 4 FROM dba_tablespaces 5* WHERE tablespace_name='TEST01'; EXTENT_MAN ALLOCATIO SEGMEN ---------- --------- ------- LOCAL SYSTEM AUTO SQL>
Запомните правила по умолчанию, принятые в Oracle Database 11g Release 1:
- управление экстентами: LOCAL
- выделение размеров экстентов: AUTOALLOCATE (показано как SYSTEM в предыдущем выводе)
- управление пространством сегмента: AUTO
Можно было бы создать идентичное табличное пространство, явно специфицируя все эти установки, как показано ниже:
SQL> CREATE TABLESPACE test02 2 DATAFILE '/pasx02/oradata/pasx/test02.dbf' size 500M 3 EXTENT MANAGEMENT local 4 AUTOALLOCATE 500M 5* SEGMENT SPACE MANAGEMENT auto; Tablespace created. SQL>
Хотя по умолчанию управление экстентами локально для всех постоянных табличных пространств, вы указываете EXTENT MANAGEMENT LOCAL в операторе CREATE TABLESPACE, если хотите специфицировать конструкции AUTOALLOCATE или UNIFORM для расширения экстентов. Вы можете использовать тот же запрос, который применялся для табличного пространства test01, чтобы проверить, что два табличных пространства — test1 и test2 — имеют идентичное управление экстентами (LOCAL), тип расширения (AUTOALLOCATE) и управление пространством сегмента (AUTO).
На заметку! По умолчанию табличные пространства Oracle Database 11g являются локально управляемыми, с автоматическим управлением пространством сегмента. Когда вы создаете табличные пространства этого типа, можете специфицировать параметры хранения по умолчанию,такие как INITIAL, NEXT, PCTINCREASE, MINEXTENTS или MAXEXTENTS, но база данных проигнорирует эти установки.
Создание табличных пространств с нестандартными размерами блоков
Размер блока по умолчанию определяется параметром инициализации DB_BLOCK_SIZE вашей базы данных. Имеется возможность создавать табличные пространства с размерами блоков, которые отличаются от стандартного размера блока базы данных. Чтобы создать табличное пространство с нестандартным размером блока, необходимо иметь установленный инициализационный параметр DB_nK_CACHE_SIZE. Например, вы должны установить параметр DB_16K_CACHE_SIZE, если желаете создать табличное пространство с размером блока в 16 Кбайт.
Используя блоки нестандартного размера, можно подогнать табличное пространство под тип содержащихся в нем объектов. Например, можно разместить крупную таблицу, которая потребует значительное количество операций чтения и записи с большим размером блока. Аналогично можно разместить таблицы поменьше в табличном пространстве с меньшим размером блока.
Ниже приведены некоторые соображения, которые следует иметь в виду, применяя различный размер блока для табличных пространств.
- Множественные буферные пулы позволяют конфигурировать до пяти различных пулов в буферном кэше, каждый со своим размером блока.
- Табличное пространство System всегда должно создаваться со стандартным размером блока, указанным в параметре DB_BLOCK_SIZE файла init.ora.
- Вы можете иметь до четырех нестандартных размером блоков.
- Вы специфицируете размер блока для табличных пространств в операторе CREATE TABLESPACE,используя конструкцию BLOCKSIZE.
- Нестандартные размеры блоков должны выбираться из ряда 2 Кбайт, 4 Кбайт. 8 Кбайт, 16 Кбайт или 32 Кбайт. Разумеется, один из этих размеров должен быть выбран в качестве стандартного и указан в параметре DB_BLOCK_SIZE файла init.ora.
- Если вы переносите табличные пространства между базами данных, использование табличных пространств с различными размерами блоков облегчит такой перенос.
При создании табличного пространства ключевое слово BLOCKSIZE служит для спецификации нестандартного размера блока. Следующий оператор создает табличное пространство с нестандартным размером блока в 16 Кбайт (стандартный размер блока, определяемый значением инициализационного параметра DB_BLOCK_SIZE, составляет 8 Кбайт):
SQL> CREATE TABLESPACE test01 datafile '/u09/oradata/testdb/test01.dbf' BLOCKSIZE 16K;