ORA-12547: TNS: lostcontact error handling

Source: Internet
Author: User

ORA-12547: TNS: lostcontact error handling

Nothing left to worry about. Configure the oracle database to automatically restart with the system. Check the information and find that you need to configure/etc/oratab and rc. local. The $ ORACLE_HOME/bin/dbstart file is used to configure oracle to start with the system. Paste the content of dbstart for easy viewing.

#!/bin/sh## $Id: dbstart.sh 22-may-2008.05:05:45 arogers Exp $ # Copyright (c) 1991, 2008, Oracle. All rights reserved.  ##################################### # usage: dbstart $ORACLE_HOME## This script is used to start ORACLE from /etc/rc(.local).# It should ONLY be executed as part of the system boot procedure.## This script will start all databases listed in the oratab file# whose third field is a "Y".  If the third field is set to "Y" and# there is no ORACLE_SID for an entry (the first field is a *),# then this script will ignore that entry.## This script requires that ASM ORACLE_SID's start with a +, and # that non-ASM instance ORACLE_SID's do not start with a +.## If ASM instances are to be started with this script, it cannot# be used inside an rc*.d directory, and should be invoked from# rc.local only. Otherwise, the CSS service may not be available# yet, and this script will block init from completing the boot# cycle.## If you want dbstart to auto-start a single-instance database that uses# an ASM server that is auto-started by CRS (this is the default behavior# for an ASM cluster), you must change the database's ORATAB entry to use# a third field of "W" and the ASM's ORATAB entry to use a third field of "N".# These values specify that dbstart auto-starts the database only after# the ASM instance is up and running.## Note:# Use ORACLE_TRACE=T for tracing this script.## The progress log for each instance bringup plus Error and Warning message[s]# are logged in file $ORACLE_HOME/startup.log. The error messages related to # instance bringup are also logged to syslog (system log module).# The Listener log is located at $ORACLE_HOME_LISTNER/listener.log# # On all UNIX platforms except SOLARIS# ORATAB=/etc/oratab## To configure, update ORATAB with Instances that need to be started up#    Entries are of the form:#    $ORACLE_SID:$ORACLE_HOME:<N|Y|W>:#    An example entry:#    main:/usr/lib/oracle/emagent_10g:Y## Overall algorithm:# 1) Bring up all ASM instances with 'Y' entry in status field in oratab entry# 2) Bring up all Database instances with 'Y' entry in status field in#    oratab entry# 3) If there are Database instances with 'W' entry in status field#    then#      iterate over all ASM instances (irrespective of 'Y' or 'N') AND#      wait for all of them to be started#    fi# 4) Bring up all Database instances with 'W' entry in status field in#    oratab entry######################################LOGMSG="logger -puser.alert -s "trap 'exit' 1 2 3# for script tracingcase $ORACLE_TRACE in  T) set -x ;;esac    # Set path if path not set (if called from /etc/rc)SAVE_PATH=/bin:/usr/bin:/etc:${PATH} ; export PATHSAVE_LLP=$LD_LIBRARY_PATH# First argument is used to bring up Oracle Net ListenerORACLE_HOME_LISTNER=$1if [ ! $ORACLE_HOME_LISTNER ] ; then  echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"  echo "Usage: $0 ORACLE_HOME"else  LOG=$ORACLE_HOME_LISTNER/listener.log  # Set the ORACLE_HOME for the Oracle Net Listener, it gets reset to  # a different ORACLE_HOME for each entry in the oratab.  export ORACLE_HOME=$ORACLE_HOME_LISTNER  # Start Oracle Net Listener  if [ -x $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then    echo "$0: Starting Oracle Net Listener" >> $LOG 2>&1    $ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG 2>&1 &    VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cut -d' ' -f5 | cut -d'.' -f1`    export VER10LIST  else    echo "Failed to auto-start Oracle Net Listener using $ORACLE_HOME_LISTNER/bin/tnslsnr"  fifi# Set this in accordance with the platformORATAB=/etc/oratabif [ ! $ORATAB ] ; then  echo "$ORATAB not found"  exit 1;fi# Checks Version Mismatch between Listener and Database Instance.# A version 10 listener is required for an Oracle Database 10g database.# Previous versions of the listener are not supported for use with an Oracle# Database 10g database. However, it is possible to use a version 10 listener# with previous versions of the Oracle database.checkversionmismatch() {  if [ $VER10LIST ] ; then    VER10INST=`sqlplus -V | grep "Release " | cut -d' ' -f3 | cut -d'.' -f1`    if [ $VER10LIST -lt $VER10INST ] ; then      $LOGMSG "Listener version $VER10LIST NOT supported with Database version $VER10INST"      $LOGMSG "Restart Oracle Net Listener using an alternate ORACLE_HOME_LISTNER:"      $LOGMSG "lsnrctl start"    fi  fi}# Starts a Database Instancestartinst() {  # Called programs use same database ID  export ORACLE_SID  # Put $ORACLE_HOME/bin into PATH and export.  PATH=$ORACLE_HOME/bin:${SAVE_PATH} ; export PATH  # add for bug # 652997  LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${SAVE_LLP} ; export LD_LIBRARY_PATH  PFILE=${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora  SPFILE=${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora  SPFILE1=${ORACLE_HOME}/dbs/spfile.ora  echo ""  echo "$0: Starting up database \"$ORACLE_SID\""  date  echo ""  checkversionmismatch  # See if it is a V6 or V7 database  VERSION=undef  if [ -f $ORACLE_HOME/bin/sqldba ] ; then    SQLDBA=sqldba    VERSION=`$ORACLE_HOME/bin/sqldba command=exit | awk '      /SQL\*DBA: (Release|Version)/ {split($3, V, ".") ;      print V[1]}'`    case $VERSION in      "6") ;;      *) VERSION="internal" ;;    esac  else    if [ -f $ORACLE_HOME/bin/svrmgrl ] ; then      SQLDBA=svrmgrl      VERSION="internal"    else      SQLDBA="sqlplus /nolog"    fi  fi  STATUS=1  if [ -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.dbf ] ; then    STATUS="-1"  fi  if [ -f $ORACLE_HOME/dbs/sgadef${ORACLE_SID}.ora ] ; then    STATUS="-1"  fi  pmon=`ps -ef | grep -w "ora_pmon_$ORACLE_SID"  | grep -v grep`  if [ "$pmon" != "" ] ; then    STATUS="-1"    $LOGMSG "Warning: ${INST} \"${ORACLE_SID}\" already started."  fi  if [ $STATUS -eq -1 ] ; then    $LOGMSG "Warning: ${INST} \"${ORACLE_SID}\" possibly left running when system went down (system crash?)."    $LOGMSG "Action: Notify Database Administrator."    case $VERSION in      "6")  sqldba "command=shutdown abort" ;;      "internal")  $SQLDBA $args <<EOFconnect internalshutdown abortEOF        ;;      *)  $SQLDBA $args <<EOFconnect / as sysdbashutdown abortquitEOF        ;;    esac    if [ $? -eq 0 ] ; then      STATUS=1    else      $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOT started."    fi  fi  if [ $STATUS -eq 1 ] ; then    if [ -e $SPFILE -o -e $SPFILE1 -o -e $PFILE ] ; then      case $VERSION in        "6")  sqldba command=startup ;;        "internal")  $SQLDBA <<EOF connect internalstartupEOF          ;;        *)  $SQLDBA <<EOF connect / as sysdbastartupquitEOF          ;;      esac      if [ $? -eq 0 ] ; then        echo ""         echo "$0: ${INST} \"${ORACLE_SID}\" warm started."       else        $LOGMSG ""         $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOT started."       fi    else      $LOGMSG ""       $LOGMSG "No init file found for ${INST} \"${ORACLE_SID}\"."       $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOT started."     fi  fi}# Starts an ASM Instancestartasminst() {  # Called programs use same database ID  export ORACLE_SID  ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`  # Called scripts use same home directory  export ORACLE_HOME  # For ASM instances, we have a dependency on the CSS service.  # Wait here for it to become available before instance startup.  # Is the 10g install intact? Are all necessary binaries present?  if [ ! -x $ORACLE_HOME/bin/crsctl ]; then    $LOGMSG "$ORACLE_HOME/bin/crsctl not found when attempting to start"    $LOGMSG "  ASM instance $ORACLE_SID."  else     COUNT=0    $ORACLE_HOME/bin/crsctl check css    RC=$?    while [ "$RC" != "0" ];      do      COUNT=`expr $COUNT + 1`      if [ $COUNT = 15 ] ; then        # 15 tries with 20 sec interval => 5 minutes timeout        $LOGMSG "Timed out waiting to start ASM instance $ORACLE_SID"                 $LOGMSG "  CSS service is NOT available."        exit $COUNT      fi      $LOGMSG "Waiting for Oracle CSS service to be available before starting "      $LOGMSG " ASM instance $ORACLE_SID. Wait $COUNT."      sleep 20      $ORACLE_HOME/bin/crsctl check css      RC=$?    done  fi  startinst}# Start of dbstartup script## Loop for every entry in oratab file and and try to start# that ORACLE.## ASM instances need to be started before 'Database instances'# ASM instance is identified with '+' prefix in ORACLE_SID# Following loop brings up ASM instance[s]cat $ORATAB | while read LINEdocase $LINE in  \#*)                ;;        #comment-line in oratab  *)  ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if [ "$ORACLE_SID" = '*' ] ; then    # same as NULL SID - ignore this entry    ORACLE_SID=""    continue  fi  # Proceed only if last field is 'Y'.  if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "Y" ] ; then    # If ASM instances    if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then      INST="ASM instance"      ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`      # Called scripts use same home directory      export ORACLE_HOME      # file for logging script's output      LOG=$ORACLE_HOME/startup.log      touch $LOG      chmod a+r $LOG      echo "Processing $INST \"$ORACLE_SID\": log file $ORACLE_HOME/startup.log"      startasminst >> $LOG 2>&1    fi  fi  ;;esacdone# exit if there was any trouble bringing up ASM instance[s]if [ "$?" != "0" ] ; then  exit 2fi## Following loop brings up 'Database instances'#cat $ORATAB | while read LINEdocase $LINE in  \#*)                ;;        #comment-line in oratab  *)  ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if [ "$ORACLE_SID" = '*' ] ; then    # same as NULL SID - ignore this entry    ORACLE_SID=""    continue  fi  # Proceed only if last field is 'Y'.  if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "Y" ] ; then    # If non-ASM instances    if [ `echo $ORACLE_SID | cut -b 1` != '+' ]; then      INST="Database instance"      ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`      # Called scripts use same home directory      export ORACLE_HOME      # file for logging script's output      LOG=$ORACLE_HOME/startup.log      touch $LOG      chmod a+r $LOG      echo "Processing $INST \"$ORACLE_SID\": log file $ORACLE_HOME/startup.log"      startinst >> $LOG 2>&1    fi  fi  ;;esacdone## Following loop brings up 'Database instances' that have wait state 'W'#cat $ORATAB | while read LINEdocase $LINE in  \#*)                ;;        #comment-line in oratab  *)  ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if [ "$ORACLE_SID" = '*' ] ; then    # same as NULL SID - ignore this entry    ORACLE_SID=""    continue  fi  # Proceed only if last field is 'W'.  if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "W" ] ; then    W_ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`    # DB instances with 'W' (wait state) have a dependency on ASM instances via CRS.    # Wait here for 'all' ASM instances to become available.    cat $ORATAB | while read LINE    do    case $LINE in      \#*)                ;;        #comment-line in oratab      *)      ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`      if [ "$ORACLE_SID" = '*' ] ; then        # same as NULL SID - ignore this entry        ORACLE_SID=""        continue      fi      if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then        INST="ASM instance"        ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`        if [ -x $ORACLE_HOME/bin/srvctl ] ; then          COUNT=0          NODE=`olsnodes -l`          RNODE=`srvctl status asm -n $NODE | grep "$ORACLE_SID is running"`          RC=$?          while [ "$RC" != "0" ]; # wait until this comes up!          do            COUNT=$((COUNT+1))            if [ $COUNT = 5 ] ; then              # 5 tries with 60 sec interval => 5 minutes timeout              $LOGMSG "Error: Timed out waiting on CRS to start ASM instance $ORACLE_SID"                       exit $COUNT            fi            $LOGMSG "Waiting for Oracle CRS service to start ASM instance $ORACLE_SID"            $LOGMSG "Wait $COUNT."            sleep 60            RNODE=`srvctl status asm -n $NODE | grep "$ORACLE_SID is running"`            RC=$?          done        else          $LOGMSG "Error: \"${W_ORACLE_SID}\" has dependency on ASM instance \"${ORACLE_SID}\""          $LOGMSG "Error: Need $ORACLE_HOME/bin/srvctl to check this dependency"        fi      fi     # asm instance      ;;    esac    done # innner while  fi  ;;esacdone # outer while# by now all the ASM instances have come up and we can proceed to bring up# DB instance with 'W' wait statuscat $ORATAB | while read LINEdocase $LINE in  \#*)                ;;        #comment-line in oratab  *)  ORACLE_SID=`echo $LINE | awk -F: '{print $1}' -`  if [ "$ORACLE_SID" = '*' ] ; then    # same as NULL SID - ignore this entry    ORACLE_SID=""    continue  fi  # Proceed only if last field is 'W'.  if [ "`echo $LINE | awk -F: '{print $NF}' -`" = "W" ] ; then    INST="Database instance"    if [ `echo $ORACLE_SID | cut -b 1` = '+' ]; then      $LOGMSG "Error: ${INST} \"${ORACLE_SID}\" NOT started"      $LOGMSG "Error: incorrect usage: 'W' not allowed for ASM instances"      continue    fi    ORACLE_HOME=`echo $LINE | awk -F: '{print $2}' -`    # Called scripts use same home directory    export ORACLE_HOME    # file for logging script's output    LOG=$ORACLE_HOME/startup.log    touch $LOG    chmod a+r $LOG    echo "Processing $INST \"$ORACLE_SID\": log file $ORACLE_HOME/startup.log"    startinst >> $LOG 2>&1  fi  ;;esacdone

It can be seen from the above that oracle is started through rc. local, and/etc/oratab will be detected during the startup process to decide which instance to start. To put it bluntly, first, configure the rc. local file as follows:

[root@yue rc.d]# cat rc.local                                                                                                                 #!/bin/bash                                                                                                                                   su - oraele -c "/home/app/oraele/product/11.2.0/db_1/bin/dbstart $ORACLE_HOME"
Configure the/etc/oratab file as follows:

[root@yue rc.d]# cat /etc/oratab #                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       # This file is used by ORACLE utilities.  It is created by root.sh                                                                            # and updated by the Database Configuration Assistant when creating                                                                           # a database.                                                                                                                                                                                                                                                                               # A colon, ':', is used as the field terminator.  A new line terminates                                                                       # the entry.  Lines beginning with a pound sign, '#', are comments.## Entries are of the form:#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:## The first and second fields are the system identifier and home# directory of the database respectively.  The third filed indicates# to the dbstart utility that the database should , "Y", or should not,# "N", be brought up at system boot time.## Multiple entries with the same $ORACLE_SID are not allowed.##oraten:/home/app/oraten/product/10.2.0/db_1:Yoraele:/home/app/oraele/product/11.2.0/db_1:Y
Oraten and oraele belong to the users oraten and oraele respectively. The user attributes are as follows:

[Root @ yue rc. d] # id oratenuid = 1001 (oraten) gid = 1002 (oinstall) group = 1002 (oinstall), 1001 (dba) [root @ yue rc. d] # id oraeleuid = 1522 (oraele) gid = 1002 (oinstall) group = 1002 (oinstall), 1001 (dba)

Manually test whether the dbstart script can be executed normally,

[oraele@yue ~]$ dbstart $ORACLE_HOME
The problem occurs. Only the oraele instance is started. It is initially estimated that the user permission is incorrect. Under the oraele user, set the oraten user's environment variable and start sqlplus. the following error is reported:

Oraele @ yue db_1] $. /bin/sqlplus/nologSQL * Plus: Release 10.2.0.5.0-Production on Thursday December 4 14:13:30 2014 Copyright (c) 1982,201 0, Oracle. all Rights Reserved. SQL> conn/as sysdbaERROR: ORA-12547: TNS: lost contact

The collected network information is as follows:

1: The installation package glibc-devel libaio-devel is missing.

2: $ ORACLE_HOME/bin/oracle File Permission incorrect

3: The System Kernel configuration is incorrect, such as the number of files.

4: Incorrect environment variable settings

5: Check whether the file size of $ ORACLE_HOME/bin/oracle and $ ORACLE_HOME/rdbms/lib/config. o is 0. If the file size is 0, re-compile it.

The permission for viewing the oacle file is incorrect. The current setting is:

[Oraele @ yue bin] $ ll oracle-rwxrwxr-x 1 oraten oinstall 125155528 August 19 21:07 oracle
Modify as follows:

[Root @ yue bin] # chmod 6751 oracle [root @ yue bin] # ll oracle-rwsr-s -- x 1 oraten oinstall 125155528 August 19 21:07 oracle
The file permissions are described as follows:

U: User, the owner of a file or directory. G: Group, that is, the Group to which the file or directory belongs. O: Other. All Users except the file or directory owner or group belong to this range. A: All, that is, All users, including owners, groups, and other users. For details about the permission code, go to r: Read Permission. The number is "4 ". W: Write Permission. The number is "2 ". X: execute or switch the permission. The number is "1 ". -: You do not have any permission. The digit code is "0 ". S: when an object is executed, set the setuid or setgid permission for the object based on the user type specified by the who parameter.
It seems that the default permission for the oracle file is s, And we manually modified it. It seems that after the database is installed, even if we execute the chmod-R 777 $ ORACLE_HOME operation, it may be a problem,

After modifying the permission, restart the system. Everything is normal.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.