ORA-28547 故障處理一例

來源:互聯網
上載者:User

ORA-28547 故障處理一例

上周去給客戶培訓Oracle,講到DG部分做實際配置示範的時候,碰到了ORA-28547故障,客戶的資料庫時11.2.0.1的版本,Window平台。

之前已經按照步驟把DG全部配置完成了,當準備在備庫啟用redo apply的時候,照例先檢查一下兩邊遠程歸檔路徑是否有效:

select dest_name,status,error from v$archive_dest where dest_id<3; 此時備庫的本地和遠程歸檔路徑狀態都是VALID,但是主庫就報一個:ORA-28547:connection to server failed,probable Oracle Net admin error (DBD ERROR: OCISessionBegin) 由於和伺服器串連失敗,主庫的歸檔無法通過LNS進程傳遞到備庫,這和之前碰到的各種ORA-12541和ORA-12514的TNS串連錯誤還不太一樣,因為用TNSPING命令去ping各自的NET SERVICE NAME都是正常的,並沒有說找不到目標。 根據經驗,當發生TNS或Oracle Net串連錯誤,首先就要去關注幾個$ORACLE_HOME/network/admin下面的幾個設定檔,通常是配置不正確造成的,以下是幾個設定檔大致內容: listener.ora
# listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
#CLRExtProc

#DIRECT_HANDOFF_TTC_LISTENER = OFF

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = D:\oracle


tnsnames.ora 
# tnsnames.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )


sqlnet.ora
# sqlnet.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) 網上google了幾篇相關內容的文章,有的說要把sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES= (NTS)改為SQLNET.AUTHENTICATION_SERVICES= (NONE),或者是把監聽的HOST中改為IP地址,但都沒有效果。而且前者會禁用作業系統驗證,也就意味著必須用username/password@orcl的方式登入到伺服器 最終通過查閱官方文檔解決該問題,我們來看一下官方文檔的描述: 應用於: Oracle Net Services - Version 11.2.0.1 and later
Information in this document applies to any platform.
 癥狀: When connecting through the Listener to a Database, an error is thrown:
ORA-28547: connection to server failed, probable Oracle Net admin error

However, local BEQUEATH connections (without the Listener) work fine.
 

改變:

 

 New installation or changes to an existing listener.ora file

 原因: 

The listener.ora file's SID_LIST section may INCORRECTLY contain a "PROGRAM" line and/or an "ENVS" line for all database instances.

For example, for a listener called LISTENER1 the following may be set for a "static" SID_LIST section:

 

SID_LIST_LISTENER1 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ORCL1)
      (ORACLE_HOME = E:\app\oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:E:\app\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = E:\app\oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:E:\app\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )


In the example above, the first section contains the SID_NAME and ORACLE_HOME values for the Database instance required for connection to.
However, it also contains a PROGRAM and an ENVS value which will also attach to client connections through the SID_NAME Value.
This can result in Oracle*Net connection errors such as ORA-28547.

These are ONLY for External Procedures and/or Heterogeneous Services (HS) Gateway use, which is as per the second section example and correctly used for that section.

注意以上紅色部分,這裡明確地提到了,PROGRAM和ENVS參數的設定會導致用戶端通過SID_NAME來進行串連,由此會引發ORA-28547錯誤 既然這2個參數會引起問題,那麼解決方案就是把他們去掉即可,官方文檔中提到只要去掉和執行個體名相關的那個SID_LIST中的PROGRAM和ENVS的條目。我自己實際測試的時候,單獨去掉PROGRAM不行,於是把PROGRAM和ENVS都去掉,之前的問題就解決了。至於SID_DESC中SID_NAME=PLSExtProc中的PROGRAM和ENVS條目,不去掉是否可行,還未親自測試過。 注意:改完以後要重啟一下監聽,或者重啟Windows中的監聽Service。

----------------------------華麗麗的分割線----------------------------
Oracle 單一實例 從32位 遷移到 64位 方法 

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

Oracle匯入匯出expdp IMPDP詳解

Oracle 10g expdp匯出報錯ORA-4031的解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.