标签: sql-server-2012

SQL Server 数据库级审核过滤不起作用

我已经SQL Server 2014 Enterprise Edition安装了。出于隐私考虑,需要记录私有数据上的 SELECT 语句(特定域用户除外),由写入数据库的服务使用。

创建数据库级审计规范效果很好。例如

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-01]
FOR SERVER AUDIT [My_Audit]
ADD (SELECT ON SCHEMA::[dbo] BY [public])
WITH (STATE = OFF)
GO
Run Code Online (Sandbox Code Playgroud)

导致每个人的所有 SELECT 语句都写入日志文件。当我用 替换SCHEMA::[dbo][MyTable],日志被正确过滤为 SELECTs on MyTableonly。

但是当我替换public为特定的用户名时MYDOMAIN\myuser,日志条目不会像我预期的那样针对给定的用户名进行过滤。

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-01]
FOR SERVER AUDIT [My_Audit]
ADD (SELECT ON SCHEMA::[dbo] BY [MYDOMAIN\myuser])
WITH (STATE = OFF)
GO
Run Code Online (Sandbox Code Playgroud)

任何用户发出的每个 SELECT被记录下来。

我查询sys.server_principals以检查给定的用户是否是有效的主体名称,但它实际上显示在结果中。

我的第二个审计规范有什么问题?

编辑:似乎有问题的 CREATE 语句已被 …

sql-server sql-server-2012 sql-server-2014

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

如何调试缓冲区问题?

我有一个产品“Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)”,它显示出奇怪的缓冲区和页面预期寿命 (PLE) 症状。

我每分钟都在我的服务器上运行这个(跟踪这个问题):

SELECT @ple = CAST([cntr_value] AS VARCHAR(20))
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Manager%'
AND [counter_name] = 'Page life expectancy'

SELECT @usedBufferPages = CAST(COUNT(*) /128 AS VARCHAR(20)) 
FROM sys.dm_os_buffer_descriptors

DECLARE @StartDate VARCHAR(8) = Convert(VARCHAR(8), GETDATE(), 14)
RAISERROR ('%s. PLE at %s and Used Buffers at %s at %s ', 0, 
            1,@runCountString ,@ple, @usedBufferPages, @StartDate) WITH NOWAIT  
Run Code Online (Sandbox Code Playgroud)

这是一些示例输出:

16. PLE at 858 和 Used Buffers at 7290 at 09:51:42 
17. PLE at …

performance sql-server sql-server-2012 page-life-expectancy buffer-pool

6
推荐指数
3
解决办法
1060
查看次数

如何在 2 个地理站点上复制数据库?

免责声明:我不知道我在这里谈论的是什么,或者我正在做的事情是否正确。

长话短说,我的上司问我是否可以在另一个地理站点的另一个 SQL Server 实例上复制我们的内部数据库并使它们保持同步。

就上下文而言,他们最近扩大了业务,并在距离主楼(A 场)约 15 英里的地方开设了一座新大楼(我们将称之为 B 场)。两个站点都通过 VPN 连接。

在站点 A,我们安装了 MSSQL 2012 标准版,其中包含我们的内部数据库。

当站点 B 的用户通过 VPN 连接到数据库时,他们报告说建立连接和打开客户端应用程序需要将近 5 分钟的时间。我明天会检查这个,因为我以前从未听说过这个问题。

我的上司似乎认为最好的主意是以某种方式复制/镜像(我不确定这里的术语)站点 B 中服务器上的数据库,并以某种方式使它们保持同步。

这是复制的用途吗?如果是,我可以从哪里开始学习如何复制数据库。

否则,如果这是一个非常糟糕的主意,我还有什么其他选择?

tl;dr - 我可以在两个不同的建筑物中拥有两个保持同步的数据库副本吗?

replication sql-server sql-server-2012

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

MS 70-463 的 SQL Server 版

我刚开始学习 MS 70-463 仓库实现,在视频课程中,导师正在针对 SQL Server 2012 评估版,但我已经有了 SQL Server 2012 Express。

有人能告诉我这对我想学习的课程是否足够吗?是否存在我无法在 70-463 课程中执行的功能?

data-warehouse sql-server sql-server-2012

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

如何收集 NTFS 文件属性并插入到 SQL Server 表中

我必须提供有关文件系统使用情况的报告。

我正在收集有关文件服务器使用情况的统计数据,具体到单个文件级别,以便我们可以查看谁在使用哪些文件/文件夹、他们使用了多少存储空间、他们拥有多少文件、创建时间和上次使用时间。

为此,我有 2 个 powershell 脚本。

第一个读取文件系统并捕获我想要的属性并将它们保存到文件中。

dir -rec G:\ | Select LastWriteTime, Directory, Name, Extension, Length, @{Name="Owner";Expression={get-acl $_.FullName| select Owner}} | export-csv FileInfo.csv
Run Code Online (Sandbox Code Playgroud)

第二个脚本读取 csv 文件并将数据插入表中。

一旦数据在 SQL 中,我可以解析文本并将其拆分为不同的列,然后生成各种报告并以不同的方式分析数据。我的方法有效,但很麻烦。

有没有更好的方法来收集 NTFS 信息并将其保存到 SQL Server 中?有哪些替代方案?情报局?

编辑:这一切可以组合在一起在一个过程中一起运行吗?

sql-server powershell sql-server-2012

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

如何在单用户模式下启动 Express SQL Server 实例?

我想在单用户模式下启动我的 SQL Server Express 实例来执行一些故障排除,例如恢复 Master 数据库。

我在 SQL Server 配置管理器中找不到“启动参数”选项。

我发现了一些博客,例如http://mssqlfun.com/2014/09/04/how-to-start-sql-server-in-single-user-mode/,但是我无法将-m参数添加到'启动参数'。

请参阅下面的我的 SQL Server 配置管理器的屏幕截图:

在此处输入图片说明

在此处输入图片说明

我的工作环境是:

  1. MS SQL Server 2012 Express 11.1.3000.0
  2. 视窗服务器 2012 R2
  3. SQL Server 2012 Express 安装在域中
  4. 操作系统在 VMware 下运行

有没有可能通过控制台连接的方法?任何想法或建议将不胜感激。

我可以从这个 T-SQL 中看到启动参数:'select * from sys.dm_server_registry;',但是我看不到 SQL Server 配置管理器中的设置。

sql-server sql-server-2012 troubleshooting startup

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

如何在 SQL Server 2012 中针对自定义错误消息创建 SQL 代理警报?

我希望在抛出自定义错误消息时通知操作员。我的理解是我需要向 sys.messages 添加一条消息,然后我可以RAISERROR或者THROW那个错误 ID。在消息 ID 上创建警报并将其设置为发送给操作员应该会创建这些通知。

我在消息 ID 50005 上创建了 SQL 代理警报,并使用以下 T-SQL 创建消息:

EXEC sp_addmessage @msgnum = 50005,
          @severity = 16,
          @msgtext = N'%s';
GO
Run Code Online (Sandbox Code Playgroud)

然后,如果我执行这个:

RAISERROR (50005, -- Message id.
       16, -- Severity,
       1, -- State,
       N'My custom message');
THROW 50005, 'My custom message', 1;
GO
Run Code Online (Sandbox Code Playgroud)

我从RAISERROR和得到以下输出THROW

Msg 50005, Level 16, State 1, Line 68 我的自定义消息

但是,当我查看警报的历史记录时,它显示它尚未触发,并且操作员未收到电子邮件更新。

我的代理警报如下所示:

代理警报设置

编写警报脚本会生成以下内容:

USE [msdb]
GO
EXEC msdb.dbo.sp_update_alert @name=N'Alert DBA on custom errors', 
    @message_id=50005, …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2012 sql-server-agent alerts raiserror

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

查询优化器会忽略碎片索引吗?

场景:我有一个带有索引的繁重 OLTP 表。我在一天或更短的时间内看到了许多插入、更新和删除以及索引碎片。在索引构建的第一天,优化器使用索引,在第二天或第三天,优化器完全跳过它。这是完全相同的查询。

我脑子里的问题:为什么有些查询计划会跳过索引,因为创建索引是为了帮助优化这些计划?

这篇文章的问题:优化器是否可以跳过一个严重碎片化的索引,例如我们有10亿条记录并建立了一个索引,然后两个小时后,所有十亿条记录被删除,我们有5亿条新记录?

我开始认为向该表添加索引根本无济于事,因为表的性质(数据输入快,数据输出快),但只是想了解为什么有一天,优化器会在其计划中使用该指数,但第二天不会。

index sql-server optimization sql-server-2012

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

选择不同的行但计算所有行

我有下表:

----------------------------------------------
| ID | interestingData |      timestamp      |
----------------------------------------------
|  1 |       400       | 2016-01-23 17:01:00 |
----------------------------------------------
|  1 |       400       | 2016-01-24 17:01:00 |
----------------------------------------------
|  1 |       350       | 2016-01-25 17:01:00 |
----------------------------------------------
|  2 |       23        | 2016-01-23 17:01:00 | 
----------------------------------------------
|  2 |       34        | 2016-01-24 17:01:00 | 
----------------------------------------------
|  2 |       12        | 2016-01-25 17:01:00 | 
----------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我们的PK在哪里(ID, timestamp)。我正在尝试确定一个查询,该查询将为我提供唯一 ID 和最新的有趣数据,其中有趣数据超过了阈值。当然,这将通过以下方式完成:

SELECT DISTINCT ID
FROM table
WHERE interestingData > threshold
ORDER …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

资源池中的系统内存不足,无法运行此查询

在过去的一年中,我们遇到了许多不同的查询同时失败并出现以下错误(或不同资源调控器组中的变体)的情况:资源池“默认”中的系统内存不足,无法运行此错误询问。

最近我们越来越频繁地遇到它。关于导致问题的原因以及如何解决的任何想法?

@@version 返回:

Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 2015 年 10 月 20 日 15:36:27 版权所有 (c) Microsoft Corporation 企业版:Windows NT 6.1(内部版本 7601)上的基于核心的许可(64 位) : 服务包 1)

全部同时发生的示例错误:

Error: 701, Severity: 17, State: 54.
There is insufficient system memory in resource pool 'default' to run this query.
Error: 701, Severity: 17, State: 123.
There is insufficient system memory in resource pool 'dm' to run this query.
Error: 701, Severity: 17, State: 89.
There is insufficient …
Run Code Online (Sandbox Code Playgroud)

sql-server memory sql-server-2012 resource-governor

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