低版本sqlserver客户端连接高版本数据库_低版本sqlserver附加高版本数据库

低版本sqlserver客户端连接高版本数据库_低版本sqlserver附加高版本数据库帮人分析解决一个YourSQLDba备份报错问题,个人觉得有点意思,顺手记录一下分析思路,大体解决思路如下: 首先,找到YourSQLDba作业YourSQLDba_FullBackups_And_M

YourSQLDba低版本的一个Bug的浅析

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

 

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

 

YOURSQLDBA.MAINT.ShowHistoryErrors 96

 

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

 

<Exec>

代码100分

代码100分  <ctx>yMaint.UpdateStats</ctx>

  <inf>update statistics selected</inf>

代码100分  <cmd>update statistics [model].[dbo].[ServiceBrokerQueue] WITH sample 100 PERCENT</cmd>

  <err>Error 2706, Severity 16, level 6 : Table "ServiceBrokerQueue" does not exist.</err>

</Exec>

 

 

检查发现这个对象是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("<DbName>")) as scn --collate <srvCol>

 , object_name(Ps.object_id, db_id("<DbName>")) as tb --collate <srvCol>

 , Sum(Ps.Page_count) as Pg

From

  sys.dm_db_index_physical_stats (db_id("<DbName>"), 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)) % <SpreadUpdStatRun>) = <seqStatNow>

 

这个脚本会将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 [<DbName>]

 set nocount on

 ;With

   TableSizeStats as

 (

 select 

   object_schema_name(Ps.object_id) as scn --collate <srvCol>

 , object_name(Ps.object_id) as tb --collate <srvCol>

 , Sum(Ps.Page_count) as Pg

From

  sys.dm_db_index_physical_stats (db_id("<DbName>"), 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)) % <SpreadUpdStatRun>) = <seqStatNow>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8567.html

(0)
上一篇 2023-02-26
下一篇 2023-02-26

相关推荐

  • Python数据爬虫实战

    Python数据爬虫实战在当今社交网络和互联网极度发达的时代,无论是企业还是个人都需要从海量数据中获取关键信息来指导决策。但是获取这些关键信息的过程通常需要大量的人力和时间成本,因此数据爬虫技术在这个时代显得尤为重要。Python作为一种流行的程序语言具有着领先的数据爬取与处理功能,在企业和个人应用中得到了很广泛的应用。

    2024-07-23
    28
  • mysql逗号分隔字符串成多行数据[通俗易懂]

    mysql逗号分隔字符串成多行数据[通俗易懂]SELECT 其他字段, SUBSTRING_INDEX( SUBSTRING_INDEX( a.'逗号分隔字段', ',', b.help_topic_id…

    2023-04-04
    137
  • Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)[亲测有效]

    Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)[亲测有效]一.Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 本次测试使用数据库实例SqlServer2008r2版 错误详细: 标题: Microsoft SQL Server

    2023-05-28
    145
  • 如何安装Pygame

    如何安装PygamePygame是Python的一个游戏开发库,可以帮助Python工程师很好地掌握游戏开发的技巧。在本文中,我们将介绍如何安装Pygame。

    2024-06-20
    41
  • mysql添加索引sql语句_如何添加索引

    mysql添加索引sql语句_如何添加索引数据量过大时,直接执行加索引操作就会锁表,过大的表可能会达到数小时甚至导致服务崩溃.显然直接ALER表是不可取的

    2023-04-14
    137
  • Python实现按钮制作功能

    Python实现按钮制作功能按钮是一种常见的交互元素,可以在图形用户界面(GUI)中使用。在 Python 中,我们可以使用多种库来创建不同类型的按钮。本文将介绍一些常见的 Python 按钮制作库,并为您提供每种库的代码示例。让我们一起来看看吧!

    2024-03-21
    70
  • Python中常用转义字符

    Python中常用转义字符在Python中,有一些字符在字符串中具有特殊的含义,如果要在字符串中原样输出这些特殊字符,就需要使用转义字符来帮助实现。本文将介绍Python中常用的转义字符及其用法,帮助读者更好地处理字符串。

    2024-05-06
    64
  • 给腾讯云数据库产品经理的几点小建议

    给腾讯云数据库产品经理的几点小建议本文作者:叶金荣,知数堂联合创始人,3306pai社区联合创始人 说说使用腾讯云数据库MySQL和CynosDB的几点感受。 近日对腾讯云旗下的两款数据库产品云数据库 MySQL(下面称为“标准版M…

    2023-02-01
    149

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注