标签: sql-server

我应该将 SET NOCOUNT ON 添加到我的所有触发器中吗?

这是你应该拥有的相当普遍的知识

SET NOCOUNT ON   
Run Code Online (Sandbox Code Playgroud)

默认在创建新存储过程时。

Microsoft 已在 2012 年更改了默认模板以包含此内容。我认为这对于触发器应该是相同的,但它并未包含在模板中。

这是故意的还是只是疏忽?

trigger sql-server t-sql

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

从客户端检查到 SQL Server 的连接的简单方法

出于故障排除目的,我希望能够检查客户端是否可以连接到 SQL Server 实例,而与可能无法连接到 SQL Server 的应用程序无关。

有没有一种简单的方法(也就是说,不必安装第 3 方软件)使用默认的 Windows 系统工具来做到这一点?也许使用脚本或网络应用程序?

sql-server scripting

21
推荐指数
3
解决办法
14万
查看次数

SQL Server 数据库同步

问题定义

我们的用户需要能够查询大部分是最新的数据库。数据可能会过时长达 24 小时,这是可以接受的。使用生产副本获取和保持第二个数据库最新的最低成本方法是什么?有没有我没有想到的方法?

工作量

我们有一个第三方应用程序用于监控股票交易活动。白天,作为各种工作流程的一部分,会发生许多小的变化(是的,这笔交易是有效的。不,这是可疑的,等等)。晚上,我们执行基于大集合的操作(加载前一天的交易)。

当前的解决方案和问题

我们使用数据库快照。晚上 10 点,我们删除并重新创建快照。然后开始 ETL 处理。这显然对我们的磁盘造成了负担,但允许我们的用户能够在不锁定数据库的情况下查询数据库(他们使用 Access 前端)。他们在深夜和清晨使用它,因此他们会注意到停机时间。

这种方法的问题有两方面。首先,万一夜间处理失败,这种情况并不少见,我们可以恢复导致快照被删除的数据库。另一个问题是我们的处理时间超过了 SLA。在确定了写得不好的查询和缺乏索引后,我们正试图通过与供应商合作来解决这个问题。数据库快照也是造成这种放缓的罪魁祸首,这一点可以从存在与不存在时的速度差异中得到证明——我知道,这令人震惊。

考虑的方法

聚类

我们打开了数据库集群,但这并没有解决使数据可用的需求,而且通常只会使管理员的生活变得复杂。它已被关闭。

SQL Server 复制

我们上周开始研究复制。我们的理论是,我们可以建立第二个目录并与生产数据库同步。在 ETL 开始之前,我们将切断连接,只有在 ETL 过程完成后才重新启用它。

管理员从快照复制开始,但他担心需要多天的高 CPU 使用率来生成快照以及所需的磁盘消耗。他表示,它似乎在向订阅者发送之前将所有数据写入物理文件,因此我们的 .6TB 数据库将花费 1.8TB 的存储成本。此外,如果生成快照需要数天时间,则它不符合所需的 SLA。

阅读完这篇好文章后,似乎 Snapshot 可能是初始化订阅者的方式,但之后我们希望切换到事务复制以保持同步。我假设打开/关闭事务复制不会强制完全重新初始化?否则,我们将打破我们的时间窗口

数据库镜像

我们的数据库处于完全恢复模式,因此数据库镜像是一种选择,但我对它的了解甚至比复制还要少。我确实找到了指示“数据库镜像阻止直接访问数据,镜像数据只能通过数据库快照访问”的SO 答案。

日志传送

听起来日志传送也可能是一种选择,但这是我一无所知的另一件事。它会是比其他任何解决方案(实施和维护)成本更低的解决方案吗?基于 Remus 的评论“日志传送允许对副本副本进行只读访问,但在应用收到的下一个备份日志时(例如,每 15-30 分钟)将断开所有用户的连接。” 我不确定停机时间会转化为多长时间,因此可能会导致用户有些焦虑。

微软同步

我上周末才听说使用Sync,还没有研究它。我不想为像这个问题那样具有高知名度的东西引入新技术,但如果它是最好的方法,那就这样吧。

安全信息系统

我们在这里做了大量的 SSIS,所以生成几百个 SSIS 包来保持辅助同步对我们来说是一种选择,尽管这是一个丑陋的选择。我不喜欢这样做,因为我不希望我的团队承担很多维护开销。

SAN“魔术”快照

过去,我听说我们的管理员使用一些 SAN 技术对整个磁盘进行即时备份。也许有一些 EMC …

replication sql-server sql-server-2008-r2

21
推荐指数
1
解决办法
9023
查看次数

我可以在 2008 服务器上使用 SQL Server Management Studio 2012 吗?

我的学校使用的是SQL Server 2008。上次我只安装了(在家里)SQL Server Management Studio 2008部分,并使用VPN连接到学校的服务器。

现在想重新安装SQL Server Management Studio,不过这次是2012版本。

SQL Server Management Studio 2012 是否适用于学校的 SQL Server 2008?还是我需要2008版本?

sql-server ssms

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

我应该对这个 NO JOIN PREDICATE 警告感到震惊吗?

我正在对性能不佳的存储过程的点点滴滴进行故障排除。程序的这一部分抛出了一个 NO JOIN PREDICATE 警告

select
    method = 
        case methoddescription 
            when 'blah' then 'Ethylene Oxide'
            when NULL then 'N/A'
            else methoddescription
        end,
    testmethod = 
        case methoddescription 
            when 'blah' then 'Biological Indicators'
            when NULL then 'N/A'
            else 'Dosimeter Reports'
        end,
    result = 
        case when l.res is null or l.res <> 1 then 'Failed'
        else 'Passed'
        end,
    datecomplete = COALESCE(CONVERT(varchar(10), NULL, 101),'N/A')
from db2.dbo.view ls
    join db1.dbo.table l
        on ls.id = l.id
    where item = '19003'
        and l.id = '732820'
Run Code Online (Sandbox Code Playgroud)

视图 ( …

sql-server execution-plan sql-server-2008-r2 warning

21
推荐指数
1
解决办法
5144
查看次数

这个语法是如何工作的?{fn CurDate()} 或 {fn Now()} 等

最近我浏览了一些为 SQL Server 2005 编写的相当老的存储过程,我注意到一些我不明白的东西。它似乎是某种类型的函数调用。

一个样品:

SELECT o.name, o.type_desc, o.create_date
FROM sys.objects o
WHERE o.create_date < {fn Now()} -1;
Run Code Online (Sandbox Code Playgroud)

这将显示所有行sys.objects有一个create_date前24小时前。

如果我显示此查询的执行计划,我会看到它{fn Now()}被getdate()数据库引擎替换:

SELECT [o].[name],[o].[type_desc],[o].[create_date] 
FROM [sys].[objects] [o] 
WHERE [o].[create_date]<(getdate()-@1)
Run Code Online (Sandbox Code Playgroud)

显然, using{fn Now()}比GetDate(). 我会像瘟疫一样避免这种语法,因为它没有记录。

sql-server functions

21
推荐指数
1
解决办法
7852
查看次数

SQLCMD 命令无法插入重音符号

我正在尝试运行sqlcmd.exe以便从命令行设置新数据库。我在 Windows 7 64 位上使用 SQL SERVER Express 2012。

这是我使用的命令:

SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log 
Run Code Online (Sandbox Code Playgroud)

这是一段 sql 文件创建脚本:

    CREATE DATABASE aqualogy 
    COLLATE Modern_Spanish_CI_AS
    WITH TRUSTWORTHY ON, DB_CHAINING ON;
    GO
    use aqualogy
    GO
    CREATE TABLE [dbo].[BaseLayers] (
    [Code] nchar(100) NOT NULL ,
    [Geometry] nvarchar(MAX) NOT NULL ,
    [IsActive] bit NOT NULL DEFAULT ((1)) 
    )

    EXEC sp_updateextendedproperty @name = N'MS_Description', @value = N'Capas de     cartografía base de la aplicaicón. Consideramos en Galia Móvil la cartografía(...)' …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlcmd sql-server-2012 encoding

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

连接池正在重置,错误:18056,严重性:20,状态:46。 &amp; 性能计数器未显示

我们使用 SQL 身份验证(以减少连接池的数量)和 .NET 4.0 连接字符串连接到 Windows 2008 R2 Enterprise Server 上的 SQL Server Enterprise Edition 2012 SP1:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
2012 年 10 月 19 日 13:38:57
版权所有 (c) Microsoft Corporation
Enterprise Edition(64 位)在 Windows NT 6.1(Build 7601:Service Pack 1)上

我们使用大约 50 个服务器分成 8 个不同的组,网站的不同部分。

我们的网站正在使用此 SQL Server 来记录访问跟踪数据。在过去的几天里,它发出了有关重置连接池的以下消息:

客户端无法重用 SPID 1327 的会话,该会话已为连接池重置。失败 ID 为 46。此错误可能是由较早的操作失败引起的。在此错误消息之前立即检查错误日志中是否有失败的操作。

错误日志如下:

错误:18056,严重性:20,状态:46
。客户端无法重用 SPID 959 的会话,该会话已为连接池重置。失败 ID 为 46。此错误可能是由较早的操作失败引起的。在此错误消息之前立即检查错误日志中是否有失败的操作。
用户“xxxx”登录失败。原因:重新验证连接上的登录时,无法打开登录对象中配置的数据库“xxxxxxxx”。[客户:10.xx.xx.xxx]

经过一番挖掘,我在 CSS 博客上找到了这篇文档:它是如何工作的:错误 18056 – 客户端无法重用带有 SPID …

sql-server sql-server-2012 connection-pooling

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

父子树分层顺序

我必须跟踪 SQL Server 2008 R2 中的数据。SQLFiddle

架构:

创建表 [dbo].[ICFilters](
   [ICFilterID] [int] IDENTITY(1,1) 非空,
   [ParentID] [int] NOT NULL DEFAULT 0,
   [FilterDesc] [varchar](50) NOT NULL,
   [Active] [tinyint] NOT NULL DEFAULT 1,
 约束 [PK_ICFilters] 主键聚集 
 ( [ICFilterID] ASC ) 与 
    PAD_INDEX = 关闭,
    STATISTICS_NORECOMPUTE = 关闭,
    IGNORE_DUP_KEY = 关闭,
    ALLOW_ROW_LOCKS = 开,
    ALLOW_PAGE_LOCKS = 开
 ) 在 [主要]
) 在 [主要]

INSERT INTO [dbo].[ICFilters] (ParentID,FilterDesc,Active)
价值观 
(0,'产品类型',1),
(1,'ProdSubType_1',1),
(1,'ProdSubType_2',1),
(1,'ProdSubType_3',1),
(1,'ProdSubType_4',1),
(2,'PST_1.1',1),
(2,'PST_1.2',1),
(2,'PST_1.3',1),
(2,'PST_1.4',1),
(2,'PST_1.5',1),
(2,'PST_1.6',1),
(2,'PST_1.7',0),
(3,'PST_2.1',1),
(3,'PST_2.2',0),
(3,'PST_2.3',1),
(3,'PST_2.4',1), …

sql-server hierarchy order-by sql-server-2008-r2

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

是否可以在 SQL Server 中查看 LRU-K 值?

在 SQL Server 的 中sys.dm_os_memory_cache_entries,既可以查看缓存中条目的原始成本,也可以查看缓存条目的当前成本(original_cost和current_cost)。DMVsys.dm_os_buffer_descriptors包含当前内存中页面的记录以及有关页面的一些元数据。DVM 中没有的一大块有趣的信息是数据页的 LRU-K 值。

是否可以获取 SQL Server 缓冲池中数据页的 LRU-K 值?如果是这样,如何?

sql-server

21
推荐指数
2
解决办法
940
查看次数