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.
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