转至:http://www.cnblogs.com/SameZhao/p/4743692.html

有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力、省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 。简单的几步搞定,下面介绍一个简单例子便于大家理解:

1,创建一个文件夹,如 D:\ExecScriptOnMultiServer

2,创建一个文本文件ServerList.txt,将所有需要管理的数据库实例名写到里面,格式如下:

    SQLInstanceName1
    SQLInstanceName2
    SQLInstanceName3
  ...
然后保存到可以访问到的目录,如D:\ExecScriptOnMultiServer\ServerList.txt
 
3,将下面的Powershell脚本保存到目录 D:\ExecScriptOnMultiServer\ExecuteQueryOnMultiServers.ps1
##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工具跨多台服务器执行SQL脚本的更多相关文章

  1. <译>通过PowerShell工具跨多台服务器执行SQL脚本

    有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 .简单的几步搞 ...

  2. 通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷

    原文:通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEcl ...

  3. 秘钥登录服务器执行shell脚本

    做自动化的时候,有时候避免不了要和服务器有互动,刚巧碰上一个项目,需要执行命令才能完成本次测试. 昨天遇到的是秘钥形式的,只有秘钥和用户名,百度找了许久也没有思路,(能账号密码登录服务器的还简单些), ...

  4. 跨服务器执行SQL

    --exec sp_helpserver 可以以存储过程形式执行以下: --1.1 创建登录信息(或叫创建链接服务器登录名映射)(只需选择一种方式) --1.1.1 以windows认证的方式登录 / ...

  5. Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息

    pom.xml jar 包支持 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch& ...

  6. window与MAC,多台机器ssh免密码登录同一台机器执行某个脚本,

    参考:https://zhidao.baidu.com/question/586579720.html A B C三台机器上以当前用户运行如下命令生成本主机的公钥和私钥文件: 1 ssh-keygen ...

  7. Capistrano:自动完成多台服务器上新版本的同步更新,包括数据库的改变

    https://baike.baidu.com/item/Capistrano/6844928?fr=aladdin   Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署we ...

  8. 使用PowerShell收集多台服务器的性能计数器

    写在前面     当管理多台Windows Server服务器时(无论是DB.AD.WEB以及其他的应用服务器),当出现性能或其他问题后,参阅性能计数器都是一个非常好的维度从而推测出问题可能出现的原因 ...

  9. PHP多台服务器跨域SESSION共享

    网站业务规模和访问量的逐步发展,原本由单台服务器.单个域名的迷你网站架构已经无法满足发展需要. 此时我们可能会购买更多服务器,并且启用多个二级子域名以频道化的方式,根据业务功能将网站分布部署在独立的服 ...

随机推荐

  1. ASP.NET关于Login控件使用 (转)

    分类: C# 2011-02-21 10:38 4599人阅读 评论(0) 收藏 举报 loginasp.netstringurlserverbutton 今天上网找了一些关于Login控件的使用资料 ...

  2. Be a Smart Project Manager

    The key to being a smart project manager is to remember how you are going to manage your project, to ...

  3. oracle视图V$BH && X$BH的使用列子

    1创建一个测试表,test,并且插入10000行数据:    SQL>  create table test (id int); SQL> begin      2  for i in 1 ...

  4. 诊断一句SQL不走索引的原因

    from http://www.itpub.net/thread-1852897-1-1.html 有论坛朋友在上面的帖子里问SQL为什么不走索引,正好这两天我也刚刚在看SQL优化,于是试着回答了一下 ...

  5. 利用WebService发布图片文件

    服务器端: 1.新建一个Asp.net空网站RGImageServer. 2.新建一个WebService项目ImageService,项目新增文件ImageService.asmx,添加方法GetT ...

  6. 转: 利用 DEBUG_NEW 来追溯 Memory leak 内存泄漏

    参考: https://msdn.microsoft.com/en-us/library/tz7sxz99.aspx http://www.cnblogs.com/taoxu0903/archive/ ...

  7. CL.exe的 /D 选项, Preprocessor Macro预处理器宏定义

    在看"Inside COM"第10章的代码. MAKEFILE里面有几个标记我没看懂. 去网上搜也搜不到. /D_OUTPROC_SERVER_ /DWIN32 /DREGISTE ...

  8. ios-chart 不支持渐变的底色 --- 后面支持了渐变

    https://github.com/danielgindi/ios-charts/issues/186 后话,最近库更新了,可以支持渐变色

  9. 查找文件并执行的shell命令

    来由 经常我们需要找到某类文件, 并对进行处理. 例如找到.svn文件夹, 然后删除掉. 如果不使用shell,你可以选择手动删除, 前提是没有几个此类文件, 但是svn信息文件很多, 不能采用手动删 ...

  10. Nginx实现多重IF判断的办法

    在YII框架中如果访问的图片不存在,会记录大量的错误,于是我想了个办法,凡是访问不存在的图片,直接返回404,不经过YII框架 location / {  set $if_img N;  if ($r ...