Oracle备份还原实践

一、项目背景:

1.1 客户需求

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

1.2 需求要点:

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

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

  3. 数据备份:MysqL/Oracle/RDS实现数据库备份。

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

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

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

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

1.3 解决方案:

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

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

  3. 数据备份:MysqL及RDS采用MysqLdump逻辑备份,Oracle采用expdp备份。

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

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

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

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

二、逻辑拓扑:

2.1 Oracle数据库备份还原:

16f68dfdf4b06071807830bcd959ebd5.png

2.1 Oracle数据库备份还原:

ab7830e1de484cfd73ce38811f7d0b8a.png

三、技术细节:

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

查看备份日志:

725660cc8227f9a6497db28b84428e99.png


Oracle自动备份脚本示例:

#!/bin/bash
exportORACLE_BASE=/u01/app/oracle
exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
exportORACLE_SID=ORCL
exportPATH=$ORACLE_HOME/bin:$PATH
filename=`date+%Y-%m-%d`'.dmp'
logname=`date+%Y-%m-%d`'.log'
dump_dir="/backup/backup_dir/"
backdir="dump_dir"
forSchameinDB1....DB2
do
/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/bash
DATE=`date+%F`
MON=`date+%Y-%m`
M_date=`date+%Y/%m/%d`
DIR='/backup/backup_dir/'
FDIR='/backup/Oracle_Excel/'

if[!-d${FDIR}];then
mkdir-p${FDIR}
fi
O_FILE='/backup/Oracle_Excel/tmp_OracleB.txt'
#Oracle
END_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)}'`
#writefile
echo-e"${M_date},ORACLE,分库备份,(逻辑)每天,22:00:00,${END_TIME},成功,${FILE},否,${O_SIZE},否\n\c">>${O_FILE}
Week=`date+%w`
if[${Week}-eq0];then
if[!-d${FDIR}${DATE}];then
mkdir-p${FDIR}${DATE}
fi
mv${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_Excel
fi
rm-rf${FDIR}OracleB_${DATE}.zip
fi

查看数据存储服务器:

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

SCP传输

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

分类归档压缩:

#!/bin/bash
fdate=`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[*]}
do
tarzcf${Schame}-$filename.tar.gz${Schame}-$filename
done
find${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.log
if["$?"=="0"];then
Data=`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.log
if["$?"=="0"];then
unsetData
Data=`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.log
if["$?"=="0"];then
unsetData
Data=`date+%Y-%m-%d""%H:%m`
echo"$Datarsyncissuccess!">>${dir}Logdir/oracle-rsync.log
fi
fi
fi

总体调用

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

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

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

#!/bin/bash
oracle_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}
fi
fi
fi

解压传输过来的数据库

#!/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}];then
mkdir-p${implogdir}${dadir}
fi
if[!-d${repath}];then
mkdir-p${repath}
fi
if[!-d${oracle_path}${dadir}];then
mkdir${oracle_path}${dadir}
fi
if[!-d${repath}${dadir}];then
mkdir${repath}${dadir}
fi
#把压缩文件存放在日期目录
sudochown-Roracle:dba${oracle_path}*
cd${oracle_path}
mv*-"$dadir".dmp.tar.gz$dadir
#把压缩文件解压到还原目录
cd${oracle_path}${dadir}
oracle=`ls`
forIin${oracle[*]}
do
/bin/tarzxf$I-C${repath}${dadir}
done
cp${repath}${dadir}/*${backdir}

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

#!/bin/bash
exportORACLE_BASE=/home/oracle/app
exportORACLE_HOME=$ORACLE_BASE/oracle/product/12.1.0/dbhome_1
exportORACLE_SID=ORCL
exportPATH=$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...dbn
do
if["$db"=="DB1"];then
sqlplus-S/nolog<<EOF
conn/assysdba
dropuser${db}cascade;
createuser${db}identifiedbyDBuser1;
alteruserDB_user1defaulttablespacetab1;
grantcreatesession,createprocedure,unlimitedtablespaceto${db};
Grantread,writeondirectorydump_dirto${db};
exit;
else["$db"=="GPSUSER"];
sqlplus-S/nolog<<EOF
conn/assysdba
dropuser${db}cascade;
createuser${db}identifiedbyDBuser2;
alteruserDBdefaulttablespacetab2;
grantcreatesession,writeondirectorydump_dirto${db};
exit;
EOF
fi
done

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

#!/bin/bash
exportORACLE_BASE=/home/oracle/app
exportORACLE_HOME=$ORACLE_BASE/oracle/product/12.1.0/dbhome_1
exportORACLE_SID=glpfin
exportPATH=$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[*]}

do
impdpsystem/51idc.comdirectory=dump_dirdumpfile=${db}-${dadir}.dmplogfile=import-${db}-${dadir}.log
rm-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}.log
done

find${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/bash
date=`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}];then
File=`ls${implogdir}${dadir}|grep${dadir}|awk-F'-''{print$2}'|uniq`
forIin${File[*]}
do
echo${date}>>${Logdir}${I}-import.log
tail-1${implogdir}${dadir}/import-${I}-${dadir}.log>>${Logdir}${I}-import.log
done
fi

VPN监控脚本:

#!/bin/bash
IP=10.199.75.14
dir="/DATA/oracle/netdir/"
if[!-d${dir}];then
mkdir-p${dir}
fi
echo1>${dir}ping.lock
whiletrue
do
Time=`date+%F`
TIME="${Time}23:59"
if["${data}"=="${TIME}"];then
mkdir${dir}${Time}&&mv${dir}ping2.log${dir}${Time}-ping2.log
mv${dir}${Time}-ping2.log${dir}${Time}
fi
find${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.log
ping-c10${IP}>>${dir}ping2.log
if[$?-eq1];then
STAT=`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.lock
else
continue
fi
else
STAT=`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.lock
else
continue
fi
fi
done

如有异常会发送告警:

微信告警:

6452046cb63f626449286fea3f55faf6.png

短信告警:

45e0b15253353f2d0b9805c9556bfea2.png

日志收集脚本:

#!/bin/bash
DATE=`date+%F`
MON=`date+%Y-%m`
FDIR='/user/backup/MysqL/MysqL_Excel/'
if[!-d${FDIR}];then
mkdir-p${FDIR}
fi
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"}'`
#writefile
echo-e"${M_date},MysqL,分库备份(逻辑),每天,22:02:00,${DIR}*-${DATE}.sql.tar.gz,是,${M_SIZE},否\n\c">>${MysqL_FILE}
Week=`date+%w`
if[${Week}-eq0];then
if[!-d${FDIR}${DATE}];then
mkdir-p${FDIR}${DATE}
fi
mv${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_ZIP
fi
rm-rf${FDIR}MysqLB_${DATE}.zip
fi

集中处理文件脚本:

#!/bin/bash
DATE=`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{}\;`
do
zipfunction$i
done
cd${DIR}scripts/
if[$?-eq0];then
/bin/python34${DIR}scripts/GLP_excel.py
fi
if[!-d${DIR}scripts/${MON}];then
mkdir-p${DIR}scripts/${MON}
fi
mv${DIR}scripts/Oralce_bak.xlsx${DIR}scripts/${MON}/GLP_${DATE}.xlsx
cd${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}.xlsx
rm-rf${DIR}Totle_restore/*

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

#!/bin/envpython34
importxlsxwriter
#定义excel对象workbook
workbook=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,'fg_color':'#E0FFFF'
})
#表内容格式
normal_format=workbook.add_format({
'align':'center'
})

#写入个表项目名称函数
defset_title(file_list,row,col,worksheet):
foriinfile_list:
worksheet.write(row,i,name_format)
col+=1

#写入表内容函数
defset_content(file_content,worksheet):
withopen(file_content,'r')asF:
foriinF:
listnum=list(i.split(','))
col=0
forjinlistnum:
worksheet.write(row,j,normal_format)
col+=1
row+=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,worksheet=worksheet_M)
#写入MysqL-DW表项目名称
set_title(MysqLDW_Baklist,worksheet=worksheet_MDW)
set_title(MysqLDW_Reslist,worksheet=worksheet_MDW)
#写入Oracle表项目名称
set_title(Oracle_Baklist,worksheet=worksheet_O)
set_title(Oracle_Tralist,row=11,worksheet=worksheet_O)
set_title(Oracle_Reslist,row=21,worksheet=worksheet_O)
#写入NFS表项目名称
set_title(Rsync_list,worksheet=worksheet_N)
set_title(Vsftp_list,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,worksheet=worksheet_MDW)
set_content(MysqLDWR_file,worksheet=worksheet_MDW)
#写入Oracle数据内容
set_content(OracleB_file,worksheet=worksheet_O)
set_content(OracleT_file,worksheet=worksheet_O)
set_content(OracleR_file,row=22,worksheet=worksheet_O)
#写入NFS数据内容
set_content(Rsync_file,worksheet=worksheet_N)
set_content(Vsftp_file,worksheet=worksheet_N)

#关闭workbook
workbook.close()

报表查看:

55c07165b6620975a8ef880a7ddc1f29.png

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...