通过从shell传递db凭据来使用shell脚本连接db

时间:2014-12-23 12:04:09

标签: linux oracle bash shell

您好我正在尝试使用shell脚本连接我的数据库并从shell传递数据库凭据。我收到“ORA-12162:TNS:错误地指定了网络服务名称”。请找到下面的脚本。

#!/bin/bash
DB_CREDENTIALS=$1

mkdir -p $PWD/logs

sqlplus -silent $DB_CREDENTIALS <<EOFSQL

set echo on
set timing on
set heading on
set feedback on
set linesize 5000
SET PAGESIZE 0
SET TRIMSPOOL ON


@teshscrpt.sql


EOFSQL

错误是:

ERROR:
ORA-12162: TNS:net service name is incorrectly specified


SP2-0306: Invalid option.
Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
where <logon>  ::= <username>[/<password>][@<connect_identifier>] | /
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

有人可以帮助我。

谢谢, 的Sudhir。

2 个答案:

答案 0 :(得分:1)

首先,你应该养成引用变量的习惯:

#!/bin/bash
DB_CREDENTIALS="$1"                         # HERE

mkdir -p "$PWD"/logs                        # HERE

sqlplus -silent "$DB_CREDENTIALS" <<EOFSQL  # HERE

然后:

  

我正试图从像bash-4.2$ dbcheck.sh

这样的shell调用我的脚本

显然,您的脚本将连接参数作为第一个参数。你应该这样调用它:

bash-4.2$ dbcheck.sh username/password@my.oracle.host

答案 1 :(得分:0)

您需要输入正确的凭据。像这样启动它:

dbcheck.sh username/password@database

您是否阅读过正确的sqlplus语法?