当前位置: 首页 > 面试题库 >

如何在Go中连接到Oracle

訾高明
2023-03-14
问题内容

我收集到有两种方法可以在Windows中(在Windows上)连接到Oracle DB:

  1. github.com/tgulacsi/goracle
  2. github.com/mattn/go-oci8

但是对于我这个级别的人(开源+ golang的初学者)来说,这两种方法/驱动程序非常棘手。

在不同的机器上进行部署,开发等工作时,这也是一个负担(也假设它会工作)。

有没有更好的方法可以在golang中连接到Oracle db,或者如果没有,那么有人可以在高层次的视图或任何对此事进行解释的情况下向我解释吗?

指针将不胜感激。

TQ。


问题答案:

如果您仍然感兴趣,我已经在Windows上与Go和Oracle一起工作了几个月。到目前为止,我最喜欢的驱动程序是go-
oci8。它比goracle快得多,并且似乎更活跃。

我们的某些应用程序需要部署在我们无权访问的计算机上。两种本机SQL驱动程序都可以与应用程序一起编译,而无需任何外部配置,因此这是一个巨大的优势。该计算机仍将需要安装Oracle客户端,但这是唯一的外部依赖关系。

我不会说go-
oci8还可以投入生产,但是当您知道它的局限性时,它就足够稳定了。一个示例是,当同时在多个goroutine上运行时,它会感到恐慌,因此,如果需要,可能需要使用互斥锁。

我基本上已经按照本教程进行安装:https :
//gist.github.com/mnadel/8678269

最棘手的部分是正确地创建oci8.pc。我的是:

prefix=/devel/target/1.0
exec_prefix=${prefix}
libdir=C:/oracle/instantclient_12_1_64/sdk/lib/msvc
includedir=C:/oracle/instantclient_12_1_64/sdk/include
oralib=C:/oracle/instantclient_12_1_64/sdk/lib/msvc
orainclude=C:/oracle/instantclient_12_1_64/sdk/include
gcclib=c:/MinGW_64/mingw64/lib
gccinclude=c:/MinGW_64/mingw64/lib
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: oci8
Version: 12.1
Description: oci8 library
Libs: -L${oralib} -L${gcclib} -loci
Libs.private:
Cflags: -I${orainclude} -I${gccinclude}

有些事情可能是多余的,我可能会尝试在干净的机器上进行改进。

要记住的重要一点是,对于Go和Oracle客户端,应该使用相同的体系结构。因此,如果要使用Go的64位版本,则还需要Oracle的64位版本。我同时具有32位和64位版本,而64位是我的默认设置,当我需要构建32位版本时,我使用bat文件来更改必要的路径和环境变量。

可能值得花一些时间使其工作,您可能会获得比使用ODBC更好的性能。我一直在使用它的数据量较高(查询可提取5+百万行),并且效果很好。



 类似资料:
  • 问题内容: 我有一个开放的TCP连接,并像这样的for循环从中读取数据 现在,我想像这样将连接升级到TLS(包含已加载的证书) 当我这样做时,当服务器尝试握手时,我在客户端上遇到了分段错误。我执行一个SMTP服务器,并正与测试它swaks使用标志。Swaks的终端输出如下 由于swaks是经过测试的工具,并且可以与我以前使用过的nodeJS SMTP实现一起使用,因此我不怀疑该错误是在客户端。 我

  • 问题内容: 我在服务器中使用,因此客户端可以从服务器获取通知。 但是,似乎客户端连接到服务器后,如果客户端和服务器之间没有任何数据传输,服务器将在处返回EOF错误,这看起来像是一种超时机制。 我在Google中搜索过,看来websocket协议具有 乒乓 心跳来维持连接,我想问一下是否支持此ping协议? 如果要保持客户端与服务器之间的连接有效,该怎么办? 问题答案: 直到2013年,go.net

  • 问题内容: 在Go中,TCP连接(net.Conn)是io.ReadWriteCloser。我想通过模拟TCP连接来测试我的网络代码。我有两个要求: 要读取的数据存储在字符串中 每当写入数据时,我都希望将其存储在某种缓冲区中,以便以后使用 是否有数据结构或简单的方法? 问题答案: 为什么不使用?它是一种并且具有获取存储数据的方法。如果需要将其设置为,则可以定义自己的类型: 并定义一个方法:

  • 我试图连接到我的kubernetes部署中的postgresql服务(pod),但是我的GCP没有提供端口(所以我不能使用类似于:$psql-h localhost-u postgresql admin1-password-p 31070 postgresql连接到postgresql并查看我的数据库)。 使用打开的防火墙:posgresql-jhipster入口应用于所有 IP范围:0.0.0.

  • 问题内容: 这是我的代码: 输出量 为什么和具有相同的地址?在TCP中,我认为为新连接创建了一个新套接字。 问题答案: 这让我困惑了一秒钟,但这是正确的。确实创建了一个新的套接字(具有唯一的本地+远程地址元组)。维基百科的这段引文很好地描述了它: 服务器可以使用相同的本地端口号和本地IP地址创建多个同时建立的TCP套接字,每个套接字都映射到其自己的服务器子进程,并为自己的客户端进程提供服务。由于远

  • 我每天都在连接mongo db,它工作得很好,但今天它困扰着我下面的错误,任何人都可以帮我请。 连接到:测试2017-01-10T14:26:13.073 0530警告:连接到127.0.0.1:27017失败,原因:错误号:111连接被拒绝2017-01-10T14:26:13-074 0530错误:无法连接到服务器127.0-0.1:27017(127.0.0.1),在src/mongo/sh