首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TNS:监听JDBC Url

TNS:监听JDBC Url
EN

Stack Overflow用户
提问于 2012-02-28 09:05:26
回答 2查看 1.5K关注 0票数 0

我有一个包装Oracle的小程序SQLLoader实用程序。SQLLoader采用的数据库地址参数似乎是TNS样式的地址,如下所示:

代码语言:javascript
复制
username/password@schemaname

我的程序还使用JDBC访问数据库并执行加载后诊断。不幸的是,目前您还需要提供地址,如下所示:

代码语言:javascript
复制
jdbc:oracle:thin:username/password@172.17.125.131:1521:EE

有没有什么可以相互转换的方法呢?即,如果给定了JDBC url,则转换为TNS地址SQLLoader将采用,反之亦然。

EN

回答 2

Stack Overflow用户

发布于 2012-02-28 17:12:48

您的SQL*Loader连接正在使用TNS别名(因此schemaname通常不是很正确,但对于您来说可能恰好是正确的)。将其转换为类似于JDBC字符串的内容将涉及从tnsnames.ora文件中解析出数据,这是可行的,但不是微不足道的(尽管我相信比我更擅长awk-fu的人不会同意)。如果查看该文件,您应该会看到一个条目,其中包含与JDBC值相对应的地址值。

使用另一种方法要简单得多,因为您可以在SQL*Loader命令中使用'easy connect‘语法来代替TNS别名:

代码语言:javascript
复制
sqlldr username/password@172.17.125.131:1521/EE control=...

正如您所看到的,这对于转换(或转换) JDBC地址几乎是微不足道的,因为您只需添加(或删除) jdbc:oracle:thin:部分。除了,最后的分隔符从/更改为:。如何更改将取决于您的包装器程序-它是否是Windows批处理文件、*nix shell脚本、C可执行文件等。最简单的方法可能是单独获取元素,并以不同的方式连接它们,但这也取决于您调用它的方式。

票数 0
EN

Stack Overflow用户

发布于 2015-11-13 03:01:05

一旦连接(无需sysadmin),您就可以从数据库创建所需的字符串。

也许这看起来很愚蠢,但从任何实用程序中查询相同的参数都会花费您很长的编程时间。

代码语言:javascript
复制
SELECT
  USER
  ||'/******@'
  || sys_context('userenv','db_name') as simpleconnection
  ,'jdbc:oracle:thin:'
      ||USER
      ||'/******@'
      || sys_context('userenv', 'server_host') --host
      || ':'
      || sys_context('USERENV', 'SID') --port
      || ':'
      || sys_context('userenv','db_name') AS "Oracle Eight" --SID
  ,'jdbc:oracle:thin:'
      ||USER
      ||'/******@'
      ||sys_context('userenv', 'server_host') --host
      ||':'
      ||sys_context('USERENV', 'SID') --port
      ||'/'
      ||  sys_context('userenv','service_name') AS "host form"
  ,'jdbc:oracle:thin:'
      ||USER
      ||'/******@'
      ||sys_context('userenv', 'ip_address')  --ip
      ||':'
      ||sys_context('USERENV', 'SID') --port
      ||'/'
      ||  sys_context('userenv','service_name') AS "IP form"
  ,'jdbc:oracle:thin:'
      ||USER
      ||'/******@(description=(address=(host='
      ||sys_context('userenv', 'server_host')    --host
      ||')(protocol='
      ||sys_context('userenv', 'network_protocol')  --protocol
      ||')(port='
      ||sys_context('USERENV', 'SID')  --port
      ||'))(connect_data=(service_name='
      ||  sys_context('userenv','service_name')  --service name
      ||')(server='
      ||sys_context('userenv','host')  --name of the machine
      ||')))' AS "TNS form"
FROM dual d;

顺便说一句,将登录凭据放入连接字符串并不是一种好的做法,因为缺乏可靠性,您可以将它们作为参数添加。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9474913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档