cls_oracle_logs.sh腳本遭遇TNS-12508錯誤淺析

来源:https://www.cnblogs.com/kerrycode/p/18152993
-Advertisement-
Play Games

cls_oracle_logs.sh腳本的輸出日誌中有TNS-12508錯誤,具體如下所示 ........................................................................LSNRCTL> Current Listener is gsp ...


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
   ......................................................
掃描上面二維碼關註我 如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力! 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文分享自華為雲社區《對接HiveMetaStore,擁抱開源大數據》,作者:睡覺是大事。 1. 前言 適用版本:9.1.0及以上 在大數據融合分析時代,面對海量的數據以及各種複雜的查詢,性能是我們使用一款數據處理引擎最重要的考量。而GaussDB(DWS)服務有著強大的計算引擎,其計算性能優於MR ...
  • 近日,以“Data+AI,構建新質生產力”為主題的袋鼠雲春季發佈會圓滿落幕,大會帶來了一系列“+AI”的數字化產品與最新行業沉澱,旨在將數據與AI緊密結合,打破傳統的生產力邊界,賦能企業實現更高質量、更高效率的數字化發展。會上,袋鼠雲業務總經理申杭帶來了以“指標+AI:邁向智能化,讓指標應用更高效” ...
  • 本文介紹基於Microsoft SQL Server軟體,實現資料庫創建、分離、附加、刪除與備份的方法。 目錄1 互動式創建資料庫2 Transact-SQL指定參數創建資料庫3 互動式分離資料庫testbase14 使用系統存儲過程分離資料庫testbase25 資料庫文件備份:分離資料庫再複製其 ...
  • 今天我們就從GaussDB SQL引擎入手,瞭解一下GaussDB SQL 查詢語句的執行過程,包括GaussDB SQL引擎原理和關鍵技術點。 ...
  • 由福州軟體園科技創新發展公司和華為技術有限公司聯合主辦的HCDG城市行福州站——“企業創新新引擎”資料庫專項賦能會在福州軟體園成功舉辦。 ...
  • 相關知識點: INNODB_STATS_PERSIST=ON或用STATS_PERSIST=1定義單個表時,優化器統計信息將持久化到磁碟。預設情況下,innodb_stats_persistent是啟用的。 持久統計信息存儲在mysql.innodb_table_stats和mysql.innodb ...
  • 轉載自小蝦米0.0 導讀:隨著Kubernetes的普及和發展,越來越多的企業和團隊開始使用Kubernetes來管理和部署應用程式。然而,Kubernetes的預設工作方式可能不是最佳的選擇,尤其是在需要更高效、更可靠的應用程式部署和管理能力時。因此,SeaTunnel提供了一種運行Zeta引擎( ...
  • 轉載自第一片心意 1 前言 由於海豚調度器官網的集群部署文檔寫的較亂,安裝過程中需要跳轉到很多地方進行操作,所以自己總結了一篇可以直接跟著從頭到尾進行操作的文檔,以方便後續的部署、升級、新增節點、減少節點的相關操作。 2. 提前準備 2.1. 基礎組件 JDK:下載JDK (1.8+),安裝並配置 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...