首页 > 数据库 >cls_oracle_logs.sh脚本遭遇TNS-12508错误浅析

cls_oracle_logs.sh脚本遭遇TNS-12508错误浅析

时间:2024-04-23 17:22:05浏览次数:33  
标签:RESTRICTIONS log TNS LOG listener ADMIN FILE 浅析 logs

cls_oracle_logs.sh脚本的输出日志中有TNS-12508错误,具体如下所示

........................................................................
LSNRCTL> Current Listener is gsp
LSNRCTL> Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=gsp)))
TNS-12508: TNS:listener could not resolve the COMMAND given
LSNRCTL> LSNR_TRC_DIR: /opt/oracle19c/product/19.3.0/db_1/network/trace/
........................................................................

调试跟踪发现,脚本在切割监听日志时,执行命令set log_status off/set log_status on时报TNS-12508错误,部分脚本如下所示:

# Function used to cut log files.
f_cutlog(){
 
  # Set name of log file.
  LOG_FILE=$1
  CUT_FILE=${LOG_FILE}.${TODAY}
  FILESIZE=`ls -l $LOG_FILE | awk '{print $5}'`
 
  # Cut the log file if it has not been cut today.
  if [ -f $CUT_FILE ]; then
    echo "Log Already Cut Today: $CUT_FILE"
  elif [ ! -f $LOG_FILE ]; then
    echo "Log File Does Not Exist: $LOG_FILE"
  elif [ $FILESIZE -eq 0 ]; then
    echo "Log File Has Zero Size: $LOG_FILE"
  else
    # Cut file.
    echo "Cutting Log File: $LOG_FILE"
    $MV $LOG_FILE $CUT_FILE
    $TOUCH $LOG_FILE
  fi
}

  .....................................
  # See if the listener is logging.
  if [ -z "$LSNRLOG" ]; then
    echo "Listener Logging is OFF. Not rotating the listener log."
  # See if the listener log exists.
  elif  [ ! -r "$LSNRLOG" ]; then
    echo "Listener Log Does Not Exist: $LSNRLOG"
  # See if the listener log has been cut today.
  elif [ -f $LSNRLOG.$TODAY ]; then
    echo "Listener Log Already Cut Today: $LSNRLOG.$TODAY"
  # Cut the listener log if the previous two conditions were not met.
  else
  
    # Disable logging.
    $LSNRCTL <<EOF
    set current_listener $LSNRNAME
    set log_status off
EOF
 
    # Cut the listener log file.
    f_cutlog $LSNRLOG

    # Enable logging.
    $LSNRCTL <<EOF
    set current_listener $LSNRNAME
    set log_status on
EOF

    # Delete old listener logs.
    f_deletelog $LSNRLOG $NDAYS
 
  fi
  ...................................

如下测试所示

LSNRCTL> set current_listener  gsp
Current Listener is gsp
LSNRCTL> set log_status off
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=REGISTER_gsp)))
TNS-12508: TNS:listener could not resolve the COMMAND given

出现这个现象,是因为我们在监听参数文件listener.ora中设置了参数ADMIN_RESTRICTIONS_<listener_name>

ADMIN_RESTRICTIONS_GSP = ON

ADMIN_RESTRICTIONS_<listener_name>参数是一个重要的安全选项,在listener.ora文件中设置ADMIN_RESTRICTIONS_<listener_name>为ON时, 此后所有在运行时对监听器的修改都将会被阻止,所有对监听器的修改都必须通过手工修改listener.ora文件才能顺利完成。

Setting ADMIN_RESTRICTIONS_<listener_name> = ON disables the "runtime" modification of parameters in the listener.ora file.
In other words, the listener refuses to accept SET commands that alter its parameters and states that it cannot "resolve the COMMAND given."

脚本cls_oracle_logs.sh中,暂停监听器写入日志,完成监听日志的切换后,然后启用监听器写入日志。但是由于参数ADMIN_RESTRICTIONS_<listener_name>为ON的话 这里就会出现异常,那么我们修改脚本的逻辑,如果发现参数ADMIN_RESTRICTIONS_<listener_name>启用为ON的情况下,就将监听日志的内容拷贝到另外一个文件, 然后将当前的监听日志清空,具体代码如下所示:

# Function used to cut log files.
f_cutlog(){
 
  # Set name of log file.
  LOG_FILE=$1
  PAR_ADMIN_RESTRICTIONS=$2
  CUT_FILE=${LOG_FILE}.${TODAY}
  FILESIZE=`ls -l $LOG_FILE | awk '{print $5}'`
 
  # Cut the log file if it has not been cut today.
  if [ -f $CUT_FILE ]; then
    echo "Log Already Cut Today: $CUT_FILE"
  elif [ ! -f $LOG_FILE ]; then
    echo "Log File Does Not Exist: $LOG_FILE"
  elif [ $FILESIZE -eq 0 ]; then
    echo "Log File Has Zero Size: $LOG_FILE"
  else
    # Cut file.
    if [ [$PAR_ADMIN_RESTRICTIONS == 'ON' ]] || [[ $PAR_ADMIN_RESTRICTIONS == 'on' ]];then
        # Cut file.
        echo "Cutting Log File: $LOG_FILE"
        cat $LOG_FILE > $CUT_FILE
        cat /dev/null > $LOG_FILE
    else
        echo "Cutting Log File: $LOG_FILE"
        $MV $LOG_FILE $CUT_FILE
        $TOUCH $LOG_FILE
    fi
  fi
}


  ......................................................
  # See if the listener is logging.
  if [ -z "$LSNRLOG" ]; then
    echo "Listener Logging is OFF. Not rotating the listener log."
  # See if the listener log exists.
  elif  [ ! -r "$LSNRLOG" ]; then
    echo "Listener Log Does Not Exist: $LSNRLOG"
  # See if the listener log has been cut today.
  elif [ -f $LSNRLOG.$TODAY ]; then
    echo "Listener Log Already Cut Today: $LSNRLOG.$TODAY"
  # Cut the listener log if the previous two conditions were not met.
  else
    # 加上head -1 主要是防止出现两个名字很接近的监听,例如下面配置,就会得到两个值
    # ADMIN_RESTRICTIONS_gspprod = ON
    # ADMIN_RESTRICTIONS_gspprodro = ON
    LSN_ADMIN_RESTRICTIONS=`cat $LSNPARAM | grep -i "ADMIN_RESTRICTIONS_$LSNRNAME" | awk '{print $3}' |head -1`
  
    if [[ $LSN_ADMIN_RESTRICTIONS == "ON" ]] || [[ $LSN_ADMIN_RESTRICTIONS == "on" ]];then
      f_cutlog $LSNRLOG  $LSN_ADMIN_RESTRICTIONS
    else
      # Disable logging.
      $LSNRCTL <<EOF
    set current_listener $LSNRNAME
    set log_status off
EOF

      # Cut the listener log file.
      f_cutlog $LSNRLOG $LSN_ADMIN_RESTRICTIONS

      # Enable logging.
      $LSNRCTL <<EOF
    set current_listener $LSNRNAME
    set log_status on
EOF

   fi

    # Delete old listener logs.
    f_deletelog $LSNRLOG $NDAYS
 
  fi
   ......................................................

标签:RESTRICTIONS,log,TNS,LOG,listener,ADMIN,FILE,浅析,logs
From: https://www.cnblogs.com/kerrycode/p/18152993

相关文章

  • 浅析网络库
    1.C10Kproblem最初的服务器都是基于进程/线程模型的,新到来一个TCP连接,就需要分配1个进程(或者线程),但当连接数来到10K时,就需要不停地买服务器了.DanKegel在1999年提出了著名的世界难题:“c10kproblem”。那时的服务器还只是32位系统,运行着Linux2.2版本(后来又升级到了......
  • MySQL binlog超过binlog_expire_logs_seconds阈值没有删除案例
    生产环境有一套3个节点的MySQLInnoDBCluster,MySQL的版本为Serverversion:8.0.35MySQLCommunityServer-GPL,早上突然收到Zabbix的告警,其中一个节点出现空间告警:"/data:Diskspaceislow(used>80%)"检查分析后发现是因为MySQL的binlog没有清理导致空间报警,如下所示(b......
  • 三维模型调色技术浅析
    三维模型调色技术浅析 摘要:三维模型调色是对模型进行材质和纹理等属性调整的过程,可以提高模型的视觉效果和真实感。本文将介绍几种常见的三维模型调色技术,包括材质编辑、纹理贴图和光照调整,并分析它们的特点和适用场景。 引言三维模型调色是三维模型处理中的重要环......
  • 相机模型浅析
    相机模型文章目录相机模型四个坐标系针孔相机模型世界坐标系到相机坐标系相机坐标系到图像坐标系图像坐标到像素坐标四个坐标系①世界坐标系:是客观三维世界的绝对坐标系,也称客观坐标系。因为数码相机安放在三维空间中,我们需要世界坐标系这个基准坐标系来描述数码相......
  • 从零开始写 Docker(十)---实现 mydocker logs 查看容器日志
    本文为从零开始写Docker系列第十篇,实现类似dockerlogs的功能,使得我们能够查查看容器日志。完整代码见:https://github.com/lixd/mydocker欢迎Star推荐阅读以下文章对docker基本实现有一个大致认识:核心原理:深入理解Docker核心原理:Namespace、Cgroups和Rootfs......
  • 难道AI不知道tnsnames.ora的instance_name配置吗?
    事情是这样,给某客户培训构建hands-on实验环境时,因测试环境有限,在同一环境做了一套ADG环境;数据库是单实例,版本19.21,使用了多租户选件;其中一个测试的PDB,名为demo1,其中建好测试用户jingyu,遇到的问题是:使用sqlplus连接时,会随机连接到主库或者备库。排查定位也很简单,因为这样的环境......
  • 难道AI不知道tnsnames.ora的instance_name配置吗?
    事情是这样,给某客户培训构建hands-on实验环境时,因测试环境有限,在同一环境做了一套ADG环境;数据库是单实例,版本19.21,使用了多租户选件;其中一个测试的PDB,名为demo1,其中建好测试用户jingyu,遇到的问题是:使用sqlplus连接时,会随机连接到主库或者备库。排查定位也很简单,因为这样的环境......
  • 金鸣识别与OFFICE OCR识别长窄图应用场景浅析
    在现代办公环境中,OCR(OpticalCharacterRecognition,光学字符识别)技术已经成为了一种不可或缺的工具。无论是将纸质文档转化为电子文档,还是处理扫描图像中的文字,OCR技术都发挥着重要作用。在众多OCR软件中,OFFICEOCR和金鸣表格文字识别大师是两款颇受欢迎的产品。本文将重点探讨......
  • 三维模型合并技术浅析
    三维模型合并技术浅析 摘要:三维模型合并是将多个模型融合成一个模型的技术,可以用于模型拼接、模型组装等应用场景。本文将介绍几种常见的三维模型合并技术,包括布尔运算、网格拼接和点云融合,并分析它们的特点和适用场景。 引言三维模型合并是三维模型处理中的重要步......
  • 关于“LINQ to Entities does not recognize the Method '...' ”问题原因浅析
    LINQtoEntities中,有些断言能对内存实体使用,但是发到数据库端可能因无法解析而抛出异常,需要特别注意。示例如下:[TestMethod]publicvoidDataSourceGetOneTest(){stringhost="localHost";IList<string>IpAddress=En......