shell判断oracle主备数据库备份脚本

1. 脚本如下

说明:按照客户要求,在主备数据库上同时部署脚本,自动判断是否是主库,如果是主库则进行备份,备库不需要备份,记录日志为备份库即可,以下脚本仅供参考,可以进一步优化。

脚本说明:

1、DATABASE_ROLE查看主备库角色变量

2、Main()函数 数据库备份脚本

3、根据主备库关键字判断是否执行main()函数

#!/bin/bash

# Author:roidba

# filename:/backup/backup.sh

#logfile:/backup/rman_fullbackup.log

ORACLE_SID=orcl; export ORACLE_SID

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME

PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin

####variables###

DATABASE_ROLE=`sqlplus -silent "/as sysdba" <<EOF

SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF

select DATABASE_ROLE from v\\\$database;

EXIT;

EOF`

###function###

main()

{

($ORACLE_HOME/bin/rman  <<EOF

connect target /

run {

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE BACKUP OPTIMIZATION ON;

allocate channel d1 type disk;

allocate channel d2 type disk;

backup as compressed backupset database format '/backup/fulldbbakcup_%s_%p_%t.rmn' tag='fulldbbackup' include current controlfile;

backup as compressed backupset archivelog all format '/backup/backup_archive_%s_%p_%t.arc';

release channel d1;

release channel d2;

crosscheck backup;

delete noprompt expired backup;

delete noprompt archivelog until time 'sysdate - 3' backed up 1 times to device type disk;

delete noprompt backupset of archivelog until time 'sysdate - 3' ;

delete noprompt backupset of database completed before 'sysdate - 3';

}

exit;

EOF

)

}

###if-then-else###

if [ "$DATABASE_ROLE" = "PRIMARY" ];

then

main

echo "***database role is primary*** " >>/backup/rman_fullbackup.log

else

echo "database role is standby"

fi

2. 自动备份,使用crontab调度

sh /backup/rman_backup.sh >>/backup/rman_fullbackup.log &

crontab -e

07 20 * * *  sh /backup/rman_backup.sh >>/backup/rman_fullbackup.log &

3. 理解crontab格式

<roidb01:orcl:/backup>$more /etc/crontab

SHELL=/bin/bash

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

MAILTO=root

HOME=/

# For details see man 4 crontabs

# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

<roidb01:orcl:/backup>$

原文地址:http://blog.51cto.com/roidba/2119684

时间: 2024-11-10 09:10:33

shell判断oracle主备数据库备份脚本的相关文章

????双机热备数据库备份脚本 v2.1

Text /* THIS4.0 数据库备份脚本 [作者] Rulition QQ:7355157 [版本] v2.1 [修改] 2010年5月21日15:35:13 完成 2010年5月24日11:35:13 细节修改 2010年5月25日11:31:13 增加[完整备份]前的一致性检查 2010年5月27日10:31:13 检查差异备份的大小,避免过大文件影响差异备份. 2010年5月28日11:14:15 补备份时查看最近是否已做过完全备份. 2010年10月17日21:58:32 切换@备

数据库备份脚本

当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,怎样安然恢复到最后一次正常的状态,使得数据的损失达到最小. 或者说,仅仅是数据库服务器的建立,只能说明它能做些什么,并不代表它能稳定的做些什么.灾难恢复的效率及全面性,也是系统的稳定性的一个准因素,尤其对于一个服务器系统. 这一节,介绍数据库自动备份以及数据库被破坏后的恢复的方法.在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备

oracle主备同步问题

oracle主备同步 问题描述 ZABBIX近段时间某地区的DB备库同步异常,在后台查询主备是同步的zabbix监控主备同步的语句为select round((sysdate-controlfile_time)2460) from v$database;该语句在plsql中执行的返回结果为0,在备库的secucre crt中执行的结果就会产生同步时间差.而zabbix监控是以secucrt中执行的结果为准的. 原因分析 1.在plsql中执行的结果实际上显示的是主库的查询结果(因为plsql默认

Ubuntu Server下MySql数据库备份脚本代码

明: 我这里要把MySql数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2012_04_11.tar.gz的压缩文件格式(2012_04_11是指备份执行时当天的日期), 最后只保留最近7天的备份. 实现步骤: 1.创建保存备份文件的目录:/home/mysql_datacd /home #进入目录mkdir mysql_data #创建目录2.创建备份脚本文件:/home/mysql_data/m

Mysql 数据库备份脚本

[[email protected] sbin]# more mysqlbackup.sh #If any of your tables run on InnoDB engine #directory to store backups inDST=/backup/dbback# A regex, passed to egrep -v, for which databases to ignoreIGNREG='^snort$'# The MySQL username and passwordDBU

Windows下MySQL数据库备份脚本(一)

说明: MySQL数据库安装目录:C:\Program Files\MySQL\MySQL Server 5.0 MySQL数据库存放目录:C:\Program Files\MySQL\MySQL Server 5.0\data MySQL数据库备份目录:D:\MySQLdata_Bak 实现目的:备份MySQL数据库存放目录中的mysql数据库到D:\MySQLdata_Bak目录,按照日期存放, 并且只保留最近7天的数据 例如: D:\MySQLdata_Bak\mysql\20120404

mysql数据库备份脚本一例

例子,mysql数据库备份脚本.vim mysql.sh #!/bin/bash DAY=`date +%Y-%m-%d` //日期以年月日显示并赋予DAY变量 SIZE=`du -sh /var/lib/mysql //查看mysql的大小并且赋予变量SIZE echo "Date :$DAY" >> /tmp/mysqlbak.txt //输出日期到mysqlbak.txt文件 echo "Date Size : $SIZE" >> /t

redis数据库备份脚本

redis-dump命令安装环境参考一下链接地址:http://blog.51cto.com/wujianwei/2105124 redis数据库备份脚本: [[email protected] ~]# cat /data/scripts/dump_redisdata.sh #!/bin/bash source /etc/profile.d/rvm.sh /usr/local/rvm/bin/rvm --create ruby-2.3.4 & >/dev/null DATENOW=`date

mysql数据库备份脚本

自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #20170329 #Define PATH定义变量 BAKDIR=/data/backup/mysql/`date +%Y-%m-%d` MYSQLDB=webapp MYSQLPW=backup MYSQLUSR=backup #must use root user run scripts 必须使用root用户运行,$UID为系统变量 if