在非SQL客户端使用命令行方式定期连接SQL Server 服务器并模拟用户查询操作,同时输出信息内容
一个很长的标题,实现的功能就是尽量使用非人力的方式模拟人去做一件事情,为了便于记录,将他们输出成文件方便查阅。
图形界面方式,使用微软自己的ConnMaker.exe,或者Microsoft 数据连接(系统自带,建立一个后缀为.udl的文件即可体验),进行可视化的操作。

Figure 1使用ConnMaker.exe创建的可视化连接查询实例
不过这次用户的需求是因为他们在尝试进行连接到SQL服务器集群的时候仅仅是他的那个实例会偶尔出现连接失败的问题,为了验证是外网环境而非集群本身的问题,我们需要建立一个类似的环境(非本机的异机客户端连接)去模拟并记录这些事情。
这时候使用图形化界面可能太过于直观,所以本次操作使用命令行方式进行连接,测试,并输出。
同其他数据库软件提供商类似,微软也提供了基于命令行方式的连接,在安装有SQL Server服务器的环境下可以直接使用SQLPS这个命令来进行命令行操作,而对于题目要求的非SQL客户端环境下我们同样也有对策,使用SQLCMD即可。
软件很小巧,可以直接从微软的网站上下载获取,Microsoft® Command Line Utilities 11 for SQL Server®是SQLCMD对应的产品名称。如果出现安装失败,请先安装对应的新版ODBC驱动:Microsoft® ODBC Driver 11 for SQL Server® - Windows然后在尝试安装SQLCMD即可,请注意,软件有32位与64位之分,请根据自己的机器进行下载。
关于SQLCMD的更详细使用说明可以参考MSDN的官方支持:使用 sqlcmd 实用工具
本实例中使用到了利用系统自身验证(Integrated Security)连接数据,并在指定数据库的特定表内查询,返回一些查询结果,用这个结果来判断是否连接中断,以及是否完成正常查询。
设置任务计划,编写批处理,每天每小时延时一个随机时间(0~59秒)执行,输出后查看结果。

Figure 2在这里进行设置任务计划的随机延迟与间隔时间
##最小化执行脚本##
@echo off
if "%1"=="h" goto begin
start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",)(window.close)&&exit
:begin
##设置日期时间##
set ntime=%TIME: =%
set stamp=%date:~,%%date:~,%%date:~,%%ntime:~,%%ntime:~,%
set sq=%time:~,%
##输出生成T-SQL脚本语句,依据秒随机生成一个需要返回的行数,并在总输出前加1确保好识别##
@echo SELECT TOP %sq% [AreaId] >%~dp0\%stamp%.sql
@echo ,[AreaName] >>%~dp0\%stamp%.sql
@echo ,[number_ps] >>%~dp0\%stamp%.sql
@echo FROM [SXSystemSTS].[dbo].[Area] >>%~dp0\%stamp%.sql
##执行sqlcmd,并输出查询内容##
sqlcmd -S 10.5.70.50\ypcgzx -I -i "%~dp0%stamp%.sql" -o "%~dp0ypcgzx%stamp%.1%sq%.txt"
##删除过往的t-sql脚本语句##
del /F /Q %~dp0*.sql
上面是批处理命令,最终的输出效果是每到定时的时间执行一次,并输出成txt文本进行方便查阅。

Figure 3检查是否有出错信息可以仅查看文件大小为1KB的文件即可

Figure 4如果出现连接错误,会生成这三行错误记录,而对应的文件大小约等于1KB,因此这样可以减少排查范围
在制作脚本的过程中遇到了一个小问题就是来自于系统的time命令,有意思的是当他输出时间,且在的小时的时候1~9不会输出成01~09,因此给脚本带来了一些不便:

Figure 5因为生成的文件名中间有空格,而不能被sqlcmd所识别,即便是引号也是无济于事
因此需要自己定义一个新的函数ntime,具体操作见上面的批处理内容。

Figure 6系统自带time命令被改造成可以进行双位数显示的小时
希望上面的一些总结能帮助大家进行更好的自动化任务。
部分信息来自于:http://www.larmib.com/2011/dos-command-to-get-the-2-digit-hour-minute-and-second/、http://msdn.microsoft.com/zh-cn/library/ms180944.aspx、http://technet.microsoft.com/zh-cn/library/cc748841(v=ws.10).aspx
-=EOB=-
在非SQL客户端使用命令行方式定期连接SQL Server 服务器并模拟用户查询操作,同时输出信息内容的更多相关文章
- SQL Server2008 R2命令行启动及停止SQL服务的方法
===================================================== 在 SQL Server中,想要启动或停止SQL Server服务,通过SQL Server ...
- Jmeter命令行方式启动
在性能测试过程中,我们常常遇到这样的问题,使用Jmeter的GUI界面进行大并发量的性能测试时,界面容易卡死,无法继续进行性能测试.通过使用命令行方式启动jmeter是一个不错的方式.下面就简单介绍一 ...
- mysql命令行的导入导出sql,txt,excel(都在linux或windows命令行操作)(转自筑梦悠然)
原文链接https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/73805962 Mysql导入导出sql,txt,excel 首先我们通过命令行 ...
- Ubuntu下几个命令行方式使用的图片浏览工具
想找几个Ubuntu下可以以命令行方式使用的图片浏览工具. Google了一些资料,找到下面几个web: 1.pho:轻巧的命令行图片查看器 其中介绍了工具pho,其功能特点,见下面的转帖内容: ph ...
- 使用cmd命令行方式登录ftp上传下载数据
部分用户在使用ftp工具登录空间上传下载过程中经常会遇到各种问题,如主动模式,被动模式,以及其他导致无法登陆ftp .上传数据.下载数据的问题,这时候不妨使用一下命令行方式.命令行下可以避免很多由于f ...
- iOS:命令行方式使用OSChina托管私有代码
一.介绍 在项目开发中,使用版本控制工具是必不可少的开发工具,它可以帮助我们程序员写完代码后及时提交备份,防止因个人操作导致代码被误删除了或者丢失了,安全可靠.同时,使用版本控制器工具也可以很方便的进 ...
- 个人软件过程5 git命令行方式超简洁教程
虽然许多IDE对git的支持不错,但用命令行方式,有助于对git本身的理解.这里对实际工作中,使用git的流程,以及与其相关的命令 小结一下,基本上,掌握这些命令,就能自如的在工作中使用. 1.git ...
- JAVA基础学习之命令行方式、配置环境变量、进制的基本转换、排序法、JAVA文档生成等(1)
1.命令行方式 dos命令行,常见的命令: dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd..:退回到上一级目录 cd/:退回到根目录 del:删除文 ...
- linux命令行下导出导入.sql文件
一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构(以管理员身份运行): ------------------------------------ ...
随机推荐
- javascript 创建对象的7种模式
使用字面量方式创建一个 student 对象: var student = function (){ name : "redjoy", age : 21, sex: women, ...
- Cannot run gnome extension in browser
Error Message: We cannot detect a running copy of GNOME on this system, so some parts of the interfa ...
- 使用canvas绘制一个时钟
周末学习canvas的一些基础功能,顺带写了一个基础的时钟.现在加工一下,做的更好看一点,先放上效果图: 谈一些自己的理解: (1).要绘制一个新的样式(不想被其他样式影响,或者影响到其他样式),那么 ...
- OHSCE_V0.1.22 Beta,跨平台高可靠性通信框架
Open HI-REL Signal Communication Engine(简称OHSCE)是一款高可靠性跨平台的PHP通信框架,Windows友好且同时支持Linux和OS X.对TCP.UDP ...
- 控制TextField的内容长度
参考如下代码(下例是控制设置交易密码,控制6位): - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [ ...
- 安卓初級教程(3):ContentProvider的運用原理
package com.example.android.provider; import java.util.ArrayList; import java.util.HashMap; import j ...
- [转]ios push
转:http://blog.csdn.net/showhilllee/article/details/8631734 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 P ...
- 剑指Offer面试题:34.翻转单词顺序VS左旋转字符串
一.题目一:翻转单词顺序 1.1 题目说明 题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a st ...
- Spark算子选择策略
摘要 1.使用reduceByKey/aggregateByKey替代groupByKey 2.使用mapPartitions替代普通map 3.使用foreachPartitions替代forea ...
- WebApi系列~目录
回到占占推荐博客索引 写了这个系列的文章不少了,也应该为大家写个目录了,最近很刮了很多SOA的风,很多企业都将自己的系统进行分割,通常是按模块进行拆分,为这个模块提供统一的接口提供业务服务,这不紧可以 ...