小编RBa*_*ung的帖子

SSMS 工具包替代品

是否有任何工具可与SSMS Tools Pack 2012相媲美?许可(每台机器 30 美元,任意数量的机器 100 美元……3 个月)还有很多不足之处,我不确定还有哪些其他选项可用。

例如,我真正怀念的一件事是“保存您运行的每个查询”。在修修补补和研究时,在运行不同版本的查询时进行备份是非常宝贵的。或者当我意识到我没有 2 个月前正在处理的查询的备份时。

说明:SQL Server Management Studio 没有官方插件支持,但有一些工具。SSMS Tools Pack 是我非常喜欢的一个(2005、2008 版本),但是 2012 年的许可费太可怕了。(我会为合理的许可证付费,但这不是这里的问题。)

例如,我发现SSMS BoostSSMS有一些很酷的补充,这似乎是值得的。

SQL Server 2012 还有哪些其他插件可用?我希望有一些东西可以在我点击 F5 时像 SSMS 工具包那样保存查询,或者除了列出的两个工具之外的任何东西?

sql-server ssms sql-server-2012

19
推荐指数
2
解决办法
2万
查看次数

DISTINCT 不将两个相等的值减为一

谁能解释下面的情况,其中两个看似相等的值没有减少DISTINCT

显示“SBS_UCS_DISPATCH”的两个值的屏幕截图

上面的查询是SELECT DISTINCT name FROM master.sys.dm_os_spinlock_stats where name = 'SBS_UCS_DISPATCH';

等效方法SELECT name FROM master.sys.dm_os_spinlock_stats where name = 'SBS_UCS_DISPATCH' GROUP BY name;也执行相同的操作,并且添加HAVING COUNT(1) > 1不会产生行。

@@VERSIONMicrosoft SQL Server 2019 (RTM-CU13) (KB5005679) - 15.0.4178.1 (X64) 2021 年 9 月 23 日 16:47:49 版权所有 (C) 2019 Microsoft Corporation 企业版:Windows Server 上基于核心的许可(64 位) 2016 标准 10.0(内部版本 14393:)

sql-server system-tables distinct

18
推荐指数
1
解决办法
1168
查看次数

如何获得像 SSMS 这样的单个行计数?

我有一个客户端 c# 程序,它通过 执行存储过程ExectueNonQuery,包括PRINT使用 InfoMessage 事件捕获和错误输出。它工作正常,但我注意到一些奇怪的事情。

当我从 SSMS 执行存储过程时,它会显示在“消息”选项卡中执行的每个单独 SQL 语句的行数(就好像它来自 InfoMessages)。然而,我的程序从未看到这些消息,尽管它确实捕获了所有相同的其他输出。相反,它只返回 ExecuteNonQuery 函数结果中受影响的行,即所有单个行计数的总和(这是一种无用的)。

例如,这个过程:

use [tempdb]
go

SELECT  * 
INTO    MyCols
FROM    sys.columns
go

CREATE PROC foo As

    UPDATE  MyCols
    SET     name = name + N''
-- SSMS shows (662 row(s) affected)

    UPDATE  MyCols
    SET     name = name + N''
    WHERE   name like '%x%'
-- SSMS shows (59 row(s) affected)

PRINT 'bar'
-- both SSMS and ExecuteNonQuery get this

-- ExecuteNonQuery returns 721 rows affected …
Run Code Online (Sandbox Code Playgroud)

sql-server ado.net sql-server-2008-r2

9
推荐指数
1
解决办法
699
查看次数

跟踪标志 1222 不工作?

我有一个客户站点,其中包含两个类似配置的 2008r2 SQL Server“A”和“C”。在两台服务器上都启用了跟踪标志 1204 和 1222,并DBCC tracestatus在两台服务器上显示以下内容:

TraceFlag   Status  Global  Session
1204        1       1      0
1222        1       1      0
3605        1       1      0
Run Code Online (Sandbox Code Playgroud)

在 A 上,跟踪标志按预期工作,当发生死锁时,我们会在错误日志中获得 1204 和 1222 死锁报告。但是,在 C 上,仅显示 1204 报告,我们从未得到 1222 报告。

对于我的生活,我看不出这种差异的任何原因。我已经广泛地搜索了这个,并阅读(并重新阅读)了关于这些跟踪标志的 MS 文档,我找不到任何关于此类行为的报告,也没有任何关于可能导致它的原因的提示。唯一接近的是偶尔声称这两个跟踪标志都不起作用,但这些都被证明是在启用命令中有拼写错误的情况。我知道这里不是这种情况,因为我已经使用 DBCC TRACESTATUS 进行了确认。

因此,对于可能导致跟踪标志 1222 不起作用和/或如何修复它的任何见解,将不胜感激。


嗯,这是一个有趣的发展。每当我自己生成死锁时(使用此代码:https : //stackoverflow.com/questions/7813321/how-to-deliberately-cause-a-deadlock),我都会在错误日志中得到两个跟踪报告。似乎只是触发死锁报告之一的应用程序每隔几天就会发生一次“自然”死锁。不确定这是否有帮助,是否有任何理由相信跟踪 1222 不会报告与 1204 相同的所有死锁情况?

sql-server deadlock dbcc sql-server-2008-r2 error-log

8
推荐指数
1
解决办法
1327
查看次数

ANALYZE TABLE..VALIDATE STRUCTURE 永远运行

因此,正如我之前提到的,我是一名 SQL Server DBA/顾问,正在帮助客户使用他们的 Oracle 数据库。大多数情况下,我已经能够在文档和谷歌的帮助下弄清楚我需要做什么并解决问题,但我目前正在尝试处理一些似乎难以理解的事情。

其中一个数据库是 Oracle 10g LIMS 数据库,它已经存在(并升级)了至少 10 年(可能是 20 年)。这是一个关键的应用程序,但在过去的几年里,他们遇到了许多可靠性问题。为了尝试了解它的真正问题所在以及我们可能能够对此做些什么,我们让托管/MS 提供商在另一台(相同)服务器上制作了它的物理副本。(我很确定提供商将其解释为“RMAN 备份和还原”)。

我的想法是,我可以进行任何分析、调查、修复尝试,并使用我想要的任何工具,而不会影响生产。到现在为止还挺好。我dbv对所有数据文件运行了 DBVerify ( ),没有问题。

然后我ANALYZE TABLE .. VALIDATE STRUCTURE CASCADE ONLINE;在数据库中的每个表上运行。对于其中两个表,该命令比其他 2500 个表(组合)花费的时间长得多,所以我取消了它们并让其他表完成,他们没有问题也没有报告错误等。

事实证明,这两个表也是最大的应用程序数据表。然后我从最大的表(23GB,36M 行)开始,并决定按部分(没有 CASCADE)分析它,首先是表本身,然后是索引。在30-60分钟内完成表(我不记得确切),但ANALYZE INDEX .. VALIDATE STRUCTURE ONLINE;对于第一指标无法完成。

我决定让它运行一段时间,看看我是否能找到一种方法来监控它的进展。谷歌搜索这个我发现很多(旧)声称可以监控分析表,v$session_longops但查看它从未显示我的命令中的任何内容,我得出的结论是这必须仅适用于统计信息收集功能,而不是验证功能。在尝试了很多事情之后,我最终发现通过查看v$session执行命令的行,我可以使用 P1* 和 P2* 列来跟踪正在读取的文件和块。

这表明它确实在从预期的数据文件中读取数据,并从中读取不同的块。这一点以及命令运行时服务器上的磁盘利用率为 100% 的事实(没有其他任何东西)使我确信它确实在做某事并且没有被阻止/锁定/挂起。所以我只是让它运行。

现在已经超过 3 天(+72 小时),它没有显示完成的迹象,我在这里有点不知所措。

附加信息:

表的 DDL:

-- Unable to render TABLE DDL for object O$LIMS.N__RESULTS with DBMS_METADATA attempting internal generator.
CREATE …
Run Code Online (Sandbox Code Playgroud)

performance oracle oracle-10g corruption

7
推荐指数
1
解决办法
3391
查看次数

外连接抑制索引使用?

我有一个客户端程序正在对一个视图执行查询,该视图外部将一个表连接到另一个表。性能很差,我一直在尝试通过添加正确的索引来调整它。有问题的查询实际上只使用了第二个表,所以我一直在直接针对该表进行测试。

我发现(几个)索引可以很好地用于对表的查询,但是当我将其切换为使用视图时,它们停止使用任何索引,而是对两个表进行全面扫描。由于这些表很大(每个表 2-3 百万行),因此速度非常慢。

为了简单测试,我更改了查询以绕过 并将外连接合并到查询本身中。这成功地重现了问题,但留下了为什么外连接不使用索引的谜团。

这是表格,其中包含我在测试时添加的所有索引:

  CREATE TABLE TEST_DATA 
   (ID NUMBER(11,0)  PRIMARY KEY, 
    FORMATTED_RESULT VARCHAR2(255 BYTE), 
    F_RESULT NUMBER, 
    IDNUM NUMBER(11,0), 
    IDNUM_DESCRIPTION VARCHAR2(128 BYTE), 
    LAB_NUMBER NUMBER(11,0), 
    SEQ_NUMBER NUMBER(11,0),
    ORDERNO NUMBER(11,0),
    SUPPL_FORMATTED_RESULT VARCHAR2(255 BYTE), 
    SUPPL_IDNUM NUMBER(11,0), 
    SUPPL_IDNUM_DESCRIPTION VARCHAR2(128 BYTE), 
    SUPPL_UNIT VARCHAR2(16 BYTE)
   ) ;

  CREATE UNIQUE INDEX TEST_LN_SQN_ORDER ON TEST_DATA (LAB_NUMBER, SEQ_NUMBER, ORDERNO) ;
  CREATE INDEX TEST_LN_SQN ON TEST_DATA (LAB_NUMBER, SEQ_NUMBER) ;
  CREATE INDEX TD_CUIDD_CUFR ON TEST_DATA (UPPER(COALESCE(SUPPL_IDNUM_DESCRIPTION,IDNUM_DESCRIPTION)), UPPER(COALESCE(SUPPL_FORMATTED_RESULT,FORMATTED_RESULT))) ;
  CREATE INDEX TD_UFR_IDN ON TEST_DATA (UPPER(FORMATTED_RESULT), IDNUM) ;
  CREATE INDEX TD_UIDD_UFR …
Run Code Online (Sandbox Code Playgroud)

performance oracle index-tuning oracle-12c query-performance

7
推荐指数
1
解决办法
6008
查看次数

恢复失败,操作系统错误 32,文件正被另一个进程使用

我正在为客户编写一组(部分)自动化数据库部署的过程,大多数情况下工作正常,但有时 RESTORE 命令会失败,并出现操作系统错误 32,即文件正在被另一个进程使用(详细信息如下)。

我在谷歌上进行了广泛的搜索,但发现很少适用于我的具体情况。我怀疑我忽略了某些东西,但我似乎找不到它。

这是命令:

RESTORE DATABASE [NBBC_Logistics] FROM DISK = '\\wpdboardq01\Shares\DbCopy\DevBackups\NBBC_Logistics_140916112310.bak' 
    WITH FILE=1, NOUNLOAD, STATS=10,
     MOVE 'NBBC_Logistics' TO 'D:\MSSQL2K12\MSSQL11.MSSQLSERVER\MSSQL\DATA\NBBC_Logistics.mdf',
     MOVE 'NBBC_Logistics_log' TO 'D:\MSSQL2K12\MSSQL11.MSSQLSERVER\MSSQL\DATA\NBBC_Logistics_log.ldf',
     REPLACE 
    ;
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误消息:

Msg 3634, Level 16, State 1, Line 11
The operating system returned the error '32(The process cannot access the file because it is being used by another process.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'D:\MSSQL2K12\MSSQL11.DEV\MSSQL\DATA\NBBC_Logistics_log.ldf'.
Msg 3156, Level 16, State 8, Line 11
File 'NBCC_Logistics_Model2_log' cannot be restored to 'D:\MSSQL2K12\MSSQL11.DEV\MSSQL\DATA\NBBC_Logistics_log.ldf'. Use WITH MOVE to …
Run Code Online (Sandbox Code Playgroud)

sql-server restore sql-server-2012

5
推荐指数
1
解决办法
3万
查看次数

如何从程序中找到 Oracle 的安装版本和发行版?

我需要从程序中确定在服务器上的每个 Oracle 主目录中安装了哪个版本的 Oracle。由于可能尚未在 Home 中创建任何数据库,因此我需要能够在数据库之外执行此操作(即,无需连接到数据库)。此外,能够从远程程序执行此操作将是非常可取的。

这是来自运行 .Net(C#,如果重要的话)的 Windows 程序。

我目前正在读取远程注册表项(使用此技术:https : //stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys),以根据此方法查找所有 Oracle 主目录。这工作正常,但是,我环顾了这些键,并没有看到有关确切版本/发行版的任何信息。

Oracle Home 本身的名称当然是 1) 不是一个可靠的指标,并且 2) 没有确切的版本/发行版(例如“10.2.0.4.0”)。基本上,我正在寻找一种方法来找出 Oracle Universal Installer 在 Installed Products 按钮中告诉您的内容。


我应该澄清一下,所有服务器都将运行 Windows 2003-2008。

oracle automation

4
推荐指数
1
解决办法
1万
查看次数

在小的停机时间窗口中修复损坏的日志文件

我正在与一位客户合作,该客户从其 SharePoint 数据库之一的日志备份中收到以下错误:

Backup detected log corruption in database FOOPORTAL_SP2010_Config. Context is FirstSector. 
  LogFile: 2 'D:\MSSQL2K8\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\FOOPORTAL_SP2010_Config_log.LDF' 
  VLF SeqNo: x864 VLFBase: x172d0000 LogBlockOffset: x176b1800 
  SectorStatus: 2 LogBlock.StartLsn.SeqNo: x771 LogBlock.StartLsn.Blk: x1f0c 
  Size: x400 PrevSize: x200
Run Code Online (Sandbox Code Playgroud)

我知道这表明磁盘硬件和/或 IO 子系统存在问题,我们一直在与托管提供商合作。具体来说,这似乎是 /a 磁盘上的一个“坏点”,因为该数据库的日志文件一直报告它,但过去几周其他 6 个数据库日志备份没有报告其他错误,也不适用于 20 多个其他数据库的完整数据备份中的任何一个。

我的直接问题是客户端已经以这种方式运行了几个星期,因为这是一项强制要求的 24x7 服务,他们一直无法给我一个停机服务窗口来解决这个问题,直到今晚(突然)2 小时. 不幸的是,数据库损坏和这种管理工作不是我在 SQL Server 中的专长,我不确定最好/最安全/最可靠的方法是什么。

我现在的初步计划是:

  1. 停机窗口一开始就对数据库进行完整备份(完整备份一直在工作,没有错误)
  2. 分离旧数据库
  3. 删除空间的数据文件
  4. 重命名日志文件(仍然保留它)
  5. 从步骤 1 的新备份中恢复数据库的新副本。

我对此的担忧/焦虑是:

  • 这应该工作吗?或者是更安全/更可靠的方法?
  • 我只有 2 小时,那么有没有更省时的方法?

欢迎任何其他建议。

sql-server sql-server-2008-r2 corruption

2
推荐指数
1
解决办法
1万
查看次数