我使用以下脚本运行sql文件并将日志传递到日志文件夹。
#!/usr/bin/bash
filename="$1"
time_stamp=$(date +%Y-%m-%d-%T)
mkdir -p "/APPLICATIONS/log/anonymize_${time_stamp}"
while read -r line
do
schema_name="$line"
error_level=0
echo "$schema_name"
password=$(sed -n "/name>.*$schema_name<\/name>/{s#.*<password>##;s#</password>.*##;p;}" connections.xml)
datasource=$(sed -n "/name>.*$schema_name<\/name>/{s#.*<datasource>##;s#</datasource>.*##;p;}" connections.xml)
$ORACLE_HOME/bin/sqlplus -s /nolog <<-EOF>> "/APPLICATIONS/log/anonymize_${time_stamp}/anonymize_$schema_name.log"
WHENEVER OSERROR EXIT 9;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
connect $schema_name/${password}@${datasource}
@/APPLICATIONS/sql/start_anon.sql
EOF
sql_return_code=$?
if [ $sql_return_code != 0 ]
then
echo "$schema_name - Failed. Logs - /APPLICATIONS/log"
echo "Error code $sql_return_code"
else
echo "$schema_name - Success."
fi
echo "************************************"
done < "/APPLICATIONS/exe/schema.txt"
以下脚本可以正常工作。 但是,如果在此服务器中从不同服务器外部启动了相同的脚本,则它将失败并显示错误
SP2-0306: Invalid option.
Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
where <logon> ::= <username>[/<password>][@<connect_identifier>] | /
SP2-0640: Not connected
请告知。
解决: 在提到带有完整路径的connections.xml之后,脚本也已经从不同的服务器成功执行。