Recentemente ao realizar um atividade cotidiana de organização, um simples processo de movimentação das tabelas AUD$ e $FGA_LOG. Movendo da tablespace SYSTEM para uma nova tablespace (AUDIT_TBS), usando a procedure DBMS_AUDIT_MGMT (disponibilizada a partir da versão 11gR2 mais informações sobre o processo de move da AUD$ e FGA_LOG), recebi um erro ORA-46267 que faz referencia a falta de espaço. O erro ocorreu mesmo a tablespace sendo criada com mais do que o dobro de espaço para armazenar as tabelas AUD$ e $FGA_LOG.
SQL> create tablespace audit_tbs force logging datafile '/u01/app/oracle/oradata/lamimtst/audit_tbs01.dbf' size 100m autoextend on next 100m maxsize 10G; Tablespace created. SQL> SELECT table_name, tablespace_name FROM dba_tables WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name; 2 TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ AUD$ SYSTEM FGA_LOG$ SYSTEM SQL> col segment_name for a60 select segment_name,bytes/1024/1024 size_in_megabytes from dba_segments where segment_name in ('AUD$','FGA_LOG$'); SQL> SEGMENT_NAME SIZE_IN_MEGABYTES ------------------------------------------------------------ ----------------- AUD$ 2811 FGA_LOG$ ,0625 SQL> SQL> BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,--this moves table AUD$ audit_trail_location_value => 'AUDIT_TBS'); END; / 2 3 4 5 6 BEGIN * ERROR at line 1: ORA-46267: Insufficient space in 'AUDIT_TBS' tablespace, cannot complete operation ORA-06512: em "SYS.DBMS_AUDIT_MGMT", line 1659 ORA-06512: em line 2
Mais uma vez, vale destacar que a tabela AUD$ que estava sendo movida, tinha um tamanho de 2811M e a tablespace AUDIT_TBS foi criada com size inicial de 100M, autoextend de 100M e maxsize de 10G (conforme pode ser verificado acima). Desta forma, a tablespace criada tem espaço suficiente para acomodar a tabela e ainda assim tive um erro refrente a espaço insuficiente.
O erro ocorre devido a tablespace criada (independente de ter sido criada com extend on ou não) ter um size inicial menor do que o tamanho da AUD$. Neste caso, nossa AUD$ está com 2811M, enquanto o tamanho inicial da tablespace AUDIT_TBS.
A solução para esse problema, foi alterar o tamanho inicial da tablespace AUDIT_TBS. No exemplo abaixo, alterei o tamanho inicial para 5G e posteriormente executei o processo de movimentação da AUD$ com sucesso.
16:24:34 SQL> 16:24:34 SQL> 16:43:18 SQL> alter database datafile '/u01/app/oracle/oradata/lamimtst/audit_tbs01.dbf' resize 5g; Database altered. 16:46:53 SQL> BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,--this moves table AUD$ audit_trail_location_value => 'AUDIT_TBS'); END; /16:46:58 2 16:46:58 3 16:46:58 4 16:46:58 5 16:46:58 6 PL/SQL procedure successfully completed. 16:48:51 SQL> 16:48:51 SQL> BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,--this moves table FGA_LOG$ audit_trail_location_value => 'AUDIT_TBS'); END; /16:48:56 2 16:48:56 3 16:48:56 4 16:48:56 5 16:48:56 6 PL/SQL procedure successfully completed. 16:49:06 SQL> SELECT table_name, tablespace_name FROM dba_tables WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name;16:50:44 2 TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ AUD$ AUDIT_TBS FGA_LOG$ AUDIT_TBS 16:50:45 SQL> select segment_name,bytes/1024/1024 size_in_megabytes from dba_segments where segment_name in ('AUD$','FGA_LOG$'); SEGMENT_NAME SIZE_IN_MEGABYTES ------------------------------------------------------------ ----------------- AUD$ 8319 FGA_LOG$ ,0625 16:50:50 SQL>
Espero que este artigo possa ajuda-los. Um abraço e até o próximo artigo.
Comentários
Postar um comentário