Как удалить архивные файлы журнала на экземпляре AWS RDS Oracle - PullRequest
1 голос
/ 24 октября 2019

У нас есть экземпляр AWS Oracle RDS, который недавно исчерпал пространство с ORA-01653 и ORA-01654 (Невозможно расширить индекс X на 8 в табличном пространстве X ... ) ошибки.

При расследовании с помощью запроса:

select nvl(sum(BLOCKS * BLOCK_SIZE),0)/1024/1024/1024 GB from V$ARCHIVED_LOG  where DEST_ID=1 and ARCHIVED='YES' and DELETED='NO';

Это показывает вывод:

        GB
----------
26.3267608

Это наводит меня на мысль, что у нас есть 26 ГБ архивных журналов.

Выполнение следующего запроса для получения некоторой информации о файлах архива:

select * from V$ARCHIVED_LOG  where DEST_ID=1 and ARCHIVED='YES' and DELETED='NO';

У нас около 5000 строк результатов. Некоторые примеры строк:

 RECID      STAMP NAME                                                           DEST_ID    THREAD#  SEQUENCE# RESETLOGS_CHANGE# RESETLOGS RESETLOGS_ID FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME     BLOCKS BLOCK_SIZE CREATOR REGISTR STA ARC APPLIED   DEL S COMPLETIO DIC DIC END BACKUP_COUNT ARCHIVAL_THREAD# ACTIVATION# IS_ COM FAL END_OF_RED BAC
------ ---------- ------------------------------------------------------------ --------- ---------- ---------- ----------------- --------- ------------ ------------- --------- ------------ --------- ---------- ---------- ------- ------- --- --- --------- --- - --------- --- --- --- ------------ ---------------- ----------- --- --- --- ---------- ---
 56851 1021006860 /rdsdbdata/db/DRGNFLY_A/arch/redolog-56852-1-1002024260.arc          1          1      56852            222206 04-MAR-19   1002024260     108023802 07-OCT-19    108025497 07-OCT-19       1721        512 ARCH    ARCH    NO  YES NO        NO  A 07-OCT-19 NO  NO  NO             0                1  1073401855 NO  NO  NO             NO 
 56852 1021007166 /rdsdbdata/db/DRGNFLY_A/arch/redolog-56853-1-1002024260.arc          1          1      56853            222206 04-MAR-19   1002024260     108025497 07-OCT-19    108026500 07-OCT-19        626        512 ARCH    ARCH    NO  YES NO        NO  A 07-OCT-19 NO  NO  NO             0                1  1073401855 NO  NO  NO             NO 

Расположение этого файла архива: / rdsdbdata / db / DRGNFLY_A / arch / redolog-56849-1-1002024260.arc Другие строки такжев этом каталоге: / rdsdbdata / db / DRGNFLY_A / arch

Из документов AWS Oracle Common DBA Tasks , мы запустили сохраненный процесс:

exec rdsadmin.rdsadmin_master_util.drop_archivelog_dir;
exec rdsadmin.rdsadmin_master_util.drop_onlinelog_dir;

Эта команда выполнена успешно, но при повторном выполнении запроса выше все равно отображаются 26 ГБ файлов архивных журналов.

Чтобы просмотреть конфигурацию хранения архивных журналов, я запустил:

set serveroutput on
exec rdsadmin.rdsadmin_util.show_configuration;

Это приводит к выводу:

NAME:archivelog retention hours
VALUE:0
DESCRIPTION:ArchiveLog expiration specifies the duration in hours before archive/redo log files are automatically deleted.
NAME:tracefile retention
VALUE:1440
DESCRIPTION:tracefile expiration specifies the duration in minutes before tracefiles in bdump are automatically deleted.

Это заставит меня поверить, что, поскольку часов хранения архива имеет значение 0 , эти файлы должны быть автоматически удалены?

Мои вопросы:

  1. Является ли какой-либо из моих приведенных выше анализов / запросов некорректным, и эти архивные журналы на самом деле не способствуют ошибкам моего табличного пространства?
  2. Какудалите эти архивные файлы журнала и освободите место, чтобы оно могло бытьиспользуется для обычного хранения БД и т. д. Насколько я знаю, AWS-RDS не предоставляет прямой доступ для удаления этих файлов, поэтому я попытался использовать rdsadmin.rdsadmin_master_util.drop_archivelog_dir хранимый процесс.
  3. Также как убедиться,файлы журнала не создаются или очищаются с соответствующим периодом хранения.

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Если вы можете запускать PL / SQL не только SQL, то вы можете:

BEGIN
  FOR cur IN (
  SELECT L.* FROM v$archived_log L, v$database D WHERE L.NEXT_TIME<trunc(sysdate)-30 and L.DELETED = 'NO' and L.STANDBY_DEST='NO' 
  and L.APPLIED=DECODE(D.DATABASE_ROLE,'PRIMARY','NO','YES')  order by L.NEXT_TIME ASC,L.NAME
  ) LOOP
    sys.DBMS_BACKUP_RESTORE.deletearchivedlog(cur.recid,cur.stamp,cur.name,
                                          cur.thread#,cur.sequence#,
                                          cur.resetlogs_change#,cur.first_change#,
                                          cur.block_size,1);
  END LOOP;
END;
/

изменить NEXT_TIME в WHERE как свой.

из документа AWS RDS online:

set serveroutput on
exec rdsadmin.rdsadmin_util.show_configuration; 

begin
    rdsadmin.rdsadmin_util.set_configuration(
        name  => 'archivelog retention hours',
        value => '240');
end;
/
commit;

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.Log.html#Appendix.Oracle.CommonDBATasks.RetainRedoLogs
0 голосов
/ 24 октября 2019

У меня нет опыта работы с AWS, но это все еще база данных Oracle, поэтому вы должны регулярно делать резервные копии rman, включая резервное копирование архивных журналов с помощью опции «delete». Простейшая форма -

rman> backups database plus archivelog delete all input.

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

...