通过shell备份oracle用户数据,并将巡检结果发送至windows跳板机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过shell备份oracle用户数据,并将巡检结果发送至windows跳板机相关的知识,希望对你有一定的参考价值。

背景:生产环境有oracle服务器,有数据库用户若干,需要通过exp方式备份数据库用户数据,需要巡检数据库备份的结果。

目标:通过Linux shell+exp+crontab进行周期备份,通过ssh命令跨系统将Linux下备份结果传输至windows。

说明:

oracle client 11g        oracle server:   oracle11g

操作系统:sentos6 or redhat6

端口:1521  

Oracle _sid = shwhcq

 

操作过程:

一、备份

1、创建目录

  以oracle用户登录系统

  mkdir /home/oracle/script            ------脚本目录

  mkdir /ipi_bak/db/gg                -------数据文件备份目标目录(这里给oracle用户w权限)

  说明:这里我是以用户导出数据的,所以在/ipi_bak/db/gg  下以各用户的名称创建子目录

 

2、创建脚本

以xssp用户的导出脚本为例:vi xssp-exp.sh

#!/bin/bash 

export ORACLE_BASE=/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export ORACLE_SID=shwhcq1

export LANG=C

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

export ORACLE_TERM=xterm

export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib 

TIME=`date "+%F_%H:%M:%S"`

/grid/11.2.0/grid_1/bin/exp xssp/[email protected]ip/shwhcq grants=y file=/ipi_bak/db/gg/xssp/xssp_$TIME.dmp log=/ipi_bak/db/gg/xssp/xssp_$TIME.log owner=xssp &> /dev/null

给执行权限:chmod +x xssp-exp.sh 

注:以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。

 

3、创建计划任务

[[email protected] script]$ crontab -e 

5 2 * * *        /bin/sh  /home/oracle/script/xssp-exp.sh #每天02:05分执行

10 2 * * *       /bin/sh  /home/oracle/script/artcms-exp.sh

15 2 * * *       /bin/sh  /home/oracle/script/caee_scan-exp.sh

25 2 * * *       /bin/sh  /home/oracle/script/ipijbpm-exp.sh

35 2 * * *       /bin/sh  /home/oracle/script/ipiqxt-exp.sh

 注:crontab 执行记录在/var/log/cron

 

二、备份结果输出到windows跳板机

1、将备份日志的最后一行执行情况输出到指定文件,文件以日期命名

cat /home/oracle/script/db_bak.sh 

#!/bin/bash

TIME=`date "+%F"`

xssp_log=/ipi_bak/db/gg/xssp/xssp_$TIME.log
artcms_log=/ipi_bak/db/gg/artcms/cms_$TIME.log
caee_log=/ipi_bak/db/gg/caee/caee_$TIME.log
ipiqxt_log=/ipi_bak/db/gg/ipiqxt/ipiqxt_$TIME.log
ipijbpm_log=/ipi_bak/db/gg/ipijbpm/ipijbpm_$TIME.log

dblog=/home/oracle/db_baklog/$TIME.log

echo "xssp_log" >> $dblog
tail -1 $xssp_log >> $dblog

echo "artcms_log" >> $dblog
tail -1 $artcms_log >> $dblog

echo "caee_log" >> $dblog
tail -1 $caee_log >> $dblog

echo "ipiqxt_log" >> $dblog
tail -1 $ipiqxt_log >> $dblog
 
echo "ipijbpm_log" >> $dblog
tail -1 $ipijbpm_log >> $dblog

2、windows上用ssh的scp命令下载备份执行结果日志,这样就不用每次登陆去查看

批处理:cat_linux_bak.bat

cd D:\\Program Files (x86)\\SSH Communications Security\\SSH Secure Shellscp2.exe [email protected]数据库备份服务器ip:/home/oracle/db_baklog/* D:\\ipi_bak\\script\\linux_dbbak_logs\\

 注:想要Linux和win要通过脚本自动互传文件不交互。需要进行Linux和win的信任配置:http://blog.csdn.net/jiangshouzhuang/article/details/50683049

简单叙述:

我们把Windows上面生成的Public Key放到Linux服务器上指定用户家目录下面的.ssh目录中,并添加公钥内容到.ssh目录下面的authorized_keys文件。

如果我们开始从Windows(客户端)上面通过ssh方式远程Linux(服务器)时,此时客户端软件就会向服务器发出请求,请求用密匙进行安全验证。服务器收到请求之后,先在该服务器上的主目录下寻找公匙,然后把它和发送过来的公匙进行比较。如果两个密匙一致,服务器就用公匙加密“质询”并把它发送给客户端软件。客户端软件收到“质询”之后就可以用私匙解密再把它发送给服务器,此时因为密钥能匹配上,所以可以直接登录到Linux服务器。

 1、在Windows本机上生成密钥

D:\\SSHCommunications Security\\SSH Secure Shell>ssh-keygen2-t rsa

注释:我们这里使用rsa的密钥,默认是2048bit(位),同样我们也可以使用dsa方式的密钥。

在执行ssh-keygen2 -t rsa生成密钥对时,会提示你输入Passphrase的值,我们要求免密码登录服务器,所以直接回车。 

有提示:

Private key saved to C:/Users/Administrator/ApplicationData/SSH/UserKeys/id_rsa

_2048_a

Public key saved to C:/Users/Administrator/ApplicationData/SSH/UserKeys/id_rsa_

2048_a.pub

根据提示知道了生成的密钥对的路径,但是经过我实际查找,我的windows环境的密钥对位于:C:\\Users\\Administrator\\AppData\\Roaming\\SSH\\UserKeys下面。

 

 2、然后我们将Windows的C:\\Users\\Administrator\\AppData\\Roaming\\SSH\\UserKeys目录下的id_rsa_2048_a.pub文件上传到Linux服务器的home/user/.ssh目录下面。

因为我们的公钥是在Windows上面生成的,Linux的Openssh不识别,所以需要进行转换后再追加到authorized_keys中:

$ ssh-keygen -i -f id_rsa_2048_a.pub >>authorized_keys

退出之前使用密码登录的SSH Secure Shell客户端,然后重新登录并在登录认证状态栏中选择Public Key方式,这样就可以免密码登录了。

3、测试

 使用SSH Secure Shell客户端自带的scp2命令下载Linux服务器的文件

D:\\SSH Communications Security\\SSHSecure Shell>scp2.exe -r -d [email protected]:/home/user/testhivedata  D:\\test\\

.000000_0.crc                          |   12B |  12B/s | TOC: 00:00:01 | 100%

000000_0                               |   96B |  96B/s | TOC: 00:00:01 | 100%

datacity.txt                           |  95kB | 95kB/s | TOC: 00:00:01 | 100%

可以看出远程拷贝也不需要输入密码。

 

最后查看执行结果:以后可以轻松的查看oracle的备份结果

技术分享图片

 

以上是关于通过shell备份oracle用户数据,并将巡检结果发送至windows跳板机的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库shell备份脚本

Oracle 数据库日常巡检

oracle RAC环境vip异常的修复

使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复

Linux上的oracle巡检脚本

通过shell脚本实现对oracle RMAN备份集压缩并异地备份