<译>通过PowerShell工具跨多台服务器执行SQL脚本
有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力、省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 。简单的几步搞定,下面介绍一个简单例子便于大家理解:
1,创建一个文件夹,如 D:\ExecScriptOnMultiServer
2,创建一个文本文件ServerList.txt,将所有需要管理的数据库实例名写到里面,格式如下:
##Save the below powershell script in folder "D:\ExecScriptOnMultiServer\ExecuteQueryOnMultiServers.ps1" $QueryPath= "D:\ExecScriptOnMultiServer\SQLQuery.sql"
$OutputFile = "D:\ExecScriptOnMultiServer\QueryOutput.txt" $ExecuteQuery= Get-Content -path $QueryPath | out-string "Results -- > `r`n`r`n" > $OutputFile FOREACH($server in GC "D:\ExecScriptOnMultiServer\ServerList.txt")
{
$server "---------------------------------------------------------------------------------------------------------" >> $OutputFile
$server >> $OutputFile
"---------------------------------------------------------------------------------------------------------" >> $OutputFile
invoke-sqlcmd -ServerInstance $server -query $ExecuteQuery -querytimeout 65534 | ft -autosize | out-string -width 4096 >> $OutputFile
}
4,将你要在上述ServerList文件中的服务器实例执行的SQL语句,可先写到目录文件D:\ExecScriptOnMultiServer\SQLQuery.sql
例如:我要对所有实例下所有数据的的版本、SP和群集节点等信息收集,如下代码:
declare @Nodes Varchar(100)
set @Nodes=''
if (SERVERPROPERTY('IsClustered') = 1)
begin
select @Nodes=@Nodes+ NodeName
+',' from sys.dm_os_cluster_nodes order by NodeName
set @Nodes=substring(@Nodes,0,LEN(@Nodes))
select
@Nodes as HostName,
SQLInstanceName = @@SERVERNAME,
'Yes' as IsClustered,
CAST(SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS VARCHAR(50)) As ActiveNode,
SERVERPROPERTY('edition') As SQLEdition,
Case
when cast(serverproperty('productversion') as varchar) like '8.%' then 'SQL2000'
when cast(serverproperty('productversion') as varchar) like '9.%' then 'SQL2005'
when cast(serverproperty('productversion') as varchar) like '10.0%' then 'SQL2008'
when cast(serverproperty('productversion') as varchar) like '10.50.%' then 'SQL2008R2'
when cast(serverproperty('productversion') as varchar) like '11.%' then 'SQL2012'
when cast(serverproperty('productversion') as varchar) like '12.%' then 'SQL2014'
ELSE 'SQL7.0' END +' '+
cast(SERVERPROPERTY('productlevel') as varchar(50))+' ('+ cast(SERVERPROPERTY('productversion') as varchar(50)) + ')' as SQLVersion
end
else
begin
select @Nodes=CAST(SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS VARCHAR(50))
select
@Nodes as HostName,
SQLInstanceName = @@SERVERNAME,
'No' as IsClustered,
SERVERPROPERTY('edition') As SQLEdition,
Case
when cast(serverproperty('productversion') as varchar) like '8.%' then 'SQL2000'
when cast(serverproperty('productversion') as varchar) like '9.%' then 'SQL2005'
when cast(serverproperty('productversion') as varchar) like '10.0%' then 'SQL2008'
when cast(serverproperty('productversion') as varchar) like '10.50.%' then 'SQL2008R2'
when cast(serverproperty('productversion') as varchar) like '11.%' then 'SQL2012'
when cast(serverproperty('productversion') as varchar) like '12.%' then 'SQL2014'
ELSE 'SQL7.0' END +' '+
cast(SERVERPROPERTY('productlevel') as varchar(50))+' ('+ cast(SERVERPROPERTY('productversion') as varchar(50)) + ')' as SQLVersion
end
5,开启Window PowerShellISE程序,注意要用管理员身份启动,打开Powershell脚本ExecuteQueryOnMultiServers.ps1,点击执行。
执行后结果保存如代码中标注,位置在D:\ExecScriptOnMultiServer\QueryOutput.txt

6,或者直接在PowerShell命令行执行,
PS C:\>D:\ExecScriptOnMultiServer\ExecuteQueryOnMultiServers.ps1
小结:
PowerShell工具是非常强大的工具,特别在跨多服务器的维护中,更能体现高效。本文只是一个影子,有兴趣的朋友可以参考下面的资料学习:
PowerShell Tips
本文转自: http://www.sqlservercentral.com/scripts/powershell/129948/
<译>通过PowerShell工具跨多台服务器执行SQL脚本的更多相关文章
- [转]通过PowerShell工具跨多台服务器执行SQL脚本
转至:http://www.cnblogs.com/SameZhao/p/4743692.html 有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心 ...
- 通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷
原文:通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEcl ...
- 秘钥登录服务器执行shell脚本
做自动化的时候,有时候避免不了要和服务器有互动,刚巧碰上一个项目,需要执行命令才能完成本次测试. 昨天遇到的是秘钥形式的,只有秘钥和用户名,百度找了许久也没有思路,(能账号密码登录服务器的还简单些), ...
- 跨服务器执行SQL
--exec sp_helpserver 可以以存储过程形式执行以下: --1.1 创建登录信息(或叫创建链接服务器登录名映射)(只需选择一种方式) --1.1.1 以windows认证的方式登录 / ...
- Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息
pom.xml jar 包支持 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch& ...
- window与MAC,多台机器ssh免密码登录同一台机器执行某个脚本,
参考:https://zhidao.baidu.com/question/586579720.html A B C三台机器上以当前用户运行如下命令生成本主机的公钥和私钥文件: 1 ssh-keygen ...
- Capistrano:自动完成多台服务器上新版本的同步更新,包括数据库的改变
https://baike.baidu.com/item/Capistrano/6844928?fr=aladdin Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署we ...
- 使用PowerShell收集多台服务器的性能计数器
写在前面 当管理多台Windows Server服务器时(无论是DB.AD.WEB以及其他的应用服务器),当出现性能或其他问题后,参阅性能计数器都是一个非常好的维度从而推测出问题可能出现的原因 ...
- PHP多台服务器跨域SESSION共享
网站业务规模和访问量的逐步发展,原本由单台服务器.单个域名的迷你网站架构已经无法满足发展需要. 此时我们可能会购买更多服务器,并且启用多个二级子域名以频道化的方式,根据业务功能将网站分布部署在独立的服 ...
随机推荐
- 试试SQLSERVER2014的内存优化表
试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技 ...
- C语言 · 判定数字
编写函数,判断某个给定字符是否为数字. 样例输入 9 样例输出 yes #include<stdio.h> int main(){ char c; scanf("%c" ...
- ExtJS 4.2 业务开发(二)数据展示和查询
本篇开始模拟一个船舶管理系统,提供查询.添加.修改船舶的功能,这里介绍其中的数据展示和查询功能. 目录 1. 数据展示 2. 数据查询 3. 在线演示 1. 数据展示 在这里我们将模拟一个船舶管理系统 ...
- pt-mext
pt-mext实现的功能比较简单,就是将mysqladmin输出的多次迭代的相同status变量值放到同一行输出. 参数很少,除了--help和--version外,只有一个--relative参数 ...
- Linux基础介绍【第五篇】
linux权限位 Linux文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件属主权限.属组权限.其他用户权限. r:read可读权限,对应数字4: w:write可写权限,对应数字 ...
- POJ2774 Long Long Message [后缀数组]
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 29277 Accepted: 11 ...
- requests源码阅读学习笔记
0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情. 1.另一种类的初始化方式 class Reques ...
- 亡命之徒aaaaaa.......chao
前端是一个看似入门门槛不高,但要学好很难的领域.前端的知识体系庞杂又松散,技术演进快,如果摸不清脉络的话很容易陷入盲人摸象的困境甚至跑偏.其实只要掌握了正确的方法,学习前端和学好前端就只是个时间问题. ...
- thinkphp-无限分类下根据任意部门获取顶级部门ID
根据所得到的部门编号获取顶级部门ID: 参数 - department_id 表格组织架构: tab_departments department_id parent_id name 1 1 顶级 2 ...
- Linux配置防火墙 开启80端口的方法
命令行输入: vi /etc/sysconfig/iptables 将 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT ...