【磐維資料庫】Oracle(透明閘道器)訪問磐維資料庫(PanWeiDB)

狂澜与玉昆0950發表於2024-10-23

磐維資料庫(PanWeiDB)是由中國移動基於中國本土開源資料庫openGauss打造的自研資料庫產品,主要面向ICT基礎設施。它具有高效能、高可靠性、高安全性和高相容性的特點,能夠支援集中式、分散式、雲原生、一體機等多種應用場景。目前,磐維資料庫已在中國移動的多個省(區、市)公司及專業公司部署應用。未來,磐維資料庫計劃在雲原生、Serverless、智慧運維、生態相容等方面持續做強深度自主研發,進一步打造面向全行業的資料管理解決方案。隨著磐維資料庫不斷深入資料庫國產化替換的深水區,越來越多的核心業務系統都在進行程式碼改造,準備上線磐維資料庫。因歷史原因,程式開發人員很熱衷於使用database link從Oracle例項A訪問其他Oracle例項(B、C、D...),從而完成資料的操作,但隨著遷移到磐維資料庫,異構資料庫之間的資料互動就成了不容忽視的問題。

本文介紹了江西移動公司,是如何從Oracle資料庫使用透明閘道器訪問磐維資料庫資料的。

無特別說明,都以oracle使用者執行

測試環境資訊

Oracle 19C         -- 192.168.11.151
PanWeiDB 3.0.0     -- 192.168.0.120

1、上傳odbc驅動包到oracle伺服器並解壓

cd /home/oracle
mkdir pwodbc
cd pwodbc
tar xf  PanWeiDB-V2.0-ODBC-2.0.3_B01.tar.gz

2、配置odbc例項驅動

cat<<+>/home/oracle/pwodbc/unixODBC-2.3.9/etc/odbcinst.ini
[PWMPP]
Driver64=/home/oracle/pwodbc/odbc/lib/psqlodbcw.so
setup=/home/oracle/pwodbc/odbc/lib/psqlodbcw.so
+

3、配置odbc客戶端連線磐維資料的資訊

cat <<+>/home/oracle/pwodbc/unixODBC-2.3.9/etc/odbc.ini
[pwdb]
Description=Test
Driver=PWMPP
Servername=192.168.0.120
Database=testdb
Username=tpcc
Password=tpcc@123
Port=17700
Sslmode=allow
+

4、配置Oracle和grid使用者環境變數,以使用指定的odbc驅動

cat <<+>>~/.bash_profile
export LD_LIBRARY_PATH=/home/oracle/pwodbc/lib:/home/oracle/pwodbc/odbc/lib:/home/oracle/pwodbc/unixODBC-2.3.9/lib:$LD_LIBRARY_PATH
export ODBCSYSINI=/home/oracle/pwodbc/unixODBC-2.3.9/etc
export ODBCINI=/home/oracle/pwodbc/unixODBC-2.3.9/etc/odbc.ini
+
source ~/.bash_profile

5、為驅動路徑新增合適的許可權,保證grid和oracle都有許可權訪問

chmod 755 -R /home/oracle/pwodbc

6、驗證odbc驅動能正常訪問PanWeiDB庫,Oracle和grid使用者都驗證一下

odbcinst  -j
odbcinst -q -d
isql -v pwdb

結果類似如下:

[oracle@ora19c1 ~]$ isql -v pwdb
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

7、Oracle 配置透明閘道器服務,這裡以PanWeiDB為sid示例
配置oracle使用者hs, 配置init<sid>.ora在 $ORACLE_HOME/hs/admin/init<sid>.ora

cat <<+>$ORACLE_HOME/hs/admin/initpwdb.ora
HS_FDS_CONNECT_INFO = pwdb
HS_FDS_TRACE_LEVEL = 255
HS_FDS_SHAREABLE_NAME = /home/oracle/pwodbc/unixODBC-2.3.9/lib/libodbc.so
HS_NLS_NCHAR = UCS2
HS_LANGUAGE = AMERICAN_AMERICA.AL32UTF8
set LD_LIBRARY_PATH=/home/oracle/pwodbc/lib:/home/oracle/pwodbc/odbc/lib:/home/oracle/pwodbc/unixODBC-2.3.9/lib
set ODBCSYSINI = /home/oracle/pwodbc/unixODBC-2.3.9/etc
+

8、增加偵聽

grid:  $ORACLE_HOME/network/admin/listener.ora  增加 
SID_LIST_LISTENER=
(SID_LIST=
   (SID_DESC=
     (SID_NAME=pwdb)
     (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1)
     (PROGRAM=dg4odbc)
     (ENVS="LD_LIBRARY_PATH=/home/oracle/pwodbc/lib:/home/oracle/pwodbc/odbc/lib:/home/oracle/pwodbc/unixODBC-2.3.9/lib")
   )
)

重新載入偵聽

lsnrctl reload
lsnrctl status

9、配置tns
oracle: $ORACLE_HOME/network/admin/tnsnames.ora 增加

pwdb =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.11.151)(PORT=1521))
    (CONNECT_DATA=(SID=pwdb))
    (HS=OK)
  )
tnsping pwdb

10、建立dblink驗證

create database link  pg_link connect to "tpcc" identified by "tpcc@123" using 'pwdb';
select * from "t1"@pg_link ;

結果類似如下

SQL> select * from "t1"@pg_link ;
	id
----------
	 1
SQL> 

注意:
訪問PanWeiDB的資料庫表是需要在表名字上加上雙引號(因為在oracle預設會轉換為大寫,而PanWeiDB預設小寫,會造成訪問不到表)

相關文章