現象:Exadata刷機之后grid/oracle用戶的環境變量是沒有設置的,需要手工進行設置,設置完成后發現grid用戶執行報錯ORA-12547:
[grid@dbm0dbadm01 ~]$ sqlplus / as sysasm
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Nov 11 09:09:37 2020
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
ERROR:
ORA-12547: TNS:lost contact
Enter user-name: ^C
使用oerr查看錯誤描述:
[grid@dbm0dbadm01 ~]$ oerr ora 12547
12547, 00000, "TNS:lost contact"
// *Cause: Partner has unexpectedly gone away, usually during process
// startup.
// *Action: Investigate partner application for abnormal termination. On an
// Interchange, this can happen if the machine is overloaded.
這個oerr的描述在這里有些迷惑性,我們知道實際新刷機環境也沒有什么負載,根據經驗查看基本信息:
[grid@dbm0dbadm01 ~]$ ps -ef|grep pmon
grid 138569 1 0 Nov06 ? 00:00:21 asm_pmon_+ASM1
oracle 148750 1 0 Nov06 ? 00:00:47 ora_pmon_cdb1db11
grid 219063 217084 0 09:09 pts/0 00:00:00 grep --color=auto pmon
[grid@dbm0dbadm01 ~]$ echo $ORACLE_SID
+ASM1
[grid@dbm0dbadm01 ~]$ env|grep ORA
ORACLE_SID=+ASM1
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/19.0.0.0/grid/
[grid@dbm0dbadm01 ~]$ env|grep PATH
PATH=/u01/app/19.0.0.0/grid//bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
PYTHONPATH=:/opt/oracle.cellos/lib/python
確認進程ok,環境變量看起來是最后多了一個斜杠,修正:
[grid@dbm0dbadm01 ~]$ vi ~/.bash_profile
去掉ORACLE_HOME變量值最后多余的/,然后再次登錄,檢查ok后重新執行可以成功。
[grid@dbm0dbadm01 ~]$ env|grep ORA
ORACLE_SID=+ASM1
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/19.0.0.0/grid
[grid@dbm0dbadm01 ~]$ env|grep PATH
PATH=/u01/app/19.0.0.0/grid/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
PYTHONPATH=:/opt/oracle.cellos/lib/python
[grid@dbm0dbadm01 ~]$ sqlplus / as sysasm
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Nov 11 09:13:04 2020
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
SQL>
之前其實遇到過類似問題,還對比了不同版本下有無斜杠是否都會發生問題,確實證明在某些版本下多寫斜杠不會有問題。
總結:這個案例固然非常簡單且初級,但也有警醒的意義:千萬不要寄希望於某些特定版本是否可以智能識別處理,保持細心,按最佳規范來做事。