Archive for 一月, 2010

思路不对怎么做都是一个烂

我干的是运维的事儿,所以平时和应用项目的数据库打交道很多。见过各种各样设计的,最近一个着实让我郁闷。作为一个从06年开始今后一直用的项目,数据库的计算竟然选择全量。我不知道这程序员当时是不是脑袋被驴踢了。选择全量就意味着这个计算量将会随着时间一点点变大,系统变得越来越慢,而这其中计算的数据有很多并不是日常我们需要的,而是两三年前的东西。最致命的一点是全量计算如果出错,那么之前所有的数据都不见了。我最烦这时候业务部门打电话来,为什么我的系统查不到数据,什么时候能好之类的。这个鬼系统又不是我设计的!好在暂时把这个问题缓解了,设定了计算起始时间,这样的好处是减少计算量,但是之前的老数据就查不到。我最讨厌给人擦屁股,做一个DBA好难。

鄙视TP-LINK

昨天在网上看到TP-LINK的TL-WR541G+路由器放出了最新的固件,这个固件支持QoS。自己用的这是这款路由,于是赶紧去下载。谁知道升级了几次总是在半路路由失去响应,升级失败。无奈在网上搜索原因,这才发现,原来TP-LINK的同款路由器还分所谓的“版本”,而据细心网友发现这个所谓的“版本”原来就是内置的ROM大小不同。像我的1.4版本TL-WR541G+路由器内存最大支持1024K的固件,大了就不认,而这个支持QoS的最新版本固件大小为1086K,就因为这62K不能升级。这个结果之后引起了我强烈的愤慨,我不知道这个1M的ROM和10M的ROM差多少钱,无良厂商算计成本都算计到骨头渣子里。他妈的路由器又不是易耗品,难道为了用新功能逼着用户每年都要买个新款的吗?强烈鄙视TP-LINK这种卑鄙的做法。以后坚决不买TP-LINK的垃圾路由器了,中国又不是光你一家卖这个!

MOM监视服务器进程

今天来写一个用MOM监视服务器进程的VBS脚本,这个脚本的原理是监视当前服务器的进程表中是否有你想要监视的进程名,然后做一个判断,用这个脚本来监视JAVA小程序还有一些类似于ServerU的东西还是很好用的。

Const EVENT_TYPE_SUCCESS = 0
Const EVENT_TYPE_ERROR = 1
Const EVENT_TYPE_WARNING = 2
Const EVENT_TYPE_INFORMATION = 4
Const EVENT_TYPE_AUDITSUCCESS = 8
Const EVENT_TYPE_AUDITFAILURE = 16
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colMonitoredProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'Calc.exe'")
    If colMonitoredProcesses.count = 0 Then
        CreateEvent 100,EVENT_TYPE_ERROR,"进程监视","进程意外退出!"
    Else
CreateEvent 200,EVENT_TYPE_SUCCESS,"进程监视","进程正常!"
   End If
Sub CreateEvent(intEventNumber,intEventType,strEventSource,strEventMessage)
    Set objEvent = ScriptContext.CreateEvent()
    objEvent.EventSource = strEventSource
    objEvent.EventNumber = intEventNumber
    objEvent.EventType = intEventType
    objEvent.Message = strEventMessage
    ScriptContext.Submit objEvent
End Sub

以上脚本中的Calc.exe就是你想要监控的进程名子,为了使这个脚本可以实现重用,你也可以把这个进程做为一个传入MOM的参数,这样就不必每次都复制一个同样的规则在MOM里边跑了。

欢迎交流。

MOM监视BizTalk文件夹队列

之前写过VBS监控队列的脚本。在MOM里边监控队列和VBS可以说是大同小异的,只需要在开头定义好事件,然后在加上把事件传给MOM的函数就好。以下是例子,这个MOM脚本的目的是监控文件的文件数然后根据设定的阀值把相应事件传给MOM:

Const EVENT_TYPE_SUCCESS = 0
Const EVENT_TYPE_ERROR = 1
Const EVENT_TYPE_WARNING = 2
Const EVENT_TYPE_INFORMATION = 4
Const EVENT_TYPE_AUDITSUCCESS = 8
Const EVENT_TYPE_AUDITFAILURE = 16

Const CountMax = 1

Set fso=createobject("Scripting.FileSystemObject")
Set objFolder=fso.GetFolder("C:\I386\")

If objFolder.Files.count >= CountMax Then
CreateEvent 100,EVENT_TYPE_ERROR,"队列轮询","发生积压!"& objFolder.Files.count &""
Else
CreateEvent 200,EVENT_TYPE_SUCCESS,"队列轮询","正常!"
End If

Sub CreateEvent(intEventNumber,intEventType,strEventSource,strEventMessage)
    Set objEvent = ScriptContext.CreateEvent()
    objEvent.EventSource = strEventSource
    objEvent.EventNumber = intEventNumber
    objEvent.EventType = intEventType
    objEvent.Message = strEventMessage
    ScriptContext.Submit objEvent
End Sub

其中CountMax是阀值,这个阀值其实可以做为参数传进来,我会在以后说。而接下来的C:\I386是需要监控的文件夹路径。

欢迎交流~

自动收缩SQL数据库日志

DBA遇到的烦心事有一项就是清理SQL日志,尽管搭配MOM会有一个预警,但是也不能一天24小时都盯着MOM。于是学会观察数据库日志的增长速度来适时的收缩日志就很必要了。

DUMP TRANSACTION 数据库名称 with NO_LOG

BACKUP LOG 数据库名 with NO_LOG

DBCC SHRINKFILE (数据库日志逻辑名) with NO_INFOMSGS

with NO_INFOMSGS的目的是在DBCC SHRINKFILE运行之后不返回信息性消息。如果不加这句话,在执行查询之后会返回“DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。”

我直接把这组SQL查询做进了数据库维护计划,但是网上说经常DBCC会让数据库的查询效率下降,我还没有验证这个。

中国导演们,又到了面壁思过时间

下午去看了3D的《阿凡达》,用什么词形容呢?美轮美奂?不对,这个电影不是要表达这个意思。就完美吧。我承认我之前被各种轰炸式的报道给迷惑了,什么“IMAX”、“晕3菜”、“买票堪比春运”等等等。我曾经不止一次地去想这是一部什么类型什么样子的电影会让中国影迷如此的为之疯狂。看过之后,我能说,这80块钱虽然有点贵但是真没白花。同样几年没拍电影,但卡梅隆至少比张艺谋诚恳,他拍的至少还是电影,而后者?结果当然不言而喻,卡梅隆再一次用票房狠狠抽了一票自负中国导演一耳刮子。所以,中国导演们,丫都给我闭嘴,又到面壁思过的时间了,快来排队!

天气晴但是很冷

今天是下过大雪的第二天,路面上到处都是积雪。天气很晴但是很冷,对于下过雪来说在正常不过了。科里一个同事没有任何预兆就调走了,在我看属于发配了。呵呵 他的活儿没干几天又交接给我了。唉~可以预兆2010 年我的日子不会太好过。领导好歹从其他科室调来一个,但是把活儿也带过来了,太不爽了。办公室倒是有了人气,但是总感觉别扭。

最近有想买单反的冲动,可一想到又是一笔大支出就有点动摇。这年头钱好花不好赚啊,先放放吧。