Oracle备份还原实践推荐

一、项目背景:

1.1 客户需求:

将物理机房生产环境的Oracle/MySQL及阿里云的RDS数据库备份出来,存储到一个集中数据库存储服务器,实现异地备份,并且在还原环境内要将MySQL/Oracle以及阿里云RDS备份数据还原到测试环境,并判断还原数据库是否存在异常,检验数据的一致性,如有异常邮件或微信告警,每周生成Excel报表发送给负责人。

1.2 需求要点:

网络通信:阿里金融云/公有云/物理机房环境网络须在固定网段互通。

网络安全:各个网段隔离,有需求通信的网段开放通信,需实现端口级别控制。

数据备份:MySQL/Oracle/RDS实现数据库备份。

数据传输:采用定时crond+scp+rsync配合传输。

数据校验:保障数据库还原成功的可靠性。

监控告警:VPN网络中断,或数据库备份失败等需要发送通知到管理员。

报表生成:将数据库还原的信息生成报表统一发送给管理员。

1.3 解决方案:

网络通信:在阿里云端,采用深信服IPSec VPN与物理机房Cisco设备隧道互通。开通传输网段,将此网段作为网络传输中转网段。

网络安全:各个网段隔离,如有跨地区或机房相互通信的需求,需将此环境下的数据传输到中转网段,再实现数据传输。使用阿里云安全组deny any,开通需要通信的白名单端口。

数据备份:MySQL及RDS采用mysqldump逻辑备份,Oracle采用expdp备份。

数据传输:采用定时crond+scp+rsync配合传输。

数据校验:导入文件存在日志,查看日志与比对库数目。

监控告警:采用smarteye自定义监控,监控VPN状况,同事采用自定义脚本+数据库还原异常告警。如果VPN中断或数据库恢复异常发送短信,邮件,微信消息通知管理员。

报表生成:每日脚本将数据库还原日志文件进行处理,最终打包统一传输到一个Python环境下,利用自编写Python脚本处理文件数据,生成报表,每周发送给管理员。

二、逻辑拓扑:

2.1 Oracle数据库备份还原:

2.1 Oracle数据库备份还原:

三、技术细节:

3.1 Oracle数据库备份还原:

创建Oracle数据库备份用户:

createuserbackuseridentifiedbypwdbackuser;

默认情况下用户创建好后系统会默认给该用户分配一个表空间(users);

查看用户表空间:

selectusername,default_tablespacefromdba_users;

需要为创建的用户创建自己的表空间:

createtablespacebaktablesdatafile'/data/bakdir/baktab_data.dbf'size200M;

分配了表空间,此用户还无法登录,因此需要为用户授权:

grantcreatesession,createtable,createview,createsequence,unlimitedtablespacetobackuser;

将创建好的表空间分配给用户:

alteruserbackuserdefaulttablespacebaktables;

创建Oracle数据库备份目录:

createdirectorydump_diras'/backup/backup_dir';

查看备份目录:

select*fromdba_directories;

授权备份用户对备份目录具有读写权限:

Grantread,writeondirectorydump_dirtobackuser;

使用expdp导出数据库:

expdpbackuser/pwdbackuserSCHEMAS=DB1dumpfile=DB1.dmpdirectory=dump_dirlog=DB1.log

查看备份日志:

Oracle自动备份脚本示例:

#!/bin/bashexportORACLE_BASE=/u01/app/oracleexportORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1exportORACLE_SID=ORCLexportPATH=$ORACLE_HOME/bin:$PATHfilename=`date+%Y-%m-%d`'.dmp'logname=`date+%Y-%m-%d`'.log'dump_dir="/backup/backup_dir/"backdir="dump_dir"forSchameinDB1....DB2/u01/app/oracle/product/11.2.0/db_1/bin/expdpbackuser/pwdbackuserSCHEMAS=${Schame}dumpfile=${Schame}-${filename}directory=${backdir}log=${Schame}-${logname}find${dump_dir}-mtime+7-name"*.dmp"-execrm-rf{}\;find${dump_dir}-mtime+7-name"*.log"-execrm-rf{}\;done

Oracle 备份检查脚本:

#!/bin/bashDATE=`date+%F`MON=`date+%Y-%m`M_date=`date+%Y/%m/%d`DIR='/backup/backup_dir/'FDIR='/backup/Oracle_Excel/'if[!-d${FDIR}];thenmkdir-p${FDIR}O_FILE='/backup/Oracle_Excel/tmp_OracleB.txt'#OracleEND_TIME=`find${DIR}-name"*-${DATE}.dmp"-execls-l{}\;|awk'{print$8}'|sort-r|head-1`FILE=`find${DIR}-name"*-${DATE}.dmp"-execls{}\;|awk'{printf("%s",$1)}'`#O_SIZE=`find${DIR}-name"*-${DATE}.dmp"-execdu{}\;|awk'{sum+=$1}END{printsum/1024"M"}'`O_SIZE=`find${DIR}-name"*-${DATE}.dmp"-execdu-sh{}\;|awk'{printf("%s",$1)}'`#writefileecho-e"${M_date},ORACLE,分库备份,(逻辑)每天,22:00:00,${END_TIME},成功,${FILE},否,${O_SIZE},否\n\c" ${O_FILE}Week=`date+%w`if[${Week}-eq0];thenif[!-d${FDIR}${DATE}];thenmkdir-p${FDIR}${DATE}fimv${O_FILE}${FDIR}${DATE}/usr/bin/zip-r${FDIR}OracleB_${DATE}.zip${FDIR}${DATE}/*if[$?-eq0];then/usr/bin/scp${FDIR}OracleB_${DATE}.ziproot@192.168.11.11:/user/backup/oracle/Oracle_Excelfirm-rf${FDIR}OracleB_${DATE}.zipfi

查看数据存储服务器:

脚本拆分开,在那个步失败,可以单独进行恢复统一进行调用:

SCP传输

#!/bin/bashfdate=`date+%Y-%m-%d-d'-1day'`/usr/bin/scp-P2621root@172.16.84.12:/backup/backup_dir/*-${fdate}.dmp/user/backup/oracle/oraclebak

分类归档压缩:

#!/bin/bashfdate=`date+%Y-%m-%d-d'-1day'`filename=`date+%Y-%m-%d-d'-1day'`'.dmp'dump_dir="/user/backup/oracle/oraclebak"I=`ls/user/backup/oracle/oraclebak/|grep$filename|awk-F'-''{print$1}'|uniq`cd${dump_dir}forSchamein${I[*]}tarzcf${Schame}-$filename.tar.gz${Schame}-$filenamefind${dump_dir}-name"*.dmp"-execrm-rf{}\;find${dump_dir}-mtime+7-name"*.dmp.tar.gz"-execrm-rf{}\;

rsync进行断点传输:

#!/bin/bash#Data=`date+%Y-%m-%d""%H:%m`dir="/user/backup/oracle/"fdate=`date+%Y-%m-%d-d'-1day'`filename=`date+%Y-%m-%d-d'-1day'`'.dmp'/usr/bin/rsync-rP--timeout=3600--rsh=ssh/user/backup/oracle/oraclebak/DB1-${fdate}.dmp.tar.gzroot@172.17.130.130:/DATA/oracle/oracle_bak echo"$DataDB1rsyncissuccess!" ${dir}Logdir/oracle-rsync.logif["$?"=="0"];thenData=`date+%Y-%m-%d""%H:%m`/usr/bin/rsync-rP--timeout=3600--rsh=ssh/user/backup/oracle/oraclebak/DB2-${fdate}.dmp.tar.gzroot@172.17.130.130:/DATA/oracle/oracle_bak echo"$DataDB2rsyncissuccess!" ${dir}Logdir/oracle-rsync.logif["$?"=="0"];thenunsetDataData=`date+%Y-%m-%d""%H:%m`/usr/bin/rsync-rP--timeout=3600--rsh=ssh/user/backup/oraclebak/DB3-${fdate}.dmp.tar.gzroot@172.17.130.130:/DATA/oracle/oracle_bak echo"$DataDB3rsyncissuccess!" ${dir}Logdir/oracle-rsync.logif["$?"=="0"];thenunsetDataData=`date+%Y-%m-%d""%H:%m`echo"$Datarsyncissuccess!" ${dir}Logdir/oracle-rsync.logfififi

总体调用:

#!/bin/bash#Data=`date+%Y-%m-%d""%H:%m`dir="/user/backup/oracle/"/bin/bash${dir}1_oracle_scp.shif["$?"=="0"];thenData=`date+%Y-%m-%d""%H:%m`echo"$Data1_oracle_scp.shisexecsuccess!" ${dir}Logdir/oracle-back.log /bin/bash${dir}2_oracle_tar.shif["$?"=="0"];thenunsetDataData=`date+%Y-%m-%d""%H:%m`echo"$Data2_oracle_tar.shisexecsuccess!" ${dir}Logdir/oracle-back.log /bin/bash${dir}3_oracle_rsync.shif["$?"=="0"];thenunsetDataData=`date+%Y-%m-%d""%H:%m`echo"$Data3_oracle_rsync.shisexecsuccess!" ${dir}Logdir/oracle-back.logfififi

在还原服务器进行Oracle数据库还原:

首先初步核查传输过来的库数目及文件大小是否异常,如果异常可以进行重新拉取:

#!/bin/bashoracle_path="/DATA/oracle/oracle_bak/"Data=`date+%Y-%m-%d""%H:%M`dir="/user/backup/oracle/"fdate=`date+%Y-%m-%d-d'-1day'`check_data=`date+%Y-%m-%d-d'-3day'`check_size=`du-sh/DATA/oracle/oracle_bak/${check_data}/|awk'{print$1}'|cut-dM-f1|awk-F.'{print$1}'`filename=`date+%Y-%m-%d-d'-1day'`'.dmp'NUM=`ls${oracle_path}*.tar.gz|wc-l`SIZE=`du-sh/DATA/oracle/oracle_bak/${fdate}/|awk'{print$1}'|cut-dM-f1|awk-F.'{print$1}'`if["$NUM"!="3"]||[$SIZE-lt${check_size}];then/usr/bin/rsync-ravP--timeout=3600--rsh=sshroot@10.199.75.14:/user/backup/oracle/oraclebak/DB1-${fdate}.dmp.tar.gz${oracle_path}if["$?"=="0"];then/usr/bin/rsync-ravP--timeout=3600--rsh=sshroot@10.199.75.14:/user/backup/oracle/oraclebak/DB2-${fdate}.dmp.tar.gz${oracle_path}if["$?"=="0"];then/usr/bin/rsync-ravP--timeout=3600--rsh=sshroot@10.199.75.14:/user/backup/oracle/oraclebak/DB3-${fdate}.dmp.tar.gz${oracle_path}fififi

解压传输过来的数据库:

#!/bin/bash#数据库存储文件oracle_path="/DATA/oracle/oracle_bak/"#数据库恢复目录repath="/DATA/oracle/oracle_restore/"#数据库导入目录backdir="/home/oracle/app/backup_dir/"#数据库归档文件命名dadir=`date+%Y-%m-%d-d-1day`#数据库导入日志目录implogdir="/DATA/oracle/implogdir/"oraclecmd="/home/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus"if[!-d${implogdir}${dadir}];thenmkdir-p${implogdir}${dadir}if[!-d${repath}];thenmkdir-p${repath}if[!-d${oracle_path}${dadir}];thenmkdir${oracle_path}${dadir}if[!-d${repath}${dadir}];thenmkdir${repath}${dadir}#把压缩文件存放在日期目录sudochown-Roracle:dba${oracle_path}*cd${oracle_path}mv*-"$dadir".dmp.tar.gz$dadir#把压缩文件解压到还原目录cd${oracle_path}${dadir}oracle=`ls`forIin${oracle[*]}/bin/tarzxf$I-C${repath}${dadir}cp${repath}${dadir}/*${backdir}

进行Oracle还原库用户初始化:(此处列两个库做说明)

#!/bin/bashexportORACLE_BASE=/home/oracle/appexportORACLE_HOME=$ORACLE_BASE/oracle/product/12.1.0/dbhome_1exportORACLE_SID=ORCLexportPATH=$PATH:$HOME/bin:$ORACLE_HOME/bin#数据库恢复目录repath="/DATA/oracle/oracle_restore/"#数据库导入目录backdir="/home/oracle/app/backup_dir/"#数据库归档文件命名dadir=`date+%Y-%m-%d-d-1day`#数据库导入日志目录implogdir="/DATA/oracle/implogdir/"oraclecmd="/home/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus"cd${backdir}fordbinDB1...DBnif["$db"=="DB1"];thensqlplus-S/nolog EOFconn/assysdbadropuser${db}cascade;createuser${db}identifiedbyDBuser1;alteruserDB_user1defaulttablespacetab1;grantcreatesession,createtable,createview,createprocedure,createsequence,unlimitedtablespaceto${db};Grantread,writeondirectorydump_dirto${db};exit;else["$db"=="GPSUSER"];sqlplus-S/nolog EOFconn/assysdbadropuser${db}cascade;createuser${db}identifiedbyDBuser2;alteruserDBdefaulttablespacetab2;grantcreatesession,createtable,createview,createprocedure,createsequence,unlimitedtablespaceto${db};Grantread,writeondirectorydump_dirto${db};exit;done

Oracle数据库采用impdp进行导入:

#!/bin/bashexportORACLE_BASE=/home/oracle/appexportORACLE_HOME=$ORACLE_BASE/oracle/product/12.1.0/dbhome_1exportORACLE_SID=glpfinexportPATH=$PATH:$HOME/bin:$ORACLE_HOME/bin#数据库存储文件oracle_path="/DATA/oracle/oracle_bak/"#数据库恢复目录repath="/DATA/oracle/oracle_restore/"#数据库导入目录backdir="/home/oracle/app/backup_dir/"#数据库归档文件命名dadir=`date+%Y-%m-%d-d'-1day'`#数据库导入日志目录implogdir="/DATA/oracle/implogdir/"oraclecmd="/home/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus"I=`ls/DATA/oracle/oracle_restore/$dadir/|grep$dadir|awk-F'-''{print$1}'|uniq`cd${backdir}fordbin${I[*]}impdpsystem/51idc.comdirectory=dump_dirdumpfile=${db}-${dadir}.dmplogfile=import-${db}-${dadir}.logrm-rf${backdir}${db}-${dadir}.dmp mvimport-${db}-${dadir}.log${implogdir}${dadir}/bin/mail-rxuel@anchnet.com-s"Oracle-${db}-backup-mail"oraclebak@anchnet.com ${implogdir}${dadir}/import-${db}-${dadir}.logfind${oracle_path}-mtime+30-name"*.tar.gz"-execrm-rf{}\;find${implogdir}-ctime+30-typed-execrm-rf{}\;find${repath}-mtime+7-name"*.dmp"-execrm-rf{}\;find${repath}-typed-mtime+7-execrm-rf{}\;

分析导入log,处理后写入文件

#!/bin/bashdate=`date+%Y/%m/%d""%H:%M`Logdir="/DATA/oracle/Logdir/"dadir=`date+%Y-%m-%d-d'-1day'`implogdir="/DATA/oracle/implogdir/"if[-d${implogdir}${dadir}];thenFile=`ls${implogdir}${dadir}|grep${dadir}|awk-F'-''{print$2}'|uniq`forIin${File[*]}doecho${date} ${Logdir}${I}-import.logtail-1${implogdir}${dadir}/import-${I}-${dadir}.log ${Logdir}${I}-import.logdonefi

VPN监控脚本:

#!/bin/bashIP=10.199.75.14dir="/DATA/oracle/netdir/"if[!-d${dir}];thenmkdir-p${dir}echo1 ${dir}ping.lockwhiletrueTime=`date+%F`TIME="${Time}23:59"if["${data}"=="${TIME}"];thenmkdir${dir}${Time} mv${dir}ping2.log${dir}${Time}-ping2.logmv${dir}${Time}-ping2.log${dir}${Time}fifind${dir}-mtime+7-name"*-ping2.log"-execrm-rf{}\;find${dir}-mtime+7-typed-execrm-rf{}\;data=`date+%F''%H:%M`data1=`date+%F''%H:%M:%S`echo"------------${data1}---------------" ${dir}ping2.logping-c10${IP} ${dir}ping2.logif[$?-eq1];thenSTAT=`cat${dir}ping.lock`if[${STAT}-eq1];then/usr/bin/python/DATA/oracle/netdir/GFweixin.pyxuelVPN-monitor"GLPfromPDC(192.168.11.11)ping金融云(10.75.128.8)中断,请检查深信服VPN!\nTIME:${data1}"echo0 ${dir}ping.lockelsecontinuefielseSTAT=`cat${dir}ping.lock`if[${STAT}-eq0];then/usr/bin/python/DATA/oracle/netdir/GFweixin.pyxuelVPN-monitor"VPNmonitorfrom物理机(192.168.11.11)ping金融云(10.199.75.14)恢复!\nTIME:${data1}"echo1 ${dir}ping.lockelsecontinuefifidone

如有异常会发送告警:

微信告警:

短信告警:

日志收集脚本:

#!/bin/bashDATE=`date+%F`MON=`date+%Y-%m`FDIR='/user/backup/mysql/MySQL_Excel/'if[!-d${FDIR}];thenmkdir-p${FDIR}DIR='/user/backup/mysql/sub-treasury/'MySQL_FILE='/user/backup/mysql/MySQL_Excel/tmp_MySQLB.txt'M_date=`date+%Y/%m/%d`M_SIZE=`find${DIR}-name"*-${DATE}.sql.tar.gz"-execdu{}\;|awk'{sum+=$1}END{printsum/1024"M"}'`#writefileecho-e"${M_date},MySQL,分库备份(逻辑),每天,22:00:00,22:02:00,成功,${DIR}*-${DATE}.sql.tar.gz,是,${M_SIZE},否\n\c" ${MySQL_FILE}Week=`date+%w`if[${Week}-eq0];thenif[!-d${FDIR}${DATE}];thenmkdir-p${FDIR}${DATE}fimv${MySQL_FILE}${FDIR}${DATE}/usr/bin/zip-r${FDIR}MySQLB_${DATE}.zip${FDIR}${DATE}/*if[$?-eq0];then/usr/bin/scp${FDIR}MySQLB_${DATE}.ziproot@172.16.6.150:/DATA/oracle/Excel/MySQL_ZIPfirm-rf${FDIR}MySQLB_${DATE}.zipfi

集中处理文件脚本:

#!/bin/bashDATE=`date+%F`LDATE=`date+%F-d'-1day'`MON=`date+%Y-%m`DIR='/DATA/oracle/Excel/'tmp_dir='/DATA/oracle/Excel/Tmp_restore/'res_dir='/DATA/oracle/Excel/Totle_restore/'ZIP='/usr/bin/unzip'zipfunction(){$ZIP$1-d${tmp_dir}TXT=`find${tmp_dir}-nametmp_*.txt`cp$TXT${res_dir}rm-rf${tmp_dir}*foriin`find${DIR}-name*_${LDATE}.zip-execls{}\;`zipfunction$icd${DIR}scripts/if[$?-eq0];then/bin/python34${DIR}scripts/GLP_excel.pyif[!-d${DIR}scripts/${MON}];thenmkdir-p${DIR}scripts/${MON}mv${DIR}scripts/Oralce_bak.xlsx${DIR}scripts/${MON}/GLP_${DATE}.xlsxcd${DIR}scripts/${MON}//bin/mailx-rxuel@anchnet.com-s"Oracle-Excel-report"-a${DIR}scripts/${MON}/GLP_${DATE}.xlsxOraclebak@anchnet.com ${DIR}scripts/${MON}/GLP_${DATE}.xlsxrm-rf${DIR}Totle_restore/*

Python脚本将文件集中处理生成Excel:(python写的不是很好,初步完成生成报表功能。)

#!/bin/envpython34importxlsxwriter#定义excel对象workbookworkbook=xlsxwriter.Workbook("Oracle.xlsx")#MySQLsheet格式定义worksheet_M=workbook.add_worksheet('MySQL备份详情表')worksheet_M.set_column('A:K',12)worksheet_M.set_row(0,17)worksheet_M.set_column('C:C',20)worksheet_M.set_column('H:H',58)#MySQLDWsheet格式定义worksheet_MDW=workbook.add_worksheet('MySQL-DW备份详情表')worksheet_MDW.set_column('A:K',12)worksheet_MDW.set_row(0,17)worksheet_MDW.set_column('C:C',20)worksheet_MDW.set_column('H:H',58)#Oraclesheet格式定义worksheet_O=workbook.add_worksheet('ORACLE备份详情表')worksheet_O.set_column('A:K',12)worksheet_O.set_row(0,17)worksheet_O.set_column('G:H',40)worksheet_O.set_column('C:C',16)#NFSsheet格式定义worksheet_N=workbook.add_worksheet('NFS备份详情表')worksheet_N.set_column('A:K',14)worksheet_N.set_row(0,17)worksheet_N.set_column('H:H',59)#定义表头格式merge_format=workbook.add_format({'bold':1,'border':1,'align':'center','valign':'vcenter','fg_color':'#FAEBD7'#表各项目名称格式name_format=workbook.add_format({'bold':1,'border':1,'align':'center','valign':'vcenter','fg_color':'#E0FFFF'#表内容格式normal_format=workbook.add_format({'align':'center'#写入个表项目名称函数defset_title(file_list,row,col,worksheet):foriinfile_list:worksheet.write(row,col,i,name_format)col+=1#写入表内容函数defset_content(file_content,row,worksheet):withopen(file_content,'r')asF:foriinF:listnum=list(i.split(','))col=0forjinlistnum:worksheet.write(row,col,j,normal_format)col+=1row+=1#写入MySQLsheet表头worksheet_M.merge_range('A1:K1','MySQL备份详情表',merge_format)worksheet_M.merge_range('A12:K12','MySQL还原详情表',merge_format)#写入MySQLDWsheet表头worksheet_MDW.merge_range('A1:K1','MySQL-DW备份详情表',merge_format)worksheet_MDW.merge_range('A12:K12','MySQL-DW还原详情表',merge_format)#写入Oraclesheet表头worksheet_O.merge_range('A1:K1','ORACLE备份详情表',merge_format)worksheet_O.merge_range('A11:K11','ORACLE传输详情表',merge_format)worksheet_O.merge_range('A21:K21','ORACLE还原详情表',merge_format)#写入NFSsheet表头worksheet_N.merge_range('A1:J1','NFS备份详情表',merge_format)worksheet_N.merge_range('A12:J12','vsftp备份详情表',merge_format)#定义MySQL表各项目名称MySQL_Baklist=['备份日期','备份对象','备份类型','备份周期','备份开始时间','备份结束时间','备份状态','备份文件','是否压缩','备份文件大小','是否补备']MySQL_Reslist=['还原日期','还原对象','还原类型','还原周期','还原开始时间','还原状态','库数目','库数目对比、还原详情','补还原']#定义MySQL-DW表各项目名称MySQLDW_Baklist=['备份日期','备份对象','备份类型','备份周期','备份开始时间','备份结束时间','备份状态','备份文件','是否压缩','备份文件大小','是否补备']MySQLDW_Reslist=['还原日期','还原对象','还原类型','还原周期','还原开始时间','还原状态','库数目','库数目对比、还原详情','补还原']#定义Oracle表各项目名称Oracle_Baklist=['备份日期','备份对象','备份类型','备份周期','备份开始时间','备份结束时间','备份状态','备份文件','是否压缩','备份文件大小','是否补备']Oracle_Tralist=['传输日期','传输对象','类型','传输周期','开始时间','scp传输打包状态','rsync状态','rsync文件','rsync重传']Oracle_Reslist=['还原日期','还原对象','还原类型','还原周期','开始时间','还原状态','还原详情','补还原']#定义NFS表各项目名称Rsync_list=['备份日期','备份对象','备份类型','备份周期','备份开始时间','备份结束时间','备份状态','日志文件','是否压缩','是否补备']Vsftp_list=['备份日期','备份对象','备份类型','备份周期','备份开始时间','备份结束时间','备份状态','日志文件','是否压缩','是否补备']#写入MySQL表项目名称set_title(MySQL_Baklist,row=1,col=0,worksheet=worksheet_M)set_title(MySQL_Reslist,row=12,col=0,worksheet=worksheet_M)#写入MySQL-DW表项目名称set_title(MySQLDW_Baklist,row=1,col=0,worksheet=worksheet_MDW)set_title(MySQLDW_Reslist,row=12,col=0,worksheet=worksheet_MDW)#写入Oracle表项目名称set_title(Oracle_Baklist,row=1,col=0,worksheet=worksheet_O)set_title(Oracle_Tralist,row=11,col=0,worksheet=worksheet_O)set_title(Oracle_Reslist,row=21,col=0,worksheet=worksheet_O)#写入NFS表项目名称set_title(Rsync_list,row=1,col=0,worksheet=worksheet_N)set_title(Vsftp_list,row=12,col=0,worksheet=worksheet_N)#定义MySQL内容数据文件路径MySQLB_file='/DATA/oracle/Excel/Totle_restore/tmp_MySQLB.txt'MySQLR_file='/DATA/oracle/Excel/Totle_restore/tmp_MySQLR.txt'#定义MySQL-DW内容数据文件路径MySQLDWB_file='/DATA/oracle/Excel/Totle_restore/tmp_MySQLDWB.txt'MySQLDWR_file='/DATA/oracle/Excel/Totle_restore/tmp_MySQLDWR.txt'#定义Oracle内容数据文件路径OracleB_file='/DATA/oracle/Excel/Totle_restore/tmp_OracleB.txt'OracleT_file='/DATA/oracle/Excel/Totle_restore/tmp_OracleT.txt'OracleR_file='/DATA/oracle/Excel/Totle_restore/tmp_OracleR.txt'#定义NFS内容数据文件路径Rsync_file='/DATA/oracle/Excel/Totle_restore/tmp_rsync.txt'Vsftp_file='/DATA/oracle/Excel/Totle_restore/tmp_vsftpd.txt'#写入MySQL数据内容set_content(MySQLB_file,row=2,worksheet=worksheet_M)set_content(MySQLR_file,row=13,worksheet=worksheet_M)#写入MySQL数据内容set_content(MySQLDWB_file,row=2,worksheet=worksheet_MDW)set_content(MySQLDWR_file,row=13,worksheet=worksheet_MDW)#写入Oracle数据内容set_content(OracleB_file,row=2,worksheet=worksheet_O)set_content(OracleT_file,row=12,worksheet=worksheet_O)set_content(OracleR_file,row=22,worksheet=worksheet_O)#写入NFS数据内容set_content(Rsync_file,row=2,worksheet=worksheet_N)set_content(Vsftp_file,row=13,worksheet=worksheet_N)#关闭workbookworkbook.close()

报表查看:

版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任 备份 oracle excel python 自动化躲在某一地点,想念一个站在来路,

Oracle备份还原实践推荐

相关文章:

你感兴趣的文章:

标签云: