Oracle DB备份脚本未运行

时间:2016-01-05 23:11:44

标签: database oracle cron

我正在尝试使用Linux机器上的crontab进行备份。

我有一个简短的剧本:

#!/bin/bash
export ORACLE_HOME=<oracle_home_directory>
DATE=`date +%F_%H-%M-%S`

echo $DATE

/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp system/oramanager full=Y parallel=4 directory=data_pump_dir dumpfile=prod1-ecmdb1-$DATE.dmp logfile=prod-ecmdb1-$DATE.log compression=all

我已将此脚本放在crontab中:

02 17 * * * cd /u01/app/oracle/admin/ecmdb1/dpdump/ && /u01/app/oracle/admin/ecmdb1/dpdump/backup.sh > /tmp/test.out

但脚本没有运行。它在日志中说:

UDE-12162: operation generated ORACLE error 12162
ORA-12162: TNS:net service name is incorrectly specified

如果我手动运行整个脚本行,它可以正常工作。但使用cron并不能正常工作。我需要设置变量吗?

3 个答案:

答案 0 :(得分:0)

添加export ORACLE_SID=<...> 并确保cron设置在同一用户下,而不是root。

答案 1 :(得分:0)

设置ORACLE_HOME AND ORACLE_SID

export ORACLE_HOME=/u01/oracle/product/......
export ORACLE_SID=dbname

答案 2 :(得分:0)

这是使用社区提供的所有帮助后的工作脚本。

创建一个Bash文件(在此处使用nano):

nano DBBackUp.sh

复制以下代码并在尖括号中编辑内容:

#!/bin/bash
export ORACLE_HOME=<OracleHomeDirectory>
export ORACLE_SID=<SID>
DATE=`date +%d%m%Y`
DATETIME=`date +%F_%H%M%S`
echo $DATETIME | tee DBBackUp_$DATE.log
echo "Exporting..." | tee -a DBBackUp_$DATE.log
$ORACLE_HOME/bin/expdp <SCHEMA/PASSWORD> directory=DP dumpfile=BACKUP$DATE.dmp | echo export.log | cat export.log >>  DBBackUp_$DATE.log
echo "Compressing..." | tee -a DBBackUp_$DATE.log
zip  BACKUP$DATE.zip BACKUP$DATE.dmp >> DBBackUp_$DATE.log
echo "Deleting..." | tee -a DBBackUp_$DATE.log
rm BACKUP$DATE.dmp 2>&1 | tee -a DBBackUp_$DATE.log | cat DBBackUp_$DATE.log

创建cronjob:

00 13 28 04 * /home/oracle/DBBackUp/DBBackUp.sh

cronjob上,于2020年4月28日下午01:00执行

系统在DP目录中创建export.log。

在这里,所有文件都位于同一位置。 [DP目录]

确保oracle用户对shell脚本具有必要的权限和所有权。