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