【问题标题】:to establish database connection using UNIX shell script使用 UNIX shell 脚本建立数据库连接
【发布时间】:2015-08-11 12:22:45
【问题描述】:

我是 shell 脚本的新手,对此知之甚少或一无所知。 我必须阅读一个 db.properties 文件,其中包含数据库连接详细信息,即要连接到哪个数据库。然后我必须建立与该数据库的连接并执行操作以检查当前时间。

下面是我的 db.properties 文件:-

driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@171.01.187.94:1532:DEV
userName=abc
password=abc

下面是我调用 db.properties 文件的脚本:-

#!/bin/bash

file="./database.properties"

if [ -f "$file" ]
then
    echo "$file found."
 . $file

  echo "User Id       = " ${userName}
  echo "user password = " ${password}
  echo "url  = " ${url}

  sqlplus -S ${userName}/${password}@${url}

else
    echo "$file not found."
fi

但我收到以下错误:-

错误: ORA-12154: TNS: 无法解析指定的连接标识符

有人可以帮忙解决上述问题吗?

【问题讨论】:

  • 您本地的 Oracle TNS 设置不包括您要连接的数据库。您包含一个 Java JDBC 驱动程序类名,但您使用 sqlplus 客户端。在我看来。
  • @duffymo :- 是的,不是 :( 你能帮我按照我的要求修改脚本吗?
  • 否,请联系您的 Oracle 数据库管理员。
  • 您没有将 JDBC URL 传递给 SQL*Plus。那永远行不通。您通常希望在您的tnsnames.ora 文件中创建一个条目,假设您使用的是本地命名,它指向该数据库。假设 TNS 别名被命名为“dev”,那么您将使用 sqlplus user/password@dev 连接到数据库。
  • 有关 tnsnames.ora 的更多(但不完整)信息,请参阅stackoverflow.com/questions/23534668/… 中的答案。祝你好运。

标签: oracle shell unix


【解决方案1】:

不用担心 tnsnames.ora 的定义,您拥有使用 sqlnet 建立连接所需的所有信息。

如下修改你的 database.properties 文件:

driverClassName=oracle.jdbc.driver.OracleDriver
url='(description=(address_list=(address=(protocol=TCP)(host=171.01.187.94)(port=1532)))(connect_data=(service_name=DEV)))'
userName=abc
password=abc

就是这样。您无需更改脚本。

#!/bin/bash

file="./database.properties"

if [ -f "$file" ]
then
    echo "$file found."
 . $file

  echo "User Id       = " ${userName}
  echo "user password = " ${password}
  echo "url  = " ${url}

sqlplus -S ${userName}/${password}@${url}

else
    echo "$file not found."
fi

注意:我假设 DEV 是数据库服务名称,如果是数据库 SID,只需将配置字符串修改为:

driverClassName=oracle.jdbc.driver.OracleDriver
url='(description=(address_list=(address=(protocol=TCP)(host=171.01.187.94)(port=1532)))(connect_data=(sid=DEV)))'
userName=abc
password=abc

问候

【讨论】:

  • 我在脚本中添加了以下内容 #!/bin/bash file="./database.properties" query="SELECT SYSDATE -2 FROM DUAL" if [ -f "$file" ]然后回显“找到$文件。” . $file echo "用户 ID = " ${userName} echo "用户密码 = " ${password} echo "url = " ${url} sqlplus ${userName}/${password}@${url}
【解决方案2】:

请在端口和 SID 名称之间尝试 /。 用户名/密码@host:port/SID

【讨论】:

    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多