Chinaunix首页 | 论坛 | 博客
  • 博客访问: 136420
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 501
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-24 15:28
文章分类

全部博文(43)

文章存档

2015年(18)

2014年(25)

我的朋友

分类: LINUX

2014-11-26 09:30:41

  oracle 自动备份脚本

1、 创建脚本文件
    vi /opt/oracle/bakup/bakup.sh
    #!/bin/sh  
      
    export ORACLE_BASE=/opt/oracle  
    export ORACLE_HOME=$ORACLE_BASE/102
    export ORACLE_SID=orcl  
    export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin  
      
    export DATA_DIR=/opt/oracle/bakup/data  
    export LOGS_DIR=/opt/oracle/bakup/logs  
    export DELTIME=`date -d "7 days ago" +%Y%m%d`  
    export BAKUPTIME=`date +%Y%m%d%H%M%S`  
      
    mkdir -p $DATA_DIR  
    mkdir -p $LOGS_DIR  
      
    echo "Starting bakup..."  
    echo "Bakup file path $DATA_DIR/$BAKUPTIME.dmp"  
    exp shop/lyisABC0987@orcl file=$DATA_DIR/$BAKUPTIME.dmp log=$LOGS_DIR/$BAKUPTIME.log  
      
    echo "Delete the file bakup before 7 days..."  
    rm -rf $DATA_DIR/$DELTIME*.dmp  
    rm -rf $LOGS_DIR/$DELTIME*.log  
    echo "Delete the file bakup successfully. "  
      
    echo "Bakup completed."  



注:编写完shell脚本之后,要对其赋予可执行权限及其用户所属
# chown –R oracle.oinstall /opt/oracle/bakup/bakup.sh      //确保备份的文件目录归属于oracle用户
# chmod 755 /home/bakup/bakup.sh


2、添加到任务调度

#crontab -u oracle -e
0 3 * * * sh /opt/oracle/bakup/bakup.sh         //几个*是默认的格式
即每天凌晨3点进行备份


如需每天备份多次,可设置不同时间段备份:
例如:0 3,13,18 * * * /home/bakup/bakup.sh,即每天3点、13点、18点进行备份。
说明:文件备份目录,用户oracle必须有更改权限,否则无法备份。










关于cron服务

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

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

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

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

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

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


要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可。

 
  例如: 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



阅读(1601) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~