我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解数据泵与rman脚本

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解数据泵与rman脚本

如何理解数据泵与rman脚本,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

脚本主要逻辑:全库备份读取到的实例的数据库,连同附属功能性文件(spfile,controlfile控制文件,listener监听文件,密码文件orapw[instance_name])压缩后一并发送到远程服务器上。

(PS:脚本正文中以#开头一行为注释,可直接拷贝以下代码使用,不影响运行)

一.首先是数据泵expdp/impdp全库备份的:

#!/bin/bash
#backup oracle instances' full databases with datapump(expdp) 
#oracleDB_fullbackup_expdp.sh
#DATA_PUMP_DIR=/opt/ora11g/admin/${instance_name}/dpdump/
#created by dc at 2015-12-08

source /home/oracle/.bash_profile

#读取用户oracle的环境变量,以便直接读取使用该文件内容所定义的有关变量

ORACLE_BIN_HOME=${ORACLE_HOME}/bin/
BACKUPTOOL_HOME=${ORACLE_BASE}/dba/OracleTools/
BACKUP_HOME=${BACKUPTOOL_HOME}DBbackup/

#定义相关变量指向工作目录,ORACLE_BIN_HOME是oracle工具(sqlplus,rman,dbca,emctl等等)所在目录;BACKUPTOOL_HOME是本脚本工具相关文件所在目录,BACKUP_HOME是备份文件存放目录,ORACLE_HOME和ORACLE_BASE是从.bash_profile文件中所读取的环境变量,分别指oracle的家目录和oracle的根目录

echo "full backup job start at $(date +%Y-%m-%d_%T)" >> ${BACKUPTOOL_HOME}fullbackup.result

#在本地统计记录以下备份工作开始时间到文件fullbackup.result,帮助确定定时任务所需时间

for instance_name in `cat ${BACKUPTOOL_HOME}instances_all`

#for循环读取所有记录在instances_all文件里的实例名进行以下操作

do
    DATA_PUMP_DIR=${ORACLE_BASE}'/admin/'${instance_name}'/dpdump/'

#定义变量DATA_PUMP_DIR存放导出文件路径

    expdp system/password@${instance_name} DIRECTORY=DATA_PUMP_DIR DUMPFILE=full_${instance_name}_$(date +%Y-%m-%d)_systemExpdp.dmp LOG=full_${instance_name}_$(date +%Y-%m-%d)_systemExpdp.log FULL=y;

#使用system账号全库导出该实例的数据,使用的导出目录为DATA_PUMP_DIR(可到后台sqlplus环境下查询具体对应的目录,注意此处该系统目录要真实存在),导出文件命名为选项”DUMPFILE=“之后名称所定义,同理导出过程记录日志在选项”LOG=“所定义,”FULL=y“意为全库导出。注意此处@${instance_name}指的是当前实例的tnsname即实例解析名,具体要查看$ORACLE_HOME/network/admin/tnsname.ora下的设置
    mv ${DATA_PUMP_DIR}'full_'${instance_name}*.dmp ${BACKUP_HOME}'tarfileDIR/'${instance_name}'/datafile/'

    mv ${DATA_PUMP_DIR}'full_'${instance_name}*.log ${BACKUP_HOME}'tarfileDIR/'${instance_name}'/datafile/'

#转移上一步导出之后所得数据文件和日志文件到相应实例分类存放目录
    cp ${ORACLE_HOME}'/dbs/orapw'${instance_name} ${BACKUP_HOME}'tarfileDIR/'${instance_name}'/passwdfile/'

    cp ${ORACLE_HOME}/network/admin/{listener.ora,tnsnames.ora,sqlnet.ora} ${BACKUP_HOME}'tarfileDIR/'${instance_name}/listenerfile/

#拷贝数据库用户密码存放文件和监听相关文件到分类目录

done

cd ${BACKUP_HOME}
tar -zcpf full_$(date +%Y-%m-%d)_systemExpdp.tar.gz tarfileDIR

#所有实例导出完毕后压缩打包

rm -rf ${BACKUP_HOME}tarfileDIR

#删除已被打包的原文件以备下次备份使用

for instance_name in `cat ${BACKUPTOOL_HOME}instances_all`
do
    mkdir -p ${BACKUP_HOME}tarfileDIR/${instance_name}/{datafile,listenerfile,passwdfile}
done
#重新建立所有实例存放数据目录,以备下次使用
/usr/bin/expect << EOF
spawn bash -c "scp -P77 ${BACKUP_HOME}full_*_systemExpdp.tar.gz root@172.16.3.73:/opt/oracle72fullbackup/"
expect  "password:"
send "@7043005ec611857\r"
set timeout 10800
expect eof
EOF
#插入使用expect脚本自动完成交互操作把数据库备份所得压缩包发送到远程服务器172.16.3.73的系统目录/opt/oracle72fullbackup/下,定义scp发送超时时间为10800秒即三个小时,超时自动终止,该时间可以结合脚本开头和结尾所加时间统计功能确定
/usr/bin/expect << EOF
spawn bash -c "ssh -p77 root@172.16.3.73"
expect "password:"
send "@7043005ec611857\r"
expect "]#"
send "chown -R oracle:oinstall /opt/oracle72fullbackup\r"
expect "]#"
send "exit\r"
expect eof
EOF
#继续使用expect脚本更改远程服务器上数据备份目录的权限所属为oracle:oinstall,方便管理,由于上一步中scp使用的用户是root故所发送文件权限也会被更改成root:root
rm -f ${BACKUP_HOME}full_*_systemExpdp.tar.gz

#导出数据压缩包转移完毕后删除原文件,节省空间

echo "tlm,txmy's daily full backup job is done at $(date +%Y-%m-%d_%T)" >> ${BACKUPTOOL_HOME}dailyfullbackup.result

#写入日志,在本地记录执行脚本结束时间

二.接着是RMAN全库备份脚本:

#!/bin/bash
#full backup oracle instances' databases with RMAN
#oracleDB_fullbackup_rman.sh
#recovery directory is "/opt/ora11g/dba/OracleTools/DBbackup/restoreDIR_daily/" ,it concerns about your backup level,put the DB backup tar file into the destination server's same directory then extracts it when you need to recover the database
#created by dc at 2015-12-08

# 脚本解释器/bin/bash声明和其他额外脚本说明补充,注意此处数据恢复路径是在/opt/ora11g/dba/OracleTools/DBbackup/restoreDIR_daily目录下的对应文件夹,下文有说明,由于是使用RMAN进行导入导出,所以导入导出目录请尽量保持一致,具体可参考我之前的文章:利用rman针对同平台下oracle的实例进行异机迁移。

source /home/oracle/.bash_profile

#导入/home/oracle/.bash_profile文件里的环境变量

ORACLE_BIN_HOME=${ORACLE_HOME}/bin/
BACKUPTOOL_HOME=${ORACLE_BASE}/dba/OracleTools/
BACKUP_HOME=${BACKUPTOOL_HOME}DBbackup/

#定义oracle自带工具所在目录变量$ORACLE_BIN_HOME,备份脚本工具目录$BACKUPTOOL_HOME和备份导出文件存放目录$BACKUP_HOME
echo "tlm,txmy's daily full backup job start at $(date +%Y-%m-%d_%T)" >> ${BACKUPTOOL_HOME}dailyfullbackup.result

#记录以下脚本操作开始时间到dailyfullbackup.result

for instance_name in `cat ${BACKUPTOOL_HOME}instances_daily`
do
        export ORACLE_SID=$instance_name

#使用for循环依次抽出记录在instances_daily文件中需要操作的实例名称并导入环境变量
    ${ORACLE_BIN_HOME}'rman' target / <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup full tag 'dbfull' format '${BACKUP_HOME}restoreDIR_daily/fullbackup/datafile/dbfull%u_%s_%p' database plus archivelog delete all input;
backup current controlfile format '${BACKUP_HOME}restoreDIR_daily/fullbackup/controlfile/control.bak';
backup spfile format '${BACKUP_HOME}restoreDIR_daily/fullbackup/spfile/spfile.bak';
release channel c1;
release channel c2;
release channel c3;
}
quit;
EOF

#RMAN全库备份段,datafile目录存放数据导出文件,controlfile目录存放控制文件,相应地spfile目录存放spfile,等到还原时也创建相同目录摆放好各类数据文件以备恢复

    cp ${ORACLE_HOME}/dbs/orapw${instance_name} ${BACKUP_HOME}restoreDIR_daily/fullbackup/passwdfile/

#拷贝当前实例的的密码文件到passwdfile目录下

    cp ${ORACLE_HOME}/network/admin/{listener.ora,tnsnames.ora,sqlnet.ora} ${BACKUP_HOME}restoreDIR_daily/fullbackup/listenerfile/

#拷贝监听相关文件到listenerfile目录下
    if [ ! -d "${BACKUP_HOME}tarfileDIR_daily/full/$instance_name" ];then
            mkdir -p ${BACKUP_HOME}tarfileDIR_daily/full/$instance_name;
    fi

#判断压缩包存放目录是否存在,否则创建

        tar -zcPpf ${BACKUP_HOME}tarfileDIR_daily/full/${instance_name}/full_${instance_name}_$(date +%Y-%m-%d).tar.gz ${BACKUP_HOME}restoreDIR_daily/fullbackup

#打包当前实例所有备份导出文件,加-p参数是保持文件原来属性,而-P参数是按照第二个变量中的路径进行压缩,解包出来之后也得到一个${BACKUP_HOME}restoreDIR_daily/fullbackup的多重目录,这个在解包时需要注意当前目录,-P的具体效果可以参考帮助文档

    rm -rf  ${BACKUP_HOME}restoreDIR_daily/fullbackup/*

#打包完毕后删除当前导出文件

    mkdir -p ${BACKUP_HOME}restoreDIR_daily/fullbackup/{controlfile,datafile,passwdfile,spfile,listenerfile}

#由于上一步操作直接删除整个目录,所以重新创建各层级分类目录以备下次循环使用

done

echo "The DB restore directory is ${BACKUP_HOME}restoreDIR_daily/fullbackup/" >> ${BACKUP_HOME}tarfileDIR_daily/full/readme.txt

#记下rman所使用的还原路径到帮助文档readme.txt

echo "The DB base directory is ${ORACLE_BASE}" >> ${BACKUP_HOME}tarfileDIR_daily/full/readme.txt

#记下源数据库的根目录到帮助文档内容

echo "Please extract the tar file with option -P , like tar -zxPf xxx.tar.gz" >> ${BACKUP_HOME}tarfileDIR_daily/full/readme.txt

#记录解压时注意使用-P参数到帮助文档内容

tar -zcPpf ${BACKUP_HOME}tarfileDIR_daily/full_all_$(date +%Y-%m-%d).tar.gz ${BACKUP_HOME}tarfileDIR_daily/full

#打包所有实例所导出数据的压缩包,稍后一并发送到存放目的地

rm -rf ${BACKUP_HOME}tarfileDIR_daily/full

#删除被打包文件节省空间
/usr/bin/expect << EOF
spawn bash -c "scp -P77 ${BACKUP_HOME}tarfileDIR_daily/full_*.tar.gz root@172.16.3.73:/opt/oracle72fullbackup/tlmtxmy_daily/"
expect  "password:"
send "@7043005ec611857\r"
expect "]$"
set timeout 10800
expect eof
EOF
#使用expect交互脚本发送上一步所打包的总压缩包到172.16.3.73服务器上的/opt/oracle72fullbackup/tlmtxmy_daily目录下,此处密码为明文,超时时间为10800秒即3小时,这个值需要根据实际网络带宽情况和文件压缩包大小作适当调整,单位为秒s
/usr/bin/expect << EOF
spawn bash -c "ssh -p77 root@172.16.3.73"
expect "password:"
send "@7043005ec611857\r"
expect "]#"
send "chown -R oracle:oinstall /opt/oracle72fullbackup\r"
expect "]#"
send "exit\r"
expect eof
EOF

#同样地,改变/opt/oracle72fullbackup目录拥有者为oracle,群组为oinstall

rm -f ${BACKUP_HOME}tarfileDIR_daily/full_*.tar.gz

#文件发送完毕后删除总压缩包,节省空间

echo "tlm,txmy's daily full backup job is done at $(date +%Y-%m-%d_%T)" >> ${BACKUPTOOL_HOME}dailyfullbackup.result
#在本地的dailyfullbackup.result文件中记录以上操作的结束时间,呼应开头统计开始时间

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解数据泵与rman脚本

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何理解Shell脚本数组

这篇文章主要介绍“如何理解Shell脚本数组”,在日常操作中,相信很多人在如何理解Shell脚本数组问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Shell脚本数组”的疑惑有所帮助!接下来,请跟着小编
2023-06-09

如何理解与防范VBS脚本病毒原理

这篇文章主要介绍“如何理解与防范VBS脚本病毒原理”,在日常操作中,相信很多人在如何理解与防范VBS脚本病毒原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解与防范VBS脚本病毒原理”的疑惑有所帮助!
2023-06-08

如何理解Linux Shell脚本

本篇内容介绍了“如何理解Linux Shell脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Shell简介诸多类Unix操作系统的设
2023-06-09

数据库脚本如何导出

数据库脚本可以通过以下几种方法导出:1. 使用数据库管理工具导出:大多数数据库管理工具(如MySQL Workbench、Navicat等)都提供了导出数据库脚本的功能。用户可以通过这些工具连接到数据库,选择要导出的数据库,然后选择导出选项
2023-08-29

如何理解Linux Shell脚本数组和关联数组

本篇内容主要讲解“如何理解Linux Shell脚本数组和关联数组”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Linux Shell脚本数组和关联数组”吧!一、数组和关联数组数组是Sh
2023-06-09

如何理解linux Nginx日志脚本

本篇内容主要讲解“如何理解linux Nginx日志脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解linux Nginx日志脚本”吧!任务计划 crontab -l 1 15 * *
2023-06-09

如何理解Linux Shell脚本编程

本篇内容介绍了“如何理解Linux Shell脚本编程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通常,当人们提到“shell脚本语言”时
2023-06-09

如何使用Lua脚本处理Redis序列化数据

在Lua脚本中处理Redis序列化数据可以通过Redis提供的一些函数来实现,例如redis.call()函数可以用来执行Redis命令,cjson.decode()和cjson.encode()函数可以用来序列化和反序列化JSON数据。下
如何使用Lua脚本处理Redis序列化数据
2024-04-29

Shell脚本如何连接oracle数据库

这篇文章给大家分享的是有关Shell脚本如何连接oracle数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近研究了一下怎样使用shell 脚本连接数据库,然后执行查询语句。这样对于需要定时执行的脚本,我们
2023-06-09

oracle数据库如何执行sql脚本

在 oracle 数据库中,可以使用 sqlplus、oracle enterprise manager 或 pl/sql developer 来执行 sql 脚本。方法如下:1. 使用 sqlplus:加载脚本(@.sql),并执行(en
oracle数据库如何执行sql脚本
2024-05-13

如何理解iredmail下安装的脚本

这篇文章主要讲解了“如何理解iredmail下安装的脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解iredmail下安装的脚本”吧!iredmail是一套以postfix为核心的
2023-06-09

如何理解Shell脚本中的位置变量参数

这篇文章主要介绍“如何理解Shell脚本中的位置变量参数”,在日常操作中,相信很多人在如何理解Shell脚本中的位置变量参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Shell脚本中的位置变量参数
2023-06-09

Linux脚本操作的数据处理技巧与Python实现

Linux脚本操作的数据处理技巧与Python实现引言:在日常工作中,数据处理是一个重要的环节。而在Linux系统中,使用脚本进行数据处理是非常高效的方法。本文将介绍一些在Linux脚本操作中常用的数据处理技巧,并结合Python语言,给出
2023-10-22

编程热搜

目录