小编Han*_*non的帖子

编写维护计划脚本

我使用 SQL Server Management Studio (SSMS) 为我的 SQL Server 2008 R2 创建了维护计划。

但是,我无法将其导出/转换为脚本,以防我需要在另一台服务器上重做。

有办法吗?

如果没有,是否有更新版本的 SQL Server 的方法?

sql-server sql-server-2008-r2 maintenance-plans

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

对全局临时表的逻辑读取,但不在会话级临时表上

考虑以下简单的 MCVE:

SET STATISTICS IO, TIME OFF;
USE tempdb;

IF OBJECT_ID(N'tempdb..#t1', N'U') IS NOT NULL DROP TABLE #t1;
CREATE TABLE #t1
(
    r int NOT NULL
);

IF OBJECT_ID(N'tempdb..##t1', N'U') IS NOT NULL DROP TABLE ##t1;
CREATE TABLE ##t1
(
    r int NOT NULL
);

IF OBJECT_ID(N'dbo.s1', N'U') IS NOT NULL DROP TABLE dbo.s1;
CREATE TABLE dbo.s1 
(
    r int NOT NULL
        PRIMARY KEY CLUSTERED
);

INSERT INTO dbo.s1 (r)
SELECT TOP(10000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM sys.syscolumns …
Run Code Online (Sandbox Code Playgroud)

sql-server temporary-tables sql-server-2016

12
推荐指数
1
解决办法
576
查看次数

非产出 IOCP 监听器

有谁知道“Non-yielding IOCP Listener”是什么意思?

我们的 SQL Server 上有一个错误检查转储:

=====================================================================                                            
       BugCheck Dump                                                                                             
=====================================================================                                            

This file is generated by Microsoft SQL Server                                                                   
version 9.00.5292.00                                                                                             
upon detection of fatal unexpected error. Please return this file,                                               
the query or program that produced the bugcheck, the database and                                                
the error log, and any other pertinent information with a Service Request.                                       


Computer type is AT/AT COMPATIBLE.                                                                               
Bios Version is DELL   - 1                                                                                       
Phoenix ROM BIOS PLUS Version 1.10 1.5.2                                                                         
Current time is 23:01:04 09/07/12.                                                                               
48 Unknown CPU …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server

11
推荐指数
1
解决办法
4165
查看次数

如何检查 SQL Server 终结点的安全设置?

我正在为我们的 SQL Server 开发人员创建一个测试环境。

在生产中,我们有 3 个 SQL Server,SQL01包含多个镜像到SQL02. SQL03在“具有自动故障转移的高安全性”或同步配置中充当见证人。

我已经使用 VMWare P2V 将所有三台机器虚拟化到单独的硬件上,重新配置机器的 SID,并从这些新机器上获取我们生产服务器的 IP 地址。

我一开始忘记了生产见证机器的黑洞,所以测试机器上的数据库仍然使用SQL03机器作为见证。注意到这个问题,我决定重新配置 TEST 上的数据库以指向新虚拟化的 TEST 见证,称之为TEST03.

为了重新配置数据库以使用新的见证,我在主服务器上输入了以下命令TEST01

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';
Run Code Online (Sandbox Code Playgroud)

反应出乎意料:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.
Run Code Online (Sandbox Code Playgroud)

我对这个错误消息感到非常困惑,因为配置在生产机器上确实有效,并且在测试机器上没有以任何方式进行修改。

为了让它工作,我需要LOGIN在测试见证上创建一个:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server mirroring

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

操作系统返回错误665(由于文件系统限制,请求的操作无法完成)

有一个在 Windows 2012 R2 上运行的 SQL Server 2014 实例,每周运行 Ola Hallengren 的数据库完整性脚本,最近两周开始出现此错误:

DESCRIPTION:    The operating system returned error 665(The requested operation could 
not be completed due to a file system limitation) to SQL Server during a write at 
offset 0x000036ec240000 in file 'E:\DBFiles\XXXXX.mdf_MSSQL_DBCC42'. Additional 
messages in the SQL Server error log and system event log may provide more detail. This 
is a severe system-level error condition that threatens database integrity and must be 
corrected immediately. Complete a full database consistency …
Run Code Online (Sandbox Code Playgroud)

sql-server dbcc-checkdb sql-server-2014

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

sys.dm_exec_sessions 中的“读取”列实际上表示什么?

这似乎是一个非常基本的问题,而且确实应该如此。然而,作为科学方法的粉丝,我喜欢创建一个假设,然后测试它是否正确。在这种情况下,我试图更好地理解 的输出sys.dm_exec_sessions,更具体地说,是单列“读取”。

SQL Server 联机丛书相当干巴巴地将其指定为:

在此会话期间,由此会话中的请求执行的读取数。不可为空。

人们可能会认为这将表示自会话开始以来为满足此会话发出的请求而从磁盘读取的页数。这是我想我要检验的假设。

logical_reads同一个表中的列定义为:

已对会话执行的逻辑读取数。不可为空。

根据使用 SQL Server 的经验,我相信该列反映了从磁盘内存中读取的页数。换句话说,页面的总数曾经由会话,无论这些页面驻留阅读。具有提供类似信息的两个单独列的区别或价值主张似乎是可以理解从磁盘读取的页面 ( reads) 与从缓冲区缓存 ( logical_reads)读取的特定会话的页面的比率。

在我的测试设备上,我创建了一个新数据库,创建了一个包含已知数据页数的单个表,然后在新会话中读取该表。然后我sys.dm_exec_sessions查看了readslogical_reads专栏对会议的看法。在这一点上,我对结果感到困惑。也许这里有人可以为我解释一下。

试验台:

USE master;
IF EXISTS (SELECT 1
    FROM sys.databases d 
    WHERE d.name = 'TestReads')
BEGIN
    ALTER DATABASE TestReads SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE TestReads;
END
GO
CREATE DATABASE TestReads;
GO
ALTER DATABASE TestReads SET RECOVERY SIMPLE;
BACKUP DATABASE …
Run Code Online (Sandbox Code Playgroud)

sql-server dmv sql-server-2012

11
推荐指数
1
解决办法
1239
查看次数

如何导出 sp_AskBrent 的输出?

我们有一个实例会随机尖峰 CPU。我想创建一个在 CPU 上触发超过 90% 的警报,并自动调用一个正在运行的作业sp_AskBrent并将输出通过电子邮件发送给我。但是,文本或 HTML 输出中的输出不可读。它甚至不适合 Excel 电子表格。如何以可读格式获取信息?

sql-server database-mail format sp-askbrent

11
推荐指数
1
解决办法
451
查看次数

从 GUI 客户端连接到本地 MS SQL Server

我对 SQL 和数据库服务器很陌生。我最近一直在使用 SQL Server Express 并在 Windows 上使用 SQL Server Management Studio 访问我的数据库。我现在正在尝试在 Linux 机器上实现类似的设置。

我想在机器上创建一个本地 SQL Server 实例,然后使用SQLectron作为 GUI 客户端来查询我的数据库。我使用的是 Manjaro Linux,所以从 AUR 安装我的软件包。

到目前为止,我已经安装了mssql-server,mssql-toolssqlectron-gui. 我已运行该sudo /opt/mssql/bin/mssql-conf setup命令以(我相信)设置本地服务器。执行此操作后,运行该命令会systemctl status mssql-server返回:

[kev@XPS-Manjaro ~]$ systemctl status mssql-server
? mssql-server.service - Microsoft SQL Server 数据库引擎
已加载:已加载(/usr/lib/systemd/system/mssql-server.service;已启用;供应商预设:已禁用)
Active:自 2017-08-23 周三 13:43:49 IST 开始活跃(运行);2 小时 42 分钟前
    文档:https://docs.microsoft.com/en-us/sql/linux
主 PID: 9130 (sqlservr)
    任务:165
CGroup:/system.slice/mssql-server.service
        ??9130 /opt/mssql/bin/sqlservr
        ??9144 /opt/mssql/bin/sqlservr

8 月 23 …

sql-server linux connectivity

11
推荐指数
1
解决办法
2867
查看次数

列出特定表的 ROW_OVERFLOW_DATA 页

我正在尝试获取具有 ROW_OVERFLOW_DATA 行的表的页面列表。我可以从未记录的 DMV 获取已分配页面的列表sys.db_db_database_page_allocations,但是,该 DMV 的输出中似乎没有列出 ROW_OVERFLOW_DATA 页面。是否还有其他一些我根本找不到的 DMV?

最小、完整且(希望如此!)可验证的示例:

USE tempdb;

IF OBJECT_ID(N'dbo.t', N'U') IS NOT NULL
DROP TABLE dbo.t;
GO

CREATE TABLE dbo.t
(
    rownum int NOT NULL IDENTITY(1,1)
        PRIMARY KEY CLUSTERED
    , on_row_data varchar(30) NOT NULL
        DEFAULT ('on_row_data')
    , off_row_data varchar(MAX) NOT NULL
        DEFAULT REPLICATE('A', 20000) --PLENTY BIG ENOUGH!
) WITH (DATA_COMPRESSION = NONE); --not compressing those pages!

INSERT INTO dbo.t DEFAULT VALUES;

DECLARE @ObjectID int = (SELECT o.object_id FROM sys.objects o WHERE o.name …
Run Code Online (Sandbox Code Playgroud)

sql-server database-internals

11
推荐指数
1
解决办法
239
查看次数

Dodgy T-SQL 查询执行让我发疯

执行计划SQL Server 2019。这是 xml 计划要点的链接。

您好,我花了很长时间才明白为什么当它找不到包含其中一种状态的记录时,为什么这个查询需要 0.02 秒才能执行。当它找到具有包含状态之一的记录时,它往往要快得多。我猜这是因为一旦找到匹配的 1 行,查询就会停止。

SELECT TOP 1 IDNum,
             FORMAT(Date, 'M/d/yy') AS theDate,
             Status,
             Rate
FROM   theDB
       INNER JOIN DomainTable
               ON theDB.IDNum = DomainTable.IDNum
WHERE  DomainIP = '127.0.0.1'
       AND status IN ( 'Active', 'To ReActivate', 'To Deactivate', 'Deactivate ASAP',
                       'SUSPENDED', 'SUSPENDED X', 'SUSPENDED Y', 'SUSPENDED Z' )
ORDER  BY theDB.IDNum DESC 
Run Code Online (Sandbox Code Playgroud)

(DomainIP属于DomainTable,其他属于DB)

在执行计划中,最大的成本是 TOP N SORT,占 33% 聚集索引搜索占 29% 对 DomainTable 的键查找使用了 29% 在 DomainTable 上搜索 IP 的索引是 9%

我的问题是:

有没有办法让TOP N不那么重?

0.02 …

sql-server t-sql sql-server-2019

11
推荐指数
2
解决办法
3352
查看次数