如题,
我想在某台机器上写个存储过程,用来统计那些数据库服务器上数据库的大小及备份文件大小.
1.首先,我如何用SQL语句来连接不同台数据库服务器?(就相当于在查询分析器中连接服务器的操作用语句来实现)
2.连接上后,如何用SQL语句查询出磁盘上某路径下该数据库的备份文件大小?并把结果插入表.
3.用SQL语句查询出该磁盘的可用空间,我知道用Exec master.dbo.xp_fixeddrives,但不知道如何把结果插入一张表?知道的高手帮忙解答一下吧,谢谢!!!:)

解决方案 »

  1.   

    1.首先,我如何用SQL语句来连接不同台数据库服务器?(就相当于在查询分析器中连接服务器的操作用语句来实现)
    sp_addlinkedserver 'lnksvr','','sqloledb','192.168.18.33'
    exec sp_addlinkedsrvlogin 'lnksvr',false,null,'sa','密码'
    2.连接上后,如何用SQL语句查询出磁盘上某路径下该数据库的备份文件大小?并把结果插入表.
    create table #t(col varchar(400))
    insert #t exec [lnksvr].master..xp_cmdshell 'dir c:\a.txt' --这里换成实际的文件名和路径
    select * from #t 3.用SQL语句查询出该磁盘的可用空间,我知道用Exec master.dbo.xp_fixeddrives,但不知道如何把结果插入一张表?
    create table #t(drive varchar(10),可用空间 float)
    insert into #t Exec master.dbo.xp_fixeddrives
    select * from #t
      

  2.   

    个人认为,完全用SQL语句有些困难,因为有很多是文件操作。
    建议用编程语言做成应用程序,用任务计划执行就可以了。
      

  3.   

    请问wgsasd311(自强不息):
    1.查询可用空间:insert into #t Exec master.dbo.xp_fixeddrives
      运行结果如果只有C盘的话,显示两列: C    1025, 那我怎么把1025这一列插入表的一个字段  
      中?
    2.查询文件大小:insert #t exec [lnksvr].master..xp_cmdshell 'dir c:\a.txt'
      运行结果有一大堆呢,我如果把文件大小拿出来插入表的一个字段?万分感谢!!!!
      

  4.   

    --第一个问题
    create table Test
    (drive char(20) NULL,
    sparesize int NULL)insert into Test(drive,sparesize)
    exec master.dbo.xp_fixeddrives--第而个问题解决方法相同
      

  5.   

    TO 可口可乐:
    insert into Test(drive,sparesize)
    exec master.dbo.xp_fixeddrives这个方法查本机的磁盘空间是没问题的,但是如果我查找的是linkserver上的磁盘可用空间,就会一直在执行,停也停不掉,只能重启服务.
    请问该怎么办?
      

  6.   

    To nicebee(小蜜蜂)
    很想帮你,不过我也是能力有限,
    你要查找的是linkserver上的磁盘可用空间,这个设计到远程存储过程的调用,
    本来远程存储过程的调用可以使用openquery,比如
    select * from openquery (linkserver,'master.dbo.sp_help')
    可是,你要调用的是远程“扩展存储过程”,我没有用过,也没有查到相关资料,有哪位高手知道怎么处理。帮你顶!!!
      

  7.   

    To everydream(可口可乐) :
    非常感谢你的帮助.
    对,远程磁盘空间和磁盘上文件大小的查询都会down机,实在是头疼.
    其实不管用什么方法,只要能让我远程得到以上数据就好了.
    因为每天要检查那么多服务器上的信息,我想做个存储过程自动执行,插入表中,这样也便于统计.