SQL Server中自动备份可以使用系统自带的功能,但Oracle则不行,必须自己写脚本。linux下Oracle的自动备份思路,主要是利用shell提供的crontab命令,定时运行备份脚本shell文件来实现自动备份。使用Oracle账户,步骤如下:
(1)首先建立备份文件存放的地方,我在/home/oracle/下建立了backup文件夹,再建立data和log分别存放数据库备份和日志文件。
(2)编写backup.sh文件:
#!/bin/sh
export ORACLE_BASE=/home/oracle/app
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export DATA_DIR=/home/oracle/backup/data
export LOGS_DIR=/home/oracle/backup/log
export BACKUPTIME="xzjxj"$(date +%Y-%m-%d_%H:%M:%S)
echo "Starting backup..."
echo "Backup file path $DATA_DIR"
echo "Backup log path $LOGS_DIR"
$ORACLE_HOME/bin/exp xzjxj/19880112@orcl file=$DATA_DIR/$BACKUPTIME.dmp log=$LOGS_DIR/$BACKUPTIME.log
echo "Backup completed."
shell文件的作用是在/home/oracle/backup/data下导出数据库文件,在/home/oracle/backup/log下导出日志文件。这里用到的exp是oracle提供的指令,在$ORACLE_HOME/bin下,该命令有许多参数可以使用,详情可以输入exp help=y来查看。
完成后保存在/home/oracle/backup下,在终端输入sh /home/oracle/backup/backup.sh。可能会遇到EXP-00091错误,那可能是权限不够,要检查建立的data和log文件夹权限。
(3)定义crontab定时执行脚本。接下来在终端输入crontab -u oracle -e(如果权限不够需要切换到root用户下输入)以vi形式打开,按下i,输入:
*/30 * * * * /home/oracle/backup/backup.sh
按下ESC,输入:wq保存退出。这句话的意思是每隔三十分钟执行一次脚本。其中五个星号分别表示分钟、小时、日、月、星期。*/n则表示每隔n(分钟、小时等)执行一次脚本。当看到crontab:installing new crontab表示输入成功。退出后输入crontab -l可以查看刚才输入的任务。crontab会使用sh的方式执行定制脚本,然后以邮件形式将执行结果发送给用户。过一段时间后使用mail命令打开邮件系统可以看到未读邮件,输入n即可打开最新邮件观看命令执行结果。在data和log文件夹也可以看到备份文件了。
注意:如果在邮件中看到bin/sh:/home/oracle/backup/backup.sh permission denied. 说明backup.sh的权限设置不足。此时打开backup.sh的属性,将权限夹页下的“允许以程序执行文件”的复选框勾上即可。