Oracle備份還原實踐

1、項目背景:python

1.1 客戶需求mysql

將物理機房生產環境的Oracle/MySQL及阿里雲的RDS數據庫備份出來,存儲到一個集中數據庫存儲服務器,實現異地備份,而且在還原環境內要將MySQL/Oracle以及阿里雲RDS備份數據還原到測試環境,並判斷還原數據庫是否存在異常,檢驗數據的一致性,若有異常郵件或微信告警,每週生成Excel報表發送給負責人。sql

1.2 需求要點:數據庫

  1. 網絡通訊:阿里金融雲/公有云/物理機房環境網絡須在固定網段互通。安全

  2. 網絡安全:各個網段隔離,有需求通訊的網段開放通訊,需實現端口級別控制。bash

  3. 數據備份:MySQL/Oracle/RDS實現數據庫備份。服務器

  4. 數據傳輸:採用定時crond+scp+rsync配合傳輸。微信

  5. 數據校驗:保障數據庫還原成功的可靠性。
    網絡

  6. 監控告警:***網絡中斷,或數據庫備份失敗等須要發送通知到管理員。session

  7. 報表生成:將數據庫還原的信息生成報表統一發送給管理員。

1.3 解決方案:

  1. 網絡通訊:在阿里雲端,採用深信服IPSec ***與物理機房Cisco設備隧道互通。開通傳輸網段,將此網段做爲網絡傳輸中轉網段。

  2. 網絡安全:各個網段隔離,若有跨地區或機房相互通訊的需求,需將此環境下的數據傳輸到中轉網段,再實現數據傳輸。使用阿里雲安全組deny any,開通須要通訊的白名單端口。

  3. 數據備份:MySQL及RDS採用mysqldump邏輯備份,Oracle採用expdp備份。

  4. 數據傳輸:採用定時crond+scp+rsync配合傳輸。

  5. 數據校驗:導入文件存在日誌,查看日誌與比對庫數目。

  6. 監控告警:採用smarteye自定義監控,監控***情況,同事採用自定義腳本+數據庫還原異常告警。若是***中斷或數據庫恢復異常發送短信,郵件,微信消息通知管理員。

  7. 報表生成:每日腳本將數據庫還原日誌文件進行處理,最終打包統一傳輸到一個Python環境下,利用自編寫Python腳本處理文件數據,生成報表,每週發送給管理員。

2、邏輯拓撲:

2.1 Oracle數據庫備份還原:

16f68dfdf4b06071807830bcd959ebd5.png

2.1 Oracle數據庫備份還原:

ab7830e1de484cfd73ce38811f7d0b8a.png

3、技術細節:

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

相關文章
相關標籤/搜索