前言:DB2一个实例下,可以存在多个数据库,之前使用shell备份脚本,但是同一时刻只能备份一个数据库,对于几百G的备份文件,这个速度显然太慢,今天学习了Python多线程,刚好应用一下。

分析:1、Python多线程在某些场景上是鸡肋,但是这里使用多线程,目的是开启多个shell子进程。

   2、磁盘I/O允许情况下,使用多个db2 backup进程。

   3、thread模块有诸多问题,这里使用threading模块。

   4、先前备份脚本修改端口来清理已连接应用,太过暴力,虽然都为冷备,但每次重启开销太大,这里使用db2 force application all。

   5、如果第四步清理连接异常,那就无法进行备份,暂时未找到捕获异常的合适方式,待考虑,不过使用连续三次清理,不是特别情况,99.9%情况下是OK的。

     6、可以不使用多线程,直接在使用subprocess开启多个子进程,这里是应用多线程,subprocess不在展示。

下面是具体代码:

MyThread.py

#!/usr/bin/env python
# encoding: utf-8
import threading class MyThread(threading.Thread):
#Thread子类
def __init__(self,func,args,name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args def run(self):
self.func(*self.args)

db2backup.py

#!/usr/bin/env python
# encoding: utf-8
import threading
import logging
import commands
import sys
import MyThread
from time import ctime, sleep logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)-1d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='db2_backup.log',
filemode='a')
# logging.debug('This is debug message')
# logging.info('This is info message')
# logging.warning('This is warning message') def db2_backup(inst_name, db_name, bak_dir):
#实现db2 备份
#检查实例用户
whoami = commands.getstatusoutput('whoami')
if whoami[1] != inst_name:
#print '用户身份有误,当前实例 %s,配置文件实例 %s' %(whoami,inst_name)
logging.error('用户身份有误,当前实例 %s,配置文件实例 %s' %(whoami,inst_name))
sys.exit() #开始备份
cmd = 'db2 backup database %s to %s' % (db_name,bak_dir)
exec_res = commands.getstatusoutput(cmd) if exec_res[0] == 0:
#print "%s 备份成功." % db_name
logging.info('% %s 备份成功.' % (ctime(),db_name))
print exec_res[1] return exec_res def read_conf(file_path):
#读取要备份的数据库配置
db_conf = []
with open(file_path,'r') as f:
for line in f:
line_list = line.strip().split(':')
if len(line_list) != 3:
logging.warning('%s 行配置不正确' % line.strip())
continue
cur_line = (line_list[0],line_list[1],line_list[2])
db_conf.append(cur_line)
return db_conf def main(): db_conf = read_conf('database.cfg')
thread_num = len(db_conf)
#实例化线程
threads = []
for line in db_conf:
t = MyThread.MyThread(db2_backup,line,db2_backup.__name__)
threads.append(t) #清除已建立连接
force_num = 3
while force_num:
commands.getstatusoutput('db2 force application all')
if force_num == 3:
sleep(1)
force_num -= force_num
#执行线程
for i in range(thread_num):
threads[i].start() #等待线程同步,结束进程
for i in range(thread_num):
threads[i].join() if __name__ == '__main__':
main()

要备份的数据库的配置信息:

database.cfg

实例名,数据库名,备份目录

db2inst1:PTEST:/home/db2inst1
db2inst1:PTEST2:/home/db2inst1

python多线程应用——DB2数据库备份的更多相关文章

  1. DB2数据库备份还原

    恢复及备份NC DB2数据库步 一. 安装DB2数据库 解压db2v9.5ins.rar安装,在写此文档时客户一般用的是9.5: 注意不要将db2安装到系统盘: 二. Windows版本 1.数据库备 ...

  2. Python基础学习九 数据库备份

    class BakDb(object): def __init__(self,ip,username,passwd,port=3306,path=r'C:\Users\BJQT\Desktop\dat ...

  3. db2数据库备份

    一.离线备份 db2  list  database  directory -----查看有哪些数据库,确定需要备份哪个数据库 db2  disconnect  current -----断开以数据库 ...

  4. db2数据库备份及恢复

    导出 1. 连接数据库,命令如下: db2 connect to db_name user user_name using password db_name 是指数据库的名字, user_name 是 ...

  5. Db2数据库的备份和恢复

    DB2数据库备份与恢复 1.    备份 1.1离线备份(必须在数据库所在PC机进行操作) STEP 1 连接到要备份的数据库 C:\Documents and Settings\Administra ...

  6. Python数据库备份脚本

    Python数据库备份脚本 #!/usr/bin/env python # author: liudong # -*- coding: utf-8 -*- # filename: db_bak.py ...

  7. DB2还原数据库备份

    用命令还原数据库备份 1.建立一个新的数据库db2 create db 数据库名 on 路径 using codeset GBK territory zh_CN 2.将需要恢复的数据库恢复得到这个新的 ...

  8. DB2数据库在线备份还原

    DB2在线备份设置方法: 第一步:开启归档日志 db2 update db cfg for TEST_DB  using logretain on 第二步:重启数据库 第三步:进行一次离线备份 db2 ...

  9. Python爬虫:爬取某网站关键词对应商品ID,且存入DB2数据库

    公司研发不给力,我就自己写了一个,专门爬关键词对应的商品ID. 其中还学会了用Python操作DB2数据库.Python发送邮件.写日志文件.处理浏览器访问限制. #!/usr/bin/python# ...

随机推荐

  1. Alpha(8/10)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  2. Oracle DB

    索引 一.安装   卸载 一.安装 1.Oracle首先询问用户是否接受更新信息,一般选择不接受:Oracle安装选项,需为其配置数据库,所以此处会询问是否创建安装数据库,选择是系统类型,一般选择服务 ...

  3. 《重回耶路撒冷——犹太人的三千年》(Return to Jerusalem)读后感

    写在前面 书名:<重回耶路撒冷——犹太人的三千年>(Return to Jerusalem) 作者:张力升 来源:长清图书馆 阅读用时:其实年前拿到书,本来想寒假在家看的,但是在家一点儿都 ...

  4. bootstrap图片轮播

    <div class="carousel slide" id="myCarsousel" style="width:790px;"&g ...

  5. lnmp更改网站文件和MySQL数据库的存放目录

    购买阿里云服务器,一般建议买一个数据盘,也就是系统盘和数据盘分开,将网站文件和Mysql数据库等都保存在数据盘,即使系统盘或者环境出问题,重置系统盘和重新配置环境,都不会影响数据盘的东西. 配置好LN ...

  6. FZU2279 : Cantonese

    首先把相同的事件点合并,那么每个点有时间$t_i$,位置$x_i$,价值$v_i$. 考虑DP,设$f_i$表示按时间从小到大考虑每个事件,目前位于事件$i$的时间与位置时,最多能让多少个事件发生.在 ...

  7. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习2

    #include <iostream>#include <string>int main(){ using namespace std; string name; string ...

  8. Spring(1)—初识

    Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用. 特点: 轻量--从大小与开销两方面而言Spring都是轻量的. 控 ...

  9. CSS魔法堂:那个被我们忽略的outline

    前言  在CSS魔法堂:改变单选框颜色就这么吹毛求疵!中我们要模拟原生单选框通过Tab键获得焦点的效果,这里涉及到一个常常被忽略的属性--outline,由于之前对其印象确实有些模糊,于是本文打算对其 ...

  10. gitbook build 报错

    如下图所示 解决方案,通过 everythings 找到 copyPluginAssets.js,然后搜索 confirm,将其值  true –> false 参考链接:https://git ...