This post is also available in:
Ao tentar iniciar um banco de dados Oracle a partir de uma Oracle Home copiada manualmente com cp -pR, o seguinte erro pode aparecer:
$ srvctl start database -d mydb
PRCR-1079 : Failed to start resource ora.mydb.db
CRS-5017: The resource action "ora.mydb.db start" encountered the following error:
ORA-12777: A non-continuable error encountered. Check the error stack for
additional information [ksm_check_ob_paths:1], [ORACLE_BASE], [], [].
ORA-08275: Environment variable unset
CRS-2674: Start of 'ora.mydb.db' on 'node1' failedO erro ORA-12777 é genérico — significa “erro não-continuável”. Mas a pista real está na linha seguinte: ORA-08275: Environment variable unset referenciando ORACLE_BASE. Isso aponta diretamente para um arquivo específico dentro do Oracle Home: o orabasetab.
Neste artigo, vou explicar por que esse erro ocorre ao copiar um Oracle Home, o que é o orabasetab, como corrigir e quais outros arquivos podem precisar de ajuste.
💡 Na prática: Encontrei esse erro ao tentar aplicar o RU 19.26 em um banco de dados. Após diversas tentativas falharem, copiei a Oracle Home 19.25 para um novo diretório 19.26 com
cp -pR, apliquei o patch e tentei subir o banco na nova home. O banco não iniciou porque oorabasetabainda apontava para a home antiga.
Por Que o Erro Ocorre
O Oracle Database precisa saber onde está o Oracle Base — o diretório raiz para logs, audit, diag e outros arquivos de runtime. Essa informação fica registrada no arquivo:
$ORACLE_HOME/install/orabasetabO que é o orabasetab
O orabasetab é um arquivo de texto que mapeia o Oracle Home ao Oracle Base e ao Home Name no inventário. Formato:
/u01/app/oracle/product/19.25.0.0/dbhome_1:/u01/app/oracle:Orasidb19c_home1:N:| Campo | Valor | Significado |
|---|---|---|
| 1 | /u01/app/.../dbhome_1 | Caminho do Oracle Home |
| 2 | /u01/app/oracle | Oracle Base |
| 3 | Orasidb19c_home1 | Nome da home no inventário |
| 4 | N | Flag de leitura (N = normal) |
O que acontece quando você copia a home
Quando você faz cp -pR de uma Oracle Home para outro diretório, todos os arquivos são copiados com o conteúdo original — incluindo o orabasetab. O resultado:
- O novo diretório é
/u01/app/oracle/product/19.26.0.0/dbhome_1 - Mas o
orabasetabdentro dele ainda diz:19.25.0.0/dbhome_1 - O Oracle lê esse arquivo, não encontra o caminho correto e falha com ORA-12777 + ORA-08275
Diagnóstico
1. Verificar o erro completo
A combinação de erros que identifica este cenário:
ORA-12777: ... [ksm_check_ob_paths:1], [ORACLE_BASE], [], []
ORA-08275: Environment variable unsetSe o erro ORA-12777 tiver outros parâmetros (ex: [ksbcti_child:8], [LOG_ARCHIVE_DEST]), a causa é outra — este artigo não se aplica.
2. Verificar o orabasetab
bash
cat $ORACLE_HOME/install/orabasetabSe o primeiro campo não corresponder ao $ORACLE_HOME atual, essa é a causa.
Exemplo do problema:
bash
# ORACLE_HOME atual
echo $ORACLE_HOME
# /u01/app/oracle/product/19.26.0.0/dbhome_1
# Mas o orabasetab diz:
cat $ORACLE_HOME/install/orabasetab
# /u01/app/oracle/product/19.25.0.0/dbhome_1:/u01/app/oracle:Orasidb19c_home1:N:
# ^^^^^^ versão antiga!3. Verificar se a home está no inventário
bash
cat /etc/oraInst.loc
# inventory_loc=/u01/app/oraInventory
cat /u01/app/oraInventory/ContentsXML/inventory.xml | grep -i "HOME NAME"Se a nova home não estiver listada no inventário, ela precisa ser registrada.
Solução
Passo 1 — Registrar a nova home no inventário
Use o runInstaller -attachhome para registrar a home copiada no Oracle Inventory:
bash
$ORACLE_HOME/oui/bin/runInstaller -attachhome \
ORACLE_HOME=/u01/app/oracle/product/19.26.0.0/dbhome_1 \
ORACLE_HOME_NAME=OraDB19Home_1926Nota: Escolha um
ORACLE_HOME_NAMEúnico que não conflite com homes existentes no inventário.
Esse comando atualiza automaticamente:
- O Oracle Inventory (
inventory.xml) - O
orabasetabdentro da nova home
Passo 2 — Verificar o orabasetab atualizado
bash
cat /u01/app/oracle/product/19.26.0.0/dbhome_1/install/orabasetabResultado esperado:
/u01/app/oracle/product/19.26.0.0/dbhome_1:/u01/app/oracle:OraDB19Home_1926:N:O primeiro campo agora aponta para a home correta.
Passo 3 — Iniciar o banco de dados
bash
srvctl start database -d mydbPasso 4 — Validar
bash
# Verificar processos
ps -ef | grep pmon
# Verificar pelo srvctl
srvctl status database -d mydbO Que Mais Pode Estar Errado Após cp -pR
Copiar uma Oracle Home com cp -pR é uma prática não recomendada pela Oracle. Além do orabasetab, outros arquivos podem conter caminhos hardcoded da home antiga:
| Arquivo | O que verificar |
|---|---|
$ORACLE_HOME/install/orabasetab | Caminho do Oracle Home (corrigido acima) |
$ORACLE_HOME/network/admin/listener.ora | Parâmetro ORACLE_HOME no SID_LIST |
$ORACLE_HOME/network/admin/tnsnames.ora | Caminhos se houver referências locais |
$ORACLE_HOME/network/admin/sqlnet.ora | Paths de wallet, logs |
/etc/oratab | Entrada do banco apontando para a home correta |
$ORACLE_HOME/dbs/init<SID>.ora / spfile | Parâmetros com caminhos absolutos |
$ORACLE_HOME/install/oraInst.loc | Referência ao inventário |
Verificação rápida:
bash
# Procurar referências à home antiga em todos os configs
grep -r "19.25.0.0" $ORACLE_HOME/network/admin/ <strong>2</strong>>/dev/null
grep -r "19.25.0.0" $ORACLE_HOME/dbs/ <strong>2</strong>>/dev/null
grep "19.25.0.0" /etc/oratabAjuste qualquer referência encontrada para o novo caminho.
Outras Causas Comuns do ORA-12777
O ORA-12777 é um erro guarda-chuva que pode ter diversas causas. Se o seu cenário não envolve cópia de Oracle Home, verifique:
ORACLE_BASEnão definido no ambiente — exporte no.bash_profile- Permissões incorretas no Oracle Home ou Oracle Base —
chown -R oracle:oinstall - Oracle Home corrompido — reclonar ou reinstalar
- Problemas no CRS/Grid Infrastructure — verificar logs do
ohasd_oraagent - Variáveis de ambiente inconsistentes — comparar
envcom o esperado
O log detalhado está sempre em:
bash
cat /u01/app/oracle/diag/crs/<hostname>/crs/trace/ohasd_oraagent_oracle.trcMétodo Correto para Clonar um Oracle Home
Em vez de cp -pR, use o método suportado pela Oracle:
bash
# 1. Copiar os arquivos
cp -pR /u01/app/oracle/product/19.25.0.0/dbhome_1/* /u01/app/oracle/product/19.26.0.0/dbhome_1/
# 2. Registrar no inventário (OBRIGATÓRIO)
cd /u01/app/oracle/product/19.26.0.0/dbhome_1/oui/bin
./runInstaller -clone -waitForCompletion \
ORACLE_HOME=/u01/app/oracle/product/19.26.0.0/dbhome_1 \
ORACLE_HOME_NAME=OraDB19Home_1926 \
ORACLE_BASE=/u01/app/oracle
# 3. Executar root.sh
sudo /u01/app/oracle/product/19.26.0.0/dbhome_1/root.shO -clone cuida de atualizar o orabasetab, o inventário, os paths internos e executar os relinks necessários.
Checklist Rápido de Diagnóstico
bash
# 1. O erro contém [ORACLE_BASE] e ORA-08275?
# Se sim → problema no orabasetab
# 2. Verificar orabasetab
cat $ORACLE_HOME/install/orabasetab
# 3. O primeiro campo corresponde ao $ORACLE_HOME?
echo $ORACLE_HOME
# 4. A home está no inventário?
cat /u01/app/oraInventory/ContentsXML/inventory.xml | grep -i "home name"
# 5. Procurar caminhos antigos
grep -r "VERSAO_ANTIGA" $ORACLE_HOME/network/admin/ /etc/oratab $ORACLE_HOME/dbs/Conclusão
O erro ORA-12777 com ORA-08275: Environment variable unset [ORACLE_BASE] é causado por um orabasetab desatualizado — quase sempre resultado de copiar uma Oracle Home com cp -pR sem registrar a nova home no inventário.
O diagnóstico é direto:
- Verificar se o erro contém
[ORACLE_BASE]+ORA-08275 - Comparar o
orabasetabcom o$ORACLE_HOMEatual - Registrar a home no inventário com
runInstaller -attachhome - Verificar que o
orabasetabfoi atualizado - Revisar outros arquivos com caminhos da home antiga (listener.ora, oratab, etc.)
- Iniciar o banco e validar
Para futuros clones de Oracle Home, use runInstaller -clone em vez de cp -pR — é o método suportado e evita esse tipo de problema.
Referências:
