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

Oracle SQL*Plus 與 SQL*Loader 遠程連線設定:TNSNAMES.ORA 完整指南

     編輯:Oracle 資料庫基礎

核心步驟:配置 TNS 服務名稱

Oracle Client 透過 tnsnames.ora 將易記的服務別名映射到實際的主機、埠、服務名/ SID。檔案位置通常在 $ORACLE_HOME/network/admin/tnsnames.ora (Linux/Unix) 或 %ORACLE_HOME%\network\admin\tnsnames.ora (Windows)。

標準 tnsnames.ora 範例

# 服務別名 = 連線描述符
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))
    )
  )

SQL*Plus 遠程登入

方式一:命令列指定連線字串

sqlplus username/password@MYDB_PROD

方式二:啟動後用 CONNECT

sqlplus /nolog
SQL> CONNECT username/password@MYDB_PROD

方式三:Easy Connect (無需 tnsnames.ora)

sqlplus username/password@10.203.98.35:1521/tbda
# 格式:host:port/service_name 或 host:port/sid

SQL*Loader 遠程載入

命令列參數

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 descriptorSERVICE_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。
  • 集中管理 TNS:使用 LDAP (OID/MS AD) 或集中式 tnsnames.ora (NFS/共享儲存) 統一分發,避免各客戶端配置不一致。

驗證連線

# 快速測試
tnsping MYDB_PROD

# 完整連線測試
sqlplus -L username/password@MYDB_PROD <
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved