我已经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 语句已被 …
我有一个产品“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
免责声明:我不知道我在这里谈论的是什么,或者我正在做的事情是否正确。
长话短说,我的上司问我是否可以在另一个地理站点的另一个 SQL Server 实例上复制我们的内部数据库并使它们保持同步。
就上下文而言,他们最近扩大了业务,并在距离主楼(A 场)约 15 英里的地方开设了一座新大楼(我们将称之为 B 场)。两个站点都通过 VPN 连接。
在站点 A,我们安装了 MSSQL 2012 标准版,其中包含我们的内部数据库。
当站点 B 的用户通过 VPN 连接到数据库时,他们报告说建立连接和打开客户端应用程序需要将近 5 分钟的时间。我明天会检查这个,因为我以前从未听说过这个问题。
我的上司似乎认为最好的主意是以某种方式复制/镜像(我不确定这里的术语)站点 B 中服务器上的数据库,并以某种方式使它们保持同步。
这是复制的用途吗?如果是,我可以从哪里开始学习如何复制数据库。
否则,如果这是一个非常糟糕的主意,我还有什么其他选择?
tl;dr - 我可以在两个不同的建筑物中拥有两个保持同步的数据库副本吗?
我刚开始学习 MS 70-463 仓库实现,在视频课程中,导师正在针对 SQL Server 2012 评估版,但我已经有了 SQL Server 2012 Express。
有人能告诉我这对我想学习的课程是否足够吗?是否存在我无法在 70-463 课程中执行的功能?
我必须提供有关文件系统使用情况的报告。
我正在收集有关文件服务器使用情况的统计数据,具体到单个文件级别,以便我们可以查看谁在使用哪些文件/文件夹、他们使用了多少存储空间、他们拥有多少文件、创建时间和上次使用时间。
为此,我有 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 Express 实例来执行一些故障排除,例如恢复 Master 数据库。
我在 SQL Server 配置管理器中找不到“启动参数”选项。
我发现了一些博客,例如http://mssqlfun.com/2014/09/04/how-to-start-sql-server-in-single-user-mode/,但是我无法将-m参数添加到'启动参数'。
请参阅下面的我的 SQL Server 配置管理器的屏幕截图:
我的工作环境是:
有没有可能通过控制台连接的方法?任何想法或建议将不胜感激。
我可以从这个 T-SQL 中看到启动参数:'select * from sys.dm_server_registry;',但是我看不到 SQL Server 配置管理器中的设置。
我希望在抛出自定义错误消息时通知操作员。我的理解是我需要向 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) 场景:我有一个带有索引的繁重 OLTP 表。我在一天或更短的时间内看到了许多插入、更新和删除以及索引碎片。在索引构建的第一天,优化器使用索引,在第二天或第三天,优化器完全跳过它。这是完全相同的查询。
我脑子里的问题:为什么有些查询计划会跳过索引,因为创建索引是为了帮助优化这些计划?
这篇文章的问题:优化器是否可以跳过一个严重碎片化的索引,例如我们有10亿条记录并建立了一个索引,然后两个小时后,所有十亿条记录被删除,我们有5亿条新记录?
我开始认为向该表添加索引根本无济于事,因为表的性质(数据输入快,数据输出快),但只是想了解为什么有一天,优化器会在其计划中使用该指数,但第二天不会。
我有下表:
----------------------------------------------
| 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) 在过去的一年中,我们遇到了许多不同的查询同时失败并出现以下错误(或不同资源调控器组中的变体)的情况:资源池“默认”中的系统内存不足,无法运行此错误询问。
最近我们越来越频繁地遇到它。关于导致问题的原因以及如何解决的任何想法?
@@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-2012 ×10
sql-server ×9
alerts ×1
buffer-pool ×1
index ×1
memory ×1
optimization ×1
performance ×1
powershell ×1
raiserror ×1
replication ×1
startup ×1
t-sql ×1