我正在尝试使用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并不能正常工作。我需要设置变量吗?
答案 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脚本具有必要的权限和所有权。