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

2-1. Создание флэш-области

Требуется создать флэш-область для базы данных.

Выключение параметров log_archive_dest и log_archive_duplex_dest

Для начала надо отключить параметры log_archive_dest и log_archive_duplex_dest, если конечно они установлены:

SQL> alter system set log_archive_duplex_dest = '';
System altered.

SQL> alter system set log_archive_dest = '';
System altered.

Если при изменении значения параметров возникает ошибка:

SQL> alter system set log_archive_duplex_dest = '';

alter system set log_archive_duplex_dest = ''
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16018: cannot use LOG_ARCHIVE_DUPLEX_DEST with LOG_ARCHIVE_DEST_n or
DB_RECOVERY_FILE_DEST

То, необходимо отключить использование флэш-области, выполнив следующую команду:

SQL> alter system set db_recovery_file_dest = '' scope = both sid = '*';
System altered.

Не забудьте при этом перезагрузить экземпляр.

Задание размеров и создание флэш-области восстановления

Команды должны выполняться в строгой последовательности.

SQL> alter system set db_recovery_file_dest_size = 1G;
System altered.

Каталог флэш-области восстановления должен существовать до выполнения команды.

SQL> alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area/';
System altered.

Теперь флэш-область создана и готова к работе.

2-2. Запись регулярных копий базы данных в флэш-область восстановления.

Флэш-область восстановления создана. Используем её для создания резервных копий.

Копирование базы в флэш-область восстановления

Создадим резервную копию базы данных в флэш-области восстановления, не используя опции форматирования:

RMAN> backup database;

Starting backup at 03-MAR-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/u02/oradata/orcl/system01.dbf
input datafile fno=00003 name=/u02/oradata/orcl/sysaux01.dbf
input datafile fno=00005 name=/u02/oradata/orcl/example01.dbf
input datafile fno=00002 name=/u02/oradata/orcl/undotbs01.dbf
input datafile fno=00004 name=/u02/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 03-MAR-11
channel ORA_DISK_1: finished piece 1 at 03-MAR-11
piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_03/o1_mf_nnndf_TAG20110
303T053828_6pxzs59z_.bkp tag=TAG20110303T053828 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:46
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 03-MAR-11
channel ORA_DISK_1: finished piece 1 at 03-MAR-11
piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_03/o1_mf_ncsnf_TAG20110
303T053828_6pxztnxl_.bkp tag=TAG20110303T053828 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 03-MAR-11

Так как мы не указывали никаких опций форматирования, резервные копии базы данных по умолчанию создаются в каталоге флэш-области восстановления. Файлы резервных копий помещаются в специально созданные подкаталоги этого каталога. Так, вначале создаётся подкаталог, соответствующий имени экземпляра копируемой базы данных. Затем в этом подкаталоге создаётся ещё один подкаталог с именем backupset. Далее в нём создаётся подкаталог с именем даты создаваемой резервной копии. После чего, в него помещаются два файла. Файлы представляют собой наборы резервных копий в упакованном внутреннем формате. Первый набор содержит все файлы данных базы. Второй включает контрольные файлы и двоичный файл параметров.

2-3. Освобождение пространства в флэш-области восстановления

Если флэш-область восстановления исчерпала выделенное ей свободное дисковое пространство, то вы будете наблюдать в журнале регистрации alert log запись примерно такого вида:

Errors in file /u01/app/oracle/admin/orcl/udump/orcl_ora_3389.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 1073741824 bytes is 100.00% used, and 
has 0 remaining bytes available.

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

Увеличение пространства флэш-области восстановления

Можно динамически увеличить место, выделяемое под флэш-область восстановления, с помощью следующей команды:

SQL> alter system set db_recovery_file_dest_size = 2G;
System altered.

Удаление контрольных точек

Можно удалить созданные ранее контрольные точки

SQL> select name, storage_size from v$restore_point;
 
NAME STORAGE_SIZE
---- ------------
P1   1024           
 
SQL> drop restore point p1;
Restore point dropped.

Это позволит освободить немного места и стартовать базу данных.

Выключение FlashBack

Если первые два способа не привели к положительным результатам или являются неприемлемыми, можно временно отключить FlashBack:

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1261372 bytes
Variable Size             167772356 bytes
Database Buffers          113246208 bytes
Redo Buffers                2932736 bytes
Database mounted.

SQL> alter database flashback off;
Database altered. 

Это позволит остановить flashback операции и не генерировать flashback лог. После этого мы можем удалить ненужные резервные копии и архивные журнальные файлы:

RMAN> delete noprompt archivelog all;

using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=155 devtype=DISK

List of Archived Log Copies
Key     Thrd Seq     S Low Time  Name
------- ---- ------- - --------- ----
1       1    3       A 16-DEC-10 /u01/app/oracle/admin/orcl/arch/1_3_737884089.dbf
2       1    4       A 16-DEC-10 /u01/app/oracle/admin/orcl/arch/arch_1_4_737884089.arc
3       1    5       A 16-DEC-10 /u01/app/oracle/admin/orcl/arch/arch_1_5_737884089.arc
deleted archive log
archive log filename=/u01/app/oracle/admin/orcl/arch/1_3_737884089.dbf recid=1 
stamp=737893466
deleted archive log
archive log filename=/u01/app/oracle/admin/orcl/arch/arch_1_4_737884089.arc recid=2 
stamp=737893733
deleted archive log
archive log filename=/u01/app/oracle/admin/orcl/arch/arch_1_5_737884089.arc recid=3 
stamp=737893838
Deleted 3 objects

RMAN> delete noprompt backup of database;

using channel ORA_DISK_1

List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
10      10      1   1   AVAILABLE   DISK        
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_04/o1_mf_nnndf_TAG20110304T062
845_6q0q3ffd_.bkp
deleted backup piece
backup piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_04/o1_mf_nnndf_TAG20110
304T062845_6q0q3ffd_.bkp recid=10 stamp=744877725
Deleted 1 objects

RMAN> delete noprompt copy of database;

Теперь можно открывать базу данных:

SQL> alter database open;
Database altered.

Учитывайте, что выключение FlashBack не удаляет пространство, занятое гарантийными контрольными точками.

2-4. Проверка используемого пространства в флэш-области восстановления

После настройки флэш-области восстановления требуется посмотреть общее пространство, занимаемое этой областью, а также пространство, занимаемое по отдельности каждым составляющим её файлом. Для решения этой задачи можно использовать следующие представления.

Представление v$recovery_file_dest показывает дисковую квоту и использование дискового пространства в флэш-области восстановления:

SQL> select * from v$recovery_file_dest;
 
NAME                                 SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------------ ----------- ---------- ----------------- ---------------
/u01/app/oracle/flash_recovery_area/ 2147483648  624492544  0                 2

Поля:

  • NAME - директория используемая для местоположения флэш-области. Значение соответствует параметру DB_RECOVERY_FILE_DEST.
  • SPACE_LIMIT- максимальное количество дискового пространства (в байтах), который база данных может использовать для области восстановления вспышки. Значение соответствует параметру DB_RECOVERY_FILE_DEST_SIZE.
  • SPACE_USED - количество дискового пространства (в байтах) используемого файлами флэш-области восстановления. Изменение флэш-области восстановления не сбрасывает это значение в 0.
  • SPACE_RECLAIMABLE- общий размер дискового пространства (в байтах), который может быть создан, удаляя устаревшие, избыточные, или другие файлы низкого приоритета из флэш-области восстановления.
  • NUMBER_OF_FILES -общее количество файлов в флэш-области.

Представление v$flash_recovery_area_usage показывает процент использование дискового пространства для различных типов файлов флэш-области восстановления:

SQL> select * from v$flash_recovery_area_usage;
 
FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE  0                  0                         0              
ONLINELOG    0                  0                         0              
ARCHIVELOG   0                  0                         0              
BACKUPPIECE  29.08              0                         2              
IMAGECOPY    0                  0                         0              
FLASHBACKLOG 0                  0                         0          

Поля:

  • FILE_TYPE - тип файла флэш-области.
  • PERCENT_SPACE_USED - процент дискового пространства используемого данным типом файла флэш-области восстановления в процентах от общего размера дискового пространства флэш-области.
  • PERCENT_SPACE_RECLAIMABLE - процент дискового пространства , который может быть создан, удаляя устаревшие, избыточные, или другие файлы низкого приоритета из флэш-области восстановления для данного типа файла в процентах от общего размера дискового пространства флэш-области.
  • NUMBER_OF_FILES - количество файлов в флэш-области восстановления.

Для того чтобы видеть общий размер пространства каждого файла флэш-области восстановления, надо соединить представление v$flash_recovery_area_usage с представлением recovery_file_dest.

SQL> SELECT file_type, space_used * percent_space_used / 100 / 1024 / 1024 used,
  2>        space_reclaimable * percent_space_reclaimable / 100 / 1024 / 1024
  3>        reclaimable, b.number_of_files
  4>   FROM v$recovery_file_dest a, v$flash_recovery_area_usage b
 
FILE_TYPE    USED       RECLAIMABLE NUMBER_OF_FILES
------------ ---------- ----------- ---------------
CONTROLFILE  0          0           0              
ONLINELOG    0          0           0              
ARCHIVELOG   0          0           0              
BACKUPPIECE  173.189575 0           2              
IMAGECOPY    0          0           0              
FLASHBACKLOG 0          0           0            

2-5. Расширение или уменьшение флэш-области восстановления.

Иногда может потребоваться увеличение размера флэш-области восстановления. Обычно такая операция необходима при росте базы данных или увеличении периода хранения резервных копий.

Увеличение размера флэш-области

SQL> select * from v$recovery_file_dest;
 
NAME                                 SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------------ ----------- ---------- ----------------- ---------------
/u01/app/oracle/flash_recovery_area/ 2147483648  624492544  0                 2              

SQL> alter system set db_recovery_file_dest_size = 4G;
System altered.

SQL> select * from v$recovery_file_dest;
 
NAME                                 SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------------ ----------- ---------- ----------------- ---------------
/u01/app/oracle/flash_recovery_area/ 4294967296  624492544  0                 2              

Уменьшение размера флэш-области

SQL> alter system set db_recovery_file_dest_size = 1G;
System altered.

SQL> select * from v$recovery_file_dest;
 
NAME                                 SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------------ ----------- ---------- ----------------- ---------------
/u01/app/oracle/flash_recovery_area/ 1073741824  624492544  0                 2              

Обычно, при уменьшении размера флэш-области, если используемое дисковое пространство (столбец SPACE_USED) превышает лимит флэш-области (столбец SPACE_LIMIT), то устаревшие и избыточные файлы будут автоматически удалены. При этом, максимальный размер пространства, которое может быть удалено отображается в столбце SPACE_RECLAIMABLE. Если этого количества, по каким-то причинам недостаточно, то чтобы привести в соответствие размеры доступного и занятого дискового пространства в флэш-области, файлы не удаляются и размер занятого пространства в этом случае остается без изменений:

SQL> select * from v$recovery_file_dest;
 
NAME                                 SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------------ ----------- ---------- ----------------- ---------------
/u01/app/oracle/flash_recovery_area/ 1073741824  1249017856 0                 4              

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

RMAN> backup as copy tablespace users;

Starting backup at 14-MAR-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile fno=00004 name=/u02/oradata/orcl/users01.dbf
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 03/14/2011 05:13:13
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 5242880 bytes disk space from 1073741824 limit

Чтобы исправить данную ситуацию необходимо вручную удалить избыточные резервные копии:

RMAN> report obsolete;

RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 2
Report of obsolete backups and copies
Type                 Key    Completion Time    Filename/Handle
-------------------- ------ ------------------ --------------------
Backup Set           20     14-MAR-11         
  Backup Piece       20     14-MAR-11          
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_ncsnf_TAG20110314T043
951_6qtwjp5f_.bkp
Backup Set           21     14-MAR-11         
  Backup Piece       21     14-MAR-11          
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_nnndf_TAG20110314T044
122_6qtwl2bf_.bkp
Backup Set           22     14-MAR-11         
  Backup Piece       22     14-MAR-11          
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_ncsnf_TAG20110314T044
122_6qtwmkco_.bkp

RMAN> delete obsolete;

RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 2
using channel ORA_DISK_1
Deleting the following obsolete backups and copies:
Type                 Key    Completion Time    Filename/Handle
-------------------- ------ ------------------ --------------------
Backup Set           20     14-MAR-11         
  Backup Piece       20     14-MAR-11          
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_ncsnf_TAG20110314T043
951_6qtwjp5f_.bkp
Backup Set           21     14-MAR-11         
  Backup Piece       21     14-MAR-11          
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_nnndf_TAG20110314T044
122_6qtwl2bf_.bkp
Backup Set           22     14-MAR-11         
  Backup Piece       22     14-MAR-11          
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_ncsnf_TAG20110314T044
122_6qtwmkco_.bkp

Do you really want to delete the above objects (enter YES or NO)? Y
deleted backup piece
backup piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_ncsnf_TAG20110
314T043951_6qtwjp5f_.bkp recid=20 stamp=745735238
deleted backup piece
backup piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_nnndf_TAG20110
314T044122_6qtwl2bf_.bkp recid=21 stamp=745735282
deleted backup piece
backup piece 
handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_03_14/o1_mf_ncsnf_TAG20110
314T044122_6qtwmkco_.bkp recid=22 stamp=745735329
Deleted 3 objects

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

RMAN> delete noprompt obsolete;

Результатом проведённого удаления лишних резервных копий является уменьшение размера занятого дискового пространства флэш-области:

SQL> select * from v$recovery_file_dest;
 
NAME                                 SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------------ ----------- ---------- ----------------- ---------------
/u01/app/oracle/flash_recovery_area/ 1073741824  629751808  0                 3