first commit

This commit is contained in:
2021-08-29 00:02:47 +08:00
commit 01e8b33396
52 changed files with 4404 additions and 0 deletions

232
常用脚本/oracle/oracle_mul.py Executable file
View File

@@ -0,0 +1,232 @@
#!/nmsmw/python/bin/python
# -*- encoding: gbk -*-
#=========================================
# Filename : oracle_mul.py
# Filetype : Python
# Author : Colben
# Create : 2014-12-19 10:40:30
#=========================================
import os, sys, re, cx_Oracle, signal
from multiprocessing import Pool, cpu_count
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
#os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.AL32UTF8'
remote_ora = {}#<<FOLD<<
#remote_ora['gk'] = 'boya/boya@10.128.75.65:1521/orcl.ntars.com'
remote_ora['gk'] = 'ibms/ibms@10.166.64.41:1521/orcl'
remote_ora['108'] = 'boya/boya@10.166.64.41:1521/orcl'
remote_ora['anhui'] = 'boya/boya@10.152.64.33:1521/orcl.idevelopment.info'
remote_ora['beijing'] = 'boya/boya@10.134.64.33:1521/orcl.ntars.com'
remote_ora['chongqing'] = 'boya/boya@10.137.64.33:1521/orcl'
remote_ora['fujian'] = 'boya/boya@10.162.64.33:1521/orcl.ntars.com'
remote_ora['gansu'] = 'boya/boya@10.142.64.33:1521/orcl'
remote_ora['guangdong'] = 'boya/boya@10.164.64.33:1521/orcl.ntars.com'
remote_ora['guangxi'] = 'boya/boya@10.161.64.33:1521/orcl'
remote_ora['guizhou'] = 'boya/boya@10.157.64.33:1521/orcl'
remote_ora['hainan'] = 'boya/boya@10.160.64.33:1521/orcl'
remote_ora['hebei'] = 'boya/boya@10.141.64.33:1521/orcl.ntars.com'
remote_ora['heilong'] = 'boya/boya@10.146.64.33:1521/orcl.ntars.com'
remote_ora['henan'] = 'boya/boya@10.151.64.33:1521/orcl.ntars.com'
remote_ora['hubei'] = 'boya/boya@10.155.64.33:1521/orcl.ntars.com'
remote_ora['hunan'] = 'boya/boya@10.158.64.33:1521/orcl.ntars.com'
remote_ora['jiangsu'] = 'boya/boya@10.150.64.33:1521/orclXDB.ntars.com'
remote_ora['jiangxi'] = 'boya/boya@10.159.64.33:1521/orcl.info'
remote_ora['jilin'] = 'boya/boya@10.147.64.33:1521/orcl'
remote_ora['liaoning'] = 'boya/boya@10.143.64.33:1521/orcl.ntars.info'
remote_ora['neimeng'] = 'boya/boya@10.135.64.33:1521/orcl'
remote_ora['ningxia'] = 'boya3w/boya3w@10.139.64.33:1521/orcl'
remote_ora['qinghai'] = 'boya/boya@10.144.64.33:1521/orcl.ntars.com'
remote_ora['shandong'] = 'boya/boya@10.154.64.33:1521/orcl.ntars.com'
remote_ora['shanghai'] = 'boya/boya@10.163.64.33:1521/orcl.ntars.com'
remote_ora['shanxi'] = 'boya/boya@10.140.64.33:1521/orcl.ntars.com'
remote_ora['sanxi'] = 'boya/boya@10.145.64.33:1521/orcl.ntars.com'
remote_ora['sichuan'] = 'boya/boya@10.138.64.33:1521/orcl.ntars.com'
remote_ora['tianjin'] = 'boya/boya@10.148.64.33:1521/orcl'
remote_ora['xinjiang'] = 'boya/boya@10.149.64.33:1521/orcl.ntars.com'
remote_ora['xizang'] = 'boya/boya@10.136.64.33:1521/orcl.ntars.com'
remote_ora['yunnan'] = 'boya/boya@10.156.64.33:1521/orcl'
remote_ora['zhejiang'] = 'boya/boya@10.153.64.33:1521/orcl.ntars.com'
remote_rac = {}
#remote_rac['gk'] = 'boya/boya@10.128.75.67:1521/orcl.ntars.com'
remote_rac['anhui'] = 'boya/boya@10.152.64.34:1521/orcl.idevelopment.info'
remote_rac['beijing'] = 'boya/boya@10.134.64.34:1521/orcl.ntars.com'
remote_rac['chongqing'] = 'boya/boya@10.137.64.34:1521/orcl'
remote_rac['fujian'] = 'boya/boya@10.162.64.34:1521/orcl.ntars.com'
remote_rac['gansu'] = 'boya/boya@10.142.64.34:1521/orcl'
remote_rac['guangdong'] = 'boya/boya@10.164.64.34:1521/orcl.ntars.com'
remote_rac['guangxi'] = 'boya/boya@10.161.64.34:1521/orcl'
remote_rac['guizhou'] = 'boya/boya@10.157.64.34:1521/orcl'
remote_rac['hainan'] = 'boya/boya@10.160.64.34:1521/orcl'
remote_rac['hebei'] = 'boya/boya@10.141.64.34:1521/orcl.ntars.com'
remote_rac['heilong'] = 'boya/boya@10.146.64.34:1521/orcl.ntars.com'
remote_rac['henan'] = 'boya/boya@10.151.64.34:1521/orcl.ntars.com'
remote_rac['hubei'] = 'boya/boya@10.155.64.34:1521/orcl.ntars.com'
remote_rac['hunan'] = 'boya/boya@10.158.64.34:1521/orcl.ntars.com'
remote_rac['jiangsu'] = 'boya/boya@10.150.64.34:1521/orclXDB.ntars.com'
remote_rac['jiangxi'] = 'boya/boya@10.159.64.34:1521/orcl.info'
remote_rac['jilin'] = 'boya/boya@10.147.64.34:1521/orcl'
remote_rac['liaoning'] = 'boya/boya@10.143.64.34:1521/orcl.ntars.info'
remote_rac['neimeng'] = 'boya/boya@10.135.64.34:1521/orcl'
remote_rac['ningxia'] = 'boya3w/boya3w@10.139.64.34:1521/orcl'
remote_rac['qinghai'] = 'boya/boya@10.144.64.34:1521/orcl.ntars.com'
remote_rac['shandong'] = 'boya/boya@10.154.64.34:1521/orcl.ntars.com'
remote_rac['shanghai'] = 'boya/boya@10.163.64.34:1521/orcl.ntars.com'
remote_rac['shanxi'] = 'boya/boya@10.140.64.34:1521/orcl.ntars.com'
remote_rac['sanxi'] = 'boya/boya@10.145.64.34:1521/orcl.ntars.com'
remote_rac['sichuan'] = 'boya/boya@10.138.64.34:1521/orcl.ntars.com'
remote_rac['tianjin'] = 'boya/boya@10.148.64.34:1521/orcl'
remote_rac['xinjiang'] = 'boya/boya@10.149.64.34:1521/orcl.ntars.com'
remote_rac['xizang'] = 'boya/boya@10.136.64.34:1521/orcl.ntars.com'
remote_rac['yunnan'] = 'boya/boya@10.156.64.34:1521/orcl'
remote_rac['zhejiang'] = 'boya/boya@10.153.64.34:1521/orcl.ntars.com'
#>>FOLD>>
def close_dbs():#<<FOLD<<
print 'Terminating db connections ...'
for ora, db in accessed_dbs.items():
try: db.close()
except Exception, e:
print 'Close', ora ,'failed:', e
sys.exit()
#>>FOLD>>
def handle_one_db(ora):#<<FOLD<<
result = []
cursor = accessed_dbs[ora].cursor()
for sql in sql_list:
try:
cursor.execute(sql)
except Exception, e:
result.append((sql + ';', e.__class__.__name__ + ': ' + str(e).strip()))
continue
try:
result.append((sql + ';', cursor.fetchall()))
except cx_Oracle.InterfaceError:
result.append((sql + ';', 'NULL'))
cursor.close()
return (ora, result)
#>>FOLD>>
def runsqls_on_alldbs():#<<FOLD<<
process_pool = Pool(cpu_count())
pool_return = process_pool.map_async(handle_one_db, accessed_dbs.keys())
for ora, result in pool_return.get():
result_fp.write('Database: ' + ora + '\n')
for line in result:
result_fp.write('Sql: ' + line[0] + '\n')
if type(line[1]) is str:
result_fp.write(line[1] + '\n')
else:
for record in line[1]:
result_fp.write(','.join(map(str, record)))
result_fp.write('\n')
result_fp.write('\n')
process_pool.close()
process_pool.terminate()
return
#>>FOLD>>
def get_fp(filename):#<<FOLD<<
global result_fp
result_fp = sys.stdout
if '' != filename:
try:
result_fp = open(filename, 'a', 0)
except:
print 'Open', filename, 'failed, now print it stdout.'
return
#>>FOLD>>
def get_sqls(sql):#<<FOLD<<
global sql_list
sql_list = []
if '@' != sql[0]:
sql_list.append(sql)
else:
try:
sql_f = open(sql[1:].strip(), 'r')
for line in sql_f:
sql=line.strip().strip(';')
if sql:
sql_list.append(sql)
sql_f.close()
if 0 == len(sql_list):
return False
except Exception, e:
print e.__class__.__name__, ':', e
return False
return True
#>>FOLD>>
def input_sqls():#<<FOLD<<
while True:
sql = raw_input('\nSQL>> ')
if re.match(r'exit.*', sql.lower()) or re.match(r'quit.*', sql.lower()):
close_dbs()
try:
sql, filename = re.split(r';', sql, 1)
except:
print 'Wrong, missing ";" in the end.'
continue
if not get_sqls(sql.strip()):
continue
get_fp(filename.strip())
runsqls_on_alldbs()
return
#>>FOLD>>
def access_db(ora):#<<FOLD<<
if ora not in remote_ora.keys():
return (False, 'Unknown DB')
try:
db = cx_Oracle.connect(remote_ora[ora])
db.autocommit = True
return (True, db)
except Exception, e:
if ora not in remote_rac.keys():
return (False, 'Access Failed: ' + str(e))
try:
db = cx_Oracle.connect(remote_rac[ora])
db.autocommit = True
return (True, db)
except Exception, e:
return (False, 'Access Failed: ' + str(e))
#>>FOLD>>
def check_dbs():#<<FOLD<<
global accessed_dbs
accessed_dbs = {}
oras = remote_ora.keys()
if 1 != len(sys.argv):
oras = sys.argv[1:]
for ora in oras:
accessed, db = access_db(ora)
if not accessed:
print ora + ' : ' + db
continue
accessed_dbs[ora] = db
if 0 == len(accessed_dbs):
print 'Accessed no dbs, quit ...'
sys.exit()
return
#>>FOLD>>
def signal_quit(signum, frame):#<<FOLD<<
print 'Got quit signal ...'
close_dbs()
#>>FOLD>>
def main():#<<FOLD<<
check_dbs()
input_sqls()
return
#>>FOLD>>
if '__main__' == __name__:
signal.signal(2, signal_quit)
#signal.signal(3, signal_quit)
#signal.signal(15, signal_quit)
main()

View File

@@ -0,0 +1,305 @@
#!/nmsmw/python/bin/python
import os
import sys
import re
import time
import datetime
import cx_Oracle
from multiprocessing import Pool
remote_ora = {}#<<FOLD<<
#remote_ora['gk'] = 'boya/boya@10.128.75.65:1521/orcl.ntars.com'
remote_ora['gk'] = 'ibms/ibms@10.166.64.41:1521/orcl'
remote_ora['108'] = 'boya/boya@10.166.64.41:1521/orcl'
remote_ora['anhui'] = 'boya/boya@10.152.64.33:1521/orcl.idevelopment.info'
remote_ora['beijing'] = 'boya/boya@10.134.64.33:1521/orcl.ntars.com'
remote_ora['chongqing'] = 'boya/boya@10.137.64.33:1521/orcl'
remote_ora['fujian'] = 'boya/boya@10.162.64.33:1521/orcl.ntars.com'
remote_ora['gansu'] = 'boya/boya@10.142.64.33:1521/orcl'
remote_ora['guangdong'] = 'boya/boya@10.164.64.33:1521/orcl.ntars.com'
remote_ora['guangxi'] = 'boya/boya@10.161.64.33:1521/orcl'
remote_ora['guizhou'] = 'boya/boya@10.157.64.33:1521/orcl'
remote_ora['hainan'] = 'boya/boya@10.160.64.33:1521/orcl'
remote_ora['hebei'] = 'boya/boya@10.141.64.33:1521/orcl.ntars.com'
remote_ora['heilong'] = 'boya/boya@10.146.64.33:1521/orcl.ntars.com'
remote_ora['henan'] = 'boya/boya@10.151.64.33:1521/orcl.ntars.com'
remote_ora['hubei'] = 'boya/boya@10.155.64.33:1521/orcl.ntars.com'
remote_ora['hunan'] = 'boya/boya@10.158.64.33:1521/orcl.ntars.com'
remote_ora['jiangsu'] = 'boya/boya@10.150.64.33:1521/orclXDB.ntars.com'
remote_ora['jiangxi'] = 'boya/boya@10.159.64.33:1521/orcl.info'
remote_ora['jilin'] = 'boya/boya@10.147.64.33:1521/orcl'
remote_ora['liaoning'] = 'boya/boya@10.143.64.33:1521/orcl.ntars.info'
remote_ora['neimeng'] = 'boya/boya@10.135.64.33:1521/orcl'
remote_ora['ningxia'] = 'boya3w/boya3w@10.139.64.33:1521/orcl'
remote_ora['qinghai'] = 'boya/boya@10.144.64.33:1521/orcl.ntars.com'
remote_ora['shandong'] = 'boya/boya@10.154.64.33:1521/orcl.ntars.com'
#remote_ora['shandong'] = 'ntars/sddb_2008@10.154.64.33:1521/orcl.ntars.com'
remote_ora['shanghai'] = 'boya/boya@10.163.64.33:1521/orcl.ntars.com'
remote_ora['shanxi'] = 'boya/boya@10.140.64.33:1521/orcl.ntars.com'
remote_ora['sanxi'] = 'boya/boya@10.145.64.33:1521/orcl.ntars.com'
remote_ora['sichuan'] = 'boya/boya@10.138.64.33:1521/orcl.ntars.com'
remote_ora['tianjin'] = 'boya/boya@10.148.64.33:1521/orcl'
remote_ora['xinjiang'] = 'boya/boya@10.149.64.33:1521/orcl.ntars.com'
remote_ora['xizang'] = 'boya/boya@10.136.64.33:1521/orcl.ntars.com'
remote_ora['yunnan'] = 'boya/boya@10.156.64.33:1521/orcl'
remote_ora['zhejiang'] = 'boya/boya@10.153.64.33:1521/orcl.ntars.com'
remote_ora['ipv6'] = 'boya/boya@10.128.75.6:1521/orcl'
#>>FOLD>>
remote_rac = {}#<<FOLD<<
#remote_rac['gk'] = 'boya/boya@10.128.75.67:1521/orcl.ntars.com'
remote_rac['anhui'] = 'boya/boya@10.152.64.34:1521/orcl.idevelopment.info'
remote_rac['beijing'] = 'boya/boya@10.134.64.34:1521/orcl.ntars.com'
remote_rac['chongqing'] = 'boya/boya@10.137.64.34:1521/orcl'
remote_rac['fujian'] = 'boya/boya@10.162.64.34:1521/orcl.ntars.com'
remote_rac['gansu'] = 'boya/boya@10.142.64.34:1521/orcl'
remote_rac['guangdong'] = 'boya/boya@10.164.64.34:1521/orcl.ntars.com'
remote_rac['guangxi'] = 'boya/boya@10.161.64.34:1521/orcl'
remote_rac['guizhou'] = 'boya/boya@10.157.64.34:1521/orcl'
remote_rac['hainan'] = 'boya/boya@10.160.64.34:1521/orcl'
remote_rac['hebei'] = 'boya/boya@10.141.64.34:1521/orcl.ntars.com'
remote_rac['heilong'] = 'boya/boya@10.146.64.34:1521/orcl.ntars.com'
remote_rac['henan'] = 'boya/boya@10.151.64.34:1521/orcl.ntars.com'
remote_rac['hubei'] = 'boya/boya@10.155.64.34:1521/orcl.ntars.com'
remote_rac['hunan'] = 'boya/boya@10.158.64.34:1521/orcl.ntars.com'
remote_rac['jiangsu'] = 'boya/boya@10.150.64.34:1521/orclXDB.ntars.com'
remote_rac['jiangxi'] = 'boya/boya@10.159.64.34:1521/orcl.info'
remote_rac['jilin'] = 'boya/boya@10.147.64.34:1521/orcl'
remote_rac['liaoning'] = 'boya/boya@10.143.64.34:1521/orcl.ntars.info'
remote_rac['neimeng'] = 'boya/boya@10.135.64.34:1521/orcl'
remote_rac['ningxia'] = 'boya3w/boya3w@10.139.64.34:1521/orcl'
remote_rac['qinghai'] = 'boya/boya@10.144.64.34:1521/orcl.ntars.com'
remote_rac['shandong'] = 'boya/boya@10.154.64.34:1521/orcl.ntars.com'
remote_rac['shanghai'] = 'boya/boya@10.163.64.34:1521/orcl.ntars.com'
remote_rac['shanxi'] = 'boya/boya@10.140.64.34:1521/orcl.ntars.com'
remote_rac['sanxi'] = 'boya/boya@10.145.64.34:1521/orcl.ntars.com'
remote_rac['sichuan'] = 'boya/boya@10.138.64.34:1521/orcl.ntars.com'
remote_rac['tianjin'] = 'boya/boya@10.148.64.34:1521/orcl'
remote_rac['xinjiang'] = 'boya/boya@10.149.64.34:1521/orcl.ntars.com'
remote_rac['xizang'] = 'boya/boya@10.136.64.34:1521/orcl.ntars.com'
remote_rac['yunnan'] = 'boya/boya@10.156.64.34:1521/orcl'
remote_rac['zhejiang'] = 'boya/boya@10.153.64.34:1521/orcl.ntars.com'
#>>FOLD>>
mtx_tables = {}#<<FOLD<<
mtx_tables['MONITOR_FAULT'] = 'COLLECTOR_STATE_SPACE'
mtx_tables['MT_COLLECTOR_STATE'] = 'COLLECTOR_STATE_SPACE'
mtx_tables['MT_COLLECTOR_DIR'] = 'COLLECTOR_STATE_SPACE'
mtx_tables['MTX_PERF_NET'] = 'MTX_PERF_NET'
mtx_tables['MTXRPT_EVENT_M'] = 'EVENT_COUNT_SPACE'
mtx_tables['MTXRPT_DEVICE_M'] = 'EVENT_COUNT_SPACE'
mtx_tables['MTXRPT_EVENTMOBILE_M'] = 'EVENT_COUNT_SPACE'
mtx_tables['RPT_MTXMOBILE_DEVICE_M'] = 'EVENT_COUNT_SPACE'
mtx_tables['RPT_MTXMOBILE_EVENT_M'] = 'EVENT_COUNT_SPACE'
mtx_tables['RPT_MTXMOBILE_IMEI_M'] = 'EVENT_COUNT_SPACE'
mtx_tables['RPT_MTXMOBILE_INOUT_H'] = 'EVENT_COUNT_SPACE'
mtx_tables['RPT_MTXMOBILE_PROVINCE_H'] = 'EVENT_COUNT_SPACE'
mtx_tables['RPT_MTXMOBILE_PROVINCE_M'] = 'EVENT_COUNT_SPACE'
mtx_tables['MTX_EVENT_REALTIME'] = 'EVENT_COUNT_SPACE'
#>>FOLD>>
dns_tables = {}#<<FOLD<<
dns_tables['DOMAIN_AA'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_CLIENT_COUNT'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_COUNT'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_DNAME_LENGTH'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_FLUX'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_OPCODE_COUNT'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_QUERY_PACKET_LENGTH'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_IMSI_TOPN'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_IMSI_TOP100'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_RA'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_RCODE'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_RD'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_RESPONSE_PACKET_LENGTH'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_TC'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_TTL_LENGTH'] = 'DOMAIN_DATA_SPACE'
dns_tables['DOMAIN_TYPE_COUNT'] = 'DOMAIN_DATA_SPACE'
dns_tables['ERROR_PKT'] = 'DOMAIN_DATA_SPACE'
dns_tables['TOPN_CLIENT_BYTE'] = 'DOMAIN_DATA_SPACE'
dns_tables['TOPN_CLIENT_PACKET'] = 'DOMAIN_DATA_SPACE'
dns_tables['TOPN_DOMAIN_NAME'] = 'DOMAIN_DATA_SPACE'
dns_tables['TOPN_NXDOMAIN'] = 'DOMAIN_DATA_SPACE'
dns_tables['TOPN_TLD'] = 'DOMAIN_DATA_SPACE'
dns_tables['DNSHJK'] = 'DOMAIN_DATA_SPACE'
dns_tables['ABNORMAL_BASE_DNS'] = 'DOMAIN_DATA_SPACE'
dns_tables['ABNORMAL_SPECIAL_QUEST'] = 'DOMAIN_DATA_SPACE'
dns_tables['ABNORMAL_SERVER_QA'] = 'DOMAIN_DATA_SPACE'
#>>FOLD>>
dnspod_tables = {}#<<FOLD<<
dnspod_tables['DNSPOD_IP_COUNT'] = 'DOMAIN_DATA_SPACE'
dnspod_tables['DNSPOD_IP_FLUX'] = 'DOMAIN_DATA_SPACE'
dnspod_tables['DNSPOD_LOCATION_COUNT'] = 'DOMAIN_DATA_SPACE'
dnspod_tables['DNSPOD_LOCATION_DOMAIN'] = 'DOMAIN_DATA_SPACE'
dnspod_tables['DNSPOD_PCI_COUNT'] = 'DOMAIN_DATA_SPACE'
dnspod_tables['DNSPOD_TOP100_DOMAIN'] = 'DOMAIN_DATA_SPACE'
dnspod_tables['DNSPOD_TOP_DOMAIN'] = 'DOMAIN_DATA_SPACE'
#>>FOLD>>
vds_tables = {}#<<FOLD<<
vds_tables['VDSRPT_DEVICE_M'] = 'EVENT_COUNT_SPACE'
vds_tables['VDSRPT_EVENT_M'] = 'EVENT_COUNT_SPACE'
#>>FOLD>>
ntars_tables = {}#<<FOLD<<
#ntars_tables['ROUTER_STAT_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_IPSRCPACKET_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_IPDSTBYTE_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_IPDSTPACKET_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_IPCOUNT_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_CPORT_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_IPCOUNT_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_TOS_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_IPSRCBYTE_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_IPDSTBYTE_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_PEERIPDSTBYTE_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_PEERIPDSTPACKET_H'] = 'REPORT_H_SPACE'
#ntars_tables['FILTER_REPORT_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_PROTOCOL_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_PROTOCOL_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_SRCPORT_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_IPDSTPACKET_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_DSTPORT_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_IPSRCPACKET_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_REGION_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_PEERIPSRCPACKET_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_CPORT_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_SRCPORT_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_PEERIPSRCBYTE_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_TOS_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_DSTPORT_H'] = 'REPORT_H_SPACE'
#ntars_tables['ROUTER_IPSRCBYTE_H'] = 'REPORT_H_SPACE'
#ntars_tables['CUSTOMER_REGION_H'] = 'REPORT_H_SPACE'
#ntars_tables['RG_CUSTOMER_SRCPORT_H'] = 'RG_CS_SRCPORT_H_TS'
ntars_tables['ROUTER_STAT_M'] = 'REPORT_M_SPACE'
ntars_tables['ROUTER_IPDSTBYTE_M'] = 'REPORT_M_SPACE'
ntars_tables['ROUTER_IPCOUNT_M'] = 'REPORT_M_SPACE'
ntars_tables['ROUTER_CPORT_M'] = 'REPORT_M_SPACE'
ntars_tables['ROUTER_PROTOCOL_M'] = 'REPORT_M_SPACE'
ntars_tables['ROUTER_REGION_M'] = 'REPORT_M_SPACE'
ntars_tables['ROUTER_SRCPORT_M'] = 'REPORT_M_SPACE'
ntars_tables['ROUTER_DSTPORT_M'] = 'REPORT_M_SPACE'
ntars_tables['ROUTER_IPSRCBYTE_M'] = 'REPORT_M_SPACE'
#>>FOLD>>
topn_tables = {}#<<FOLD<<
topn_tables['TOPN_CLIENT_BYTE'] = 'DOMAIN_DATA_SPACE'
topn_tables['TOPN_CLIENT_PACKET'] = 'DOMAIN_DATA_SPACE'
topn_tables['TOPN_DOMAIN_NAME'] = 'DOMAIN_DATA_SPACE'
topn_tables['TOPN_NXDOMAIN'] = 'DOMAIN_DATA_SPACE'
topn_tables['TOPN_TLD'] = 'DOMAIN_DATA_SPACE'
#>>FOLD>>
extra_tables = {}
extra_tables['ERROR_PKT'] = 'DOMAIN_DATA_SPACE'
extra_tables['MTXRPT_EVENT_M'] = 'DOMAIN_DATA_SPACE'
extra_tables['DOMAIN_IMSI_TOPN'] = 'DOMAIN_DATA_SPACE'
extra_tables['ABNORMAL_BASE_DNS'] = 'DOMAIN_DATA_SPACE'
extra_tables['ABNORMAL_SERVER_QA'] = 'DOMAIN_DATA_SPACE'
extra_tables['ABNORMAL_SPECIAL_QUEST'] = 'DOMAIN_DATA_SPACE'
extra_tables['DNSPOD_PCI_COUNT'] = 'DOMAIN_DATA_SPACE'
extra_tables['DNSPOD_TOP100_DOMAIN'] = 'DOMAIN_DATA_SPACE'
extra_tables['DNSPOD_TOP_DOMAIN'] = 'DOMAIN_DATA_SPACE'
extra_tables['DNSPOD_IP_COUNT'] = 'DOMAIN_DATA_SPACE'
extra_tables['DNSPOD_LOCATION_COUNT'] = 'DOMAIN_DATA_SPACE'
extra_tables['DNSHJK'] = 'DOMAIN_DATA_SPACE'
def StringToTime(strtime):#<<FOLD<<
t_tuple = time.strptime(strtime,"%Y%m%d")
return int(time.mktime(t_tuple))
#>>FOLD>>
def gen_sqls(operate, date):#<<FOLD<<
#tables = dict(dict(dict(mtx_tables, **dns_tables), **dnspod_tables), **vds_tables)
#tables = dict(dns_tables, **dnspod_tables)
tables = mtx_tables
sqls = []
if 'add' == operate:
date1 = StringToTime(date)
for table in tables:
sqls.append('alter table %s add partition PART_%s values less than(%s) tablespace %s'%(table, date, date1, tables[table]))
elif 'drop' == operate:
for table in tables:
sqls.append('alter table %s drop partition PART_%s'%(table, date))
else:
print 'Wrong operation on table partitions, now quit.'
return sqls
#>>FOLD>>
def ora_init(ora):#<<FOLD<<
if ora in remote_ora.keys():
#print ' ------>', ora, '<------'
try:
db = cx_Oracle.connect(remote_ora[ora])
db.autocommit = True
#print 'Connect to oracle server successfully ...'
except:
if ora in remote_rac.keys():
#print 'Time out, now try to connect the rac ...'
try:
db = cx_Oracle.connect(remote_rac[ora])
db.autocommit = True
#print 'Connect to oracle server successfully ...'
except:
#print 'Error, Failed to connect oracle', ora
return
else:
#print 'Error, Failed to connect oracle', ora
return
else:
#print 'Error, Wrong oracle', ora
return
return db
#>>FOLD>>
def operate_partitions(ora):#<<FOLD<<
db = ora_init(ora)
if not db:
print '\n\033[31m %s Connect failed.\033[0m'%ora
return (ora, 'Connect failed')
cur = db.cursor()
month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
for day in range(0, month[int(sys.argv[2])%100-1]):
date = str(int(sys.argv[2])*100+1+day)
sqls = gen_sqls(sys.argv[1], date)
for sql in sqls:
try:
cur.execute(sql)
sys.stdout.write('.')
sys.stdout.flush()
except Exception, e:
matched = 0
ignore_errors = ['ORA-00942', 'ORA-02149']
for error in ignore_errors:
if error in str(e).upper():
matched = 1
sys.stdout.write('.')
sys.stdout.flush()
break
if not matched:
print "\n\033[31mRUN \"%s\" ON %s failed:%s\033[0m"%(sql, ora, str(e))
cur.close()
db.close()
print '\n\033[32m %s Complete.\033[0m'%ora
return (ora, 'Complete')
#>>FOLD>>
def main():#<<FOLD<<
if 0 == len(sys.argv[3:]):
oras = remote_ora.keys()
else:
oras = sys.argv[3:]
process_pool = Pool(8)
result = process_pool.map_async(operate_partitions, oras)
for res in result.get():
print res
#>>FOLD>>
if __name__ == '__main__':
if 2 < len(sys.argv) and sys.argv[2].isdigit():
main()
else:
print 'Usage: %s {add|drop} 201603 [pc1, pc2 ...]'%sys.argv[0]

View File

@@ -0,0 +1,187 @@
#!/nmsmw/python/bin/python
import os
import sys
import re
import time
import datetime
import cx_Oracle
from multiprocessing import Pool
remote_ora = {}#<<FOLD<<
#remote_ora['gk'] = 'boya/boya@10.128.75.65:1521/orcl.ntars.com'
#remote_ora['gk'] = 'ibms/ibms@10.166.64.41:1521/orcl'
remote_ora['108'] = 'boya/boya@10.166.64.41:1521/orcl'
remote_ora['anhui'] = 'boya/boya@10.152.64.33:1521/orcl.idevelopment.info'
remote_ora['beijing'] = 'boya/boya@10.134.64.33:1521/orcl.ntars.com'
remote_ora['chongqing'] = 'boya/boya@10.137.64.33:1521/orcl'
remote_ora['fujian'] = 'boya/boya@10.162.64.33:1521/orcl.ntars.com'
remote_ora['gansu'] = 'boya/boya@10.142.64.33:1521/orcl'
remote_ora['guangdong'] = 'boya/boya@10.164.64.33:1521/orcl.ntars.com'
remote_ora['guangxi'] = 'boya/boya@10.161.64.33:1521/orcl'
remote_ora['guizhou'] = 'boya/boya@10.157.64.33:1521/orcl'
remote_ora['hainan'] = 'boya/boya@10.160.64.33:1521/orcl'
remote_ora['hebei'] = 'boya/boya@10.141.64.33:1521/orcl.ntars.com'
remote_ora['heilong'] = 'boya/boya@10.146.64.33:1521/orcl.ntars.com'
remote_ora['henan'] = 'boya/boya@10.151.64.33:1521/orcl.ntars.com'
remote_ora['hubei'] = 'boya/boya@10.155.64.33:1521/orcl.ntars.com'
remote_ora['hunan'] = 'boya/boya@10.158.64.33:1521/orcl.ntars.com'
remote_ora['jiangsu'] = 'boya/boya@10.150.64.33:1521/orclXDB.ntars.com'
remote_ora['jiangxi'] = 'boya/boya@10.159.64.33:1521/orcl.info'
remote_ora['jilin'] = 'boya/boya@10.147.64.33:1521/orcl'
remote_ora['liaoning'] = 'boya/boya@10.143.64.33:1521/orcl.ntars.info'
remote_ora['neimeng'] = 'boya/boya@10.135.64.33:1521/orcl'
remote_ora['ningxia'] = 'boya3w/boya3w@10.139.64.33:1521/orcl'
remote_ora['qinghai'] = 'boya/boya@10.144.64.33:1521/orcl.ntars.com'
remote_ora['shandong'] = 'boya/boya@10.154.64.33:1521/orcl.ntars.com'
remote_ora['shanghai'] = 'boya/boya@10.163.64.33:1521/orcl.ntars.com'
remote_ora['shanxi'] = 'boya/boya@10.140.64.33:1521/orcl.ntars.com'
remote_ora['sanxi'] = 'boya/boya@10.145.64.33:1521/orcl.ntars.com'
remote_ora['sichuan'] = 'boya/boya@10.138.64.33:1521/orcl.ntars.com'
remote_ora['tianjin'] = 'boya/boya@10.148.64.33:1521/orcl'
remote_ora['xinjiang'] = 'boya/boya@10.149.64.33:1521/orcl.ntars.com'
remote_ora['xizang'] = 'boya/boya@10.136.64.33:1521/orcl.ntars.com'
remote_ora['yunnan'] = 'boya/boya@10.156.64.33:1521/orcl'
remote_ora['zhejiang'] = 'boya/boya@10.153.64.33:1521/orcl.ntars.com'
remote_rac = {}
#remote_rac['gk'] = 'boya/boya@10.128.75.67:1521/orcl.ntars.com'
remote_rac['anhui'] = 'boya/boya@10.152.64.34:1521/orcl.idevelopment.info'
remote_rac['beijing'] = 'boya/boya@10.134.64.34:1521/orcl.ntars.com'
remote_rac['chongqing'] = 'boya/boya@10.137.64.34:1521/orcl'
remote_rac['fujian'] = 'boya/boya@10.162.64.34:1521/orcl.ntars.com'
remote_rac['gansu'] = 'boya/boya@10.142.64.34:1521/orcl'
remote_rac['guangdong'] = 'boya/boya@10.164.64.34:1521/orcl.ntars.com'
remote_rac['guangxi'] = 'boya/boya@10.161.64.34:1521/orcl'
remote_rac['guizhou'] = 'boya/boya@10.157.64.34:1521/orcl'
remote_rac['hainan'] = 'boya/boya@10.160.64.34:1521/orcl'
remote_rac['hebei'] = 'boya/boya@10.141.64.34:1521/orcl.ntars.com'
remote_rac['heilong'] = 'boya/boya@10.146.64.34:1521/orcl.ntars.com'
remote_rac['henan'] = 'boya/boya@10.151.64.34:1521/orcl.ntars.com'
remote_rac['hubei'] = 'boya/boya@10.155.64.34:1521/orcl.ntars.com'
remote_rac['hunan'] = 'boya/boya@10.158.64.34:1521/orcl.ntars.com'
remote_rac['jiangsu'] = 'boya/boya@10.150.64.34:1521/orclXDB.ntars.com'
remote_rac['jiangxi'] = 'boya/boya@10.159.64.34:1521/orcl.info'
remote_rac['jilin'] = 'boya/boya@10.147.64.34:1521/orcl'
remote_rac['liaoning'] = 'boya/boya@10.143.64.34:1521/orcl.ntars.info'
remote_rac['neimeng'] = 'boya/boya@10.135.64.34:1521/orcl'
remote_rac['ningxia'] = 'boya3w/boya3w@10.139.64.34:1521/orcl'
remote_rac['qinghai'] = 'boya/boya@10.144.64.34:1521/orcl.ntars.com'
remote_rac['shandong'] = 'boya/boya@10.154.64.34:1521/orcl.ntars.com'
remote_rac['shanghai'] = 'boya/boya@10.163.64.34:1521/orcl.ntars.com'
remote_rac['shanxi'] = 'boya/boya@10.140.64.34:1521/orcl.ntars.com'
remote_rac['sanxi'] = 'boya/boya@10.145.64.34:1521/orcl.ntars.com'
remote_rac['sichuan'] = 'boya/boya@10.138.64.34:1521/orcl.ntars.com'
remote_rac['tianjin'] = 'boya/boya@10.148.64.34:1521/orcl'
remote_rac['xinjiang'] = 'boya/boya@10.149.64.34:1521/orcl.ntars.com'
remote_rac['xizang'] = 'boya/boya@10.136.64.34:1521/orcl.ntars.com'
remote_rac['yunnan'] = 'boya/boya@10.156.64.34:1521/orcl'
remote_rac['zhejiang'] = 'boya/boya@10.153.64.34:1521/orcl.ntars.com'
#>>FOLD>>
app_tables = {}#<<FOLD<<
app_tables['APPRPT_APPSTORE_D'] = 'APPRPT_SPACE'
app_tables['APPRPT_APP_USING_D'] = 'APPRPT_SPACE'
app_tables['APPRPT_DEVICE_BAND_D'] = 'APPRPT_SPACE'
app_tables['APPRPT_DEVICE_BAND_M'] = 'APPRPT_SPACE'
app_tables['APPRPT_DEVICE_TYPE_D'] = 'APPRPT_SPACE'
app_tables['APPRPT_DEVICE_TYPE_M'] = 'APPRPT_SPACE'
app_tables['APPRPT_DOWNLOAD_D'] = 'APPRPT_SPACE'
app_tables['APPRPT_SPECIAL_USING_D'] = 'APPRPT_SPACE'
#>>FOLD>>
def StringToTime(strtime):#<<FOLD<<
t_tuple = time.strptime(str(strtime),"%Y%m%d")
return int(time.mktime(t_tuple))
#>>FOLD>>
def gen_sqls(operate, date):#<<FOLD<<
tables = app_tables
sqls = []
if 'add' == operate:
date1 = StringToTime(date)
for table in tables:
sqls.append('alter table %s add partition PART_%s values less than(%s) tablespace %s'%(table, date/100, date1, tables[table]))
elif 'drop' == operate:
for table in tables:
sqls.append('alter table %s drop partition PART_%s'%(table, date/100))
else:
print 'Wrong operation on table partitions, now quit.'
return
return sqls
#>>FOLD>>
def ora_init(ora):#<<FOLD<<
if ora in remote_ora.keys():
#print ' ------>', ora, '<------'
try:
db = cx_Oracle.connect(remote_ora[ora])
db.autocommit = True
#print 'Connect to oracle server successfully ...'
except:
if ora in remote_rac.keys():
#print 'Time out, now try to connect the rac ...'
try:
db = cx_Oracle.connect(remote_rac[ora])
db.autocommit = True
#print 'Connect to oracle server successfully ...'
except:
#print 'Error, Failed to connect oracle', ora
return
else:
#print 'Error, Failed to connect oracle', ora
return
else:
#print 'Error, Wrong oracle', ora
return
return db
#>>FOLD>>
def operate_partitions(ora):#<<FOLD<<
db = ora_init(ora)
if not db:
print '\n\033[31m %s Connect failed.\033[0m'%ora
return (ora, 'Connect failed')
cur = db.cursor()
for month in range(0, 12):
date = (int(sys.argv[2])*100+1+month)*100+1
sqls = gen_sqls(sys.argv[1], date)
for sql in sqls:
try:
cur.execute(sql)
sys.stdout.write('.')
sys.stdout.flush()
except Exception, e:
matched = 0
ignore_errors = ['ORA-00942', 'ORA-02149']
for error in ignore_errors:
if error in str(e).upper():
matched = 1
sys.stdout.write('.')
sys.stdout.flush()
break
if not matched:
print "\n\033[31mRUN %s ON %s failed:%s\033[0m"%(sql, ora, e)
cur.close()
db.close()
print '\n\033[32m %s Complete.\033[0m'%ora
return (ora, 'Complete')
#>>FOLD>>
def main():#<<FOLD<<
if 0 == len(sys.argv[3:]):
oras = remote_ora.keys()
else:
oras = sys.argv[3:]
process_pool = Pool(8)
result = process_pool.map_async(operate_partitions, oras)
for res in result.get():
print res
#>>FOLD>>
if __name__ == '__main__':
if 2 < len(sys.argv) and sys.argv[2].isdigit():
main()
else:
print 'Usage: %s {add|drop} 2016 [pc1, pc2 ...]'%sys.argv[0]

View File

@@ -0,0 +1,188 @@
#!/nmsmw/python/bin/python
import os
import sys
import re
import time
import datetime
import cx_Oracle
from multiprocessing import Pool
remote_ora = {}#<<FOLD<<
#remote_ora['gk'] = 'boya/boya@10.128.75.65:1521/orcl.ntars.com'
#remote_ora['gk'] = 'ibms/ibms@10.166.64.41:1521/orcl'
remote_ora['108'] = 'boya/boya@10.166.64.41:1521/orcl'
remote_ora['anhui'] = 'boya/boya@10.152.64.33:1521/orcl.idevelopment.info'
remote_ora['beijing'] = 'boya/boya@10.134.64.33:1521/orcl.ntars.com'
remote_ora['chongqing'] = 'boya/boya@10.137.64.33:1521/orcl'
remote_ora['fujian'] = 'boya/boya@10.162.64.33:1521/orcl.ntars.com'
remote_ora['gansu'] = 'boya/boya@10.142.64.33:1521/orcl'
remote_ora['guangdong'] = 'boya/boya@10.164.64.33:1521/orcl.ntars.com'
remote_ora['guangxi'] = 'boya/boya@10.161.64.33:1521/orcl'
remote_ora['guizhou'] = 'boya/boya@10.157.64.33:1521/orcl'
remote_ora['hainan'] = 'boya/boya@10.160.64.33:1521/orcl'
remote_ora['hebei'] = 'boya/boya@10.141.64.33:1521/orcl.ntars.com'
remote_ora['heilong'] = 'boya/boya@10.146.64.33:1521/orcl.ntars.com'
remote_ora['henan'] = 'boya/boya@10.151.64.33:1521/orcl.ntars.com'
remote_ora['hubei'] = 'boya/boya@10.155.64.33:1521/orcl.ntars.com'
remote_ora['hunan'] = 'boya/boya@10.158.64.33:1521/orcl.ntars.com'
remote_ora['jiangsu'] = 'boya/boya@10.150.64.33:1521/orclXDB.ntars.com'
remote_ora['jiangxi'] = 'boya/boya@10.159.64.33:1521/orcl.info'
remote_ora['jilin'] = 'boya/boya@10.147.64.33:1521/orcl'
remote_ora['liaoning'] = 'boya/boya@10.143.64.33:1521/orcl.ntars.info'
remote_ora['neimeng'] = 'boya/boya@10.135.64.33:1521/orcl'
remote_ora['ningxia'] = 'boya3w/boya3w@10.139.64.33:1521/orcl'
remote_ora['qinghai'] = 'boya/boya@10.144.64.33:1521/orcl.ntars.com'
remote_ora['shandong'] = 'boya/boya@10.154.64.33:1521/orcl.ntars.com'
remote_ora['shanghai'] = 'boya/boya@10.163.64.33:1521/orcl.ntars.com'
remote_ora['shanxi'] = 'boya/boya@10.140.64.33:1521/orcl.ntars.com'
remote_ora['sanxi'] = 'boya/boya@10.145.64.33:1521/orcl.ntars.com'
remote_ora['sichuan'] = 'boya/boya@10.138.64.33:1521/orcl.ntars.com'
remote_ora['tianjin'] = 'boya/boya@10.148.64.33:1521/orcl'
remote_ora['xinjiang'] = 'boya/boya@10.149.64.33:1521/orcl.ntars.com'
remote_ora['xizang'] = 'boya/boya@10.136.64.33:1521/orcl.ntars.com'
remote_ora['yunnan'] = 'boya/boya@10.156.64.33:1521/orcl'
remote_ora['zhejiang'] = 'boya/boya@10.153.64.33:1521/orcl.ntars.com'
remote_rac = {}
#remote_rac['gk'] = 'boya/boya@10.128.75.67:1521/orcl.ntars.com'
remote_rac['anhui'] = 'boya/boya@10.152.64.34:1521/orcl.idevelopment.info'
remote_rac['beijing'] = 'boya/boya@10.134.64.34:1521/orcl.ntars.com'
remote_rac['chongqing'] = 'boya/boya@10.137.64.34:1521/orcl'
remote_rac['fujian'] = 'boya/boya@10.162.64.34:1521/orcl.ntars.com'
remote_rac['gansu'] = 'boya/boya@10.142.64.34:1521/orcl'
remote_rac['guangdong'] = 'boya/boya@10.164.64.34:1521/orcl.ntars.com'
remote_rac['guangxi'] = 'boya/boya@10.161.64.34:1521/orcl'
remote_rac['guizhou'] = 'boya/boya@10.157.64.34:1521/orcl'
remote_rac['hainan'] = 'boya/boya@10.160.64.34:1521/orcl'
remote_rac['hebei'] = 'boya/boya@10.141.64.34:1521/orcl.ntars.com'
remote_rac['heilong'] = 'boya/boya@10.146.64.34:1521/orcl.ntars.com'
remote_rac['henan'] = 'boya/boya@10.151.64.34:1521/orcl.ntars.com'
remote_rac['hubei'] = 'boya/boya@10.155.64.34:1521/orcl.ntars.com'
remote_rac['hunan'] = 'boya/boya@10.158.64.34:1521/orcl.ntars.com'
remote_rac['jiangsu'] = 'boya/boya@10.150.64.34:1521/orclXDB.ntars.com'
remote_rac['jiangxi'] = 'boya/boya@10.159.64.34:1521/orcl.info'
remote_rac['jilin'] = 'boya/boya@10.147.64.34:1521/orcl'
remote_rac['liaoning'] = 'boya/boya@10.143.64.34:1521/orcl.ntars.info'
remote_rac['neimeng'] = 'boya/boya@10.135.64.34:1521/orcl'
remote_rac['ningxia'] = 'boya3w/boya3w@10.139.64.34:1521/orcl'
remote_rac['qinghai'] = 'boya/boya@10.144.64.34:1521/orcl.ntars.com'
remote_rac['shandong'] = 'boya/boya@10.154.64.34:1521/orclXDB.ntars.com'
remote_rac['shanghai'] = 'boya/boya@10.163.64.34:1521/orcl.ntars.com'
remote_rac['shanxi'] = 'boya/boya@10.140.64.34:1521/orcl.ntars.com'
remote_rac['sanxi'] = 'boya/boya@10.145.64.34:1521/orcl.ntars.com'
remote_rac['sichuan'] = 'boya/boya@10.138.64.34:1521/orcl.ntars.com'
remote_rac['tianjin'] = 'boya/boya@10.148.64.34:1521/orcl'
remote_rac['xinjiang'] = 'boya/boya@10.149.64.34:1521/orcl.ntars.com'
remote_rac['xizang'] = 'boya/boya@10.136.64.34:1521/orcl.ntars.com'
remote_rac['yunnan'] = 'boya/boya@10.156.64.34:1521/orcl'
remote_rac['zhejiang'] = 'boya/boya@10.153.64.34:1521/orcl.ntars.com'
#>>FOLD>>
vds_tables = {}#<<FOLD<<
vds_tables['VDSRPT_DOMAIN_DOWNLOAD'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_PROGRAM_DOWNLOAD'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_SIP_DOWNLOAD'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_URL_DOWNLOAD'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_VIRUSFALIMY_DOWNLOAD'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_VIRUSTYPE_DOWNLOAD'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_VIRUSTYPE_VISIT'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_VIRUS_DOWNLOAD'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_VIRUS_NEW'] = 'VDS_REPORT_SPACE'
vds_tables['VDSRPT_VIRUS_VISIT'] = 'VDS_REPORT_SPACE'
#>>FOLD>>
def StringToTime(strtime):#<<FOLD<<
t_tuple = time.strptime(str(strtime),"%Y%m%d")
return int(time.mktime(t_tuple))
#>>FOLD>>
def gen_sqls(operate, date):#<<FOLD<<
tables = vds_tables
sqls = []
if 'add' == operate:
date1 = StringToTime(date)
for table in tables:
sqls.append('alter table %s add partition PART_%s values less than(%s) tablespace %s'%(table, date/10000, date1, tables[table]))
elif 'drop' == operate:
for table in tables:
sqls.append('alter table %s drop partition PART_%s'%(table, date/10000))
else:
print 'Wrong operation on table partitions, now quit.'
return
return sqls
#>>FOLD>>
def ora_init(ora):#<<FOLD<<
if ora in remote_ora.keys():
#print ' ------>', ora, '<------'
try:
db = cx_Oracle.connect(remote_ora[ora])
db.autocommit = True
#print 'Connect to oracle server successfully ...'
except:
if ora in remote_rac.keys():
#print 'Time out, now try to connect the rac ...'
try:
db = cx_Oracle.connect(remote_rac[ora])
db.autocommit = True
#print 'Connect to oracle server successfully ...'
except:
#print 'Error, Failed to connect oracle', ora
return
else:
#print 'Error, Failed to connect oracle', ora
return
else:
#print 'Error, Wrong oracle', ora
return
return db
#>>FOLD>>
def operate_partitions(ora):#<<FOLD<<
db = ora_init(ora)
if not db:
print '\n\033[31m %s Connect failed.\033[0m'%ora
return (ora, 'Connect failed')
cur = db.cursor()
date = (int(sys.argv[2])*100+1)*100+1
sqls = gen_sqls(sys.argv[1], date)
for sql in sqls:
try:
cur.execute(sql)
sys.stdout.write('.')
sys.stdout.flush()
except Exception, e:
matched = 0
ignore_errors = ['ORA-00942', 'ORA-02149']
for error in ignore_errors:
if error in str(e).upper():
matched = 1
sys.stdout.write('.')
sys.stdout.flush()
break
if not matched:
print "\n\033[31mRUN %s ON %s failed:%s\033[0m"%(sql, ora, e)
cur.close()
db.close()
print '\n\033[32m %s Complete.\033[0m'%ora
return (ora, 'Complete')
#>>FOLD>>
def main():#<<FOLD<<
if 0 == len(sys.argv[3:]):
oras = remote_ora.keys()
else:
oras = sys.argv[3:]
process_pool = Pool(8)
result = process_pool.map_async(operate_partitions, oras)
for res in result.get():
print res
#>>FOLD>>
if __name__ == '__main__':
if 2 < len(sys.argv) and sys.argv[2].isdigit():
main()
else:
print 'Usage: %s {add|drop} 2017 [pc1, pc2 ...]'%sys.argv[0]

View File

@@ -0,0 +1,65 @@
[day-180-2]
MONITOR_FAULT = COLLECTOR_STATE_SPACE
MT_COLLECTOR_STATE = COLLECTOR_STATE_SPACE
MT_COLLECTOR_DIR = COLLECTOR_STATE_SPACE
MTX_PERF_NET = MTX_PERF_NET
MTXRPT_EVENT_M = EVENT_COUNT_SPACE
MTXRPT_DEVICE_M = EVENT_COUNT_SPACE
MTXRPT_EVENTMOBILE_M = EVENT_COUNT_SPACE
RPT_MTXMOBILE_DEVICE_M = EVENT_COUNT_SPACE
RPT_MTXMOBILE_EVENT_M = EVENT_COUNT_SPACE
RPT_MTXMOBILE_IMEI_M = EVENT_COUNT_SPACE
RPT_MTXMOBILE_INOUT_H = EVENT_COUNT_SPACE
RPT_MTXMOBILE_PROVINCE_H = EVENT_COUNT_SPACE
RPT_MTXMOBILE_PROVINCE_M = EVENT_COUNT_SPACE
MTX_EVENT_REALTIME = EVENT_COUNT_SPACE
VDSRPT_DEVICE_M = EVENT_COUNT_SPACE
VDSRPT_EVENT_M = EVENT_COUNT_SPACE
[day-90-2]
DOMAIN_AA = DOMAIN_DATA_SPACE
DOMAIN_CLIENT_COUNT = DOMAIN_DATA_SPACE
DOMAIN_COUNT = DOMAIN_DATA_SPACE
DOMAIN_DNAME_LENGTH = DOMAIN_DATA_SPACE
DOMAIN_FLUX = DOMAIN_DATA_SPACE
DOMAIN_OPCODE_COUNT = DOMAIN_DATA_SPACE
DOMAIN_QUERY_PACKET_LENGTH = DOMAIN_DATA_SPACE
DOMAIN_IMSI_TOPN = DOMAIN_DATA_SPACE
DOMAIN_IMSI_TOP100 = DOMAIN_DATA_SPACE
DOMAIN_RA = DOMAIN_DATA_SPACE
DOMAIN_RCODE = DOMAIN_DATA_SPACE
DOMAIN_RD = DOMAIN_DATA_SPACE
DOMAIN_RESPONSE_PACKET_LENGTH = DOMAIN_DATA_SPACE
DOMAIN_TC = DOMAIN_DATA_SPACE
DOMAIN_TTL_LENGTH = DOMAIN_DATA_SPACE
DOMAIN_TYPE_COUNT = DOMAIN_DATA_SPACE
ERROR_PKT = DOMAIN_DATA_SPACE
DNSHJK = DOMAIN_DATA_SPACE
ABNORMAL_BASE_DNS = DOMAIN_DATA_SPACE
ABNORMAL_SPECIAL_QUEST = DOMAIN_DATA_SPACE
ABNORMAL_SERVER_QA = DOMAIN_DATA_SPACE
DNSPOD_IP_COUNT = DOMAIN_DATA_SPACE
DNSPOD_IP_FLUX = DOMAIN_DATA_SPACE
DNSPOD_LOCATION_COUNT = DOMAIN_DATA_SPACE
DNSPOD_LOCATION_DOMAIN = DOMAIN_DATA_SPACE
DNSPOD_PCI_COUNT = DOMAIN_DATA_SPACE
DNSPOD_TOP100_DOMAIN = DOMAIN_DATA_SPACE
DNSPOD_TOP_DOMAIN = DOMAIN_DATA_SPACE
[day-30-2]
TOPN_CLIENT_BYTE = DOMAIN_DATA_SPACE
TOPN_CLIENT_PACKET = DOMAIN_DATA_SPACE
TOPN_DOMAIN_NAME = DOMAIN_DATA_SPACE
TOPN_NXDOMAIN = DOMAIN_DATA_SPACE
TOPN_TLD = DOMAIN_DATA_SPACE
[month-1-2]
APPRPT_APPSTORE_D = APPRPT_SPACE
APPRPT_DOWNLOAD_D = APPRPT_SPACE
APPRPT_APP_USING_D = APPRPT_SPACE
APPRPT_DEVICE_BAND_D = APPRPT_SPACE
APPRPT_DEVICE_BAND_M = APPRPT_SPACE
APPRPT_DEVICE_TYPE_D = APPRPT_SPACE
APPRPT_DEVICE_TYPE_M = APPRPT_SPACE
APPRPT_SPECIAL_USING_D = APPRPT_SPACE

View File

@@ -0,0 +1,177 @@
#!/usr/bin/python2
import os
import re
import sys
import cx_Oracle
import ConfigParser
from time import sleep
HOST_CONF = 'host.conf'
TABLE_CONF = 'table_partition.cfg'
SQL = {}
SQL_HEAD = '''-- <<FOLD<<
DECLARE
A VARCHAR2(16);
B NUMBER(8);
NOW DATE;
FIRST_DAY DATE;
SQL_ VARCHAR2(256);
TIME_STAMP NUMBER(16);
TABLE_NAME VARCHAR2(32);
LOW_PART_BOUND EXCEPTION;
NO_EXIST_TABLE EXCEPTION;
NO_EXIST_PART EXCEPTION;
THE_ONLY_PART EXCEPTION;
PRAGMA EXCEPTION_INIT(LOW_PART_BOUND, -14074);
PRAGMA EXCEPTION_INIT(NO_EXIST_TABLE, -00942);
PRAGMA EXCEPTION_INIT(NO_EXIST_PART, -02149);
PRAGMA EXCEPTION_INIT(THE_ONLY_PART, -14083);
PROCEDURE IGNORE_ERROR_EXECUTE_SQL(SQL_ IN VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE SQL_;
EXCEPTION
WHEN LOW_PART_BOUND OR NO_EXIST_TABLE OR NO_EXIST_PART OR THE_ONLY_PART THEN
NULL;
END;
BEGIN
'''
# >>FOLD>>
SQL['day'] = '''-- <<FOLD<<
FOR A IN
(SELECT PARTITION_NAME
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = '{table}' AND
PARTITION_NAME != 'PART_1' AND
PARTITION_NAME <= 'PART_' || TO_CHAR(SYSDATE-{n_keep}, 'yyyyMMdd'))
LOOP
SQL_ := 'ALTER TABLE {table} DROP PARTITION ' || A.PARTITION_NAME;
IGNORE_ERROR_EXECUTE_SQL(SQL_);
END LOOP;
B := 2;
NOW := SYSDATE;
WHILE B < (2 + {n_create})
LOOP
FIRST_DAY := TO_DATE(TO_CHAR(NOW + B, 'YYYYMMDD') || '-00:00:00', 'YYYYMMDD-HH24:MI:SS');
SELECT (FIRST_DAY - TO_DATE('19700101-08:00:00', 'YYYYMMDD-HH24:MI:SS')) * 24 * 60 * 60 INTO TIME_STAMP FROM DUAL;
SQL_ := 'ALTER TABLE {table} ADD PARTITION PART_' || TO_CHAR(FIRST_DAY, 'YYYYMMDD') || ' VALUES LESS THAN(' || TIME_STAMP || ') TABLESPACE {tablespace}';
IGNORE_ERROR_EXECUTE_SQL(SQL_);
B := B + 1;
END LOOP;
'''
# >>FOLD>>
SQL['month'] = '''-- <<FOLD<<
FOR A IN
(SELECT PARTITION_NAME
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = '{table}' AND
PARTITION_NAME != 'PART_1' AND
PARTITION_NAME <= 'PART_' || TO_CHAR(ADD_MONTHS(SYSDATE, -{n_keep}), 'yyyyMM'))
LOOP
SQL_ := 'ALTER TABLE {table} DROP PARTITION ' || A.PARTITION_NAME;
IGNORE_ERROR_EXECUTE_SQL(SQL_);
END LOOP;
B := 2;
NOW := SYSDATE;
WHILE B < (2 + {n_create})
LOOP
FIRST_DAY := TO_DATE(TO_CHAR(ADD_MONTHS(NOW, B), 'YYYYMM') || '01-00:00:00', 'YYYYMMDD-HH24:MI:SS');
SELECT (FIRST_DAY - TO_DATE('19700101-08:00:00', 'YYYYMMDD-HH24:MI:SS')) * 24 * 60 * 60 INTO TIME_STAMP FROM DUAL;
SQL_ := 'ALTER TABLE {table} ADD PARTITION PART_' || TO_CHAR(FIRST_DAY, 'YYYYMM') || ' VALUES LESS THAN(' || TIME_STAMP || ') TABLESPACE {tablespace}';
IGNORE_ERROR_EXECUTE_SQL(SQL_);
B := B + 1;
END LOOP;
'''
# >>FOLD>>
SQL['year'] = '''-- <<FOLD<<
FOR A IN
(SELECT PARTITION_NAME
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = '{table}' AND
PARTITION_NAME != 'PART_1' AND
PARTITION_NAME <= 'PART_' || (TO_CHAR(SYSDATE, 'yyyy') - {n_keep}))
LOOP
SQL_ := 'ALTER TABLE {table} DROP PARTITION ' || A.PARTITION_NAME;
IGNORE_ERROR_EXECUTE_SQL(SQL_);
END LOOP;
B := 2;
NOW := SYSDATE;
WHILE B < (2 + {n_create})
LOOP
FIRST_DAY := TO_DATE(TO_CHAR(ADD_MONTHS(NOW, B*12), 'YYYY') || '0101-00:00:00', 'YYYYMMDD-HH24:MI:SS');
SELECT (FIRST_DAY - TO_DATE('19700101-08:00:00', 'YYYYMMDD HH24:MI:SS')) * 24 * 60 * 60 INTO TIME_STAMP FROM DUAL;
SQL_ := 'ALTER TABLE {table} ADD PARTITION PART_' || TO_CHAR(FIRST_DAY, 'YYYY') || ' VALUES LESS THAN(' || TIME_STAMP || ') TABLESPACE {tablespace}';
IGNORE_ERROR_EXECUTE_SQL(SQL_);
B := B + 1;
END LOOP;
'''
# >>FOLD>>
SQL_FOOT = '''# <<FOLD<<
END;
'''
# >>FOLD>>
def generate_plsql(config):# <<FOLD<<
plsql = SQL_HEAD
for section in config.sections():
part_type, n_keep, n_create = section.split('-')
n_keep = int(n_keep)
n_create = int(n_create)
for table in map(lambda x: x.upper(), config.options(section)):
plsql += SQL[part_type].format(table=table, n_keep=n_keep, n_create=n_create, tablespace=config.get(section, table))
plsql += SQL_FOOT
return plsql
# >>FOLD>>
def operate_plsql(db, plsql):# <<FOLD<<
#print plsql
cur = db.cursor()
cur.execute(plsql)
#try:
# cur.execute(sql)
#except Exception, e:
# matched = 0
# ignore_errors = ['ORA-00942', 'ORA-02149']
# for error in ignore_errors:
# if error in str(e).upper():
# matched = 1
# sys.stdout.write('.')
# sys.stdout.flush()
# break
# if not matched:
# print "\n\033[31mRUN \"%s\" ON %s failed:%s\033[0m"%(sql, ora, str(e))
cur.close()
db.close()
return
# >>FOLD>>
def connect_db():# <<FOLD<<
config = ConfigParser.ConfigParser()
config.read(HOST_CONF)
user = config.get('db', 'user')
pswd = config.get('db', 'passwd')
orcl = config.get('db', 'db')
try:
db = cx_Oracle.connect(user, pswd, orcl)
db.autocommit = True
except Exception, e:
print 'Connect Oracle failed: %s'%str(e)
return False
return db
# >>FOLD>>
def main():# <<FOLD<<
global config
while 1:
config = ConfigParser.ConfigParser()
config.read(TABLE_CONF)
plsql = generate_plsql(config)
db = connect_db()
if db: operate_plsql(db, plsql)
sleep(14400)
# >>FOLD>>
if __name__ == '__main__':
main()