我有一个包装Oracle的小程序SQLLoader实用程序。SQLLoader采用的数据库地址参数似乎是TNS样式的地址,如下所示:
username/password@schemaname我的程序还使用JDBC访问数据库并执行加载后诊断。不幸的是,目前您还需要提供地址,如下所示:
jdbc:oracle:thin:username/password@172.17.125.131:1521:EE有没有什么可以相互转换的方法呢?即,如果给定了JDBC url,则转换为TNS地址SQLLoader将采用,反之亦然。
发布于 2012-02-28 17:12:48
您的SQL*Loader连接正在使用TNS别名(因此schemaname通常不是很正确,但对于您来说可能恰好是正确的)。将其转换为类似于JDBC字符串的内容将涉及从tnsnames.ora文件中解析出数据,这是可行的,但不是微不足道的(尽管我相信比我更擅长awk-fu的人不会同意)。如果查看该文件,您应该会看到一个条目,其中包含与JDBC值相对应的地址值。
使用另一种方法要简单得多,因为您可以在SQL*Loader命令中使用'easy connect‘语法来代替TNS别名:
sqlldr username/password@172.17.125.131:1521/EE control=...正如您所看到的,这对于转换(或转换) JDBC地址几乎是微不足道的,因为您只需添加(或删除) jdbc:oracle:thin:部分。除了,最后的分隔符从/更改为:。如何更改将取决于您的包装器程序-它是否是Windows批处理文件、*nix shell脚本、C可执行文件等。最简单的方法可能是单独获取元素,并以不同的方式连接它们,但这也取决于您调用它的方式。
发布于 2015-11-13 03:01:05
一旦连接(无需sysadmin),您就可以从数据库创建所需的字符串。
也许这看起来很愚蠢,但从任何实用程序中查询相同的参数都会花费您很长的编程时间。
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;顺便说一句,将登录凭据放入连接字符串并不是一种好的做法,因为缺乏可靠性,您可以将它们作为参数添加。
https://stackoverflow.com/questions/9474913
复制相似问题