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

Oracle 使用者密碼含 @ 符號時的連線解決方案

     編輯:Oracle 教學

Oracle 使用者密碼含 @ 符號時的連線解決方案

在設定 Oracle 使用者密碼時,若不小心包含了 @ 符號,嘗試以一般方式登入(如 SQL*Plus、exp/imp 工具或應用程式連線字串)往往會失敗,並拋出「無法解析的連接字串」或類似的 TNS 解析錯誤。這是因為 @ 在 Oracle 連線語法中被視為主機識別碼的分隔符(例如 user/pass@host:port/sid),導致解析器誤判密碼結束位置。

核心解決原則:雙引號包裹 + 轉義

解決方法非常簡單:將完整密碼用雙引號括起來,並在命令列或腳本中對雙引號進行適當的轉義。具體做法視作業系統與工具而異,常見範例如下:

1. SQL*Plus / CONN 命令 (Windows cmd / Linux shell)

conn system/"xxx@yyy"@localhost:1521/orcl

說明:在 Windows cmd 中雙引號通常不需額外轉義;在 Linux/Unix shell 中若在雙引號字串內,需寫成 \"xxx@yyy\"。

2. Data Pump / expdp / impdp

expdp system/"xxx@yyy"@localhost:1521/orcl ...

3. JDBC 連線字串 (Java 應用)

jdbc:oracle:thin:system/"xxx@yyy"@//localhost:1521/orcl

或在連線屬性中單獨設定密碼屬性(推薦,避免字串解析問題):

Properties props = new Properties();
props.setProperty("user", "system");
props.setProperty("password", "xxx@yyy"); // 此處無需雙引號
Connection conn = DriverManager.getConnection(url, props);

4. tnsnames.ora / EZCONNECT 格式

若使用 TNS 別名,建議在 tnsnames.ora 中定義好服務名,連線時僅指定 system/"xxx@yyy"@my_tns_alias,避免在命令列暴露完整連線描述符。

常見陷阱與最佳實務

  • 避免在密碼使用 @、/、"、'、空白等特殊字元,可大幅降低維運複雜度。
  • 若密碼已設定且無法變更,請統一採用 雙引號包裹密碼 的慣例,並記錄於團隊運維手冊。
  • 自動化部署腳本(Ansible、Shell、Python)中,請使用語言原生的字串轉義機制(如 Python 的 shlex.quote() 或參數化方式),切勿手工拼接。

掌握此技巧,即可輕鬆應對含特殊字元密碼的 Oracle 連線場景,避免不必要的排查時間。

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