在 Oracle 10g + RedHat 環境中,sqlplus / as sysdba 正常但 lsnrctl start 報 TNS-12555: TNS:permission denied、TNS-00525: Insufficient privilege for operation、Linux Error: 1: Operation not permitted。本文深度剖析根因——/var/tmp/.oracle 目錄權限問題,提供標準修復步驟與預防措施。
[oracle@rhel4 admin]$ lsnrctl start
...
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
TNS-12555: TNS:permission denied
TNS-12560: TNS:protocol adapter error
TNS-00525: Insufficient privilege for operation
Linux Error: 1: Operation not permitted
sqlplus / as sysdba 正常 → 數據庫實例、權限、環境變量無問題。KEY=EXTPROC1) → 涉及本地進程間通信,需寫入 /var/tmp/.oracle。/var/tmp/.oracle 目錄下 (如 /var/tmp/.oracle/sEXTPROC1)。chmod -R 777 /var/tmp 或 chown -R root:root /var/tmp。/var/tmp/.oracle 屬性。EACCES 而非 EPERM)。
# 1. 切換到 root
su - root
# 2. 檢查現狀
ls -ld /var/tmp/.oracle
# 正常應為:drwxrwxrwt. 2 oracle oinstall 4096 ... /var/tmp/.oracle
# 關鍵:所有者 oracle:oinstall,權限 1777 (sticky bit + 全權限)
# 3. 修復所有權與權限
chown oracle:oinstall /var/tmp/.oracle
chmod 1777 /var/tmp/.oracle # 1777 = sticky bit (1) + rwxrwxrwx (777)
# 4. 如目錄不存在,創建
mkdir -p /var/tmp/.oracle
chown oracle:oinstall /var/tmp/.oracle
chmod 1777 /var/tmp/.oracle
# 5. 切回 oracle 用戶驗證
su - oracle
lsnrctl start
# 應成功啟動,無 TNS-12555
1777 = Sticky Bit (1) + rwxrwxrwx (777)。/tmp、/var/tmp 標準屬性)。rwx。
# 監聽器啟動後,檢查 Socket 文件
ls -l /var/tmp/.oracle/
# 應見 sEXTPROC1 等 Socket 文件,所有者 oracle
# 檢查監聽狀態
lsnrctl status
# Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1))) 應顯示正常
# 測試本地連接
sqlplus user/pass@localhost:1521/sid
# 或
tnsping localhost
/var/tmp、/tmp 權限/所有者。系統服務 (Oracle、PostgreSQL、Redis、Nginx 等) 依賴其標準屬性。/var/tmp/.oracle:find /var/tmp -path /var/tmp/.oracle -prune -o -type f -mtime +30 -delete。
- name: Ensure Oracle IPC directory
file:
path: /var/tmp/.oracle
state: directory
owner: oracle
group: oinstall
mode: '1777'
ls -Z /var/tmp/.oracle 應為 tmp_t 或 oracle_tmp_t。異常時 restorecon -Rv /var/tmp/.oracle。| 場景 | 特徵 | 排查 |
|---|---|---|
監聽器配置 IPC 但 listener.ora KEY 衝突 | 多實例共用同 KEY | 每實例唯一 KEY,如 EXTPROC1, EXTPROC2 |
| SELinux 拒絕 | audit.log 有 AVC denied | ausearch -m avc -ts recent,調整策略或 restorecon |
| 磁盤滿/Inode 滿 | df -h /var/tmp、df -i /var/tmp 100% | 清理空間 |
文件系統掛載 noexec/nosuid | mount | grep /var/tmp | 調整掛載選項 |
TNS-12555 配合 Linux Error: 1: Operation not permitted、**僅 IPC 協議失敗**,90% 以上為 /var/tmp/.oracle 目錄權限/所有者異常。標準修復:chown oracle:oinstall /var/tmp/.oracle && chmod 1777 /var/tmp/.oracle。納入自動化部署與巡檢,徹底杜絕復發。