Linux中Oracle10g自动备份

来源:互联网 发布:路径规划软件 编辑:程序博客网 时间:2024/04/28 07:44

方法一:

使用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/gjyw@fjgyzxdb 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命令一般要运行起来需几分钟,请等待下。改了后,发现没什么变化,这个是正常的,等待一下就可。