Oracle Client 透過 tnsnames.ora 將易記的服務別名映射到實際的主機、埠、服務名/ SID。檔案位置通常在 $ORACLE_HOME/network/admin/tnsnames.ora (Linux/Unix) 或 %ORACLE_HOME%\network\admin\tnsnames.ora (Windows)。
# 服務別名 = 連線描述符
MYDB_PROD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.98.35)(PORT = 1521))
# 可加入多個 ADDRESS 實現 Client 端負載均衡/故障轉移
# (ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.98.36)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = tbda) # 推薦使用 Service Name (支援 RAC/PDB)
# (SID = tbda) # 舊版相容,單實例可用
(SERVER = DEDICATED) # 專用伺服器 (預設)
# (SERVER = SHARED) # 共用伺服器 (MTS)
)
)
# 另一個範例:使用 SCAN VIP (RAC 環境)
MYDB_RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mydb-scan.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = tbda)
(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 3)(DELAY = 5))
)
)
sqlplus username/password@MYDB_PROD
sqlplus /nolog
SQL> CONNECT username/password@MYDB_PROD
sqlplus username/password@10.203.98.35:1521/tbda
# 格式:host:port/service_name 或 host:port/sid
sqlldr username/password@MYDB_PROD \
control=load.ctl \
log=load.log \
bad=load.bad \
discard=load.dsc \
errors=1000000 \
direct=true \
parallel=true
LOAD DATA
INFILE 'data.txt'
INTO TABLE target_table
...
-- 控制檔不支援直接指定連線,必須命令列傳入
| 錯誤 | 原因 | 解決 |
|---|---|---|
| ORA-12154: TNS:could not resolve the connect identifier specified | 別名拼寫錯誤、tnsnames.ora 未被讀取、TNS_ADMIN 環境變數未設定 | 確認 tnsping MYDB_PROD 成功;檢查 echo $TNS_ADMIN / Windows 環境變數 |
| ORA-12514: TNS:listener does not currently know of service requested in connect descriptor | SERVICE_NAME/SID 與監聽器註冊的不符 | 在資料庫端 lsnrctl services 查看實際服務名;修正 tnsnames.ora |
| ORA-12541: TNS:no listener | 監聽器未啟動、防火牆阻擋、HOST/PORT 錯誤 | 確認監聽器狀態、防火牆規則、IP/埠可達 (telnet/tnsping) |
| ORA-28000: the account is locked | 帳號被鎖定 | ALTER USER username ACCOUNT UNLOCK; |
| ORA-01017: invalid username/password | 密碼錯誤、大小寫敏感 (11g+ SEC_CASE_SENSITIVE_LOGON) | 確認密碼、注意大小寫、檢查 PASSWORD_VERSIONS |
OS 認證 (sqlplus / as sysdba)、Oracle Wallet (mkstore -wrl $WALLET_DIR -createCredential MYDB_PROD username),之後 sqlplus /@MYDB_PROD 免輸入密碼。sqlnet.ora 設定 TCP.VALIDNODE_CHECKING=YES、TCP.INVITED_NODES、TCP.EXCLUDED_NODES。SQLNET.ENCRYPTION_CLIENT = REQUIRED、SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256)、SQLNET.CRYPTO_CHECKSUM_CLIENT = REQUIRED。tnsnames.ora (NFS/共享儲存) 統一分發,避免各客戶端配置不一致。# 快速測試
tnsping MYDB_PROD
# 完整連線測試
sqlplus -L username/password@MYDB_PROD <