设为首页 收藏本站
查看: 1257|回复: 0

[经验分享] Sql Server 性能分析2 –查看数据库的大小以及数据库表的大小(Linked Server)

[复制链接]

尚未签到

发表于 2016-11-6 08:47:32 | 显示全部楼层 |阅读模式
Sql Server 性能分析2 –查看数据库的大小以及数据库表的大小(Linked Server)



因为业务的需求,需要用Linked Server从当前数据库获取远端数据库的 数据库大小 以及 远端数据库的 表大小


关于Linked Server 连接,请看我的另一篇文档:

http://blog.csdn.net/zwxrain/archive/2007/01/18/1486304.aspx


在操作中遇到以下几个问题,并都以解决

问题一: 不可以直接对远需数据库操作 sp_spaceused 查看大小(数据库大小和表大小)

sp_spaceused 的操用方法:

查看本地表大小

sp_spaceused ‘TableName’


查看远端数据库大小

Srv_MES.InsiteProdDG.dbo.sp_spaceused ‘TableName’


说明:

Srv_MES Linked Server , InsiteProdDG Linked Server 远端的数据库名。


查看远端数据大小的错误描述:

Msg 7411, Level 16, State 1, Line 14

Server 'Srv_MES' is not configured for RPC.


DSC0000.png




解决方法:将Linked Server Rpc_Out 设成 True



DSC0001.png



问题2 解决第一个问题,我们可以正常查询远端数据库的表大小,但当然们将查询结果保存到表时却出现如下错误。


insert into @tb_size exec Srv_MES.InsiteProdDG.dbo.sp_spaceused ‘tb_name’


错误描述:

OLE DB provider "SQLNCLI" for linked server "Srv_MES" returned message "The transaction manager has disabled its support for remote/network transactions.".

Msg 7391, Level 16, State 2, Line 13

The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "Srv_MES" was unable to begin a distributed transaction.


原因:

由于开启了事务,需要分布式事务协调器的支持。打开本机的控制面板 - 管理工具 - 服务,将两台服务器上的 Distributed Transaction Coordinator (MSDTC) 服务开启,注意 MSDTC 服务的登陆名必须选择 NETWORK SERVICE 用户。然后设置高级选项,运行 dcomcnfg.exe ,进入组件服务,选择我的电脑右键属性,MSDTC - 安全配置,勾选:网络DTC访问,允许入站,允许出站,并且不要求进行验证。其他的可以根据需要选择,不是必须选项。



解决:



DSC0002.png




SQL 代码部分:


---Linked Server 获取远端数据库的大小----


Create procedure [dbo].[Proc_DBA_Database_Size]

as

Declare @l_datetime varchar(20)

set @l_datetime = convert(varchar(20),getdate(),120)


insert into TB_DBA_Database_Size

select -- fileid,

@l_datetime as Date_Time,

'InsiteProdDG' [Database Name] ,

cast(sum(size)*8/1024. as decimal(10,2)) [DB Size],

'MB' Size_Type

-- name logic filename,

-- filename physics filename

from Srv_MES.InsiteProdDG.dbo.sysfiles



---Linked Server 获取远端数据库表的大小----


Create procedure [dbo].[Proc_DBA_MES_Table_Size]

as

Declare @tb_name varchar(50)

Declare @tb_list table

(

tb_name varchar(50)

)


declare @tb_size table

(

name  varchar(50),

rows  varchar(50),

Reserved varchar(50),

Data  varchar(50),

Index_Size varchar(50),

Unused  varchar(50)

)


declare cur_tb_list cursor for

select name

from dbo.sysobjects

where objectproperty(id, N'istable') = 1

and name not like N'#%%'

order by name



open cur_tb_list

fetch Next from cur_tb_list

into @tb_name


while @@fetch_status=0

  begin

if exists (select * from dbo.sysobjects

where id = object_id(@tb_name)

and objectproperty(id, N'isusertable')=1)


insert into @tb_size exec Srv_MES.InsiteProdDG.dbo.sp_spaceused @tb_name


fetch Next from cur_tb_list

into @tb_name

end



insert into TB_DBA_Database_Table_Size

select convert(varchar(20),getdate(),120) as date_time,*

from @tb_size


close cur_tb_list

deallocate cur_tb_list





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296380-1-1.html 上篇帖子: SQL收集 下篇帖子: SQL Server 2005为数据库设置用户名和密码的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表