달력

122024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

ORA-01034

DB 2008. 6. 4. 19:41

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 

Posted by 알 수 없는 사용자
|