我的编程空间,编程开发者的网络收藏夹
学习永远不晚

YourSQLDba低版本的一个Bug的浅析

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

YourSQLDba低版本的一个Bug的浅析

YourSQLDba低版本的一个Bug的浅析

帮人分析解决一个YourSQLDba备份报错问题,个人觉得有点意思,顺手记录一下分析思路,大体解决思路如下:

 

首先,找到YourSQLDba作业YourSQLDba_FullBackups_And_Maintenance的报错邮件或者作业的错误日志信息,检查YourSQLDba出错的详细信息。

 

YOURSQLDBA.MAINT.ShowHistoryErrors 96

 

发现YourSQLDba在更新统计信息是遇到错误,如下所示

 

  yMaint.UpdateStats
  update statistics selected
  update statistics [model].[dbo].[ServiceBrokerQueue] WITH sample 100 PERCENT
  Error 2706, Severity 16, level 6 : Table "ServiceBrokerQueue" does not exist.

 

 

检查发现这个对象是queue,根本不是表,所以更新统计信息会出错。

 

clip_image001

 

那么YourSQLDba怎么会更新queue对象的统计信息呢?我首先检查了一下YourSQLDba的版本信息。当前数据库服务器上的YourSQLDba是相当老的一个版本了。然后我就去检查YourSQLDba的代码

 

 

Exec YourSQLDba.Install.PrintVersionInfo
 
========================================
 
YourSQLDba version: 5.0.2 2012-06-12

 

YourSQLDba更新统计信息是通过[yMaint].[UpdateStats]来更新统计,于是检查代码,发现获取要更新统计信息的对象是通过下面脚本获取的。首先将要更新统计信息的对象放到临时表#TableNames中去,然后生成更新统计信息的脚本。

 

-- makes query boilerplate with replacable parameter identified by
-- labels between "<" et ">"
-- this query select table for which to perform update statistics
truncate table #TableNames
set @sql =
"
 set nocount on
 ;With
   TableSizeStats as
 (
 select 
   object_schema_name(Ps.object_id, db_id("")) as scn --collate 
 , object_name(Ps.object_id, db_id("")) as tb --collate 
 , Sum(Ps.Page_count) as Pg
From
  sys.dm_db_index_physical_stats (db_id(""), NULL, NULL, NULL, "LIMITED") Ps
Group by 
  Ps.object_id  
)
Insert into #tableNames (scn, tb, seq, sampling)
Select 
  scn
, tb
, row_number() over (order by scn, tb) as seq
, Case 
    When pg > 200001 Then "10"
    When Pg between 50001 and 200000 Then "20"
    When Pg between 5001 and 50000 Then "30"
    else "100"
  End  
From 
  TableSizeStats
where (abs(checksum(tb)) % ) = 

 

这个脚本会将queue类型的对象也放入临时表,所以明显是个Bug,不过YourSQLDba后续的版本已经Fix掉这个Bug了。如下所示,后续的版本就加上条件过滤了,只获取表和视图的数据。所以遇到这个问题,只需要升级YourSQLDba的版本就好了

 

 

   

-- makes query boilerplate with replacable parameter identified by
-- labels between "<" et ">"
-- this query select table for which to perform update statistics
truncate table #TableNames
set @sql =
"
 Use []
 set nocount on
 ;With
   TableSizeStats as
 (
 select 
   object_schema_name(Ps.object_id) as scn --collate 
 , object_name(Ps.object_id) as tb --collate 
 , Sum(Ps.Page_count) as Pg
From
  sys.dm_db_index_physical_stats (db_id(""), NULL, NULL, NULL, "LIMITED") Ps
Where (   OBJECTPROPERTYEX ( Ps.object_id , "IsTable" ) = 1
       Or OBJECTPROPERTYEX ( Ps.object_id , "IsView" ) = 1)
Group by 
  Ps.object_id  
)
Insert into #tableNames (scn, tb, seq, sampling)
Select 
  scn
, tb
, row_number() over (order by scn, tb) as seq
, Case 
    When Pg > 5000001 Then "0"
    When Pg between 1000001 and 5000000 Then "1"
    When Pg between 500001 and 1000000 Then "5"
    When pg between 200001 and 500000 Then "10"
    When Pg between 50001 and 200000 Then "20"
    When Pg between 5001 and 50000 Then "30"
    else "100"
  End  
From 
  TableSizeStats
where scn is not null and tb is not null and (abs(checksum(tb)) % ) = 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

YourSQLDba低版本的一个Bug的浅析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

YourSQLDba低版本的一个Bug的浅析

帮人分析解决一个YourSQLDba备份报错问题,个人觉得有点意思,顺手记录一下分析思路,大体解决思路如下:   首先,找到YourSQLDba作业YourSQLDba_FullBackups_And_Maintenance的报错邮件或者作业的错误日志信息,检
YourSQLDba低版本的一个Bug的浅析
2019-06-19

shell脚本中case条件控制语句的一个bug分析

在shell脚本中,发现case语句的一个问题。就是指定小写字母[a-z]和大写字母[A-Z]的这种方法不管用了。 出现如下情况:[root@station1 ~]# cat case.sh#!/bin/bashwhile :doecho
2022-06-04

Win7低端版本的三程序限制个人看法

如果你曾经看到过有关Windows 7 Starter版本的消息,你的第一反应可能和我一样:微软傻了?这个超低价的版本http://www.cppcns.com是为netbook而准备的,但是他的最大阻碍可能就是:最多只能同时运行3种程序。
2023-06-01

浅析python中SQLAlchemy排序的一个坑

前言 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。最近在使用SQLAlchemy排序
2022-06-04

如何低成本的获得一个到期域名

如何低成本的获得一个到期域名?在互联网时代,拥有一个具有吸引力和易于记忆的域名对于个人网站、商业网站或是在线品牌来说至关重要。掌握一些低成本获取到期域名的方法,您有机会找到令人满意的域名同时节省成本。本文将介绍一些简单而有效的策略,帮助您低成本获得一个到期域名。
如何低成本的获得一个到期域名
2024-01-23

记录并分析分析一个yarn存在6年之久的bug

最近遇到一个yarn的bug,搜索之后发现它竟然存在6年之久,这到底是个怎样神奇的问题?经过一番分析排查,我给了6个解决方案。。。
2022-11-22

gitlab如何看一个文件的历史版本

随着云计算和DevOps的发展,Git已经成为了软件版本控制的事实标准。而在Git的使用中,GitLab无疑是较为出色的Git管理平台之一。作为一个优秀的Git托管服务,GitLab为我们开发者提供了很多便捷的操作方式,而其中之一就是查看文
2023-10-22

如何支持同一接口的多个版本?

问题内容我正在编写一个 go 模块,它实现一个满足接口的结构。我们只想维护库的单个版本,但我们的客户使用我们的依赖项之一的多个版本。依赖项提供了我们想要实现的接口,如下所示。type supercoolinterface interf
如何支持同一接口的多个版本?
2024-02-06

浅析用Node创建一个简单的HTTP服务器

怎么使用NodeJS创建HTTP服务器?下面本篇文章给大家介绍一下使用Node创建一个简单的HTTP服务器的方法,希望对大家有所帮助!
2023-05-14

通过一个命令轻松切换Java的版本

前言在日常开发中,有时候我们需要切换jdk版本,去编译一些指定jdk的东西. 比如今天我需要编译Android6.0源码,那我得把jdk切换到openjdk-1.7, 要知道, 我还要用1.6的jdk编译安卓4.4.4源码的.那么问题来了,
2023-05-31

什么是微软Windows的未来:一个内核,多个版本

据国外ZDNet网站评论,近期关于微软未来将取消三个不同平台的Windows系统的评论引起了轩然大波,但这个猜想是错误的,而微软Windows的未来是一个内核,多个版本。 不久前,微软执行副总裁Julie Larson-Green参加UBS
2023-06-02

java中多个JDK和切换版本的示例分析

这篇文章跟大家分析一下“java中多个JDK和切换版本的示例分析”。内容详细易懂,对“java中多个JDK和切换版本的示例分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“jav
2023-06-28

编程热搜

目录