如何实现ORACLE数据库的远程自动备份(完整版)

来源:互联网 发布:中国人没有信仰知乎 编辑:程序博客网 时间:2024/06/07 22:40

如何实现ORACLE数据库的远程自动备份(完整版) 


主数据库已经正常工作,之前的数据没有做自动备份,为防止数据丢失,现考虑使用自动备份机制并且远程存储到其它计算机上。具体的实现步骤和环境如下: 
服务器A192.168.0.1(主数据库) 
服务器B192.168.0.2(远程数据库备份文档存储) 
操作系统均为:LINUX 
1、 编制自动备份脚本,命令为Oracle_backup_all.shOracle_backup_fullOracle_backup_up这三个脚本分别代表完全增量导出、全库所有对象备份、增量导出。具体内容如下: 
ORACLE_backup_all.sh: 
#!/bin/sh 
#name:oracle_backup.sh 
#PS:oracle automation backup script 
#write by:iceboard 
# create in 2014-07-28 
# 预先设置变量,然后导出相关数据 
ORACLE_BASE=/home/oraBase 
ORACLE_HOME=/home/oraProduct 
ORACLE_SID=orcl 
#ORACLE_TERM=test1 
ORACLE_OWNER=oracle 

export ORACLE_BASE 
export ORACLE_HOME 
export ORACLE_SID 
#export ORACLE_TERM 
export ORACLE_OWNER 

NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"; export NLS_LANG 
#LANG=zh; export LANG 
cd /home/oracle/backup 
$ORACLE_HOME/bin/exp username[email=/password@orcl]t/oracle119*@lmssww[/email] file=oracle_`date +%Y-%m-%d`.dmp log=/home/oracle/backup/oracle-`date +%Y-%m-%d`.log  feedback=10000 inctype=complete 
filename=oracle-`date +%Y-%m-%d`-all.tar 
tar cf $filename oracle_`date +%Y-%m-%d`.dmp 
filenamegz=oracle-`date +%Y-%m-%d`-all.tar.gz 
/usr/bin/gzip -f $filename 

#欲实现远程文件拷贝,其功能与下面的FTP服务拷贝同效 
scp -P 端口号 /home/oracle/backup/$filenamegz root@192.168.0.2:/home/backupDB 

文件存放于/home/oracle目录下面,该脚本分别完成变量设置,导出操作,打包压缩,远程拷贝。这三个脚本大至相同,只是导出的参数有变化,在此不全列出来了,现在这个程序还不能自动执行和实现远程拷贝。接下来第二步 
2、 为刚才制作的脚本文件授予执行权限,如下: 
#chmod +x  /home/oracle/oracle_backup_all.sh 
3、 授予执行并不能立即使程序具有自动执行的功能,接下来我们还要用到crontal来将脚本加入到自己执行列表中: 
Crontab –e 后输入以下内容: 
#Oracle database backup script 
#writ by :iceboard 
#date :2014-7-29 
0 2 * * 2-6  /home/oracle/oracle_backup_up.sh 
0 2 * * 0 /home/oracle/oracle_backup_full.sh 
0 2 * * 1 /home/oracle/oracle_backup_all.sh 
上面几行为注释代码,下面的三行,设置了自动执行的时间,分别表示在每周26晚上2点整,执行脚本/home/oracle/oracle_backup_up.sh;每周日晚上2点整执行脚本:/home/oracle/oracle_backup_full.sh;每周一执行脚本:/home/oracle/oracle_backup_all.sh;分别表示了增加、全库、完全增量备份。 
通过crontab –l 可以查询到该自动执行的时间。 
4、 到这里,上面的操作已基本可以完成数据库的备份压缩操作,但还不能实现远程拷贝备份文件的操作。即脚本中的:scp -P 端口号 /home/oracle/backup/$filenamegz [email=[ft=#009933,,]root@192.168.0.2:/home/backupDB]root@192.168.0.2:/home/backupDB[/email]还不能执行,他会提示你输入远程服务器的密码,这样的话还需要人工参与,还不能实现自动备份,那么接下来就要完成远程主机的自动登录问题了。 
5、 要实现远程自动登录而不需要输入密码,我们需要采用密钥的方式来做密码的验证。操作步骤如下: 
在服务器A上执行如下命令: 
$ ssh-keygen -t rsa    #生成密钥,出现的提示如下: 
Generating public/private rsa key pair. 
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):回车
 
Enter passphrase (empty for no passphrase):回车 
Enter same passphrase again:回车 
Your identification has been saved in /root/.ssh/id_rsa. 
Your public key has been saved in /root/.ssh/id_rsa.pub. 
The key fingerprint is: 
2b:59:60:47:2c:7c:e0:4f:4f:26:1e:a3:58:d9:48:49 oracle@A 
OK,公、私密钥对已生成,在/root/.ssh/路径下会生成id_rsaid_rsa.pub,其中id_rsa是密钥,id_rsa.pub是公钥。 
第二步,将生成的密钥拷贝到服务器B 
$ scp /root/.ssh/id_rsa.pub root@192.168.0.2:/tmp/ 
The authenticity of host 'B (192.168.0.2)' can't be established. 
RSA key fingerprint is e1:c2:a8:4e:99:4e:39:d9:05:29:9d:14:36:91:b5:bc. 
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added '192.168.0.2' (RSA) to the list of known hosts. 
[email=root@192.168.0.2's]root@192.168.0.2's[/email] password: 在这里输入一次B机的密码
 
id_rsa.pub                                    100% 228     0.2KB/s   00:00 

第三步:用root登录B机,创建authorized_keys文件,并设置好权限。 
cd .ssh/ #若无此文件夹,则手动创建一个 
cat /tmp/id_rsa.pub >>authorized_keys 
chmod 400 authorized_keys 
rm -f /tmp/id_rsa.pub 
第四步:测试一下刚刚的密钥,看是否能远程登录,如下: 
oracle:/home/oracle # ssh -p 714 root@192.168.0.2 
Last login: Tue Jul 29 10:13:59 2008 from 192.168.0.1 
Have a lot of fun... 
bbs:~ # 
OK,没有问我们要密码,测试成功! 
再试一个文档远程拷贝看能否成功。 
oracle:/home/oracle # scp -P 端口号 /home/oracle/oracle_backup.sh root@192.168.0.2:/tmp/ 
oracle_backup.sh                                        100% 1049     1.0KB/s   00:00   
OK,也没有问我们要密码,远程拷贝成功! 
6、至此,我们的自动备份功能便可以正常执行了。以上的操作环境均是在ROOT权限下执行,LINUX的版本为RH4U5。测试通过,程序正常执行。

0 0
原创粉丝点击