вторник, 29 декабря 2009 г.

Однажды в студеную зимнюю пору...

Недавно довелось мне столкнуться с одной занятной проблемой.

Собственно, нельзя сказать, чтобы я сталкивался с ней впервые, однако очень уж давно это было, уже и не помню, что, собственно происходило. Так, смутное воспоминание.

В двух словах суть дела следующая. После повреждения файловой системы и ее восстановления на Солярис, оракловые сервисы стали запускаться не полностью.

Стартовало все. Кроме листенера. С такой вот ошибкой:

TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
System parameter file is /data/OraHome1/app/oracle/product/10.2.0/network/admin/listener.ora
Log messages written to /data/OraHome1/app/oracle/product/10.2.0/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=pegasus.yvoinov.com)(PORT=1521)))
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
TNS-12546: TNS:permission denied
TNS-12560: TNS:protocol adapter error
TNS-00516: Permission denied
Solaris Error: 13: Permission denied

Listener failed to start. See the error message(s) above...

Никакие перезапуски не помогали. Permission denied - и все тут.

Что делает правильный айтишник, наткнувшись на проблему? Правильно, открывает мануал. Читаю Oracle Error Messages and Codes - и вижу фигу. В вольном переводе - "Получите необходимые права и повторите операцию". И все.

"Куда теперь, Джеймс?"

Что делает правильный оракловый админ дальше? Правильно, включает трассировку. Уровня ADMIN.

Смотрим в трассировку и видим - ругань происходит при запуске листенера на IPC в связи с отсутствием прав владельца софта Oracle на файлик sEXTPROC0 в /var/tmp/.oracle. Владелец root вместо oracle:

root @ pegasus /var/tmp # ls -al
total 6
drwxrwxrwt 3 root sys 3 Dec 25 03:02 .
drwxr-xr-x 43 root sys 43 Nov 21 13:36 ..
drwxrwxrwt 2 oracle dba 4 Dec 25 03:02 .oracle
root @ pegasus /var/tmp # cd .oracle
root @ pegasus /var/tmp/.oracle # ls -al
total 4
drwxrwxrwt 2 oracle dba 4 Dec 25 03:02 .
drwxrwxrwt 3 root sys 3 Dec 25 03:02 ..
srwxrwxrwx 1 oracle dba 0 Dec 25 03:02 s#2729.1
srwxrwxrwx 1 root root 0 Dec 25 03:02 sEXTPROC0

"Ага! - сказали мужики."

Останавливаем все сервисы, удаляем все файлы в директории /var/tmp/.oracle:

root @ pegasus /var/tmp # rm -Rf .oracle

Вуаля:

oracle @ pegasus /data/OraHome1/app/oracle/product/10.2.0/network/admin $ lsnrctl start

LSNRCTL for Solaris: Version 10.2.0.4.0 - Production on 25-ДЕК-2009 03:00:56

Copyright (c) 1991, 2007, Oracle. All rights reserved.

Starting /data/OraHome1/app/oracle/product/10.2.0/bin/tnslsnr: please wait...

TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
System parameter file is /data/OraHome1/app/oracle/product/10.2.0/network/admin/listener.ora
Log messages written to /data/OraHome1/app/oracle/product/10.2.0/network/log/listener.log
Trace information written to /data/OraHome1/app/oracle/product/10.2.0/network/trace/listener.trc
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=pegasus.yvoinov.com)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=pegasus.yvoinov.com)(PORT=1521)(QUEUESIZE=10)(SEND_BUF_SIZE=65536)(RECV_BUF_SIZE=65536)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Solaris: Version 10.2.0.4.0 - Production
Start Date 25-ДЕК-2009 03:00:56
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level admin
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /data/OraHome1/app/oracle/product/10.2.0/network/admin/listener.ora
Listener Log File /data/OraHome1/app/oracle/product/10.2.0/network/log/listener.log
Listener Trace File /data/OraHome1/app/oracle/product/10.2.0/network/trace/listener.trc
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=pegasus.yvoinov.com)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "SUN10.yvoinov.com" has 1 instance(s).
Instance "SUN10", status UNKNOWN, has 1 handler(s) for this service...
Service "SUN10_XPT.yvoinov.com" has 1 instance(s).
Instance "SUN10", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

"Реконструкция завершена."