为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle备份还原实践

标签:
Linux


一、项目背景:

1.1 客户需求:

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

1.2 需求要点:

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

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

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

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

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

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

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

1.3 解决方案:

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

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

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

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

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

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

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

二、逻辑拓扑:

2.1 Oracle数据库备份还原:

16f68dfdf4b06071807830bcd959ebd5.png

2.1 Oracle数据库备份还原:

ab7830e1de484cfd73ce38811f7d0b8a.png

三、技术细节:

3.1 Oracle数据库备份还原:

创建Oracle数据库备份用户:

create user backuser identified by pwdbackuser;

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

查看用户表空间:

select username,default_tablespace from dba_users;

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

create tablespace baktables datafile '/data/bakdir/baktab_data.dbf' size 200M;

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

grant create session,create table,create view,create sequence,unlimited tablespace to backuser;

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

alter user backuser default tablespace baktables;

创建Oracle数据库备份目录:

create directory dump_dir as '/backup/backup_dir';

查看备份目录:

select * from dba_directories;

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

Grant read,write on directory dump_dir to backuser;

使用expdp导出数据库:

expdp backuser/pwdbackuser SCHEMAS=DB1 dumpfile=DB1.dmp directory=dump_dir log=DB1.log

查看备份日志:

725660cc8227f9a6497db28b84428e99.png

Oracle自动备份脚本示例:

#!/bin/bash

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export ORACLE_SID=ORCL

export PATH=$ORACLE_HOME/bin:$PATH

filename=`date +%Y-%m-%d`'.dmp'

logname=`date +%Y-%m-%d`'.log'

dump_dir="/backup/backup_dir/"

backdir="dump_dir"

for Schame in DB1....DB2

do

    /u01/app/oracle/product/11.2.0/db_1/bin/expdp backuser/pwdbackuser SCHEMAS=${Schame} dumpfile=${Schame}-${filename} directory=${backdir} log=${Schame}-${logname}

    find ${dump_dir} -mtime +7 -name "*.dmp" -exec rm -rf {} \;

    find ${dump_dir} -mtime +7 -name "*.log" -exec rm -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" -exec ls -l {} \;|awk '{print $8}'|sort -r|head -1`

FILE=`find ${DIR} -name "*-${DATE}.dmp" -exec ls {} \;|awk '{printf ("%s ",$1)}'`

#O_SIZE=`find ${DIR} -name "*-${DATE}.dmp" -exec du {} \;|awk '{sum+=$1} END {print sum/1024"M"}'`

O_SIZE=`find ${DIR} -name "*-${DATE}.dmp" -exec du -sh {} \;|awk '{printf ("%s ",$1)}'`

#write file

echo -e "${M_date},ORACLE,分库备份,(逻辑)每天,22:00:00,${END_TIME},成功,${FILE},否,${O_SIZE},否\n\c">>${O_FILE}

Week=`date +%w`

if [ ${Week} -eq 0 ];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 [ $? -eq 0 ];then

        /usr/bin/scp ${FDIR}OracleB_${DATE}.zip root@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'-1 day'`

/usr/bin/scp -P 2621 root@172.16.84.12:/backup/backup_dir/*-${fdate}.dmp /user/backup/oracle/oraclebak

分类归档压缩:

#!/bin/bash

fdate=`date +%Y-%m-%d -d'-1 day'`

filename=`date +%Y-%m-%d -d'-1 day'`'.dmp'

dump_dir="/user/backup/oracle/oraclebak"

I=`ls /user/backup/oracle/oraclebak/ | grep $filename |awk -F '-' '{print $1}' |uniq `

cd ${dump_dir}

for Schame in ${I[*]}

do

    tar zcf ${Schame}-$filename.tar.gz ${Schame}-$filename

done

find ${dump_dir} -name "*.dmp" -exec rm -rf {} \;

find ${dump_dir} -mtime +7 -name "*.dmp.tar.gz" -exec rm -rf {} \;

rsync进行断点传输:

#!/bin/bash

#Data=`date +%Y-%m-%d" "%H:%m`

dir="/user/backup/oracle/"

fdate=`date +%Y-%m-%d -d'-1 day'`

filename=`date +%Y-%m-%d -d'-1 day'`'.dmp'

/usr/bin/rsync -rP --timeout=3600 --rsh=ssh /user/backup/oracle/oraclebak/DB1-${fdate}.dmp.tar.gz root@172.17.130.130:/DATA/oracle/oracle_bak && echo "$Data DB1 rsync is  success!">>${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.gz root@172.17.130.130:/DATA/oracle/oracle_bak && echo "$Data DB2 rsync is  success!">>${dir}Logdir/oracle-rsync.log    

       if [ "$?" == "0" ];then

            unset Data

            Data=`date +%Y-%m-%d" "%H:%m`

            /usr/bin/rsync -rP --timeout=3600 --rsh=ssh /user/backup/oraclebak/DB3-${fdate}.dmp.tar.gz root@172.17.130.130:/DATA/oracle/oracle_bak && echo"$Data DB3 rsync is  success!">>${dir}Logdir/oracle-rsync.log        

            if [ "$?" == "0" ];then

                  unset Data

                  Data=`date +%Y-%m-%d" "%H:%m`

                  echo "$Data  rsync is  success!">>${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 "$Data 1_oracle_scp.sh is exec success!">>${dir}Logdir/oracle-back.log && /bin/bash ${dir}2_oracle_tar.sh

     if [ "$?" == "0" ];then

        unset Data

        Data=`date +%Y-%m-%d" "%H:%m`

        echo "$Data 2_oracle_tar.sh is exec success!">>${dir}Logdir/oracle-back.log && /bin/bash ${dir}3_oracle_rsync.sh

            if [ "$?" == "0" ];then

                 unset Data

                 Data=`date +%Y-%m-%d" "%H:%m`

                    echo "$Data 3_oracle_rsync.sh is exec success!">>${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'-1 day'`

check_data=`date +%Y-%m-%d -d'-3 day'`

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'-1 day'`'.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=ssh root@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=ssh root@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=ssh root@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

#把压缩文件存放在日期目录

sudo chown -R oracle:dba ${oracle_path}*

cd ${oracle_path}

mv *-"$dadir".dmp.tar.gz $dadir

#把压缩文件解压到还原目录

cd ${oracle_path}${dadir}

oracle=`ls`

for I in ${oracle[*]}

do

    /bin/tar zxf $I -C ${repath}${dadir}

done

cp ${repath}${dadir}/* ${backdir}

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

#!/bin/bash

export ORACLE_BASE=/home/oracle/app

export ORACLE_HOME=$ORACLE_BASE/oracle/product/12.1.0/dbhome_1

export ORACLE_SID=ORCL

export PATH=$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}

for db in DB1...DBn

do

if [ "$db" == "DB1" ];then

sqlplus -S /nolog <<EOF

conn / as sysdba

drop user ${db} cascade;

create user ${db} identified by DBuser1;

alter user DB_user1 default tablespace tab1;

grant create session,create table,create view,create procedure,create sequence,unlimited tablespace to ${db};

Grant read,write on directory dump_dir to ${db};

exit;

else [ "$db" == "GPSUSER" ];

sqlplus -S /nolog <<EOF

conn / as sysdba

drop user ${db} cascade;

create user ${db} identified by DBuser2;

alter user DB default tablespace tab2;

grant create session,create table,create view,create procedure,create sequence,unlimited tablespace to ${db};

Grant read,write on directory dump_dir to ${db};

exit;

EOF

fi

done

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

#!/bin/bash

export ORACLE_BASE=/home/oracle/app

export ORACLE_HOME=$ORACLE_BASE/oracle/product/12.1.0/dbhome_1

export ORACLE_SID=glpfin

export PATH=$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'-1 day'`

#数据库导入日志目录

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}

for db in ${I[*]}

do

        impdp system/51idc.com directory=dump_dir dumpfile=${db}-${dadir}.dmp logfile=import-${db}-${dadir}.log

        rm -rf ${backdir}${db}-${dadir}.dmp && mv import-${db}-${dadir}.log ${implogdir}${dadir} 

        /bin/mail -r xuel@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" -exec rm -rf {}\;

find ${implogdir} -ctime +30 -type d -exec rm -rf {} \;

find ${repath} -mtime +7 -name "*.dmp" -exec rm -rf {} \;

find ${repath} -type d -mtime +7 -exec rm -rf {} \;

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

#!/bin/bash

date=`date +%Y/%m/%d" "%H:%M`

Logdir="/DATA/oracle/Logdir/"

dadir=`date +%Y-%m-%d -d'-1 day'`

implogdir="/DATA/oracle/implogdir/"

if [ -d ${implogdir}${dadir} ];then

    File=`ls ${implogdir}${dadir}|grep ${dadir} |awk -F '-' '{print $2}' |uniq`

    for I in ${File[*]}

    do

        echo ${date}>>${Logdir}${I}-import.log

        tail -1 ${implogdir}${dadir}/import-${I}-${dadir}.log>>${Logdir}${I}-import.log

    done

fi

***监控脚本:

#!/bin/bash

IP=10.199.75.14

dir="/DATA/oracle/netdir/"

if [ ! -d ${dir} ];then

    mkdir -p ${dir}

fi

echo 1 > ${dir}ping.lock

while true

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" -exec rm -rf {} \;

    find ${dir} -mtime +7 -type d -exec rm -rf {} \;

    data=`date +%F' '%H:%M`

    data1=`date +%F' '%H:%M:%S`

    echo "------------${data1}---------------">>${dir}ping2.log

    ping -c 10 ${IP} >>${dir}ping2.log

    if [ $? -eq 1 ];then

        STAT=`cat ${dir}ping.lock`

        if [ ${STAT} -eq 1 ];then

            /usr/bin/python /DATA/oracle/netdir/GFweixin.py xuel ***-monitor "GLP from PDC(192.168.11.11) ping 金融云(10.75.128.8)中断,请检查深信服***! \n TIME:${

data1}"            echo 0 > ${dir}ping.lock

        else

            continue

        fi

    else

        STAT=`cat ${dir}ping.lock`

        if [ ${STAT} -eq 0 ];then

            /usr/bin/python /DATA/oracle/netdir/GFweixin.py xuel ***-monitor "*** monitor from 物理机(192.168.11.11) ping 金融云(10.199.75.14)恢复! \n TIME:${data1}"

            echo 1 > ${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" -exec du {} \;|awk '{sum+=$1} END {print sum/1024"M"}'`

#write file

echo -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} -eq 0 ];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 [ $? -eq 0 ];then

        /usr/bin/scp ${FDIR}MySQLB_${DATE}.zip root@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'-1 day'`

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} -name tmp_*.txt`

    cp $TXT ${res_dir}

    rm -rf ${tmp_dir}*

}

for i in `find ${DIR} -name *_${LDATE}.zip -exec ls {} \;`

do

    zipfunction $i

done

cd ${DIR}scripts/

if [ $? -eq 0 ];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 -r xuel@anchnet.com -s "Oracle-Excel-report" -a ${DIR}scripts/${MON}/GLP_${DATE}.xlsx Oraclebak@anchnet.com<${DIR}scripts/${MON}/GLP_${DATE}.xlsx

rm -rf ${DIR}Totle_restore/*

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

#!/bin/env python34

import xlsxwriter

#定义excel对象workbook

workbook =xlsxwriter.Workbook("Oracle.xlsx")

#MySQL sheet 格式定义

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)

#MySQLDW sheet 格式定义

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)

#Oracle sheet 格式定义

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)

#NFS sheet 格式定义

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'

})

#写入个表项目名称函数

def set_title(file_list,row,col,worksheet):

    for i in file_list:

        worksheet.write(row,col,i,name_format)

        col += 1

#写入表内容函数

def set_content(file_content,row,worksheet):

    with open(file_content,'r') as F:

        for i in F:

            listnum = list(i.split(','))

            col = 0

            for j in listnum:

                worksheet.write(row,col,j,normal_format)

                col+=1

            row+=1

#写入MySQL sheet表头

worksheet_M.merge_range('A1:K1','MySQL备份详情表',merge_format)

worksheet_M.merge_range('A12:K12','MySQL还原详情表',merge_format)

#写入MySQLDW sheet表头

worksheet_MDW.merge_range('A1:K1','MySQL-DW备份详情表',merge_format)

worksheet_MDW.merge_range('A12:K12','MySQL-DW还原详情表',merge_format)

#写入Oracle sheet表头

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)

#写入NFS sheet表头

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)

#关闭workbook

workbook.close()

报表查看:

55c07165b6620975a8ef880a7ddc1f29.png

©著作权归作者所有:来自51CTO博客作者KaliArch的原创作品,如需转载,请注明出处,否则将追究法律责任

每一份赞赏源于懂得


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消