背景:
多台Linux服務器需要安裝Oracle客戶端,實現和Oracle數據庫連接做業務處理。
安裝完第一台后,直接將安裝的目錄壓縮並復制到其他幾台機器上,啟動sqlplus連接數據庫時,一直提示輸入用戶名和密碼。
[xxxxxxx]$ sqlplus user/pass@orcl SQL*Plus: Release 11.2.0.4.0 Production on Fri Feb 5 10:56:38 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-12154: TNS:could not resolve the connect identifier specified Enter user-name: user Enter password: ERROR: ORA-12545: Connect failed because target host or object does not exist Enter user-name: user Enter password:
使用strace跟蹤發現有錯誤ORA-21561: OID generation failed輸出。
strace sqlplus user/pass@orcl
close(5) = 0 write(1, "ERROR:\n", 7ERROR: ) = 7 write(1, "ORA-21561: OID generation failed"..., 33ORA-21561: OID generation failed ) = 33 write(1, "\n", 1 ) = 1 write(1, "\n", 1 ) = 1 write(1, "Enter user-name: ", 17Enter user-name: ) = 17 fstat(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feaa51c9000 read(0, ^C <unfinished ...>
出現錯誤ORA-21561: OID generation failed的原因是主機名和hosts文件中的主機名不一致導致。
解決方法:
使用命令hostname 查詢機器的主機名
[xxxxx]$ hostname billingserver001
修改/etc/hosts文件,將主機名加入到hosts文件中。
[xxxxx]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.2 billingserver001
重新用sqlplus user/pass@orcl連接數據庫,連接成功。
[xxxxx]$ sqlplus user/pass@orcl SQL*Plus: Release 11.2.0.4.0 Production on Fri Feb 5 11:05:57 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>
Done.