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

Oracle 透明網關多 SQL Server 實例接入:標準化部署範本與維運清單

     編輯:Oracle 資料庫基礎

核心架構:一個 Gateway 服務多個 SQL Server 資料庫

Oracle Transparent Gateway for SQL Server (TG4MSQL) 採用 **一個 Listener、多個 SID、多個 init.ora** 架構,每個 SQL Server 資料庫對應一組獨立配置。

標準化部署範本(參數化)

假設新增 SQL Server 資料庫 TARGET_DB,主機 SQL_HOST,復原帳號 RECOVER/RECOVER。

1. Gateway 端:%ORACLE_HOME%\tg4msql\admin\init.ora

HS_FDS_CONNECT_INFO = "SERVER=SQL_HOST;DATABASE=TARGET_DB"
HS_DB_NAME = TARGET_DB
HS_FDS_TRACE_LEVEL = OFF
HS_FDS_RECOVERY_ACCOUNT = RECOVER
HS_FDS_RECOVERY_PWD = RECOVER

2. Listener 端:listener.ora 追加 SID_DESC

SID_LIST_LISTENER =
  (SID_LIST =
    ...既有條目...
    (SID_DESC =
      (SID_NAME = TARGET_DB)
      (ORACLE_HOME = )
      (PROGRAM = tg4msql)
    )
  )

**重啟 Listener**:lsnrctl reload 或服務重啟。

3. Oracle 端:tnsnames.ora 追加條目

TARGET_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
    )
    (CONNECT_DATA = (SID = TARGET_DB))
    (HS = TARGET_DB)
  )

4. 驗證連通性

tnsping TARGET_DB  -- OK 即成功

5. 全域參數與 DB Link

ALTER SYSTEM SET GLOBAL_NAMES = FALSE SCOPE = BOTH;  -- 僅需執行一次

CREATE PUBLIC DATABASE LINK TARGET_DB
  CONNECT TO  IDENTIFIED BY 
  USING 'TARGET_DB';

關鍵一致性檢查表(排錯核心)

配置項init.oralistener.oratnsnames.oraDB Link
SID / HS_DB_NAMEHS_DB_NAME = TARGET_DBSID_NAME = TARGET_DBSID = TARGET_DB
HS = TARGET_DB
USING 'TARGET_DB'
PROGRAM—tg4msql——
HS_FDS_CONNECT_INFOSERVER=...;DATABASE=TARGET_DB———

**四處名稱完全一致** 是 90% 連不上問題的根因。

雙引號識別符處理標準作法

SQL Server 物件在 Oracle 端呈現為區分大小寫的雙引號識別符。

-- 錯誤
SELECT col FROM tbl@TARGET_DB;

-- 正確
SELECT "col" FROM "tbl"@TARGET_DB;

-- 最佳實踐:建立本地視圖轉換
CREATE OR REPLACE VIEW v_target_tbl AS
SELECT "col1" AS col1, "col2" AS col2 FROM "tbl"@TARGET_DB;

-- 應用層只查視圖,屏蔽異構細節
SELECT col1, col2 FROM v_target_tbl WHERE col1 = :val;

效能調優參數(加入 init.ora)

HS_FDS_FETCH_ROWS = 500              -- 每次網路往返抓取行數(預設 100)
HS_LONG_PIECE_TRANSFER_SIZE = 65536  -- LONG/LOB 片段傳輸大小
HS_NLS_NCHAR = UCS2                  -- 字元集協商(視 SQL Server 校對集)
HS_FDS_REPORT_REAL_AS_DOUBLE = TRUE  -- REAL 型別映射為 DOUBLE PRECISION

分散式交易啟用清單

  1. SQL Server 建立復原登入,授予 sysadmin 或足夠權限。
  2. init.ora 設定 HS_FDS_RECOVERY_ACCOUNT/PWD。
  3. Oracle 端 DISTRIBUTED_TRANSACTIONS ≥ 最大並行分散式交易數。
  4. 應用使用 SET TRANSACTION USE ROLLBACK SEGMENT 或依賴 AUM。

維運自動化腳本:新增資料庫一鍵部署

#!/bin/bash
# add_sqlserver_db.sh TARGET_DB SQL_HOST SQL_USER SQL_PWD
TARGET_DB=$1; SQL_HOST=$2; SQL_USER=$3; SQL_PWD=$4
ORACLE_HOME=/u01/app/oracle/product/19c

# 1. init.ora
cat > $ORACLE_HOME/tg4msql/admin/init${TARGET_DB}.ora <

結語

Transparent Gateway 多實例部署的核心是 **「四處名稱一致」**。將配置參數化、腳本化、清單化,即可實現「新增 SQL Server 資料庫 = 執行一鍵腳本 + 兩條手工命令」的標準化交付。搭配本地視圖屏蔽雙引號識別符、調優 HS_FDS_FETCH_ROWS、啟用分散式交易,即可構建穩健、高效、可維運的異構查詢中樞。

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