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 MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...