O Oracle Managed-Files (OMF) é uma funcionalidade do Oracle Database que simplifica os comandos necessários para adicionar datafiles e logfiles no banco de dados.

A configuração é muito simples, basta alterar o parâmetro db_create_file_dest indicando um diretório padrão onde os novos arquivos devem ser criados. Esse parâmetro é dinâmico, tendo efeito sem a necessidade de reiniciar a instância.

Após o parâmetro ter sido ajustado, os comandos para criação de novos tablespaces ou adição de datafiles em tablespaces existentes não precisarão mais do caminho completo do arquivo no sistema de arquivos do sistema operacional.

Habilitando o OMF

Como citado anteriormente, para ativar o OMF basta definir o parâmetro db_create_file_dest indicando o diretório no qual você deseja que os novos arquivos sejam criados. Neste exemplo, foi informado o próprio diretório padrão utilizado pelo DBCA na criação de um banco de dados.

SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata/' scope=both;

Observe que não é necessário informar o caminho até o nome do banco de dados, o Oracle sempre irá criar ou usar a pasta com o nome do banco de dados. Se você informar o caminho com o nome do banco de dados (/u01/app/oracle/oradata/ORCL), o Oracle irá criar uma nova pasta com o nome do banco de dados dentro desse diretório (/u01/app/oracle/oradata/ORCL/ORCL), o que seria redundante.

Um exemplo de criação de tablespace sem OMF:

SQL> create tablespace tbs_sem_omf
  2  datafile '/u01/app/oracle/oradata/ORCL/datafile/exemplo01.dbf'
  3  size 5m;

Um exemplo de criação de tablespace com OMF:

SQL> create tablespace tbs_com_omf;

Se você tentar criar um tablespace sem a síntaxe apropriada para uma configuração não-OMF, ou seja, sem informar o nome completo para o datafile, receberá o seguinte erro:

SQL> create tablespace tbs_sem_omf
create tablespace tbs_sem_omf
                                       *
ERROR at line 1:
ORA-02236: invalid file name

Exemplo de um alter tablespace sem OMF:

SQL> alter tablespace tbs_sem_omf
  2  add datafile '/u01/app/oracle/oradata/ORCL/datafile/exemplo02.dbf'
  3  size 5m;

Exemplo de um alter tablespace com OMF:

--adiciona um datafile com tamanho padrão de 100MB
SQL> alter tablespace tbs_com_omf add datafile;
--adiciona um datafile com tamanho de 1GB
SQL> alter tablespace tbs_com_omf add datafile size 1g;

Além se simplificar o comando para criar e alterar um tablespace, o OMF também simplifica a instrução necessária para descartar um tablespace, pois o Oracle automaticamente deleta os datafiles do sistema de arquivos do sistema operacional associados ao tablespace descartado.

No caso de uma configuração não-OMF, é necssário incluir a cláusula “including contents and datafiles” no comando “drop tablespace”. Abaixo um exemplo de comando ALTER e dois exemplos de comando DROP que teriam o mesmo resultado.

Exemplo de um drop tablespace sem OMF:

SQL> drop tablespace tbs_sem_omf including contents and datafiles;

Exemplo de um drop tablespace com OMF:

SQL> drop tablespace tbs_com_omf;

Na prática, ambos os comandos podem ser executados com e sem OMF ativado e o Oracle não retornará nenhum erro. Contudo, em um banco de dados sem OMF, o comando DROP sem a cláusula “including contents and datafiles” resulta em arquivos de banco de dados orfãos no sistema de arquivos do sistema operacional.

Exemplo de um novo logfile com OMF:

SQL> alter database add logfile size 50m;

Database altered.

SQL> select member from v$logfile where group#=8;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_8_gqv8k7hl_.log
/u02/fast_recovery_area/ORCL/onlinelog/o1_mf_8_gqv8k7n2_.log

SQL> 

Como demonstrado, o OMF também gerencia a criação de logfiles no banco dados. Neste exemplo, o Oracle utilizou o parâmetro db_create_file_dest para adicionar um novo logfile e uma cópia na fast_recovery_area.

Esse é o comportamento esperado quando temos OMF ativado mas não temos nenhum parâmetro db_create_online_log_dest_<n> configurado. Do contrário, o Oracle utiliza o db_create_online_log_dest_<n> para determinar o nome do arquivo de log que está sendo adicionado.

SQL> alter system set db_create_online_log_dest_3='/u02/fast_recovery_area/redos';

System altered.

SQL> alter database add logfile;

Database altered.

SQL> select member from v$logfile where group#=9;

MEMBER
--------------------------------------------------------------------------------
/u02/fast_recovery_area/redos/ORCL/onlinelog/o1_mf_9_gqv8ympw_.log

No exemplo acima, o parâmetro db_create_online_log_dest_3 foi configurado com o diretório “/u02/fast_recovery_area/redos”, o que instrui o Oracle a criar os novos logfiles nesse diretório.

Observe que com um dos parâmetros db_create_online_log_dest_<n> configurados, o Oracle não utiliza o parâmetro db_create_file_dest para criar o logfile e também não cria uma cópia automática na fast_recovery_area.

Sendo assim, para que o Oracle crie cópias múltiplexadas dos logfiles, é necessário configurar no mínimo dois valores para os parâmetros db_create_online_log_dest_<n> .

SQL> show parameter db_create_online;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_create_online_log_dest_1	     string	 /u01/app/oracle/oradata/ORCL
db_create_online_log_dest_2	     string	 /u02/fast_recovery_area/ORCL
db_create_online_log_dest_3	     string	 /u02/fast_recovery_area/redos
db_create_online_log_dest_4	     string
db_create_online_log_dest_5	     string

SQL> alter database add logfile;

SQL> select member from v$logfile where group#=10;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/ORCL/onlinelog/o1_mf_10_gqv9gq0h_.log
/u02/fast_recovery_area/ORCL/ORCL/onlinelog/o1_mf_10_gqv9gq23_.log
/u02/fast_recovery_area/redos/ORCL/onlinelog/o1_mf_10_gqv9gq40_.log

Neste exemplo, os parâmetros db_create_online_log_dest_1 e db_create_online_log_dest_2 também foram configurados e em seguida um novo logfile criado. Por fim, o resultado da consulta na view v$logfile mostra que três arquivos foram criados para o grupo de redo logfiles 10.

Conclusão

O Oracle Managed-Files pode ser uma ótima alternativa quando queremos padronizar os locais dos datafiles e logfiles no banco de dados, tornando transparente para o DBA os diretórios físicos no sistema operacional de cada datafile no momento de sua criação.

Se o banco de dados utiliza Automatic Storage Management (ASM), os parâmetros só precisam do nome do diskgroup, como no exemplo a seguir que configura o parâmetro db_create_file_dest para o diskgroup “+DATA”.

 SQL> alter system set db_create_file_dest='+DATA';

Nesse post vimos um breve entendimento do funcionamento do OMF e alguns exemplos práticos de seu uso. A Oracle por sua vez possui uma documentação completa sobre essa configuração e está disponível aqui.

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading