Страницы

суббота, 25 апреля 2015 г.

Обзор табличных пространств

Взято http://subscribe.ru/archive/comp.soft.db.oraclefromzero/200304/03160028.html
Несколько подредактировано.






Обзор табличных пространств

CREATE TABLESPACE "INVENTORY"
DATAFILE ‘C:\app\1\oradata\STUDENT4\DATAFILE \INVENTORY01.dbf ‘
SIZE 5M
AUTOEXTEND ON NEXT 3M
MAXSIZE 100M
            LOGGING;




             ALTER DATABASE STUDENT4
 DATAFILE ‘C:\app\1\oradata\STUDENT4\DATAFILE \INVENTORY01.dbf ‘
            RESIZE 50M




$ sqlplus / as sysdba

Посмотреть какие файлы базы данных используются базой данных и где они расположены:

SQL> set linesize 200;
SQL> set pagesize 0;
SQL> col name format a40;
SQL> SELECT file#, name, status
FROM v$datafile;


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

SQL> CREATE TABLESPACE "MY_DATA"
DATAFILE '/u02/oradata/ora112/my_data01.dbf' SIZE 2G AUTOEXTEND OFF;

SQL> CREATE TABLESPACE "MY_INDEXES"
DATAFILE '/u02/oradata/ora112/my_indexes01.dbf' SIZE 2G AUTOEXTEND OFF;



При необходимости, можно добавить дополнительное место для данных (когда будет такая необходимость) следующими командами:

SQL> ALTER TABLESPACE "MY_DATA"
ADD DATAFILE  '/u02/oradata/ora112/my_data02.dbf' SIZE 2G AUTOEXTEND OFF;


Для индексов:

SQL> ALTER TABLESPACE “MY_INDEXES”
ADD DATAFILE  '/u02/oradata/ora112/my_indexes02.dbf' SIZE 2G AUTOEXTEND OFF;


Иногда, нужно создать дополнительное табличное пространство для табличного пространства отмены (undo).

SQL> create undo tablespace "UNDOTBS_01" datafile '/u02/oradata/ora112/undo01.dbf' size 1G autoextend off;
SQL> ALTER SYSTEM SET UNDO_TABLESPACE = "undotbs_01";
SQL> drop tablespace UNDOTBS1;

ALTER TABLESPACE "UNDOTBS_01" ADD DATAFILE '/u02/oradata/SID/undotbs02.dbf' SIZE 2G AUTOEXTEND OFF;

UNDO_RETENTION - (при включенном FLASHBACK) определяет минимальное время в секундах, за которое можно отменить (посмотреть) изменение в базе данных. При этом данные будут храниться в UNDO_TABLESPACE (необходимо обеспечить достаточный размер табличного пространства) и перезаписываться по мере необходимости, обеспечивая минимальное значение, указанное в UNDO_RETENTION. Не поддерживается для LOB.




Задаю параметр UNDO_RETENTION равный 30 минутам
SQL> alter system set UNDO_RETENTION = 1800;
SQL> alter tablespace UNDOTBS_01 RETENTION GUARANTEE;

SQL> show parameter UNDO_RETENTION

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_retention                       integer     1800




Создать новое табличное пространство для временных данных.

SQL>  CREATE TEMPORARY TABLESACE "MY_TEMP"
TEMPFILE '/u02/oradata/ora112/my_temp01.dbf' SIZE 2G AUTOEXTEND OFF;

Добавить дополнительный файл для временных табличных пространств.

SQL> ALTER TABLESPACE “MY_TEMP”
ADD TEMPFILE '/u02/oradata/ora112/my_temp02.dbf' SIZE 2G AUTOEXTEND OFF;





Табличное пространство Oracle является самым нижним логическим слоем структуры данных. Оно состоит из одного или более файлов данных. В ранних версиях СУБД Oracle размер файлов данных был фиксированным, но теперь файлы могут быть увеличены как автоматически, так и вручную.
Значимость табличных пространств заключена в том, что они предоставляют великолепную степень детализации расположения информации в файлах данных. После создания табличного пространства, процесс расположения и распределения таблиц в нем уходит из-под Вашего контроля. При аккуратной конфигурации табличного пространства, у Вас будет несколько обобщенных опций, но основная масса работы по внутреннему расположению объектов будет выполнена автоматически.
Табличные пространства могут содержать любые из четырех видов сегментов:
сегменты данных (Data segments) - основной тип, используется для хранения таблиц и кластеров.
индексные сегменты (Index segments) - используются для хранения индексов.
сегменты отката (Rollback segments) - специальные сегменты, хранящие информацию для отмены выполненных действий.
временные сегменты (Temporary segments) - используются для хранения временных данных.
Табличные пространства по умолчанию являются доступными как для чтения, так и для записи, но могут быть изменены на состояние "только для чтения". Во многих ситуациях табличные пространства только для чтения могут оказаться незаменимыми.

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

Создание табличных пространств состоит из указания одного или более файлов данных, а также параметров хранения (storage parameters). Параметры хранения указывают то, как будут использоваться табличные пространства.
Как и большинство других операций, табличные пространства могут быть созданы либо с использованием Oracle Enterprise Manager (графически), либо с помощью команд консоли sqlplus.

Создание табличного пространства командой CREATE TABLESPACE

Вы можете создать табличное пространство в консоли sqlplus, используя команду CREATE TABLESPACE. Команда может быть введена интерактивно или выполнена из готового скрипт-файла. По-моему, предпочтительнее пользоваться SQL-скриптом, так как он может быть выполнен повторно. Кроме того, можно создать шаблон и по надобности вносить изменения. Сохраненный SQL-скрипт может оказаться весьма кстати после катастрофы. Итак, для создания табличного пространства применяется следующая команда:
CREATE TABLESPACE
DATAFILE file_specification
[AUTOEXTEND OFF]
или [AUTOEXTEND ON [NEXT число K или M]
[MAXSIZE UNLIMITED или MAXSIZE число K или M]
[NOLOGGING или LOGGING]
[, file_specification
[AUTOEXTEND OFF]
или [AUTOEXTEND ON [NEXT число K или M]
[MAXSIZE UNLIMITED или MAXSIZE число K или M]
[NOLOGGING или LOGGING]]
[MINIMUM EXTENT число K или M]
[DEFAULT STORAGE storage_clause]
[ONLINE или OFFLINE]
[PERMANENT или TEMPORARY]
DATAFILE
DATAFILE file_specification - определяет имена (или имя) файлов данных, составляющих табличное пространство. File_specification - это 'имя_файла' SIZE число (K или M) [REUSE]. Спецификация файла используется для указания имени и первоначального размера в (К)илобайтах или в (М)егабайтах файла данных. Параметр [REUSE] позволяет воспользоваться уже существующим в системе файлом.
Уточнения параметра DATAFILE:
AUTOEXTEND OFF - параметр указывает, что средство автоувеличения размера файла использоваться не будет.
AUTOEXTEND ON - автоувеличение размера файла будет использовано. Дополнительно можно указать:
NEXT число K или M - когда файл данных самоувеличивается, он изменяется на указанный объем.
MAXSIZE UNLIMITED - размер файла будет ограничен лишь физическим диском и особенностями операционной системы.
MAXSIZE число K или M - файл данных не может быть больше указанного объема.
Вот остальные параметры команды CREATE TABLESPACE:
LOGGING - указывает, что в журнал выполненных операций будет заноситься информация о таблицах, индексах и разделах. Параметр по умолчанию. Журналирование может быть отменено для этих операций опцией NOLOGGING.
NOLOGGING - журналирование не будет выполняться для операций, поддерживающих эту опцию.
MINIMUM EXTENT число K или M - указывает минимальный размер экстентов табличного пространства.
DEFAULT STORAGE storage_clause - указывает параметры по умолчанию хранения табличного пространства.
ONLINE - табличное пространство становится оперативным сразу после своего создания.
OFFLINE - табличное пространство недоступно непосредственно после своего создания (до тех пора, пока не будет переведено в оперативное состояние).
TEMPORARY - табличное пространство будет использовано для хранения временных объектов.
PERMANENT - указывает табличному пространству хранить перманентные объекты. (Опция по умолчанию).
Как видите при создании табличного пространства можно указать много различных параметров и опций. Среди них есть параметры хранения, которые мы рассмотрим чуть ниже в этом же выпуске. Параметры хранения определяют характеристики табличного пространства и общие параметры его "роста".

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

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

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

Имеем несколько вариантов выполнения такой операции. Это: нормальный, временный и немедленный перевод состояния на автономный.

Табличное пространство в нормальном автономном режиме

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

Табличное пространство во временном автономном режиме

Перевод табличного пространства в автономный режим с опцией Temporary (временно) возможен даже в том случае, если некоторые из файлов данных недоступны. Т.е. если у Вас есть какие-либо проблемы с файлом данных, Вы можете перевести табличное пространство в автономный режим с опцией "временно". Для всех доступных файлов данных будет произведена контрольная точка. Однако перевод обратно в оперативный режим может потребовать восстановления.

Немедленный перевод табличного пространства в автономный режим

Опция Immediate (немедленно, сразу) перевода табличного пространства в автономный режим делает именно то, что требуется: сразу переводит табличное пространство в автономный режим. Но контрольная точка не будет произведена, поэтому возврат в оперативный режим потребует процедуру восстановления.

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

Любое табличное пространство, которое было переведено в автономный режим по каким-либо причинам может быть переведено обратно в оперативный режим через Enterprise Manager или через Server Manager (с использованием SQL-команды). Перевод табличного пространства в оперативный режим изменяет его состояние таким образом, что табличное пространство становится доступным для пользователей. Возможно, потребуется процедура восстановления, в зависимости от того, как табличное пространство было переведено в автономный режим.

Дефрагментация табличного пространства

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

Добавление файлов данных

Необходимость в новых файлах данных возникает достаточно часто. Новые файлы данных нужны либо для увеличения свободного пространства, либо для распределения нагрузки ввода-вывода между несколькими физическими дисковыми накопителями. Добавить файл в табличное пространство гораздо быстрее, чем сформировать его в процессе создания БД. Команда CREATE TABLESPACE работает последовательно, т.е. создает один файл данных за раз. Операция же добавления файлов данных может быть распараллелена (несколько файлов данных можно добавить за раз).

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

Табличное пространство может быть изменено в Storage Manager и с помощью команды ALTER TABLESPACE (которую можно выполнить в Server Manager).
Вы можете воспользоваться следующими возможными опциями:
Online - переводит табличное пространство в оперативный режим
Offline - переводит табличное пространство в автономный режим
Read Only - переводит табличное пространство в режим "только для чтения"
Permanent - переводит временное табличное пространство в перманентное
Temporary - переводит перманентное табличное пространство во временное

Изменение табличного пространства командой ALTER TABLESPACE

Как видите, диалог редактирования табличного пространства Enterprise Manger имеет ограниченное число опций. При использовании команды ALTER TABLESPACE доступны абсолютно все возможности. Эта команда может быть использована для изменения параметров табличного пространства, указанных при его создании, для изменения состояния табличного пространства, или для добавления файлов данных.

Синтаксис команды ALTER TABLESPACE

ALTER TABLESPACE tablespace
[LOGGING или NOLOGGING]
[ADD DATAFILE file_specification
[AUTOEXTEND OFF]
или [AUTOEXTEND ON [NEXT число K или M]
[MAXSIZE UNLIMITED или MAXSIZE число K или M]]
[, file_specification
[AUTOEXTEND OFF]
или [AUTOEXTEND ON [NEXT число K или M]
[MAXSIZE UNLIMITED или MAXSIZE число K или M]]
[RENAME DATAFILE 'filename' [, 'filename']...
TO 'filename' [, 'filename']...]
[COALESCE]
[DEFAULT STORAGE storage_clause]
[MINIMUM EXTENT число [K или M]]
[ONLINE]
[OFFLINE NORMAL или OFFLINE TEMPORARY или OFFLINE IMMEDIATE]
[BEGIN BACKUP или END BACKUP]
[READ ONLY или READ WRITE]
[PERMANENT или TEMPORARY]
Многие из параметров этой команды нам уже знакомы. Например, LOGGING и NOLOGGING аналогичны соответствующим параметрам команды CREATE TABLESPACE. Также, думаю, не нуждаются в комментариях ключевые слова AUTOEXTEND, NEXT, MAXSIZE, MINIMUM EXTENT, PERMANENT и TEMPORARY.
ADD DATAFILE file_specification - этим параметром указываются один или более файлов данных на добавление в табличное пространство. (Что такое file_specification, мы уже рассмотрели выше)
RENAME DATAFILE 'filename' [, 'filename']... TO 'filename' [, 'filename'] - параметр команды используется для переименования одного или более файлов данных.
COALESCE - параметр используется для принудительного выполнения дефрагментации табличного пространства, как было описано ранее.
DEFAULT STORAGE storage_clause - указывает параметры по умолчанию хранения табличного пространства. Эти параметры используются в момент создания новых объектов схемы (если, конечно, они не указываются явно при создании конкретного объекта).
ONLINE - параметр используется для перевода табличного пространства в оперативный режим.
OFFLINE NORMAL - перевод табличного пространства в нормальный автономный режим.
OFFLINE TEMPORARY - перевод табличного пространства во временный автономный режим.
OFFLINE IMMEDIATE - немедленный перевод табличного пространства в автономный режим.
- BEGIN BACKUP - Переводит табличное пространство в автономный режим и приостанавливает любые изменения файлов данных на момент создания резервной копии.
END BACKUP - Переводит табличное пространство обратно в оперативный режим и производит запись всех изменений файлов данных, имевших место в процессе создания резервной копии.
READ ONLY - Переводит табличное пространство в режим "только для чтения".
READ WRITE - Переводит табличное пространство из режима "только для чтения" в обычный, позволяющий как чтение, так и запись файлов данных.
Как видно, командой ALTER TABLESPACE табличное пространство можно изменить радикально. Поэтому полезно вести журнал изменений табличных пространств.

Оператор STORAGE

В командах CREATE TABLESPACE и ALTER TABLESPACE присутствует параметр "DEFAULT STORAGE storage_clause". Здесь мы рассмотрим подробно параметры storage_clause. Это достаточно важные параметры, так как они определяют первоначальный размер и характеристики табличного пространства, а также дальнейший его рост.
Запомните, что оператор DEFAULT STORAGE используется для создания экстентов. А экстенты используются для хранения объектов схемы. Параметры хранения, указанные в DEFAULT STORAGE, применяются при создании и росте объектов схемы. К объектам схемы, которые создаются с указанием конкретных параметров хранения, параметры хранения по умолчанию не применяются.
Оператор STORAGE имеет следующий синтаксис:
STORAGE
(
[INITIAL число K или M]
[NEXT число K или M]
[MINEXTENTS число]
[MAXEXTENTS число или MAXEXTENTS UNLIMITED]
[PCTINCREASE число]
[FREELISTS число]
[FREELIST GROUPS число]
[OPTIMAL [число K или M] или [NULL]]
)
Вот что означают отдельные части оператора:
- INITIAL число K или M - указывает первоначальный размер экстентов, которые создаются для новых объектов схемы. По умолчанию равен размеру 5-ти блоков данных. При указании конкретного размера (в килобайтах или мегабайтах), он округляется до кратности 5 блокам данных.
NEXT число K или M - указывает размер последующих экстентов. Также округляется до кратности 5 блокам данных.
MINEXTENTS число - указывает минимальное число экстентов, выделяемых для объекта схемы в момент его создания. Каждый из этих экстентов по размеру равен числу INITIAL, а для последующих размер рассчитывается на основе параметров NEXT и PCTINCREASE. По умолчанию MINEXTENTS = 1, за исключением сегментов отката (по умолчанию для них MINEXTENTS = 2).
MAXEXTENTS число - максимально число экстентов (включая первый) для объектов схемы.
- MAXEXTENTS UNLIMITED - максимальное количество экстентов не ограничено. Не рекомендуется использовать этот параметр для любых объектов (кроме сегментов отката).
PCTINCREASE число - определяет размер экстентов после второго (т.е. начиная с третьего экстента). Размер первоначального экстента равен INITIAL. Размер второго экстента равен NEXT. Если PCTINCREASE не равен нулю, то все последующие экстенты будут определяться как предыдущий размер экстента, увеличенный на процент PCTINCREASE. Если PCTINCREASE равен нулю, то все последующие экстенты по размеру будут равны числу NEXT. По умолчанию PCTINCREASE = 50 (для сегментов отката по умолчанию он равен нулю).
FREELISTS число - указывает число списков свободной памяти для каждой группы списков. Список свободной памяти - это связный список доступных блоков данных в экстенте, имеющем свободного пространства более чем PCTFREE. В сущности, это список блоков, готовых принять информацию. При использовании более одного списка, Вы снижаете конфликты вноса информации.
FREELIST GROUPS число - указывает число групп списков свободной памяти в среде параллельного сервера. Использование нескольких групп позволяет каждому экземпляру иметь свой собственный набор списков свободной памяти. Параметр используется только в среде параллельного сервера.
OPTIMAL число K или M - параметр применим только к сегментам отката. Он указывает идеальный размер сегмента. Как мы увидим в одном из следующих выпусков, сегмент отката постоянно растет в размерах. А этот параметр указывает тот размер, который Oracle должен пытаться сохранить.
OPTIMAL NULL - этот параметр указывает сегменту отката никогда не пытаться уменьшить свой размер (и приблизить его к желаемому, как в предыдущем параметре).
Параметры хранения могут быть применены не только в процессе создания табличного пространства, но и во время создания различных объектов схемы. Размер и характеристики табличного пространства оказывают значительное влияние на производительность системы.
Примечание: для табличных пространств Вы указывает опции DEFAULT STORAGE (т.е. по умолчанию). Эти опции будут применятся при создании объектов схемы, если Вы их не перекроете новыми конкретными значениями.

Табличные пространства "только для чтения"

Как уже было сказано ранее, есть возможность перевести табличное пространство в режим "только для чтения". Табличное пространство "только для чтения" отличается от обычного лишь тем, что не сохраняются изменения объектов схемы. В этом случае отпадает необходимость в резервном копировании такого табличного пространства.
Так как табличные пространства "только для чтения" не изменяются Oracle-сервером, то есть возможность поместить их, например, на компакт-диск. Если данные являются архивными по своей природе, но в них периодически возникает необходимость, то использование CD-ROM может оказаться идеальным решением.

Создание табличных пространств "только для чтения"

Любое табличное пространство первоначально должно быть создано в режиме "чтение-запись" и заполнено необходимыми данными. После добавления данных и создания индексов, соответствующих Вашим спецификациям, табличное пространство может быть переведено в режим "только для чтения". Это может быть достигнуто несколькими способами.
Для Enterprise Manager-а или Storage Manager-а просто откройте форму редактирования табличного пространства и поставьте флажок напротив надписи Read Only.
Если Вы нажмете после этого кнопку SHOW SQL, то получите возможность лицезреть DDL-команду этой операции. Рекомендую пользоваться этой кнопкой при каждом удобном случае, так Вы поймете сущность выполняемых операций.
Также можно воспользоваться командой ALTER TABLESPACE вот так:
ALTER TABLESPACE CARS READONLY;
Существует множество причин использования табличных пространств "только для чтения", но они очень специфичны. Нужны они или нет - решать Вам.

Временные табличные пространства (Temporary Tablespaces)

Временные табличные пространства используются для выполнения таких операций сортировки, которые не вмещаются в оперативную память. Если Вы выделите табличное пространство специально для сортировок, то отпадет необходимость выделения памяти в других табличных пространствах (что приводит к фрагментации).
Когда операция сортировки не умещается в памяти, она должна создать и воспользоваться временным сегментом. В этом временном сегменте выделяются экстенты под операцию до тех пор, пока не окажется достаточно места. При использовании больших DSS-запросов (Decision Support System - см. выпуск первый), эти временные сегменты могут стать по-настоящему гигантскими. С использование табличных пространств, специально предназначенных для таких операций, не только сортировка становиться более эффективной, но и меньше временных сегментов будет использовано в табличных пространствах с данными.

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

Табличное пространство может стать временным как во время создания (CREATE), так и во время изменения (ALTER). При использовании Enterprise Manager-а надо просто в окне диалога создания/изменения табличного пространства поставить галочку напротив Temporary. SQL-команда для выполнения этой операции такова:
ALTER TABLESPACE CARS TEMPORARY;
Маловероятно, что Вам когда-либо понадобится переводить перманентные табличные пространства во временные и обратно. Временное табличное пространство обычно создают таким сразу, и оно остается им на все время своего существования.
Locally vs. Dictionary Managed Tablespaces
http://www.orafaq.com/node/3


CREATE TABLESPACE ts2 DATAFILE '/u02/oradata/ora112/myts2.dbf' SIZE 50M
      EXTENT MANAGEMENT LOCAL
      SEGMENT SPACE MANAGEMENT AUTO;









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

Вывод строк создания табличных пространств, аналогичных существующим, для определённых схем
select 'create tablespace '
    || tablespace_name
    || ' datafile '''
    || regexp_replace(file_name,'E:\\ORADATA\\ONE\\','/opt/oracle/oradata/TWO/')
    || ''' size '||bytes||decode(AUTOEXTENSIBLE,'YES',' autoextend on next '||INCREMENT_BY,'')
    || ' maxsize '||decode(maxbytes,34359721984,'unlimited',maxbytes)||';'
from dba_data_files
where tablespace_name in (
   select default_tablespace ts from dba_users where username in ('SCOTT','SCOTT1')
   union
   select tablespace_name ts from dba_ts_quotas where username in ('SCOTT','SCOTT1')
   )
order by 1;

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

select tablespace_name
     , sum(bytes)/1024/1024 mbytes 
from dba_data_files 
where tablespace_name in (select tablespace_name 
                          from dba_ts_quotas 
                          where lower(username) in ('scott','scott1')) 
group by tablespace_name;

Размер занимаемый объектами указанных схем

select owner
     , sum(bytes)/1024/1024 mbytes 
from dba_extents 
where lower(owner) in ('scott','scott1')
group by owner;

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

select a.TABLESPACE_NAME tablespace_name
     , b.BYTES total_bytes
     , a.BYTES free_bytes
     , round(a.BYTES*100/b.BYTES,2) percent_free
     , round((b.BYTES-a.BYTES)*100/b.BYTES,2) percent_used
from (select TABLESPACE_NAME, sum(BYTES) BYTES from dba_free_space group by TABLESPACE_NAME) a,  
     (select TABLESPACE_NAME, sum(BYTES) BYTES from dba_data_files group by TABLESPACE_NAME) b
where a.TABLESPACE_NAME=b.TABLESPACE_NAME
order by a.TABLESPACE_NAME;
или
select de.tablespace_name
     , round(df.bytes/1024/1024,2) "total (mbytes)"
     , round(de.bytes/1024/1024,2) "used (mbytes)"
from (select tablespace_name, sum(bytes) bytes from dba_extents group by tablespace_name ) de
   , (select tablespace_name, sum(bytes) bytes from dba_data_files group by tablespace_name) df
where df.tablespace_name=de.tablespace_name
order by de.tablespace_name;

Изменение temporary tablespace

  1. Смотим где находится и как называется старое временное табличное пространство:
    select file_name,tablespace_name from dba_temp_files;
  2. Создаём новое временное табличное пространство:
    create temporary tablespace TEMP01 tempfile '/opt/oracle/oradata/db02/temp.dbf' size 100M autoextend on next 500M;
  3. Переназначаем всем, кто использует временное табличное по-умолчанию, временное табличное пространство:
    alter database default temporary tablespace TEMP01;
  4. Убеждаемся, что всем пользователям выставлено новое временное табличное пространство:
    select username,temporary_tablespace from dba_users;
  5. Удаляем старое временное табличное пространство:
    drop tablespace TEMP including contents and datafiles;

Уменьшение размера temporary tablespace

  1. Получаем размещение temporary files:
    select file_name from dba_temp_files;
  2. Добавляем новый temporary file рядом с существующим. Для этого путь берём из результата запроса, описанного в предыдущем пункте:
    alter tablespace temp add tempfile '/path/to/datafiles/of/instance/temp02.dbf' size 100M autoextend on next 1M maxsize 4G;
    Здесь: temp - имя temporary tablespace, которое мы модифицируем.
  3. Выходим из сессии на случай, если, вдруг, наша сессия использует temporary tablespace, и заходим снова.
  4. Удаляем tempfile из СУБД и из операционной системы:
    alter database tempfile '/path/to/datafiles/of/instance/temp01.dbf' drop including datafiles;
После таких нехитрых манипуляций, размер temporary tablespace уменьшится до размера заданного в п.2. Если удаляемый temporary файл кем-то занят, он будет удалён из СУБД и ОС по освобождении.

Старт базы данных при отсутствующем или разрушенном файле данных

Случается и такое, что файл данных по каким-то причинам отсутствует или разрушен, а база нужна. В этом случае нам поможет набор следующих действий
startup mount;
alter database datafile '/path/to/oradata/corrupted_datafile.dbf' offline drop;
alter database open;
drop tablespace ts_bonded_with_corrupted_datafile;

Вариант tablespace shrink

Суть - создаём временное (не temporary) табличное пространство, переносим туда таблицы и индексы, уменьшаем размеры файлов данных и возвращаем назад таблицы с индексами. Не подойдёт при отсутствии достаточного свободного дискового пространства. Основная идея и некоторые запросы позаимствованы у SUN-TEXNIKA.
  1. Создаём табличное пространство "test".
  2. Переносим все таблицы из одного табличного пространства в другое
    set serveroutput on
    begin
      for i in (select distinct owner,segment_name from dba_extents where segment_type='TABLE' and tablespace_name='TS1')
      loop
        execute immediate 'alter table '||i.owner||'.'||i.segment_name||' move tablespace test';
      end loop;
    end;
    /
  3. Переносим все таблицы с LOBами из одного табличного пространства в другое
    set serveroutput on
    begin
      for i in (select distinct owner,table_name,column_name,segment_name from dba_lobs where tablespace_name='TS1')
      loop
        execute immediate 'alter table '||i.owner||'.'||i.table_name||' move tablespace test '||'LOB ('||i.column_name||') store as '||i.segment_name||' (tablespace test)'
      end loop;
    end;
    /
  4. Восстанавливаем UNUSABLE индексы
    set serveroutput on
    begin
      for i in (select owner,index_name from dba_indexes where status = 'UNUSABLE')
      loop
        execute immediate 'alter index '||i.owner||'.'||i.index_name||' rebuild';
      end loop;
    end;
    /
  5. Переносим все индексы из одного табличного пространства в другое
    set serveroutput on
    begin
      for i in (select distinct owner,segment_name from dba_extents where segment_type='INDEX' and tablespace_name='TS1')
      loop
        execute immediate 'alter index '||i.owner||'.'||i.segment_name||' rebuild tablespace test';
      end loop;
    end;
    /
  6. Определяем до какого размера можно уменьшить datafile
    select dba_data_files.file_name,
       dba_data_files.file_id,
       dba_data_files.tablespace_name,
       ceil((nvl(hwm, 1) * db_block_size) / 1024 / 1024) smallest,
       ceil(blocks * db_block_size / 1024 / 1024) currsize,
       ceil(blocks * db_block_size / 1024 / 1024) -
       ceil((nvl(hwm, 1) * db_block_size) / 1024 / 1024) savings
    from   dba_data_files,
       (select file_id,
              max(block_id + blocks - 1) hwm
       from   dba_extents
       group  by file_id) b,
       (select value db_block_size from v$parameter where name = 'db_block_size') c
    where dba_data_files.tablespace_name='TS1'
      and dba_data_files.file_id = b.file_id(+);
    Поле "smallest" покажет до какого размера можно уменьшить файл данных, а поле "savings" покажет выигрыш в размере после уменьшения.
  7. Уменьшаем datafile
    alter database datafile '/path/datafile' resize <newsize>M;
  8. Возвращаем все таблицы обратно
    set serveroutput on
    begin
      for i in (select distinct owner,segment_name from dba_extents where segment_type='TABLE' and tablespace_name='TEST')
      loop
        execute immediate 'alter table '||i.owner||'.'||i.segment_name||' move tablespace TS1';
      end loop;
    end;
    /
  9. Возвращаем все таблицы с LOBами обратно
    set serveroutput on
    begin
      for i in (select distinct owner,table_name,column_name,segment_name from dba_lobs where tablespace_name='TEST')
      loop
        execute immediate 'alter table '||i.owner||'.'||i.table_name||' move tablespace TS1'||'LOB ('||i.column_name||') store as '||i.segment_name||' (tablespace TS1)'
      end loop;
    end;
    /
  10. Восстанавливаем UNUSABLE индексы
    set serveroutput on
    begin
      for i in (select owner,index_name from dba_indexes where status = 'UNUSABLE')
      loop
        execute immediate 'alter index '||i.owner||'.'||i.index_name||' rebuild';
      end loop;
    end;
    /
  11. Возвращаем все индексы обратно
    set serveroutput on
    begin
      for i in (select distinct owner,segment_name from dba_extents where segment_type='INDEX' and tablespace_name='TEST')
      loop
        execute immediate 'alter index '||i.owner||'.'||i.segment_name||' rebuild tablespace TS1';
      end loop;
    end;
    /
  12. Убеждаемся, что табличное пространство больше не используется
    select count(*) from dba_extents where tablespace_name='TEST';
  13. Удаляем ненужное нам более табличное пространство вместе с файлом данных
    drop tablespace TEST including contents and datafiles;
  14. 
    

TRANSPORT_TABLESPACE

11G



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

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

Работа с утилитами экспорта и импорта
Oracle Database позволяет копировать данные между базами данных, а также обмениваться ими с внешними файлами. Копирование осуществляется посредством экспорта и импорта. Для осуществления данной задачи есть утилиты imp.exe и exp.exe
Переносимые табличные пространства
Оперативное предоставление разработчикам свежей копии данных производственной системы. Использование информации, публикуемой на неперезаписываемых носителях (CD-ROM, DVD и т.п.). Быстрое перемещение данных из оперативной системы в хранилище или в витрину данных. Ускорение переноса информации достигается за счет замены ресурсоемких процессов экспорта-импорта или выгрузки-загрузки значительно более быстрым копированием файлов данных с одной вычислительной установки на другую.
Выбор самодостаточного набора табличных пространств
Существует ряд условий ограничивающих применение описываемой возможности.  Можно перемещать табличные пространства только между такими базами данных, которые:  1. Имеют одинаковый размер блока (db_block_size), созданы с одинаковой кодировкой (character set), в файлах инициализации (INIT.ORA) исходной и целевых баз данных параметр COMPATIBLE должен быть установлен в значение, работают на совместимых платформах одного и того же производителя оборудования.  Удовлетворение требований можно проверить, выполнив в исходной и целевой БД запрос: 
select name, value from v$parameter where name in ('db_block_size','compatible')
union all
selct parameter, value from nls_database_parameters where parameter like '%characterset'
Результаты запросов в исходной и целевой БД, должны быть одинаковые. 2. В целевой базе данных не должно быть табличного пространства с таким же именем, как у подключаемого. 3. Не поддерживается транспортировка: снапшотов и тиражируемых таблиц, функциональных индексов, локальных ссылок на объекты, доменных индексов. 4. Выбор самодостаточного набора табличных пространств Самодостаточный набор табличных пространств – это совокупность табличных пространств, объекты которых не ссылаются на какие-либо объекты, не содержащиеся в данном наборе. Для проверки самодостаточности удобно использовать процедуру TRANSPORT_SET_CHECK(для выполнения процедуры требуется роль EXECUTE_CATALOG_ROLE). 
begin
sys.dbms_tts.transport_set_check (ts_list => 'USER_DATA', incl_constraints => true);
end;
Результаты ее работы записываются во временную таблицу и их можно посмотреть через системное представление SYS.TRANSPORT_SET_VIOLATIONS:
select * from sys.transport_set_violations
Перенос набора табличных пространств
Сначала следует перевести табличные пространства в состояние READ ONLY(далее в тексте XXX — имя табличного пространства): 
ALTER TABLESPACE TS_XXX READ ONLY; 
Затем с помощью утилиты EXP экспортируются метаданные словаря. В командной строке следует изменить кодировку для корректного отображения информации.
set nls_lang=russian_cis.ru8pc866
exp transport_tablespace=y tablespaces=(TS_XXX) triggers=y constraints=y grants=y file=d:\exp_xxx log=d:\exp_xxx 
oracle попросит ввести имя пользователя и пароль: Имя пользователя: sys/system@orcl2012 as sysdba  orcl2012 – строка подключения к исходной БД. TRANSPORT_TABLESPACE=Y — указывает, что выполняется экспорт метаданных транспортируемых табличных пространств, TABLESPACES=(USERS, USER_DATA, INDX) — задает список транспортируемых табличных пространств, TRIGGERS=Y – Экспортировать табличные триггеры (если указать N, то триггеры экспортироваться не будут) CONSTRAINTS=Y – Экспортировать ограничения целостности (при N не экспортируются ограничения типов PRIMARY KEY, UNIQUE, FOREIGN KEY и CHECK, однако ограничения NOT NULL экспортируются), GRANTS=Y – Экспортировать привилегии доступа к таблицам (N отменяет экспорт привилегий), FILE=exp_tts и log=exp_tts имя файла с данными и имя файла журнала экспорта.  После того как утилита успешно экспортирует метаданные на выходе будет файл с расширением .dmp.(exp_xxx.dmp) После экспорта метаданных, можно перевести табличные пространства назад в состояние READ WRITE:
ALTER TABLESPACE TS_XXX READ WRITE;
Подключение набора табличных пространств к целевой БД
Перед импортом, необходимо перенести данные от исходной базы данных к целевой: Это можно сделать средствами ftp, командной строки или копированием средствами Windows. Нужно копировать файл табличного пространства(.dbf) от исходной БД к целевой. В командной строке.
Copy \\server1\oradata\orcl\TS_XXX.dbf  \\server2\oradata\orcl\
\\server1\oradata\orcl\TS_XXX.dbf — путь к файлу перемещаемого табличного пространства на исходной базе данных \\server2\oradata\orcl\ — путь, где будет хранится перемещаемое табличное пространство на целевой базе данных Теперь можно подключать набор табличных пространств к целевой БД
imp transport_tablespace=y DATAFILES=('E:\server2\oradata\orcl\TS_XXX.dbf') TABLESPACES=(TS_XXX) TTS_OWNERS=(XXXCORE) fromuser=(XXXCORE) touser=(XXXCORE) FILE=D:\ exp_xxx.dmp LOG=D:\imp_xxx.log 
oracle попросит ввести имя пользователя и пароль: sys/system@ora2015 as sysdba  ora2015 – строка подключения к целевой БД. TRANSPORT_TABLESPACE=Y – указывает, что импортируются метаданные набора подключаемых табличных пространств, DATAFILES=(…) – список, определяющий имена и место расположения подключаемых файлов данных, TABLESPACES=(TS_XXX) – список табличных пространств. Если параметр не задан, то список берется из файла экспорта. Если задан, то сверяется со списком, содержащимся в файле экспорта (в случае несовпадения будет выдано сообщение об ошибке). TTS_OWNERS=( XXXCORE) – список схем, которым принадлежат объекты в подключаемых табличных пространствах. Если параметр не задан, то список берется из файла экспорта. Если задан, то сверяется со списком, содержащимся в файле экспорта (в случае несовпадения будет выдано сообщение об ошибке). FROMUSER=( XXXCORE), TOUSER=( XXXCORE) – имена исходных и соответствующих им целевых схем. Если импорт завершен успешно, можно проверять наличие данных на целевой БД.  Используемая литература литература:
ЕЩЕ И ЛАБОРАТОРНАЯ )))) 
Для небольшой базы данных достаточно создать одно табличное пространство SYSTEM; однако, Oracle рекомендует создавать дополнительные табличные пространства для хранения данных и индексов пользователя, сегментов отмены, временных сегментов отдельно от словаря данных. Это обеспечивает вам большую гибкость в выполнении различных задач администрирования и уменьшает конкуренцию при обращении к объектам словаря и схемы.
Администратор может создавать новые табличные пространства, изменять размер файлов данных, добавлять файлы к табличным пространствам, устанавливать и изменять параметры хранения по умолчанию сегментов в табличном пространстве, переводить табличное пространство в состояние «только чтение» или «чтение-запись», делать табличное пространство временным или постоянным или удалить его.
Табличное пространоство system и другие
  1. Табличное пространство system:
-       создается во время создания базы данных
-       содержит словарь данных
-       содержит сегмент отмены system
  1. Другие табличные пространства:
-       отделяют сегменты
-       обеспечивают большую гибкость решения задач администрирования пространства
-       дают возможность контролировать выделение пространства пользователю
Создание табличных пространств
Табличное пространство может быть создано при помощи следующей команды:
CREATE TABLESPACE табличное_пространство
[DATAFILE фраза_файла_данных]
[MINIMUM EXTENT целое[К|М]]
[BLOCKSIZE целое   [К]]
[LOGGING|NOLOGGING]
[DEFAULT фраза_хранения ]
[ONLINE I OFFLINE]
[PERMANENT I EMPORARY]
[extent_management_clause]
[autoextend_clause]
Файлы параметров инициализации:
табл_пространство – имя табличного пространства, которое требуется создать.
DATAFILE –задает файл или файлы данных, составляющие это табличное пространство. Для временных табличных пространств можно использовать TEMPFILE.
MINIMUM EXTENT – обеспечивает то, что размер каждого экстента этого табличного пространства кратен целому (используйте К и М для указания размера в килобайтах и мегабайтах).
BLOCKSIZE – указывает размер блока данных, с которым будет создано табличное пространство. Необходимо указать параметр инициализации DB_nK_CACHE_SIZE (n- 2,4,8,16 или 32, размер блока) для этого размера блока. Он устанавливает размер кэша буферов для обслуживания табличных пространств с указанным размером блока. Можно указать до 4 параметров. По умолчанию используется стандартный размер блока и кэш буферов по умолчанию, заданный параметром инициализации DB_CACHE_SIZE.
LOGGING – указывает, что по умолчанию все изменения таблиц, индексов и секций табличного пространства записываются в журнал (режим LOGGIN установлен в команде по умолчанию).
NOLOGGING – указывает, что по умолчанию все изменения таблиц, индексов и секций табличного пространства не записываются в журнал (режим NOLOGGIN затрагивает только некоторые команды DML и DDL, например, использующие прямую загрузку).
DEFAULT – задает  параметры хранения по умолчанию для всех объектов, которые будут созданы в данном табличном пространстве.
ONLINE – делает табличное пространство доступным сразу после создания.
OFFLINE – сразу  после создания табличное пространство будет недоступно.
PERMANENT – указывает на то, что это табличное пространство может быть использовано для хранения постоянных объектов.
TEMPORARY – указывает на то, что данное табличное пространство может хранить только временные объекты, например, сегменты, используемые фразой ORDER BY для неявной сортировки. Используется стандартный размер блока.
SIZE – задаёт размер файла (используйте К и М для задания размера файла).
REUSE – разрешает серверу Oracle повторно использовать существующий файл.
autoextend_clause OFF/ON – разрешает или запрещает автоматическое расширение файла данных: NEXT- какими кусками будет расширяться файл, MAXSIZE/UNLIMITED- до какого максимального размера.
Пример создания нового табличного пространства:
CREATE TABLESPACE userdata
DATAFILE '/u01/oradata/userdata01.dbf 
SIZE 100M
AUTOEXTEND ON NEXT 5M
MAXSIZE 200M; 
Табличные пространства «только для чтения»
Команда alter tablespace...read only.
Перевод табличного пространство в режим только для чтения запрещает последующие операции записи в файлы данных. Табличные пространства «только для чтения» используются для предотвращения каких-либо изменений и для отмены необходимости выполнять резервирование и восстановление больших, статичных областей базы данных. Сервер Oracle никогда не обновляет файлы табличного пространства, используемого только для чтения, и, поэтому эти файлы могут располагаться на носителях, запись на которые невозможна, таких как CD-ROM.
Табличное пространство может быть переведено в режим только для чтения или «чтение-запись» при помощи команды ALTER TABLESPACE:
ALTER TABLESPACE табличное_пространство READ  [ONLY | WRITE]
Перевод табличного пространства в режим  «только чтение»
Команда ALTER TABLESPACE...READ ONLY переводит табличное пространство в режим «только чтение», не дожидаясь завершения всех активных транзакций. В этом режиме не разрешаются никакие последующие операции записи в табличное пространство, за исключением отката текущих транзакций, которые до этого модифицировали блоки табличного пространства. После того, как выполнится фиксация или откат всех текущих транзакций, команда alter tablespace ... read onlyзавершается и табличное пространство переводится в режим «только чтение». 
Вы можете удалять из табличного пространства «только чтение» такие объекты, как таблицы и индексы, так как эти команды вносят изменения только в словарь данных, но не в файлы данных табличного пространства. 
Перед переводом табличного пространства «только чтение» в режим «чтение-запись», все файлы данных табличного пространства должны быть в оперативном режиме. 
-       Перевод табличного пространства в режим «только чтение»
-       Активизирует контрольную точку для файлов данных табличного пространства.
Автономный режим
Табличное пространство, находящееся в автономном режиме, не разрешает доступа к данным.
 Некоторые табличные пространства должны находиться всегда в оперативном режиме:
-       SYSTEM;
-       табличные пространства, содержащие активные сегменты отмены;
-       временное табличное пространство по умолчанию;
Перевод в автономный режим: ALTER TABLESPACE userdata OFFLINE;
Перевод в оперативный режим: ALTER TABLESPACE userdata ONLINE;
Перевод табличных пространств в автономный режим (offline)
Пользователи могут получить доступ к табличному пространству, только если оно находится в оперативном режиме. Табличное пространство может быть переведено администратором базы данных в автономный режим для того, чтобы: 
-       сделать недоступной часть базы данных, тогда как оставшаяся ее часть будет работать в нормальном режиме;
-       выполнить резервирование табличного пространства в автономном режиме (хотя можно производить резервирование табличного пространства, которое находится в оперативном режиме и используется);
-       восстановить табличное пространство или файл данных, когда база данных открыта;
-       изменить местоположение файлов данных, когда база данных открыта.
Автономный режим таблиичного пространства
-       Сервер Oracle не позволяет никаким командам SQL выполнять операции над объектами, содержащимися в автономном табличном пространстве. Если пользователи пытаются получить доступ к объектам автономного табличного пространства либо непосредственно, либо при проверке ссылочной целостности, они получают сообщение об ошибке.
-       Информация о переходе табличного пространства в автономный режим или о возвращении в оперативный сохраняется в словаре данных и в управляющих файлах. Если табличное пространство находится в автономном режиме во время остановки базы данных, то оно останется таковым и не будет проверяться при последующем монтировании и открытии базы данных.
-       Экземпляр Oracle автоматически переключает табличное пространство из оперативного режима в автономный, когда возникают ошибки определенного вида (например, когда процесс Database Writer в ходе нескольких попыток не может произвести запись в файл данных табличного пространства).

Изменение размера табличного пространства
  1. Добавление файлов данных
  2. Изменение размеров файла данных:
-       автоматически
-       вручную
Установка автоматического расширения файлов данных
Указание параметра autoextent для нового файла данных
В следующих командах с помощью фразы AUTOEXTEND включается или отключается автоматическое расширение файла данных:
-       CREATE DATABASE
-       CREATE TABLESPACE ... DATAFILE
-       ALTER TABLESPACE ... ADD DATAFILE
Используйте команду ALTER DATABASE, чтобы изменить файл данных и предоставить возможностью его автоматического расширения:
ALTER DATABASE DATAFILE спецификация_файла [фраза_авторасширения].
Если в табличном пространстве существует несколько файлов, расширяться будет тот, в котором, сервер захочет выделить экстент. Если в файле нет места, и он не может расширяться, будет взят другой файл. Если ни в одном файле нет места, и они не могут расширяться дальше, пользователь, чья команда требует, расширения сегмента получит ошибку.
фраза_авторасширения :== [ AUTOEXTEND { OFF | ON [NEXT целое [К |М]]   [MAXSIZE UNLIMITED | целое[К|М]] } ],
где:  
AUTOEXTEND OFF выключает автоматическое расширение файла данных.
 AUTOEXTEND ON   включает автоматическое расширение файла данных. NEXT устанавливает размер выделяемого дискового пространства, когда требуются дополнительные экстенты.
MAX SIZE определяет максимальный размер дискового пространства, который может быть выделен файлу данных.
 UNLIMITED       снимает ограничение на максимальный размер дискового пространства для файла данных.
Пример установки автоматического расширения файла данных:
ALTER DATABASE DATAFILE
         '/u01/oradata/app_data_04.dbf‘
         SIZE 200M          AUTOEXTEND ON NEXT 10M    MAXSIZE 500M;
Изменение установки autoextend для существующего файла данных
Для включения или отключения автоматического расширения уществующего файла данных используется команда ALTER DATABASE:
ALTER DATABASE [database] DATAFILE 'имя_файла'[,'имя_файла']...фраза_авторасширения
Определение параметров AUTOEXTEND:
 DBA_DATA_FILES есть столбцы, показывающие параметры Авторасширения. Столбец AUTOEXTENSIBLE показывает включено или нет авторасширение:
 SQL> select tablespace_name,  file_name,  autoextensible from dba_data_files;
Например:
TABLESPACE_NAME  FILE_NAME    AUTOEXTENSIBLE
SYSTEM   /home/dbaOl/ORADATA/uOl/systemOl.dbf  YES
DATA01    /home/dba01/ORADATA/u04/data01.dbf NO
USERS       /home/dba01/ORADATA/u03/users01.dbf        NO
UNDO2      /horae/dba01/ORADATA/u01/UND02.dbf        NO
Изменение размера файлов данных вручную
Команда ALTER DATABASE DATAFILE RESIZE
Администратор может изменить размер существующего файла данных вместо того, чтобы увеличивать пространство базы данных при помощи создания новых файлов. Администратор может исправить ошибки, допущенные при планировании базы данных, и освободить неиспользуемое пространство. Для того чтобы уменьшить или увеличить размер файла данных вручную используется команда ALTER DATABASE следующего вида:
ALTER DATABASE [база_данных]
DATAFILE 'имя_файла'[, 'имя_файла']...
RESIZE целое[К|М]
где: целое- требуемый размер файла данных.
Если объекты базы данных располагаются в файле данных за указанным размером, то файл данных уменьшается только до последнего блока последнего объекта базы данных.
Добавление файлов данных к табличному пространству
Команда ALTER TABLESPACE ADD DATAFILE
При помощи следующей команды ALTER TABLESPACE ADD можно добавить к табличному пространству файл данных, чтобы увеличить общее количество дискового пространства, отведенного для этого табличного пространства :
ALTER TABLESPACE табличное_пространство
ADD   [DATAFILE   I   TEMPFILE  ]
спецификация_файла  [фраза_авторасширения]
 [,спецификация_файла  [фраза_авторасширения]]...
Файлы добавляют, если в текущем разделе диска нет места или превышено ограничение на максимальный размер файла в операционной системе.
  
ALTER TABLESPACE: перемещение файлов данных
Методы перемещение файлов данных.
Администратор базы данных может изменять местоположение файлов данных в зависимости от вида табличного пространства одним из следующих двух способов: при помощи команд ALTER TABLESPACE или ALTER DATABASE.
Использование команды ALTER TABLESPACE.
Команда ALTER TABLESPACE следующего вида применяется только для файлов данных, не принадлежащих табличному пространству SYSTEM, которое, к тому же, не содержит активных сегментов отмены или временных сегментов. Более того, она работает только в режиме открытой базы данных.
ALTER TABESPACE табличное_пространство RENAME DATAFILE   'имя_файла'[,   'имя_файла']... ТО 'имя_файла'[,   'имя_файла' ]
Для переименования файла данных выполняется следующая последовательность шагов:
1.     Переведите табличное пространство в автономный режим.
2.     Переместите или скопируйте файлы при помощи команд операционной системы.
3.     Выполните команду ALTER TABLESPACE RENAME DATAFILE.
4.     Верните табличное пространство в оперативный режим.
5.     Если требуется, удалите файл при помощи команды операционной системы. Имя исходного файла должно совпадать с именем в управляющем файле.
ALTER DATABASE: перемещение файлов данных
Для перемещения любого вида файла данных может быть использована команда ALTER DATABASE (см. занятие "Сопровождение журнальных файлов"). В отличие от предыдущей команды, она работает как в режиме открытой базы данных, так и в режиме смонтированной базы.
ALTER DATABASE [база_данных]RENAME FILE
'имя_файла'[, 'имя_файла']... ТО 'имя_файла'[, 'имя_файла']...
Файлы табличного пространства SYSTEM , которые не могут быть переведены в автономный режим, переименовываются следующим образом:
1.     Остановите экземпляр.
2.     Переместите файлы при помощи команды операционной системы.
3.     Смонтируйте базу данных.
4.     Выполните команду ALTER DATABASE RENAME FILE.
5.     Откройте базу данных.
Удаление табличных пространств
-       Нельзя удалять табличное пространство SYSTEM и содержащее активные сегменты отката.
-       Информация о табличном пространстве удаляется из словаря данных.
-       В команде удаления табличного пространства необходимо указывать режим удаления его содержимого.
-       При помощи команды  DROP TABLESPACE табличные пространства можно удалить из базы данных, когда отпала надобность в них самих и в их содержимом:
DROP TABLESPACE табличное_пространство
[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]
где:
-       табличное_пространство - имя табличного пространства, которое требуется удалить
-       INCLUDING CONTENTS - удаляет все сегменты табличного пространства
-       AND DATAFILES - удаляет соответствующие файлы ОС
-       CASCADE CONSTRAINTS - удаляет те ссылочные правила целостности таблиц из других табличных пространств, которые ссылаются на первичные и уникальные ключи таблиц, принадлежащих удаляемому табличному пространству
Табличное пространство, содержащее данные, не может быть удалено без использования параметра INCLUDING CONTENTS. Использование этого параметра может привести к генерации большого объема информации отмены, если в табличном пространстве находится много объектов.
Данные табличного пространства перестают существовать в базе данных, как только оно удаляется.
При удалении табличного пространства удаляются только файловые указатели из управляющего файла соответствующей базы данных. Файлы базы данных остаются и должны быть удалены явно на уровне операционной системы, если в команде отсутствует фраза AND DATAFILES .
Табличное пространство в режиме только для чтения тоже может быть удалено вместе со своими сегментами. Это возможно потому, что команда DROP обновляет словарь данных (который должен быть в режиме чтение-запись), а не физические файлы, составляющие базу данных.
Для того чтобы во время удаления табличного пространства не существовало транзакций, пытающихся получить доступ к сегментам этого табличного пространства, рекомендуется перевести его в автономный режим.
Получение информации о табличном пространстве
Информация о табличном пространстве:
-       DBA_TABLESPACES
-       V$TABLESPACE
Информация о файле данных:
-       DBA_DATA_PILES
-       V$DATAFILE
Информация о временном файле:
-       DBA_TEMP_FILES
-       V$TEMPFILE
Резервное копирование и восстановление
Восстановление вручную
1.     Выполнить физическое восстановление файла означает заменить его резервной копией.
2.     Восстановлению обычно подлежат следующие файлы:
-       файлы данных;
-       управляющие файлы;
-       архивные журнальные файлы;
-       серверный файл параметров.
3.     В каждом случае потеря основного файла  и восстановление его из резервной копии приводит к следующим последствиям при восстановлении носителя.
Если теряется…
То…
Один или несколько файлов данных
Необходимо восстановит их из резервной копии и
Выполнить восстановление носителя. Восстановление (носителя) необходимо, когда SCNконтрольной точки в заголовке файла данных не совпадает с SCN контрольной точки файла, отраженного в управляющем файле.
Все копии текущего управляющего файла
Необходимо восстановить управляющий файл из резервной копии  и затем открыть базу данных в режиме RESETLOGS. Если резервная копия отсутствует, можно попытаться повторно создать управляющий файл. По возможности, следует использовать командный файл, включенный в выходные данные оператора ALTER DATABASE BACKUP CONTROLFILE TO TRACE. Чтобы добиться соответствия структуры управляющего файла   текущей структуре базы данных могут потребоваться дополнительные действия.
Одна копия мултьти-плексерованного
управляющего
файла
Необходимо скопировать один из нетронутых управляющих файлов в то место, где находиться отсутствующий или поврежденный управляющий файл, и открыть базу данных. Если не удаются скопировать управляющий файл в его исходное местоположение (например, если не удается починить дисковод), следует указать новое местоположение в файле параметров инициализации, а затем открыть базу данных.
Архивные журнальные файлы, необходимые для восстановления носителя
Необходимо восстановит эти архивные журнальные файлы из резервных копий для восстановления носителя. Журнальные файлы можно восстановит либо в местоположение по умолчанию, либо в указанный каталог. Если резервные копии отсутствуют, необходимо выполнить неполное восстановление до той точки, после которой требуется информация первого потерянного журнала, и открыть базу данных в режиме RESETLOGS
Серверный файл параметров
Если имеется резервная копия серверного файла параметров, восстановите этот файл из нее. С другой стороны, если имеется резервная копия «клиентского» (т.е. текстового) файла параметров инициализации, можно восстановить этот файл, запустить с его помощью экземпляр и повторно создать серверный файл параметров
Хранение записей для последующего использования в ходе восстановления
Одним из наиболее важных аспектов резервирования и восстановления, управляемого пользователем, является хранение записей обо всех файлах текущей базы данных и резервных копиях этих файлов. Например, у вас должны быть записи о местоположении следующих файлов:
-       Файлы данных;
-       Управляющие файлы;
-       Оперативные журнальные файлы (обратите внимание, что оперативные журналы не резервируются);
-       Архивные журнальные файлы;
-       Файлы параметров инициализации;
-       Файлы паролей;
-       Файлы настроек сетевых компонентов;
Запись местоположения файлов данных, управляющих файлов и оперативных журнальных файлов
Следующий полезный командный файл SQL выводит местоположение всех управляющих файлов, файлов данных и оперативных журнальных файлов базы данных:
SELECT NAME FROM V$DATAFILE
UNION ALL
SELECT MEMBER FROM V$LOGFILE
UNION ALL
SELECT NAME FROM V$CONTROFILE;
Выходные данные могут выглядеть следующим образом:
NAME
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/oracle/dbs/tbs_01.f
/oracle/dbs/tbs_02.f
/oracle/dbs/tbs_11.f
/oracle/dbs/tbs_12.f
/oracle/dbs/t1_log1.f
/oracle/dbs/t1_log2.f
/oracle/dbs/cf1.f
/oracle/dbs/cf2.f
Запись местоположений резервных копий файлов
Недостаточно просто записывать местоположение резервных копий файлов: необходимо устанавливать соответствие между резервными копиями и исходными файлами. По возможности, присваивайте резервным копиям такие же относительные имена, как и у основных файлов. Независимо от используемой системы именования, храните таблицу с соответствующей информацией. Например, можно хранить следующую таблицу с информацией о местоположении файлов базы данных на случай восстановления.
Номер файлов данных
Табличное пространство
Имя резервного файла
0 (управляющий файл)
0 (управляющий файл) 
/dsk3/backup/cf.f
SYSTEM 
/dsk3/backup/tbs_01.f 
undo
/dsk3/backup/tbs_02.f
3
temp
/dsk3/backup/tbs_11.f 
4
users
/dsk3/backup/tbs_12.f
Определение файлов  данных, требующих восстановления
Динамическое представление производительности V$RECOVER_FILE позволяет определить, какие файлы нужно восстановить из резервных копий при подготовке к восстановлению носителя. В этом представлении содержатся все файлы, требующие восстановления, и даются объяснения, почему они Должны быть восстановлены.
Следующий запрос отображает идентификационные номера файлов данных, требуемых для восстановления носителя, а также причину восстановления (если она известна), а также ЗСК и время, с которых нужно начать восстановление:
SELECT * FROM V$RECOVER_FILE;
FILE#    ONLINE    ERROR CHANGE#   TIME
_ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ __ _ _ _ _ _ _
           14 ONLINE
           15 ONLINE  FILE NOT FIND            0
           21 ONLINE  OFFLINE NORMAL     0
Повторное создание файлов данных при отсутсвии резервных копий
Когда файл данных поврежден, а его резервная копия недоступна, этот файл данных все же можно восстановить, если:
-       доступны все архивные журнальные файлы, сгенерированные после создания исходного файла данных;
-       управляющий файл содержит имя поврежденного файла (это значит, что управляющий файл является текущим или восстановленным из резервной копии, сделанной после того, как поврежденный файл данных был добавлен в базу данных).
Чтобы повторно создать файл данных для восстановления:
1.     Создайте новый, пустой файл данных для замены поврежденного файла данных, у которого нет соответствующей резервной копии. Предположим, например, что поврежден файл данных /disk1/users1.f и его резервная копия недоступна. Следующий оператор повторно создает исходный файл данных (того же размера) на диске disk2:
ALTER DATABASE CREATE DATAFILE ‘/disk1/users1.f’ AS ‘/disk2/users1.f’;
Данный оператор создает пустой файл того же размера, что и потерянный файл. Oracle ищет информацию о размере файла в управляющем файле и словаре данных. Исходному файлу данных присваивается имя нового файла данных.
2.     Выполните восстановление носителя дня пустого файла данных. Напримервведите:
RECOVER DATAFILE ‘/disk2/users1.f’
3.     Все архивные журналы, сгенерированные после создания исходного файла данных, должны быть доступны и повторно применены к новой, пустой версии потерянного файла данных во время восстановления.
Восстановление и повторное создание управляющих файлов
Если сбой носителя повредил управляющие файлы базы данных (независимо от того, мультиплексированы они или нет), база данных продолжает работать до тех пор, пока какому-либо процессу сервера Oracle не потребуется получить доступ к управляющим файлам. В этот момент база данных и экземпляр автоматически останавливаются.
Если сбой носителя был временным и база данных до сих пор не остановлена, не допускайте автоматической остановки базы данных – немедленно исправляйте сбой. Однако если остановка базы данных происходит до исправления временного сбоя носителя, ее можно повторно запустить после устранения проблемы и восстановления доступа к управляющим файлам.
Процедура восстановления после сбоя носителя, который делает невозможным доступ к управляющим файлам базы данных, зависит от того, мультиплексированы эти управляющие файлы или нет. Соответствующие процедуры описаны в следующих разделах:
-       Потеря одного из элементов мультиплексированного управляющего файла.
-       Потеря всех элементов мультиплексированного управляющего файла, когда резервная копия доступна.
-       Потеря всех текущих и резервных управляющих файлов.
Потеря одного из элементов мультиплексированного управляющего файла
Следующие процедуры используются для восстановления базы данных после сбоя носителя, который привел к повреждению одного или нескольких управляющих файлов базы данных, но при этом как минимум один управляющий файл остался неповрежденным.
Копирование мультиплексированного управляющего файла в местоположение по умолчанию
Если диск и файловая система, содержавшие потерянный управляющий файл, остались невредимы, можно просто скопировать один из неповрежденных управляющих файлов туда, где находился потерянный управляющий файл. В этом случае вам не придется изменять значение параметра инициализации CONTROL_FILES.
Чтобы заменить поврежденный управляющий файл путем копирования мультиплексированного управляющего файла:
1.     Остановить экземпляр, если он еще работает: SHUTDOWN ABORT.
2.     Устраните аппаратную проблему, которая привела к сбою носителя. Если не удается быстро решить эту проблему, переходите к восстановлению базы данных – восстановите поврежденный управляющий файл на другом запоминающем устройстве, как описано в разделе «Копирование мультиплексированного управляющего файла в местоположение, отличное от используемого по умолчанию ».
3.     Замените поврежденные управляющие файлы неповрежденной мультиплексированной копией текущего управляющего файла базы данных. Например, чтобы заменить файл bad_cf.f файлом good_cf.f введите: % cp /oracle/good_cf.f /oracle/dbs/bad_cf.bad
4.     Запустите новый экземпляр, смонтируйте и откройте базу данных. Например, введите: STARTUP
Потеря всех элементов мультиплексированного запоминающего файла, когда резервная копия доступна
Следующие процедуры для восстановления управляющего файла из резервной копии при сбое носителя, который привел к повреждению всех управляющих файлов базы данных. Если управляющий файл недоступен, можно запустить экземпляр, но не монтировать базу данных. Если попытаться смонтировать базу данных, когда управляющий файл недоступен, появится следующее сообщение об ошибки:
ORA-00205: ошибка определения управляющего файла, дополнительную информацию см. в сигнальном файле ALERT
Нельзя смонтировать и открыть базу данных до тех пор, пока управляющий файл не будет снова доступным. Если управляющий файл восстанавливается из резервной копии, необходимо открыть базу данных с опцией RESETLOGS.
Как видно из Таблицы, процедура восстановления управляющего файла зависит от того, доступны ли журналы.
Таблица 1- Сценарии восстановления потерянных управляющих файлов
Статус оперативных журналов
Статус файлов данных
Действия
Доступы
Текущие
Если оперативные журналы содержат необходимые для восстановления, эти журналы используются в процессе восстановления управляющего файла из резервной копии. Следовательно, необходимо указать имена оперативных журналов, содержащих изменения, чтобы открыть базу данных. После восстановления откройте базу данных в режиме RESETLOGS.
Недоступны
Текущие
Если оперативные журналы содержат записи, необходимые для восстановления, вы должны повторно создать управляющий файл. Поскольку журналы недоступны, откройте базу данных в режиме RESETLOGS.
Доступны
Резервные
Восстановите управляющий файл из резервной копии, выполните полное восстановление и откройте базу данных в режиме RESETLOGS.
Недоступны
Резервные
Восстановите управляющий файл из резервной копии, выполните неполное восстановление и откройте базу данных в режиме RESETLOGS.
ВОССТАНОВЛЕНИЕ УПРАВЛЯЮЩГО ФАЙЛА ИЗ РЕЗЕРВНОЙ КОПИИ В МЕСТОПОЛОЖЕНИИ ПО УМОЛЧАНИЮ
По возможности, восстанавливайте управляющий файл в его исходном местоположении. В этом случае вам не придется указывать новые местоположения управляющего файла в файле параметров инициализации.
Чтобы восстановить управляющий файл в местоположении по умолчанию:
1.     Остановите экземпляр, если он еще работает: SHUTDOWN ABORT
2.     Устраните аппаратную проблему, которая привела к сбою носителя.
3.     Восстановите управляющий файл из резервной копии во всех местоположениях, указанных в параметре инициализации CONTROL_FILES. Например, если в файле параметров сервера указаны местоположения управляющего файла /dsk/oracle/dbs/cf1.f и /dsk/cf2.f, используйте утилиту операционной системы для восстановления управляющего файла в этих местоположениях:
cp /backup/cf.bak /dsk1 /oracle/dbs/cf1.f
% cp /backup/cf.bak /dsk2/cf2.f
4.     Запустите новый экземпляр и смонтируйте базу данных. Например, введите: STARTUP MOUNT
5.     Начните восстановление выполнением оператора RECOVER с предложением USING BACKUP CONTROLFILE. Укажите предложение UNTIL CANCEL, если вы выполняете неполное восстановление. Например, введите:
 RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
6.     Примените запрошенные архивные журналы. Если появится сообщение о том, что требуемый архивный журнал отсутствует, значит, необходимая запись, вероятно, находится в оперативном журнале. Эта ситуация может возникнуть, если незаархивированные изменения находились в оперативных журналах, когда произошел сбой экземпляра. Например, предположим, что вы видите следующее сообщение:
ORA-00279: изменение 55636, созданное 06/08/2000 в 16:59:47, необходимое для потока 1
ORA-00289: предложение /oracle/work/arc_dest/arcr_1_111.arc
ORA-00280: изменение 55636 для потока 1 находится в последовательности #111
Задайте журнал: (<RET>=предлагаемое | имя файла | AUTO | CANCEL)
Можно указать имя оперативного журнала и нажать Enter (возможно, придется сделать это несколько раз до тех пор, пока не будет найден нужный журнал):
/oracle/dbs/t1_log1.f
Журнал применен.
Восстановление носителя завершено.
Если по каким-либо причинам оперативные журналы недоступны, можно прекратить восстановление и не применять оперативные журналы. Обратите внимание, что если все файлы данных являются текущими и требуемые для восстановления записи находятся в оперативных журналах, базу данных нельзя открыть без применения оперативных журналов. Если оперативные журналы недоступны, необходимо повторно создать управляющий файл.
7.     Откройте базу данных в режиме RESETLOGS после завершения восстановления:
ALTER DATABASE OPENRESETLOGS;

4. Порядок выполнения работы

1.                            Сопровождение табличных пространств и файлов данных
1.     Создайте постоянные табличные пространства со следующими именами и параметрами хранения:
         DATA01, управляемое с помощью словаря данных.
         DATA02, с экстентами одинакового размера (размер каждого экстента должен быть кратен 100 Кб.) (включите автоматическое расширение с выделением пространства размером 500 Кб и максимальным размером 2 Мб.
         RONLY для таблиц, доступных только на чтение с параметрами хранения по умолчанию.
НЕ СОЗДАВАЙТЕ табличное пространство в режиме «только чтение» в данный момент времени.
2.     Выведите информацию из словаря данных.
3.     Выделите дополнительно 500Кб для табличного пространства DATA02 . Проверьте результат.
4.     Переместите табличное пространство DATA01 в другой каталог (оба способа).
5.     Добавьте файл данных для табличного пространства DATA01.
6.     Измените размер фала данных для DATA01 вручную.
7.     Создайте таблицу в табличном пространстве RONLY. Переведите RONLY в режим «только чтение».
8.     Попытайтесь создать еще одну таблицу. Удалите первую таблицу. Что произошло и почему?
9.     Удалите табличное пространство RONLY и соответствующий файл данных. Проверьте результат.

 Литература

1. С. В. Глушаков, Ю. В. Третьяков, О. А. Головаш Администрирование Oracle 9i, 2003 г.
2. Марлен Терьо, Рэчел Кармайкл, Джеймс Вискузи Oracle 9i DBA 101. Администрирование баз данных, 2005 г.
3. Том Кайт Oracle для профессионалов, 2003.
4. Oracle Documentation Library, http://oldunesco.kemsu.ru/ora_docs.




Комментариев нет:

Отправить комментарий