天天看点

Linux中Oracle10g自动备份

方法一:

使用crontab命令,定时执行Oracle自动备份

00 22 * * * /usr/bin/su - oracle -c "/home/oracle/FJGYZX/oraclebackup_FJGYZXDB.sh"

oraclebackup_FJGYZXDB.sh脚本的内容如下:

export ORACLE_SID=fjgyzxdb

export ORACLE_BASE=/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1

export PATH=$ORACLE_HOME/bin:$PATH

export NLS_LANG=American_America.ZHS16GBK

ORACLE_BACKUP_PATH=/gxhdata/dbback

BACKUPDATE=`date "+%Y%m%d%H%M%S"`

LOGFILE=${ORACLE_BACKUP_PATH}/dbbak_${BACKUPDATE}.log

BACKUPFILE=${ORACLE_BACKUP_PATH}/${ORACLE_SID}_${BACKUPDATE}.dmp

echo "-----------------------Backup Start----------------------" > ${LOGFILE}

echo "backup start time:" `date +%Y-%m-%d_%H:%M:%S` >> ${LOGFILE}

/oracle/product/11.1.0/db_1/bin/exp gjyw/[email protected] owner=gjyw file=${BACKUPFILE} log=${LOGFILE}

gzip -v ${BACKUPFILE}

echo "backup end time:" `date +%Y-%m-%d_%H:%M:%S` >> ${LOGFILE}

echo "-----------------------Backup End------------------------" >> ${LOGFILE}

方法二:

脚本文件 backup.sh

#!/bin/sh

rq=`date '+%y_%m_%d_%H_%M_%S'`

echo $rq

su - oracle -c "exp user/userpwd file=/home/oracle/expdat_$rq.dmp"

exit 0

编写完shell脚本之后,要对其赋予可执行权限及其用户所属:

# chmod 777 backup.sh

# chown oracle backup.sh

同时,确保备份的文件目录归属于oracle用户:

# chown –R oracle.oinstall /home/oracle

# crontab –e

0 9-20/1,11 * * 1-5 /home/backup.sh

(设置为每周工作日9点到晚8点每隔一小时自动备份)

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动启动,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

/sbin/service crond reload //查看服务状态

# /etc/init.d/crond start //启动服务

# /etc/init.d/crond stop //关闭服务

# /etc/init.d/crond restart //重启服务

# /etc/init.d/crond reload //重新载入配置

你也可以将这个服务在系统启动的时候自动启动:

在/etc/rc.d/rc.local这个脚本的末尾加上:

/sbin/service crond start

直接用crontab命令编辑

  cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

  

  crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

  crontab -l //列出某个用户cron服务的详细内容

  crontab -r //删除没个用户的cron服务

  crontab -e //编辑某个用户的cron服务

 

  例如: root查看自己的cron设置:crontab -u root -l

                root想删除fred的cron设置:crontab -u fred -r

  在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e

  进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls

        这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:

  分钟 (0-59)

  小時 (0-23)

  日期 (1-31)

  月份 (1-12)

  星期 (0-6)//0代表星期天

  除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。以下举几个例子说明问题:

  每两个小时

  0 */2 * * * echo "Have a break now." >> /tmp/test.txt    //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了

  晚上11点到早上8点之间每两个小时,早上八点

  0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt

  每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

  0 11 4 * 1-3 command line

附:

在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。

分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。

解决:1)在windows下转换:

利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。

2)也可在Linux中转换:

首先要确保文件有可执行权限

# chmod a+x filename

然后修改文件格式

# vi filename

利用如下命令查看文件格式

:set ff 或 :set fileformat

可以看到如下信息

fileformat=dos 或 fileformat=unix

利用如下命令修改文件格式

:set ff=unix 或 :set fileformat=unix

:wq!(存盘退出)

最后再执行文件

# ./filename

方法三:

1、建立Oracle用户的一个crontab

su - root

crontab -u Oracle -l */5 * * * * /home/Oracle/oracle_backup.sh

(每5分钟执行一次该shell文件,这里是位了测试方便,具体什么时间请自行修改。)

2、建立一个shell文件

cd /home/Oracle/

vi Oracle_back.sh

-

内容如下:

#!/bin/bash

export Oracle_BASE=/oracle

export Oracle_HOME=/oracle/product/10.2.0/db_1

export Oracle_SID=orcl

export PATH=$Oracle_HOME/bin:$PATH

rq=`date +%Y%m%d_%H%M`

/home/Oracle/oracle/product/10.2.0/db_1/bin/exp scott/tiger owner=scott file=/home/oracle/backup/data_$rq.dmp log=/home/oracle/backup/log/log_backup_$rq.log

注意:(1)这里的export所输出的内容要写在该shell里面,因为crontab不能读取用户的环境。

(2)一般来说,执行定期的命令不要用root权限。这个只是个建议。

(3)crontab命令一般要运行起来需几分钟,请等待下。改了后,发现没什么变化,这个是正常的,等待一下就可。

继续阅读