暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

go连接oceanbase oracle模式租户

原创 范计杰 2024-06-07
1141

概述

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论