Recriando/movendo o MGMTDB no Grid Infrastructure 12c

Olá pessoal, no mês de maio ministrei uma palestra no DBA Brasil 2.0 e lá falei sobre o Oracle Grid Infrastructure. Uma das coisas que mostrei foi como recriar ou mover o Grid Infrastructure Management Repository, ou MGMTDB.

O procedimento é bastante simples e não requer indisponibilidade nos demais bancos de dados pertencentes ao mesmo cluster. A única indisponibilidade será no próprio MGMTDB.

Pare o recurso ora.crf em cada nó do seu cluster e desabilite-o para que ele não seja iniciado automaticamente:

[root@rac1 ~]# crsctl stop resource ora.crf -init
CRS-2673: Attempting to stop 'ora.crf' on 'rac1'
CRS-2677: Stop of 'ora.crf' on 'rac1' succeeded

[root@rac1 ~]# crsctl modify resource ora.crf -attr ENABLED=0 -init

[root@rac2 ~]# crsctl stop resource ora.crf -init
CRS-2673: Attempting to stop 'ora.crf' on 'rac2'
CRS-2677: Stop of 'ora.crf' on 'rac2' succeeded

[root@rac2 ~]# crsctl modify resource ora.crf -attr ENABLED=0 -init

Caso o seu MGMTDB esteja funcional você conseguirá removê-lo através do DBCA. Se ele tiver algum problema que não o deixa ser iniciado você não conseguirá removê-lo. No meu caso a tablespace UNDOTBS1 estava corrompida, sendo assim não era possível abrir o banco de dados e consequentemente não era possível excluí-lo via DBCA:

[oracle@rac1 ~]$ /u01/app/12.1.0.2/grid/bin/dbca -silent -deleteDatabase -sourceDB -MGMTDB
ORA-01219: database or pluggable database not open: queries allowed on fixed tables or views only

Consultando o alert.log do MGMTDB identifiquei que o problema era a tablespace de Undo:

Thu May 04 22:11:27 2017
Errors in file /u01/app/oracle/diag/rdbms/_mgmtdb/-MGMTDB/trace/-MGMTDB_ora_30436.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 4 cannot be read at this time
ORA-01110: data file 4: '+CONFIG/_MGMTDB/DATAFILE/undotbs1.259.941395093'

Sendo assim optei por remover manualmente o MGMTDB. Utilize o asmcmd para encontrar os datafiles:

ASMCMD> cd +CONFIG/_MGMTDB/
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y 4D39E5F3979F4E3AE0536538A8C0AD9E/
Y 4D3A16FC19245C2AE0536538A8C04036/
Y CONTROLFILE/
Y DATAFILE/
Y FD9AC0F7C36E4438E043B6A9E80A24D5/
Y FD9B43BF6A646F8CE043B6A9E80A2815/
Y ONLINELOG/
Y PARAMETERFILE/
Y TEMPFILE/

Então dentro do diretório do MGMTDB remova todos os seus arquivos:

ASMCMD> rm -rf *
ASMCMD> exit

Remova do arquivo /etc/oratab a linha referente ao MGMTDB:

[oracle@rac1 ~]$ vi /etc/oratab
#remover a linha referente ao MGMTDB

Agora resta remover o recurso MGMTDB do cluster. Como podemos ver o banco de dados ainda faz parte da configuração do cluster:

[root@rac2 ~]# srvctl status mgmtdb
Database is enabled
Database is not running.

Remova o MGMTDB da configuração, desta maneira ele será excluído do Oracle Cluster Registry (OCR):

[oracle@rac1 ~]$ srvctl remove mgmtdb
Remove the database _mgmtdb? (y/[n]) y

Feito tudo isso podemos iniciar a recriação. Ao executar o comando de criação do MGMTDB podemos definir outro diskgroup para armazená-lo. Observe o parâmetro -diskGroupName abaixo:

[oracle@rac1 ~]$ /u01/app/12.1.0.2/grid/bin/dbca -silent -createDatabase -sid -MGMTDB \
-createAsContainerDatabase true -templateName MGMTSeed_Database.dbc -gdbName _mgmtdb \
-storageType ASM -diskGroupName +GIMR -datafileJarLocation \
$ORACLE_HOME/assistants/dbca/templates -characterset AL32UTF8 -autoGeneratePasswords -skipUserTemplateCheck

Registering database with Oracle Grid Infrastructure
5% complete
Copying database files
7% complete
9% complete
16% complete
23% complete
30% complete
41% complete
Creating and starting Oracle instance
43% complete
48% complete
49% complete
50% complete
55% complete
60% complete
61% complete
64% complete
Completing Database Creation
68% complete
79% complete
89% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/_mgmtdb/_mgmtdb0.log" for further details.

Depois que o CDB estiver criado precisamos criar um PDB com o nome do nosso cluster. Se você não sabe o nome do seu cluster execute:

[root@rac1 trace]# cemutlo -n
rac

Em posse do nome do cluster vamos criar o PDB:

[oracle@rac1 ~]$ $ORACLE_HOME/bin/dbca -silent -createPluggableDatabase -sourceDB -MGMTDB \
-pdbName rac -createPDBFrom RMANBACKUP -PDBBackUpfile $ORACLE_HOME/assistants/dbca/templates/mgmtseed_pdb.dfb \
-PDBMetadataFile $ORACLE_HOME/assistants/dbca/templates/mgmtseed_pdb.xml -createAsClone true

Creating Pluggable Database
4% complete
12% complete
21% complete
38% complete
55% complete
85% complete
Completing Pluggable Database Creation
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/_mgmtdb/rac/_mgmtdb0.log" for further details.

A criação do banco de dados está concluída e podemos ver que ele já se encontra presente no cluster novamente:

[oracle@rac1 ~]$ srvctl status MGMTDB
Database is enabled
Instance -MGMTDB is running on node rac1

É necessário mais um passo para a configuração correta do MGMTDB (este comando não retorna nenhuma linha, mas faz parte da configuração):

[oracle@rac1 ~]$ mgmtca

Feito isso é só habilitar novamente o recurso ora.crf e iniciá-lo em cada nó do cluster:

[root@rac1 trace]# crsctl modify res ora.crf -attr ENABLED=1 -init
[root@rac1 trace]# crsctl start res ora.crf -init
CRS-2672: Attempting to start 'ora.crf' on 'rac1'
CRS-2676: Start of 'ora.crf' on 'rac1' succeeded

[root@rac2 ~]# crsctl modify res ora.crf -attr ENABLED=1 -init
[root@rac2 ~]# crsctl start res ora.crf -init
CRS-2672: Attempting to start 'ora.crf' on 'rac2'
CRS-2676: Start of 'ora.crf' on 'rac2' succeeded

Obs: O ora.crf é o recurso do Cluster Health Monitor, é gerenciado pelo daemon ohasd e faz parte dos recursos de inicialização do Oracle Clusterware.

Por hoje é só. Assinem o blog se gostarem do artigo, é uma forma simples de retribuir o trabalho.

Grande abraço e até mais,

Franky