脚本编程

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

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

难得今天晚上 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%"
10 条回应
  1. 懿古今 2015-3-26 · 16:41

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

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

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

    • avatar
      Jager 2015-3-26 · 19:56

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

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

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

    • avatar
      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

    支持博主。。。

  8. :) 2019-11-8 · 15:45

    你这个文章朗读听着好好笑啊。可能我笑点有点低。