File Group num Flex Disk Group

Olá galera, o objetivo aqui é conhecermos um pouco mais sobre o Flex Disk Group. Vamos ver aqui o que é um File Group.

Num Flex Disk Group podemos separar nossos bancos de dados, sejam eles PDBs, CDBs ou non-CDBs, em File Group diferentes.

File Group

Cada File Group pertence a um, e somente um, Disk Group.

Para demonstrar alguns exemplos vamos recriar o PDB pdb1 somente no Disk Group FLEX:

SQL> alter pluggable pdb1 database close;

Pluggable database altered.

SQL> drop pluggable database pdb1 including datafiles;

Pluggable database dropped.

SQL> alter session set db_create_file_dest='+FLEX';

Session altered.

SQL> create pluggable database pdb1 admin user pdbadmin identified by oracle default tablespace pdb1tbs datafile size 200M autoextend off storage (maxsize 800M);

Pluggable database created.

SQL> alter pluggable database pdb1 open;

Pluggable database altered.

Agora consulto para ver onde os arquivos do PDB pdb1 foram criados:

SQL> select c.name container, d.file_name, bytes/1024/1024 size_mb 
from v$containers c, cdb_data_files d
where c.con_id=d.con_id and c.name='PDB1';

CONTAINER  FILE_NAME									       								   SIZE_MB
---------- -------------------------------------------------------------------------------- ----------
PDB1	   +FLEX/ORCL/56C143A8D6DA159EE0536538A8C0E7F3/DATAFILE/system.258.952034417		       210
PDB1	   +FLEX/ORCL/56C143A8D6DA159EE0536538A8C0E7F3/DATAFILE/sysaux.257.952034417		       165
PDB1	   +FLEX/ORCL/56C143A8D6DA159EE0536538A8C0E7F3/DATAFILE/undotbs1.256.952034417		       135
PDB1	   +FLEX/ORCL/56C143A8D6DA159EE0536538A8C0E7F3/DATAFILE/pdb1tbs.260.952034445		       200

4 rows selected.

Vamos criar um File Group, mas primeiro vamos ver a situação atual do Disk Group FLEX:

SQL> select filegroup_number, name filegroup, client_name, guid from v$asm_filegroup;

FILEGROUP_NUMBER FILEGROUP			            CLIENT_NAME	         GUID
---------------- ------------------------------ -------------------- --------------------------------
	           0 DEFAULT_FILEGROUP
	           1 PDB1				            PDB1		         56C143A8D6DA159EE0536538A8C0E7F3

Vejam que já há um File Group DEFAULT_FILEGROUP e outro com o mesmo nome do nosso PDB: PDB1.

Vou criar outro PDB para verificarmos o comportamento:

SQL> alter session set db_create_file_dest='+FLEX';

Session altered.

SQL> create pluggable database pdb2 admin user pdbadmin identified by oracle default tablespace pdb2tbs datafile size 2M autoextend off storage (maxsize 800M);

Pluggable database created.

SQL> alter pluggable database pdb2 open;

Pluggable database altered.

Confirmamos que o PDB pdb2 está armazenado totalmente no Disk Group FLEX:

SQL> select c.name container, d.file_name, bytes/1024/1024 size_mb 
from v$containers c, cdb_data_files d
where c.con_id=d.con_id and c.name='PDB2';

CONTAINER  FILE_NAME									       								   SIZE_MB
---------- -------------------------------------------------------------------------------- ----------
PDB2	   +FLEX/ORCL/56C143A8D6E4159EE0536538A8C0E7F3/DATAFILE/system.261.952035801		       210
PDB2	   +FLEX/ORCL/56C143A8D6E4159EE0536538A8C0E7F3/DATAFILE/sysaux.262.952035801		       165
PDB2	   +FLEX/ORCL/56C143A8D6E4159EE0536538A8C0E7F3/DATAFILE/undotbs1.263.952035801		       135
PDB2	   +FLEX/ORCL/56C143A8D6E4159EE0536538A8C0E7F3/DATAFILE/pdb2tbs.265.952035821		         2

4 rows selected.

Novamente verifico os File Groups existentes:

SQL> select filegroup_number, name filegroup, client_name, guid from v$asm_filegroup

FILEGROUP_NUMBER FILEGROUP						CLIENT_NAME	     	 GUID
---------------- ------------------------------ -------------------- --------------------------------
	           0 DEFAULT_FILEGROUP
	           1 PDB1							PDB1		     	 56C143A8D6DA159EE0536538A8C0E7F3
	           2 PDB2							PDB2		     	 56C143A8D6E4159EE0536538A8C0E7F3

2 rows selected.

Confirmo assim que para cada PDB criado, um File Group com o mesmo nome também é criado.

Agora vamos ver como criar um novo File Group. Para isso efetuamos o seguinte comando no SQL*Plus da instância ASM:

SQL> alter diskgroup FLEX add filegroup FILEGROUP_PDB1 database PDB1;

Diskgroup altered.

Vejam que informei o nome do File Group e também o banco de dados que nele será armazenado.

Vamos ver como ficou agora:

SQL> select filegroup_number, name filegroup, client_name, guid from v$asm_filegroup

FILEGROUP_NUMBER FILEGROUP					 	CLIENT_NAME	         GUID
---------------- ------------------------------ -------------------- --------------------------------
	       0 DEFAULT_FILEGROUP
	       1 PDB1				    			PDB1		     	 56C143A8D6DA159EE0536538A8C0E7F3
	       2 PDB2				    			PDB2		     	 56C143A8D6E4159EE0536538A8C0E7F3
	       3 FILEGROUP_PDB1 					PDB1

4 rows selected.

Vejam que ao tentar remover o File Group PDB1 ocorre um erro informando que há arquivos dentro dele:

SQL> alter diskgroup FLEX drop filegroup pdb1;
alter diskgroup FLEX drop filegroup pdb1
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15387: existing files are associated with file group 'PDB1'

Então vamos fazer o seguinte… Vou criar um novo File Group e depois um novo PDB e então armazená-lo neste File Group:

SQL> alter diskgroup FLEX add filegroup FILEGROUP_PDB3 database PDB3;

Diskgroup altered.

Agora vou criar o PDB pdb3:

SQL> alter session set db_create_file_dest='+FLEX';

Session altered.

SQL> create pluggable database pdb3 admin user pdbadmin identified by oracle default tablespace pdb3tbs datafile size 2M autoextend off storage (maxsize 800M);

Pluggable database created.

SQL> alter pluggable database pdb3 open;

Pluggable database altered.

Vejam que desta vez o PDB criado foi armazenado corretamente no File Group desejado e o ASM não criou um File Group padrão com o nome do PDB:

SQL> select filegroup_number, name filegroup, client_name, guid from v$asm_filegroup;

FILEGROUP_NUMBER FILEGROUP						CLIENT_NAME	     	 GUID
---------------- ------------------------------ -------------------- --------------------------------
	       0 DEFAULT_FILEGROUP
	       1 PDB1								PDB1		     	 56C143A8D6DA159EE0536538A8C0E7F3
	       2 PDB2								PDB2		     	 56C143A8D6E4159EE0536538A8C0E7F3
	       3 FILEGROUP_PDB1 					PDB1	 
	       4 FILEGROUP_PDB3 					PDB3		     	 56C143A8D6E7159EE0536538A8C0E7F3

5 rows selected.

Concluindo… Se você quer usar Flex Disk Groups, lembre-se de criar primeiro o File Group e depois criar seus bancos de dados.

Fiz alguns testes movendo datafiles de um Disk Group para outro, mas até então não descobri se há uma maneira de mover um ASM File para outro File Group. A documentação a respeito do Flex Disk Group ainda é bem precária.

Vou fazer ainda mais alguns artigos sobre este recurso do Oracle 12cR2, então fiquem ligados.

Abraços,

Franky