标签: sql-server-2012

SQL Server Management Studio 登录提示永远不会忘记“sa”以外的用户

当我使用“sa”以外的其他用户登录数据库时,该用户名将在我下次登录时保留。

如果我输入用户名 sa 和密码然后登录,下次我打开该服务器的登录提示时,它不会记住我以 sa 身份登录,而是显示用户不是 sa。

为什么?

sql-server ssms sql-server-2012

6
推荐指数
1
解决办法
2524
查看次数

SQL Server - SQL 代理 - 允许组拥有作业

设想

我们的组织中有三个独立的用户组(开发、支持、实施)。就目前情况而言,每个人都使用一次登录来完成所有事情。我们正开始摆脱这种情况。每个人都通过自己的登录名访问数据库,每个人都可以访问其组系统。因此,支持人员可以访问支持职能和工作等。

过程和表的允许权限非常简单。从 windows 组创建登录名。然后根据该登录创建一个用户,并允许它在我们为他们创建的新架构上读取和执行。

我们正在运行 SQL Server 2012 和 2008 R2。

问题

SQL 代理作业位于用户级别之上,需要将登录名分配给所有者。但它不接受组登录作为接受的参数:

指定@owner_login_name无效(有效值由sp_helplogins[不包括Windows NT 组]返回)。

希望允许这些组拥有自己的一组可以直接操作的作业(在报告服务器上而不是实时数据库上)。不影响其他部门的工作或其他工作(数据库维护任务、复制等)。但如果原始作者不在办公室或已经离开,则允许团队的其他成员操纵工作。

我尝试过四处搜索,但到目前为止,我在 2010 年在sqlservercentral.com上发现的唯一一件事说这是无法完成的。

我正在看的东西

将 SQL 代理作业分配给无人有权访问的支持/开发通用帐户。但每个人都可以以某种方式操纵自己的工作。

这将允许人们改变团队的工作,同时允许个人离开公司后继续使用工作。

我还没有找到一种方法让人们能够通过其他所有者访问/运行作业(即使他们使用相同的 Windows 组登录到 sql)。不授予他们SQLAgentOperateorRole (这会破坏将他们锁定在外的意义)彼此(和管理员)的工作。

每个组创建一个用户,该用户具有 msdb 权限的附加访问权限以及他们可以登录以操作作业的标准支持功能。

这样做的缺点是现在用户有两个登录名,其中之一不会改变。因此,离开公司的用户仍然可能拥有该帐户的登录凭据,这也会导致用户变得懒惰,只在该帐户下登录。(他们不应该这样做,但说实话,他们会的)。

每个组都有一个每 5 分钟运行一次的 SQL 作业,其中包含一个表,其中包含用于以频率 x 运行此命令的命令(本质上一个 SQL 代理作业运行自定义编写的 SQL 代理作业列表)

我认为我不需要经历这是一个多么可怕的想法。但这是已经半考虑过的事情。

概述

显然,我们可以看到的最佳解决方案是允许一个组拥有 SQL 代理作业,但似乎这是不可能的。

有人有主意吗?目前,我们将不胜感激有关如何实施此类事情的指导。

permissions sql-server-2008-r2 sql-server-2012 sql-server-agent

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

将“最大文本重复大小 (B)”设置为 -1 有何影响?

我有一个通过事务复制复制的表,该表抛出此错误消息:

\n\n
\n

要复制的 LOB 数据长度 (68983) 超过配置的最大值\xc2\xa065536。

\n
\n\n

这可以通过调整“最大文本重复大小 (B)”SQL 配置值(默认值 65536)来解决。

\n\n

我看到两个选择:

\n\n
    \n
  1. 将值调整为高于这种情况所需的值
  2. \n
  3. 将值设置为“-1”表示没有限制
  4. \n
\n\n

我的问题是:将“最大文本重复大小 (B)”设置为 -1 有什么缺点?

\n\n

我很感激任何反馈!

\n

sql-server sql-server-2012

6
推荐指数
1
解决办法
9416
查看次数

对用于 BitWise 查询的 INT 列进行索引的最佳方法

基于 WHERE 子句中的按位比较对列进行索引以进行有效查找的最佳方法是什么,例如

SELECT ID, FLAGS, NAME FROM TABLE WHERE FLAGS & 4 = 4
Run Code Online (Sandbox Code Playgroud)

我的环境是SQL Server 2012。

据我了解,此类查询中不会使用 FLAGS 列上的索引。

我知道另一个选择是将 FLAGS 列分解为单独的列,但我想避免这种情况,因为在某些情况下,这意味着 25 个以上的新列,每个列都需要索引组合来支持常见查询。

有没有什么方法可以对单列建立索引以使按位查询更有效?

我尝试按照下面 dudu 的建议使用带有索引的计算列,但是当我在具有聚集索引的表上使用并开始选择列(而不是仅仅选择 count(*) 时,它不再使用该索引新的计算列。

SELECT 
* 
INTO 
    MYTABLE
FROM 
(
    SELECT 'A' COL_A, 'A' COL_B, CAST(129 AS INT) FLAGS UNION
    SELECT 'B' COL_A, 'D' COL_B, CAST(129 AS INT) FLAGS UNION
    SELECT 'C' COL_A, 'S' COL_B, CAST(129 AS INT) FLAGS UNION
    SELECT 'D' COL_A, 'F' COL_B, CAST(129 AS INT) FLAGS UNION
    SELECT 'E' …
Run Code Online (Sandbox Code Playgroud)

index sql-server sql-server-2012 bitwise-comparison

6
推荐指数
1
解决办法
2248
查看次数

列出所有删除的数据库

我需要确认我们的 SQL Server 中是否曾经存在过一个特定的表。是否存在可用于列出 SQL Server 实例中所有删除的数据库的现有脚本或方法?

sql-server-2008 sql-server sql-server-2012

6
推荐指数
2
解决办法
1279
查看次数

测量长距离 SQL 连接的延迟

我们为连接到其 SQLServer 数据库的客户编写了一个简单的“客户端”应用程序,对“属性”运行大约 360 次查询,并将该数据作为我们称为“cProp”的 .Net 对象返回。

查询的复杂性各不相同,但最长的可能需要 400 毫秒。当我们最近为 60 个属性运行它时,整个运行大约需要 3 分钟。客户决定将他们的数据库移动到我们之间 65 毫秒的远程服务器。结果,相同的查询需要 51 分钟。

现在我 99% 确定问题是行检索,但我需要证明这一点。DBA 对该过程进行了跟踪,但之前从未使用过它,我很沮丧地发现它包含的信息如此之少。我所看到的是,它花了不到 4 分钟的服务器时间。这加强了我的信念,即问题出在行检索上。

但我如何衡量呢?跟踪不返回关于行数或总数据大小的任何信息 - 我做错了吗?我也知道批处理发生在服务器之外,那么我们如何知道那里发生了什么?一般来说,可以这么说,如何调试“服务器外部”发生的问题。

performance sql-server sql-server-2012 query-performance

6
推荐指数
1
解决办法
3639
查看次数

如何判断我在通过 Windows 身份验证登录时使用了哪个 Windows 组登录名

我创建了两个对应于两个 Windows 组的 SQL Server 登录名:

MachineName\MyAppAmdin
MachineName\MyAppUser
Run Code Online (Sandbox Code Playgroud)

然后在数据库中,我创建了两个具有相同名称的用户并将它们映射到登录名。

在 Windows 服务器中,我将我的域帐户添加MyDomain\MyAccountMachineName\MyAppAmdin组中。

现在我可以通过 Windows 身份验证通过MyDomain\MyAccount.

问题是,我想确切地知道我正在使用哪个 Windows 组登录,但我不知道如何。

我试过:

ORIGINAL_LOGIN()
SYSTEM_USER
SUSER_SNAME
SELECT * FROM dm_exec_sessions
Run Code Online (Sandbox Code Playgroud)

以上所有内容都会返回MyDomain\MyAccount,但我需要知道的是我是否通过MachineName\MyAppAmdin.

总结一下,我的问题是:

有没有办法准确判断当前连接使用的是哪个 Windows 组登录(或用户)?

或者有什么方法可以检查是否MyDomain\MyAccount与特定用户或登录名相关联?

我知道我可以使用 C# 或命令来解析域帐户是否属于特定的 Windows 组,但是我们有一些新的 IT 策略,所以我正在考虑使用 TSQL 实现类似结果的方法。

security sql-server t-sql sql-server-2012 logins

6
推荐指数
1
解决办法
2555
查看次数

跨列复制时,SQL Server 缓存是否聚合结果?

假设我们有一个Orders包含列的表order_id, total, discount

然后我们写一个类似于下面的查询

SELECT
    COUNT(order_id) AS num_orders
    , SUM(total) / COUNT(order_id) as avg_total
    , SUM(discount) / COUNT(order_id) AS avg_discount
FROM Orders
Run Code Online (Sandbox Code Playgroud)

COUNT(order_id)Preserved的值是跨列还是重新计算(例如,是否有性能影响)?或者最好先确定计算值并在查询中使用这些值,例如:

DECLARE @order_count AS INT 

SELECT 
    @order_count = COUNT(order_id) 
FROM Orders

SELECT
    @order_count AS num_orders
    , SUM(total) / @order_count as avg_total
    , SUM(discount) / @order_count AS avg_discount
FROM Orders
Run Code Online (Sandbox Code Playgroud)

请注意,在编写此问题时,我注意到由于AVG()支持SQL Server 2008 。但是,我继续了这个问题,并打算更一般地想了解 SQL Server 如何处理跨列的相同聚合,因为我有时会以其他形式遇到这个问题。

sql-server sql-server-2012

6
推荐指数
1
解决办法
506
查看次数

系统运行状况扩展事件文件如何滚动?

我看到 SQL Server 中的默认系统健康会话事件是 5 MB,每个事件总共有 4 个文件。

我们正在尝试从历史事件中的系统健康状况中获取数据,但对于一些关键的生产服务器,它们只会非常快速地滚动。对有些人来说,他们甚至在那里呆了几个星期

SQL Server 中滚动文件的机制是如何工作的,有没有一种方法可以检查这种情况何时以及如何发生?

编辑@每个答案

  1. 事件未重新启动
  2. 服务器也没有重新启动,它按计划每月发生一次

因此,我认为系统运行状况中可能会捕获很多不需要的事件。我怎样才能在这个系统运行状况中找到它们并过滤掉它们?

另外,我们应该增加文件大小,比如 200 MB 4 文件,还是只保留 10 MB 80 文件等小文件?哪一个更好?

更新@我已经将此标记为答案,但是在检查弹出的另一件事时:

文件未按顺序填写;假设我将 10 个文件增加到每个 10 MB。我们看到几天前的 1-6 个文件似乎都充满了 10 MB,而同一天的文件 7 和 8 是 2 MB,而文件 9 和 10 完全充满了 10 MB。我想这是意料之中的,只是好奇为什么会这样?

sql-server extended-events sql-server-2012 sql-server-2014

6
推荐指数
1
解决办法
771
查看次数

闪存上的慢检查点和 15 秒 I/O 警告

过去几周,我们一直在努力找出导致这些 I/O 问题和检查点变慢的可能原因的根本原因。

乍一看,这显然是 I/O 子系统错误,应该归咎于 SAN 管理员。但最近我们将 SAN 更改为使用全闪存,但截至今天,错误仍然弹出,我不知道为什么,因为我运行的每个指标,无论是等待统计数据还是任何其他指标,都是为了检查 SQL 服务器是否可行罪魁祸首似乎恢复正常。

它并没有真正加起来。也很可能是其他东西正在咀嚼磁盘并且 SQL Server 在这里成为受害者......但我无法找出什么?

数据库位于可用性组中,当这些事件发生时,我们确实会看到角色更改和翻转以及超时发生。

任何帮助解决这个问题将不胜感激。如果需要任何进一步的细节,请告诉我。

错误消息。以下

SQL Server 在数据库 [ABC] (7) 中的文件 [E:\MSSQL\DATA\ABC.mdf] 上遇到了 14212 次 I/O 请求需要超过 15 秒才能完成。操作系统文件句柄是 0x0000000000000D64。最新的long I/O的偏移量为:0x0000641262c000

SQL Server 在数据库 [XYZ] (7) 中的文件 [E:\MSSQL\DATA\XYZ.mdf] 上遇到了 5347 次 I/O 请求需要超过 15 秒才能完成。操作系统文件句柄是 0x0000000000000D64。最新的long I/O的偏移量为:0x0000506c060000

FlushCache:在 925084 毫秒内清理了 111476 个 buf,其中 62224 次写入(避免了 19 个新的脏 buf),用于 db 7:0 平均吞吐量:0.94 MB/秒,I/O 饱和度:55144,上下文切换 98407 最后一个未完成的目标:101241077 次写入FlushCache:在 248687 毫秒内清理了 5616 个 buf,其中 3126 个写入(避免了 3626 个新的脏 buf),用于 …

performance sql-server storage san sql-server-2012 performance-tuning

6
推荐指数
2
解决办法
2109
查看次数