首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 核心配置檔案深度解析:profile、oratab、init.ora、listener.ora、sqlnet.ora、tnsnames.ora 全景圖

     編輯:Oracle 資料庫基礎

Oracle 資料庫的行為由六大核心配置檔案共同決定。本文系統梳理各檔案用途、關鍵參數、典型配置範例、修改生效方式、常見誤區,構建完整配置管理知識體系,支援自動化部署與故障快速定位。

一、檔案清單與定位

檔案典型路徑作用域修改生效
/etc/profile/etc/profileOS 層級環境變數重新登入 / source
oratab/etc/oratab實例啟停註冊即時
init.ora / spfile$ORACLE_BASE/admin//pfile實例參數動態參數即時,靜態參數重啟
listener.ora$ORACLE_HOME/network/admin監聽器配置lsnrctl reload
sqlnet.ora$ORACLE_HOME/network/admin客戶端/伺服器網路參數即時(新連線)
tnsnames.ora$ORACLE_HOME/network/admin網路服務名解析即時(新連線)

二、/etc/profile - Oracle 環境變數基石

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export ORACLE_SID=orcl
export ORACLE_TERM=vt100
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
# 中文環境建議:AMERICAN_CHINA.ZHS16GBK 或 AMERICAN_AMERICA.AL32UTF8

順序原則:被引用變數必須先定義(ORACLE_HOME 用到 ORACLE_BASE,故 ORACLE_BASE 在前)。

三、/etc/oratab - 實例自動啟停註冊表

# 格式:SID:ORACLE_HOME:Y|N
orcl:/u01/app/oracle/product/19.0.0/dbhome_1:Y
# Y = dbstart/dbshut 管理啟停;N = 手動管理
  • RAC 環境每節點各維護一份。
  • 安裝後務必將目標實例改為 :Y,配合 /etc/init.d/oracle 實現 OS 級自動啟停。

四、init.ora / SPFILE - 實例參數核心

關鍵參數分類:

SPFILE 優勢:ALTER SYSTEM SET ... SCOPE=SPFILE 持久化、支援備份/還原、RAC 共享。

五、listener.ora - 監聽器配置

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = db-server)(PORT = 1521))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (SID_NAME = orcl)
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (PROGRAM = extproc)
    )
  )

關鍵點:

  • 預設監聽器名 LISTENER、埠 1521、協定 TCP。
  • IPC/EXTPROC 供外部程序呼叫,保留預設即可。
  • SID_LIST 靜態註冊服務;動態註冊(PMON 自動註冊)無需此區段,但靜態註冊可支援 STARTUP 前連線(如 RMAN、Data Guard)。
  • 管理指令:lsnrctl start/stop/status/reload/services。

六、sqlnet.ora - 網路參數與安全

NAMES.DEFAULT_DOMAIN = example.com
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT, ONAMES, HOSTNAME)
SQLNET.EXPIRE_TIME = 10          # 檢測死連線,單位分鐘
SQLNET.INBOUND_CONNECT_TIMEOUT = 60
# 加密/完整性(11g+)
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA512)

七、tnsnames.ora - 客戶端連線別名

ORCL.EXAMPLE.COM =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db-server.example.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
      (SERVER = DEDICATED)
    )
  )

# 專用伺服器 / 共享伺服器 / HTTP 範例
MODOSE.EXAMPLE.COM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db-server)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = modose)
      (SERVER = SHARED)
      (PRESENTATION = https://admin)
    )
  )

EXTPROC_CONNECTION_DATA.EXAMPLE.COM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    (CONNECT_DATA = (SID = PLSExtProc))
  )

一致性檢查:tnsnames.ora 的 HOST/PORT/SERVICE_NAME 必須與 listener.ora 的 ADDRESS、SID_DESC 完全對應。

八、常見誤區與排查清單

類別參數範例說明
身分識別db_name=orcl, instance_name=orcl資料庫/實例名稱
控制檔control_files=(...ctl, ...ctl, ...ctl)多路徑多工,至少 2 份
排程作業job_queue_processes=10, job_queue_interval=60SNP 背景進程數與喚醒間隔
追蹤/告警目錄background_dump_dest, user_dump_dest, core_dump_dest建議置於獨立磁碟/ASM
UTL_FILE 目錄utl_file_dir=* 或具體路徑* 允許任意目錄(12c+ 建議用 Directory 物件)
記憶體管理sga_target, pga_aggregate_target, memory_target (AMM)11g+ 推薦 AMM/ASMM
相容性compatible=19.0.0升級後調整,不可降級
現象可能原因檢查重點
ORA-12154 TNS:could not resolvetnsnames.ora 找不到別名 / 路徑錯誤TNS_ADMIN 環境變數、tnsping
ORA-12514 Listener does not know service服務未註冊 / SERVICE_NAME 拼寫錯lsnrctl services、SID_LIST 靜態註冊
ORA-12541 No listener監聽器未啟動 / PORT 阻擋lsnrctl status、防火牆、HOST 解析
中文亂碼NLS_LANG 不匹配客戶端/伺服器 NLS_LANG、資料庫字元集
連線緩慢DNS 解析 / SDU 大小HOST 用 IP、DEFAULT_SDU_SIZE

九、配置管理最佳實務

  1. 版本控制:將 $ORACLE_HOME/network/admin、/etc/oratab、init.ora 納入 Git,標記環境。
  2. 參數化部署:Ansible/Terraform 模板化,變數化 HOST、SID、PORT。
  3. 變更審計:啟用 SQLNET.AUDIT 或 OS 層 auditd 監控關鍵檔案變更。
  4. 災難恢復演練:定期從備份還原配置檔案並驗證 tnsping、lsnrctl start、sqlplus 連線。

掌握六大配置檔案的分工與交互,就能在安裝、遷移、升級、故障排查中游刃有餘,將配置管理從「玄學」轉為「工程」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved