crontab定时备份问题
RT,请大神们帮看下。我写的这个,不自动备份是不是少了点什么东西?
[oracle@ap9 ~]$ crontab -l
* 0 1,15 * * /was/oracle/oradata/rman_0.sh>/dev/null 2>&1
* 0 */3 * * /was/oracle/oradata/rman_1.sh>dev/null 2>&1
[oracle@ap9 ~]$
#su - oracle
export ORACLE_SID=jlgayxjk
rman target/
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level=0 database;
release channel c1;
release channel c2;
release channel c3;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/was/oracle/oradata/rman/jlgayxjk_bak_%U_%T';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oracle/product/10.2.0/db_1/dbs/snapcf_jlgayxjk.f'; # default
[解决办法]
-- 贴一个备份脚本给你吧:
#!/bin/bash
# incremental level 0 backup script
source /home/oracle/.bash_profile
current_day=`date +%Y%m%d`
full_day=102_full_$current_day
mkdir /data/oracle/ora_backup/$full_day
echo '-------------------------------------'
echo "-- Begin Full Backup of DB 10.103.23.102 DateTime: `date` --"
echo '-------------------------------------'
rman target / <<EOF
run
{
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data/oracle/ora_backup/$full_day/PID-%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
crosscheck backup;
delete noprompt obsolete;
delete noprompt expired backup;
allocate channel dev1 type disk maxpiecesize=30720M;
allocate channel dev2 type disk maxpiecesize=30720M;
allocate channel dev3 type disk maxpiecesize=30720M;
allocate channel dev4 type disk maxpiecesize=30720M;
backup as compressed backupset incremental level 0 tag='db0'
format '/data/oracle/ora_backup/$full_day/%n_%T_%U' database;
sql 'alter system archive log current';
backup archivelog all format '/data/oracle/ora_backup/$full_day/arc_%n_%T_%U' delete all input;
release channel dev1;
release channel dev2;
release channel dev3;
release channel dev4;
}
EOF
echo '------------------------------------'
echo "-- End Full Backup of DB 10.103.23.102 DateTime: `date` --"
echo '------------------------------------'
scp -l 51200 -r /data/oracle/ora_backup/$full_day oracle@10.103.23.103:/data/oracle/ora_backup102 &
wait
echo '------------------------------------'
echo "-- End of Send file to 10.103.23.103 DateTime: `date` --"
echo '------------------------------------'
echo ''
echo ''
[解决办法]
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
[解决办法]
在你的脚本中,把rman的路径写全
crontab是不认环境变量的
[解决办法]
source /home/oracle/.bash_profile
加上这一个应该就可以了
[解决办法]
环境变量没有加载上。
crontab中不会自动加载环境变量。
需要你在脚本中手动加载环境变量。
