#!/usr/bin/env python# encoding: utf-8
#@author: 東哥加油!
#@file: del_tb_bigtable_statistic.py
#@time: 2018/11/21 15:39
import pymysql
import datetime
import math
import time
#獲取連線
def get_conn():
conn = none
try:
conn = pymysql.connect(
host="192.168.1.2",
port=3306,
user="root",
passwd="mysqlpassword",
charset="utf8",
)except exception as err:
print(err)
return conn
#查詢語句執行
def get_data(sql):
conn = get_conn()
cur = conn.cursor()
cur.execute(sql)
data = cur.fetchall()
conn.close()
return data
#93天前的時間戳
# 2018-07-24 00:00:00 轉成毫秒時間戳
def get_pdate_begin(xday):
now_time = datetime.datetime.now()
step_time = datetime.timedelta(days=xday)
yes_time = now_time - step_time
pdate = yes_time.strftime('%y%m%d')
print(pdate)
return pdate
#資料備份,放到tb_bigtable_statistic_hist表中
def data_bak(xday):
conn = get_conn()
cur = conn.cursor()
cidlist = data_zk(xday)
if cidlist == 0:
print('當天無資料')
else:
for cids in cidlist:
try:
sql = '''insert into db_order.tb_bigtable_statistic_hist \
select * from db_order.tb_bigtable_statistic \
where cid in( %s )''' % cids
cur.execute(sql)
conn.commit()
except:
print('備份失敗!!!')
conn.rollback()
conn.close()
exit(99)
conn.close()
#組裝cid成in的條件(....),5000個cid為一組
def data_zk(xday):
conn = get_conn()
cur = conn.cursor()
cid = get_cid(xday)
var1 = "-999"
i = 0
list =
if cid.__len__() > 0:
for one in cid:
var1=var1+","+str(one[0])
i=i+1
if(i==2000):
var1 = "-999"
i=0return list
else:
return 0
#獲取該條件所有的cid
def get_cid(xday):
pdate = get_pdate_begin(xday)
sql = '''select cid
from db_order.tb_bigtable_statistic
where pdate = %s limit 20000''' % (pdate)
cid = get_data(sql)
return cid
#刪除資料
def del_data(xday):
conn = get_conn()
cur = conn.cursor()
cidlist = data_zk(xday)
if cidlist == 0:
print('當天無資料')
else:
for cids in cidlist:
try:
sql = '''delete from db_order.tb_bigtable_statistic \
where cid in( %s )''' % cids
cur.execute(sql)
conn.commit()
except:
print('備份失敗!!!')
conn.rollback()
conn.close()
exit(99)
conn.close()
def move_data(xday):
data_bak(xday)
del_data(xday)
if __name__ == '__main__':
move_data(93)
oracle大表刪除資料方案
需求簡介 生產資料庫乙個表有27億多資料,要刪除其中其中2014年之前的歷史資料 大約4億左右 表資訊 5個字段的主鍵 乙個欄位的單列索引 hash分割槽。資料庫情況 每日1 00 9 00會跑增量資料程式,其他sql不能影響增量程式。所以資料要在9 00 24 00之內跑完 解決方案1 delet...
Oracle 刪除大表中部分資料
需求 專案中有一張表大概有7000多萬條資料,造成表空間已滿,需要清理部分資料,打算清理3000萬。2b 做法 delete from table name where id 40000000 備註 select count 1 from table name where id his batch ...
大表分批刪除指令碼
昨天幹了件傻事,在公司新搭了個測試庫,把正式庫還原到測試庫後,把恢復模式改為簡單,然後無腦寫了個指令碼把所有業務表今年以前的資料刪除。之後就回家了。今天跑過來上去一看,呃的神,測試庫日誌達到了200多gb。這才意識到單個業務表的資料量比較大,而我用單個delete語句來刪除的,單個事務忒大了導致日誌...