概述
ob没有提供连接oracle模式租户的golang驱动,但提供了标准的odbc驱动。go可以通过odbc接口连接ob oracle模式租户。x86,arm架构都有odbc驱动包。
需要的包
unixODBC
unixODBC-devel
ob-connector-odbc
libobclient
obclient
示例
示例为arm架构
1. 通过yum源安装unixODBC,unixODBC-devel
[root@obtest-4 /mnt/cdrom]$ yum install unixODBC unixODBC-devel --repo iso
Installed:
unixODBC-2.3.7-2.oe1.aarch64
unixODBC-devel-2.3.7-2.oe1.aarch64
2. 下载 libobclient、odbc驱动并安装
https://www.oceanbase.com/softwarecenter-enterprise
优先选择企业版中找,找不到则去社区版本找
libobclient-2.2.2-3.el7.aarch64(查询客户端接口驱动 (OBClient Libs))
ob-connector-odbc-2.0.6-20221018193003.el7.alios7.aarch64.rpm
$ rpm -qa |grep -E "libobclient|ob-connector-odbc"
libobclient-2.2.2-3.el7.aarch64
ob-connector-odbc-2.0.6-20221018193003.el7.alios7.aarch64
$ rpm -ql ob-connector-odbc-2.0.6-20221018193003.el7.alios7.aarch64.rpm
/u01/ob-connector-odbc/docs
/u01/ob-connector-odbc/docs/COPYING
/u01/ob-connector-odbc/docs/README
/u01/ob-connector-odbc/lib64
/u01/ob-connector-odbc/lib64/mariadb
/u01/ob-connector-odbc/lib64/mariadb/libobodbc.so
3. 配置环境变量
vi ~/.bash_profile
## ob odbc
export ODBCSYSINI=/etc
export ODBCINI=/etc/odbc.ini
export LD_LIBRARY_PATH=/u01/obclient/lib/:/u01/ob-connector-odbc/lib64/mariadb:/usr/lib64:$LD_LIBRARY_PATH
未配置环境变量会报错
[root@obtest-4 ~]$ isql -v obodbc
[01000][unixODBC][Driver Manager]Can't open lib '/u01/ob-connector-odbc/lib64/mariadb/libobodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
[root@obtest-4 ~]$ ls -l /u01/ob-connector-odbc/lib64/mariadb/libobodbc.so
-rwxr-xr-x 1 root root 1444232 Oct 18 2022 /u01/ob-connector-odbc/lib64/mariadb/libobodbc.so
4. 配置odbc
# 配置ob odbc驱动
vi /etc/odbcinst.ini
[Oceanbase]
Driver=/u01/ob-connector-odbc/lib64/mariadb/libobodbc.so
# 配置odbc数据源
vi /etc/odbc.ini
[ODBC Data Sources]
data_source_name = obodbc
[obodbc]
Driver=Oceanbase
Description = MyODBC 5 Driver DSN
SERVER = 192.168.56.2
PORT = 2883
USER = SYS@test#obcluster
Password = 'AAli@@88'
Database =
OPTION = 3
charset=UTF8
[root@obtest-4 ~]$ odbcinst -j
unixODBC 2.3.7
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /etc/odbc.ini
SQLULEN s.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
测试ob odbc连接oracle模式租户
[root@obtest-4 ~]$ isql -v obodbc SYS@test#obcluster 'AAli@@88'
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
SQL> select count(*) from dba_objects;
+-----------------------------------------+
| COUNT(*) |
+-----------------------------------------+
| 264141 |
+-----------------------------------------+
SQLRowCount returns 1
1 rows fetched
5. go通过odbc连接ob代码
[root@obtest-4 ~/gopath/obtest]$ cat main.go
package main
import (
"database/sql"
"fmt"
_ "odbc/driver"
)
func main() {
db, err := sql.Open("odbc", "DSN=obodbc;UID=SYS@test#obcluster;PWD=AAli@@88;")
err = db.Ping()
if err != nil {
panic(err)
}
defer db.Close()
stmt, err := db.Prepare("select count(*) cnt from dba_objects")
err = db.Ping()
if err != nil {
panic(err)
}
defer stmt.Close()
rows, err := stmt.Query()
if err != nil {
fmt.Printf("error:%s", err)
} else {
defer rows.Close()
for rows.Next() {
var cnt int
_ = rows.Scan(&cnt)
fmt.Println(cnt)
}
}
}
最后修改时间:2025-03-25 10:05:51
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




