`
zhang_215
  • 浏览: 14717 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

sql 获取链接服务器磁盘占用信息

 
阅读更多
可以将以下代码编写为SP,如果需要,可以加上获取时间(getDate()),插入表中.
该sql会调用xp_cmdshell查询磁盘总大小,一般服务器会因安全问题禁用该SP!!!
取硬盘可用空间可用系统过程实现:EXEC master.sys.xp_fixeddrives



if not exists( select * from sys.configurations(nolock) cc
where cc.name='xp_cmdshell'
and cc.value_in_use=1)
begin
    exec sp_configure 'show advanced options',1
    reconfigure

    exec sp_configure 'xp_cmdshell',1
    reconfigure
end

if OBJECT_ID('tempdb..#useddrives_temp') is not null drop table #useddrives_temp
if OBJECT_ID('tempdb..#totaldrives_temp') is not null drop table #totaldrives_temp
if OBJECT_ID('tempdb..#alldriveres_temp') is not null drop table #alldriveres_temp

create table tempdb..#useddrives_temp(drive char(1),freesize bigint)
create table tempdb..#totaldrives_temp(size varchar(100));
create table tempdb..#alldriveres_temp( server_name varchar(50),
drive char(1),
total_size_MB decimal(20,0),
used_size_MB decimal(20,0),
free_size_MB decimal(20,0),
used_precent decimal(5,2));
insert into  #totaldrives_temp exec xp_cmdshell 'wmic LogicalDisk get deviceid,size'
insert into  #useddrives_temp exec xp_fixeddrives

insert into #alldriveres_temp
select  'local',
f.drive,
        t.[totalsizeMB],
        (t.[totalsizeMB]-cast(f.freesize as decimal(20,0))),
        f.freesize,
cast(((t.[totalsizeMB]-cast(f.freesize as bigint))*100.0/t.[totalsizeMB]) as decimal(5,2))
from (select rtrim(left(LTRIM(size),1)) as drive,
cast(replace(replace(replace(ltrim(RIGHT(rtrim(size),LEN(size)-2)),char(9),''),char(10),''),CHAR(13),'') as bigint)/1024/1024 as [totalsizeMB]
from  #totaldrives_temp
where size not like '%DeviceID  Size%' and LEN(size) not IN (0,1)
  ) AS t
inner join #useddrives_temp f on t.drive=f.drive


-----获取链服服务器磁盘占用信息

declare @allLinkServer cursor
declare @serverNameDesc nvarchar(50)
declare @linkServer varchar(20)
declare @str1 nvarchar(2000)

set @allLinkServer=CURSOR for
SELECT distinct [name],[data_source]
  FROM [master].[sys].[servers]
  where is_linked =1

open @allLinkServer
fetch next from @allLinkServer into @linkServer,@serverNameDesc

while (@@FETCH_STATUS=0)
begin
truncate table #totaldrives_temp
truncate table #useddrives_temp

--set @str1='
               
--  select '''+Rtrim(@serverNameDesc)+''' ,*
--  from  OPENQUERY('+Rtrim(@linkServer)+',''SET FMTONLY OFF;SET  NOCOUNT ON  exec master.dbo.xp_fixeddrives'') a'

set @str1='
insert into  #totaldrives_temp select * from OPENQUERY('+Rtrim(@linkServer)+',''SET FMTONLY OFF;SET  NOCOUNT ON  exec master.dbo.xp_cmdshell ''wmic LogicalDisk get deviceid,size'' '') a
insert into  #useddrives_temp select * from OPENQUERY('+Rtrim(@linkServer)+',''SET FMTONLY OFF;SET  NOCOUNT ON  exec master.dbo.xp_fixeddrives'') b
insert into #alldriveres_temp
select  '''+Rtrim(@serverNameDesc)+''',
f.drive,
        t.[totalsizeMB],
        (t.[totalsizeMB]-cast(f.freesize as decimal(20,0))),
        f.freesize,
cast(((t.[totalsizeMB]-cast(f.freesize as bigint))*100.0/t.[totalsizeMB]) as decimal(5,2))
from (select rtrim(left(LTRIM(size),1)) as drive,
cast(replace(replace(replace(ltrim(RIGHT(rtrim(size),LEN(size)-2)),char(9),''''),char(10),''''),CHAR(13),'''') as bigint)/1024/1024 as [totalsizeMB]
from  #totaldrives_temp
where size not like ''%DeviceID  Size%'' and LEN(size) not IN (0,1)
  ) AS t
inner join #useddrives_temp f on t.drive=f.drive '

begin try
exec (@str1)
end try
begin catch
print N'错误'
--insert into #fdtest2 values(@serverNameDesc,0,0)
end catch
fetch next from  @allLinkServer into @linkServer,@serverNameDesc
end
close @allLinkServer
deallocate @allLinkServer


select * from #alldriveres_temp
分享到:
评论

相关推荐

    asp+sql迷你服务器

    - **节省资源**:占用较少的内存和磁盘空间,适合资源有限的环境。 - **学习工具**:对于初学者,这是一个很好的实践ASP和SQL结合的平台。 - **轻量级部署**:对于小规模项目,可以快速部署到生产环境。 在实际操作...

    SQL Server数据库占用过多内存的解决方法

    ### SQL Server数据库占用过多内存的解决方法 #### 内存使用概述 在SQL Server数据库运行过程中,内存管理是一项至关重要的任务。SQL Server会利用内存来提高数据访问速度和查询性能。其中,数据缓存占据内存的...

    WWW服务器与SQL服务器互联技术.pdf

    其次,WWW 服务器和 SQL 服务器的互联可以提高数据检索的效率和速度,并且可以减少客户机的磁盘空间占用。最后,WWW 服务器和 SQL 服务器的互联也可以实现远程数据库操作和数据共享。 CGI 技术是 WWW 服务器和 SQL ...

    SQL Server性能优化专题之一:磁盘缓存.pdf.rar

    8. **定期更新统计信息**:保持统计信息的准确性有助于SQL Server做出更好的查询计划,避免因统计信息过时导致的不必要的磁盘读取。 9. **使用分区策略**:对于大数据量的表,可以考虑使用分区,将数据分布在多个...

    sql查询分析器连接各版本sql server

    这对于在不同计算机间切换工作或者在没有管理员权限的环境中特别有用,因为便携式工具不会在系统注册表中留下痕迹,也不会占用大量磁盘空间。 “sql server 查询分析器”标签进一步明确了这个工具的核心功能,即...

    无法启动sqlserver服务器文档

    4. **资源占用**:如果服务器资源(CPU、内存、磁盘空间)紧张,也可能导致无法启动。检查系统资源并优化使用。 5. **防火墙设置**:确保防火墙没有阻止SQL Server的通信端口。 6. **系统更新或补丁**:有时候,...

    sqlserver内存释放

    这种内存管理策略虽然有助于提升查询效率,但也可能导致运行 SQL Server 的服务器内存占用过高,从而影响到其他服务或应用的正常运行。 #### 二、SQL Server 内存缓存类型 在 SQL Server 中,主要存在以下几种类型...

    SQLServer查询耗费大量资源的语句.txt

    因此,能够准确地识别并分析那些占用大量资源的SQL查询至关重要。 #### 关键知识点解析 通过分析提供的SQL查询脚本,我们可以发现两个主要的知识点:如何查找并统计SQL Server中资源消耗最大的查询;以及如何进行...

    SQL Server数据库服务器优化方法.pdf

    SQL Server数据库服务器优化是提升系统性能的关键环节,尤其是在企业级应用中,确保数据库高效运行对于业务的顺畅至关重要。本文将详细探讨SQL Server 6.5的一些优化策略。 首先,SQL Server的运行优先级设置能够...

    监控 SQL Server 的运行状况

    * 通过查询 sys.dm_exec_query_stats 视图来获取当前缓存的哪些批处理或过程占用了大部分 CPU 资源。 * 通过查询 sys.dm_exec_query_stats 视图来显示缓存计划所占用的 CPU 总使用率(带 SQL 文本)。 这些查询可以...

    sql服务器无法配置补丁

    SQL服务器无法配置补丁是一个常见的问题,这通常发生在尝试安装新的SQL Server更新、补丁或者服务包时。这个问题可能是由多种因素引起的,包括但不限于现有安装的实例状态、系统资源的占用、权限问题以及与现有软件...

    MFC中ado连接SQL Server2000远程数据库

    ADO的主要优势包括易用性、执行速度快、内存占用低以及磁盘占用空间小等特点。此外,ADO在关键应用场景中能有效减少网络流量,通过减少前端与数据源之间的层级,从而提供一个轻量级且高性能的接口。 #### 二、使用...

    我的服务器SQL2000的sqlserver占用了90%的cpu,怎么查是那个库?

    您可能感兴趣的文章:SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息SQL Server 2008 R2占用cpu、内存越来越大的两种解决方法SQL Server误区30日谈 第12天 TempDB的...

    sql server 数据库巡检

    包括检查数据库的磁盘空间使用信息、日志文件大小及使用情况、表的磁盘空间使用信息、磁盘读写情况、I/O 工作情况、锁与等待、死锁、用户和进程信息、活动用户和进程的信息、SQL Server 的实际内存占用、所有数据库...

    基于32位Windows2003的SQLSERVER数据库服务器优化.doc

    ### 基于32位Windows2003的SQLSERVER数据库服务器优化 #### 背景介绍 本文档详细介绍了如何对基于32位Windows Server 2003环境下的SQL Server数据库服务器进行优化。具体场景是一台Web服务器由于高并发访问导致响应...

    MS-SQL Server热点话题30问

    5. SQL Server内存占用问题:服务器内存占用持续上升可能是因为内存泄漏或缓存设置不当,应检查内存使用情况,优化内存分配策略。 6. SQL Server异机恢复问题:在不同机器之间进行数据库恢复,需要确保目标服务器的...

    Sql Server ExpressProfiler 监视Sql语句

    3. **性能分析**:通过Profiler,你可以查看每个SQL语句的执行时间、资源消耗、执行计划等信息,从而找出性能低下或资源占用过多的查询进行优化。 4. **调试与问题定位**:当应用程序出现错误或异常行为时,...

    SQL Server2000优化服务器性能.pdf

    而maxServermemory则控制着SQL Server能使用的最大内存额度,以避免服务器占用过多内存资源而影响操作系统的其他部分运行。合理配置这两个参数,可以确保数据库性能和系统稳定性之间达到平衡。 maxworkerthreads...

    pb12.5+sqlserver2008运行时所需dll

    DLL文件包含了可被多个程序共享的代码和数据,它们可以提高系统资源的利用率,减少磁盘和内存占用,并且允许开发者在不修改源代码的情况下更新功能。在PB12.5和SQL Server 2008的环境下,这些DLL通常包括了数据访问...

    HeidiSQL_8.3完美绿色中文版

    HeidiSQL作为一个绿色软件,意味着它无需安装,下载解压后即可直接运行,减少了对系统的影响和磁盘空间的占用。 HeidiSQL是一款广泛应用于MySQL、MariaDB、SQL Server、PostgreSQL和Oracle等数据库管理的软件。它以...

Global site tag (gtag.js) - Google Analytics