ORA-01034, "ORACLE not available"에 관해
ORACLE DBA 사용자만 데이타베이스를 ACESS할 수 있고 다른 사용자는
SQL*PLUS 등을 통하여 CONNECT 하려고 할 때 다음 에러가 발생할 경우가 있다.
ORA-01034, "ORACLE not available"
ORA-07320, "smsget: shmat error when trying to attach sga."
// *Cause: Unable to attach segment.
// *Action: Check errno. sercose[0] returns segment id.
// Verify segment exists and that permissions are
// correct.
UNIX System V Error 13 /* Permission denied */
or:
ORA-01034, "ORACLE not available"
ORA-07429, "smsgsg: shmget() failed to get segment."
// *Cause: a shared memory segment used for all part of the SGA could
// not be retrieved.
// *Action: Use the system error number in the error message to
determine
// why the segment could not be retrieved. If it does not
exists,
// shutdown the database using the "abort" option, and
then
// restart it. If the get failed because the permissions are
// incorrect, make sure that the ownership of the oracle
// executable is the same as that on the shared memory
segment.
해결 방법
=========
아래에 기술된 permission이나 ownership을 확인해 보아야 한다.
o $ORACLE_HOME/bin directory의 "oracle"과 "orasrv" (orasrv가 없는
경우에는 "tnslsnr"을 확인해 보아야 한다.)의 permission과 ownership
을 check.
아래와 같은 permission으로 setting되어 있어야 한다.( be setuid )
-rwsr-s--x 1 usupport dba 7330847 Oct 20 11:01 oracle*
-rwsr-x--x 1 root dba 62009 Dec 31 1993 orasrv*
이렇게 되어 있지 않은 경우에는 permission을 맞추어 준다.
% chmod 6751 oracle
% chmod 4751 orasrv
o file system이 no set uid로 mount되어 있는지 확인.
oracle home의 mount location은 setuid로 mount되어야 한다.
/etc/mnttab file에서 oracle이 mount되는 directory가 nosuid로
mount되어 있는지 확인해 보아야 한다.
( unix prompt에서 mount command로도 확인가능 )
*** mnttab file은 system에서 dynamic하게 운영하며,
수정은 vfstab file에서 되어야 한다. ***
% mount | grep
예를 들면.
% mount | grep /opt/oracle
% /opt/oracle on /dev/vg00r0e_01/1v01 nosuid, delaylog on
Sun Nov 9 03:18:
결과의 display를 확인해 보면, nosuid로 mount되어 있다.
이렇게 설정되어 있다면, nosuid를 suid로 변경 후 system을
reboot하거나 해당 file system을 다시 mount하여 사용하여야 한다.
1. vfstab file을 수정 ( /dev/dsk/c0t1d0s6는 device name )
2. #umount /dev/dsk/c0t1d0s6
3. #mount /dev/dsk/c0t1d0s6
o oracle user의 "umask"를 확인. umask가 022가 아닌 다른 mask를
가지고 install되었다면 directory와 file permission이 정확하지
않게 된다.
user의 현재 umask를 확인하기 위해서 umask를 unix prompt 실행
% umask
아래와 같은 사항이 display되어야 한다.
022 or 22
o $ORACLE_HOME/bin에 존재하는 실행모듈의 ownership 을 확인.
install된 oracle의 모든 file은 아래게 기술된 file을 제외하고는
모두 oracle user가 owner가 된다.
아래에 기술된 file의 owner는 root이다.
-rw-r--r-- 1 root dba 7332 Jul 12 09:47 gateway
-rwsr-xr-x 1 root dba 3348364 Jun 6 10:44 oomgr*
-rwsr-xr-x 1 root dba 246 Jun 6 10:44 oomgrf*
-rwsr-s--x 1 root dba 62009 Dec 31 1993 orasrv*
-rwsr-xr-x 1 root dba 6478 Jun 28 08:59 osh*
unix의 chown command를 사용하여 owner를 수정하거나 re-install
작업을 진행할 수도 있다.
% chown root osh
o 모든 oracle file이 dba group으로 되어 있는지 확인.
그렇지 않은 경우에는 chgrp command를 사용하여 group을 변경.
% chgrp dba *
위의 명령은 현재 directory의 모든 file에 대하여 group을 dba로 변경
한다.
만약, directory의 permission이 맞지 않는 경우라면, 잘못된 instal로
인한 광범위한 permission 문제일 수 있다.
o ORACLE_HOME의 path에 존재하는 모든 directory가 755 mask로 setting
되어 있는지 확인.
예를 들면, ORACLE_HOME이 /usr/oracle/714이면, /usr /usr/oracle
/usr/oracle/714 directory가 모두 755로 mask되어 있어야 한다.
이것은 해당 directory의 permission이 아래와 같다는 것을 의미한다.
drwxr-xr-x 35 root sys 1024 Oct 8 18:27 usr
이렇지 않은 경우에는 chmod command를 사용하여 수정하여 준다.
% chmod 755
'DB' 카테고리의 다른 글
informix 접속 시 user/password 에러로 인한 conection fail (0) | 2008.06.17 |
---|---|
데이터 사전 정보 (0) | 2008.06.04 |
[QUERY] oracle 유저정보조회 및 패스워드 변경 (0) | 2008.06.04 |
[QUERY] oracle tablespace 조회 (0) | 2008.05.30 |
[QUERY] ORACLE 사용자 생성 (0) | 2008.05.30 |