Начиная с первого релиза 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