脚本编程

bat/cmd批处理连接SqlServer数据库查询脚本

Jager · 3月24日 · 2015年 · · 4969次已读

难得今天晚上9点前赶回家,而且最近草稿箱也压了不少“湿货”,就挑一篇发出来好了!不过在发文章之前先吐槽一下那个从昨天攻击张戈博客到现在还在继续的无聊蛋疼之人!

bat/cmd批处理连接SqlServer数据库查询脚本

本来就算开启了云加速全缓存也是扛不住的,因为静态中混着动态请求,比如浏览计数。还好灵机一动,对这些动态做了点小手脚,现在基本毫无压力了!粗略分析一下这个攻击博客的小人,无外乎是2种人:

①、最近张戈博客流量大涨,估计遭人妒忌或者是挡人财路;

②、来张戈博客换友链被拒或被忽略的人,怀恨在心。

对于①:俗话说无人妒忌是庸才,那么无人妒忌的网站也不能算是优秀的网站。其实,你只闻到我的香水,却没看到我的汗水,你只看到了我的排名,却没看到我的用心。

建站一年多,或多或少对SEO有一些自己的见解。结合张戈博客的发展历程,我认为真正以用户体验、设身处地为用户着想的内容才是最好的“农家肥”,而不是那些短期就能看到成效的“化肥”!写文章时我会时刻想着用户是否看得懂,怎样写才能让用户更容易?总之,文章如果只是贴上你的测试过程,那这博客就真的只是印象笔记了!

所以,如果你是眼红而攻击我,那就继续吧,不把张戈博客打死你就是孬种。

对于②:怎么说呢,前面那篇文章已经说了张戈博客的友链要求,但还是有不少朋友热心的请求交换友链。可是你的网站确实还不够看,达不到我的要求,你要我怎么弄?如果都同意,那我首页不就变成导航了吗?如果是因为拒绝友链而攻击我,那么请继续,但千万别让我知道了是哪个网站,否则你懂的。。。

好了,废话说的够多的了,下面说正事。

前面也说了,我现在的新公司大部分服务器是Windows Server环境,前人都是用Python写的监控脚本,最近正好遇到了一个添加Zabbix监控项目的需求,我就琢磨着用我刚工作时拿手的bat批处理来完成这个项目。

不出意外,批处理果然可以胜任,不过要借助sqlserver命令行工具的帮助,代码如下:

@echo oFF
title Zabbix监控之数据库查询bat脚本
::名称:Zabbix监控脚本批处理版
::描述:通过osql命令行工具查询数据库,进行一些自定义监控
::支持:需要osql.exe和MSVCR71.DLL支持,可以放到脚本同级目录
::时间:2015-03-20

:: 进入脚本当前目录
cd "%~dp0"

::取得参数
set "Usg=%1"

::判断参数
if "%Usg%"=="" goto Example

::初始化连接参数
set host="10.172.10.80" 
set db="DBname"
set user="DBuser"
set pd="password"

::根据不同的参数执行不同的查询代码(自行调整)
if "%Usg2%"=="monitor1" (
        ::监控1
	set sql="sql语句1") else if "%Usg%"=="monitor2" (
	::监控2
	set sql="sql语句2" ) else if "%Usg%"=="monitor3" (
	::监控3
	set sql="sql语句3") else if "%Usg%"=="monitor4" (
	::监控4
	set sql="sql语句4"
)
::连接数据库并执行查询(此处的for是对查询到的结果做提取,所以需要按照实际情况自行搞定。。)
for /f "skip=2 delims= " %%i in ('osql.exe -S %host% -U %user% -P %pd% -d %db% -Q %sql%') do ( 
	set result=%%i
	goto :result
)

::直接不带参数执行将提示用法
:Example
echo Example:
echo=
echo %~nx0 Conditions
echo=
echo ------------------------------
echo Script will auto exit in 5s...
ping -n 5 127.1>nul
exit

::输出结果后自动退出
:result
echo %result%

使用方法:

①、验证执行:在CMD中执行【脚本.bat +  监控名】即可,比如:D:\>monitor1.bat  monitor1

②、关联zabbix:zabbix中怎么设置我就不赘述了,注意下zabbix配置文件zabbix_command.conf如下添加:

UserParameter=NewMonitor[*],cmd /k c:\zabbix\NewMonitor.bat monitor1

Ps:主要是注意,需要添加一个cmd /k前置,否则zabbix执行不了,也得不到数据。 

最后附几个 osql.exe 命令的实用参数及相关下载地址:

-U   login_id  
  用户登录   ID。登录   ID   区分大小写。  
   
-P   password  
  是用户指定的密码。如果未使用   -P   选项,osql   将提示输入密码。如果在命令提示符的末尾使用   -P   选项而不带密码,osql   使用默认密码   (NULL)。密码区分大小写。

-S   server_name[\instance_name]    
  指定要连接的 Microsoft® SQL Server™ 2000 实例。在该服务器上指定 server_name 以连接到 SQL Server 的默认实例。在该服务器上指定 server_name\instance_name 以连接到一个已命名的 SQL Server 2000 的实例。如果未指定服务器,osql 将连接到本地计算机上的 SQL Server 默认实例。从网络上的远程计算机执行 osql 时,此选项是必需的。 

-d   db_name  
  启动 osql 时发出一个 USE db_name 语句。

-Q   "query"  
  执行查询并立即退出 osql。将查询用双引号引起来,将查询中嵌入的任何内容用单引号引起来。

-q   "query"  
  启动 osql 时执行查询,但是在查询完成时不退出   osql。(注意查询语句不应包含   GO)。如果从批处理文件中发出查询,请使用 %variables 或环境 %variables%。
例如:   
  SET table = sysobjects  
  osql /q "Select * from %table%"
9 条回应
  1. 懿古今 2015-3-26 · 16:41

    遇到像博主这样有技术的,多少攻击也没用

  2. 陌小雨 2015-3-26 · 19:13

    文章如果只是贴上你的测试过程,那这博客就真的只是印象笔记了!博主说的好像就是我呀,我要好好反思下了。

    • Jager 2015-3-26 · 19:56

      以用户体验为目的,这才是分享,而不是单纯的记录。

  3. 陌小雨 2015-3-26 · 19:20

    有一事不明,你的流量大涨了为什么会挡人财路呢?

    • Jager 2015-3-26 · 19:55

      自己琢磨去吧

  4. 杨复然个人博客 2015-3-27 · 8:12

    马上就要学习PHp和mysql了,过来看看

  5. 微饭 2015-3-28 · 12:48

    最近有些人也是蛋疼,前天收到阿里云的流量阀值触发短信提醒,攻击好几万,也是没意思,开启CDN+全静态+网站连接优化了再攻击有何意义,最近又没惹到谁,闷声闷气的攻击。

  6. 黄小韩 2015-3-29 · 22:08

    下载那个小弹窗怎么实现的,能分享下吗,另外那个是图标吗

  7. 芒果博客 2016-5-17 · 4:48

    支持博主。。。