ITPub博客

首页 > 数据库 > 数据库开发技术 > Linux任务:监控大日志文件和数据库备份

Linux任务:监控大日志文件和数据库备份

原创 数据库开发技术 作者:coffeeshop 时间:2007-03-26 21:24:22 0 删除 编辑

一、 关于 c r o n

这两个任务都用到了Linux的后台服务 c r o n, c r o n是系统主要的调度进程,可以在无需人工干预的情况下运行作业。检查在某个用户下是否有任务执行用下面的命令,有则列出,无则显示no crontab for user。

1、没有crontab:

[root@nod1 ~]# crontab -l

no crontab for root

[root@nod1 ~]#

2、定义了crontab

[oracle@nod1 ~]$ crontab -l

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=oracle

HOME=/

# Export ECampus Data & Backup to the Tape Storage

30 1 * * * /u01/oraback/db_backup.sh

# Find the files while larger than 8M at 1am everyday

0 1 * * * echo "*************************************" >> /u01/oraback/log.find

1 1 * * * echo `date` >> /u01/oraback/log.find

2 1 * * * find /u01/app/oracle/product/10.1.0/db_1/ -size +8388608c -exec ls -l {} ; >> /u01/oraback/files.find

3、前提条件

要使用 c r o n 服务,必须安装 vixie-cron RPM 软件包,而且必须在运行了crond服务的条件下。

检查软件包是否已安装:

[root@nod1 ~]# rpm -q vixie-cron

vixie-cron-4.1-36.EL4

[root@nod1 ~]#

要判定该服务是否在运行,使用 /sbin/service crond status 命令:

[root@nod1 ~]# service crond status

crond (pid 4516) is running...

[root@nod1 ~]#
如果服务没有启动,用/sbin/service crond start 命令启动。

二、 任务定义的意义

1、监控大文件

为什么要监控大文件呢?其实主要的目的是想监控oracle数据库的日志文件的大小。Oracle的一些进程不会切换日志,当数据库运行了很长一段时间后,这些日志文件的大小就会变得很惊人。像前段时间的Portal,有2个日志文件甚至达到了7.5G和2.6G,这就导致了服务器的I/O消耗很大,影响服务的运行。

2、数据库备份

数据库备份的重要性就不冗述了。

三、 用find命令监控大文件

Find命令的一般形式为:

find pathname -options [-print -exec -ok]。

这里对find命令的详细语法也不冗述。

下面就是查找大文件的命令:

find /u01/app/oracle/product/10.1.0/db_1/ -size +8388608c -exec ls -l {} ; >> /u01/oraback/files.find

意思是:查找$ORACLE_HOME下的文件大小大于8M的文件,并执行ls –l命令,将结果写到指定的监控日志文件中files.find中。

四、 定时备份数据库,并存储到磁带库的脚本

脚本如下:

#文件名:db_backup.sh

#路 径:/u01/oraback/

#定义shell中使用的变量

str=`date +'%Y%m%d'`

BACKUP_DIR=/u01/oraback

#运行Oracle用户的bash_profile,设置当前运行的一些环境变量

cd /home/oracle

. .bash_profile

#开始

echo "****************************************************************" >> $BACKUP_DIR/Backup.log

#用datapump命令导出znuel_dev的方案

expdp username/******** schemas=username directory=oraback dumpfile=$str.dmp logfile=$str.log

echo `date +'%Y%m%d %H:%M:%S'` "Step 1:EXPDP Finished!" >> $BACKUP_DIR/Backup.log

echo " Directory:$BACKUP_DIR" >> $BACKUP_DIR/Backup.log

echo " DumpFile: $BACKUP_DIR/$str.dmp" >> $BACKUP_DIR/Backup.log

echo " LogFile: $BACKUP_DIR/$str.log" >> $BACKUP_DIR/Backup.log

#压缩dmp和log文件

cd $BACKUP_DIR

tar -czvf $str.tar.gz $str.dmp $str.log

echo `date +'%Y%m%d %H:%M:%S'` "Step 2:Compress Finished!" >> $BACKUP_DIR/Backup.log

echo " File:$BACKUP_DIR/$str.tar.gz" >> $BACKUP_DIR/Backup.log

#备份压缩文件到磁带库

tar -rvf /dev/st0 $str.tar.gz

echo `date +'%Y%m%d %H:%M:%S'` "Step 3:Backup to Tape Storage Finished!" >> $BACKUP_DIR/Backup.log

#删除15天前的文件,即本地只备份15天的数据

find $BACKUP_DIR -name "*.dmp" -mtime +15 -exec rm {} ;

find $BACKUP_DIR -name "*.log" -mtime +15 -exec rm {} ;

find $BACKUP_DIR -name "*.tar.gz" -mtime +15 -exec rm {} ;

echo `date +'%Y%m%d %H:%M:%S'` "Step 4:Delete Expired Files Finished!" >> $BACKUP_DIR/Backup.log

echo `date +'%Y%m%d %H:%M:%S'` "All Step Finished!" >> $BACKUP_DIR/Backup.log

#End

五、 定义crontab

在Oracle用户下用crontab –e命令创建定时任务:

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=oracle

HOME=/

# Export ECampus Data & Backup to the Tape Storage

30 1 * * * /u01/oraback/db_backup.sh

# Find the files while larger than 8M at 1am everyday

0 1 * * * echo "*************************************" >> /u01/oraback/log.find

1 1 * * * echo `date` >> /u01/oraback/log.find

2 1 * * * find /u01/app/oracle/product/10.1.0/db_1/ -size +8388608c -exec ls -l {} ; >> /u01/oraback/files.find

定义完后 :wq,crontab就会自动生成oracle用户的任务文件,存放在/var/spool/cron中的以用户名命令的文件中。

cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/73481/viewspace-906981/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-09-10

  • 博文量
    4
  • 访问量
    139695