标签: sql-server-2012

我想在 SQL SERVER 2012 中找出谁在创建 SQL 登录以及在哪个日期

我试图在 sql server 2012 中找出谁创建了登录名和日期。任何机构都可以帮助解决这个问题,谢谢,

sql-server audit sql-server-2012 logins

4
推荐指数
1
解决办法
8950
查看次数

向 SQL Server 中的 Active Directory 帐户授予管理员权限

我有一个 SQL Server 2012 实例和一个 Active Directory 组,我可以向其中添加 Active Directory 用户。我在该组中有我的个人 AD 帐户 (MyAccount) 和一个服务帐户 (ServiceAccount)。

我需要为整个实例授予对这个 AD 组的管理员访问权限。这意味着我不需要对创建的每个新表和数据库执行授权命令。该组中的任何用户都将自动能够创建、删除、插入、选择等。

甚至更棘手。我必须能够使用 Windows 身份验证通过 MyAccount 登录(我在 Windows 上登录,然后登录到 SQL Server,无需再次输入用户名-密码),并通过输入用户名和密码使用 ServiceAccount 登录。我不能被迫使用 ServiceAccount 登录 Windows(或使用该帐户运行 SSMS/SSDT/etc)才能登录 MSSQL。

配置它的最佳实践是什么?

security sql-server permissions sql-server-2012 active-directory

4
推荐指数
2
解决办法
7741
查看次数

如何找到已删除数据库的数据库 ID?

删除数据库后,在哪里可以查看/查找数据库 ID?

我在软件/硬件环境中工作,我们在我们的软件中使用唯一的 DB ID 同步了锁定单元(原型)。为了重置这个锁定单元,我们需要知道数据库 ID。不幸的是,DB 被完全删除了,我们无法继续我们的工作。

大约 6-7 天前删除了数据库。

sql-server sql-server-2012

4
推荐指数
1
解决办法
1031
查看次数

将表的列 ID(主键)更改为自动增量的简单方法

我最近开始使用SQL Server,但我仍然不知道做一些事情的最佳方式。

我创建了所有以列 ID 作为主键的表。现在,当我尝试插入值时,出现以下错误:

“无法将值 NULL 插入列 'id'、表 'Project.dbo.Table';列不允许为空值。插入失败。语句已终止。”

这个问题有什么好的、简单的解决方案?

sql-server sql-server-2012

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

为什么删除这些 LOWER 调用会像这样更改执行计划?

在对慢速查询进行故障排除时,我被实际执行计划误导了一段时间,它告诉我在查询的后期排序,应该有几行占用了 > 80% 的查询时间。当时查询是在存储过程中动态构建的,大部分缓慢是由参数嗅探引起的,但很长一段时间我试图弄清楚为什么对这些行进行排序需要这么长时间。

这是查询:

SELECT Id
 , FirstName
 , LastName
 , FullName
 , DateOfBirth
 , CityStateZip
 , DriversLicenseState
 , DriversLicenseNumber
FROM (SELECT c.EntityId Id
       , p.FirstName
       , p.LastName
       , p.FullName
       , c.DateOfBirth
       , c.UpdateDate
       , CityStateZip = CASE a.EntityAddressId
           WHEN NULL THEN NULL
           ELSE CONCAT(a.City, ', ', s.Code, ' ', a.Zip)
           END
       , ds.Value DriversLicenseState
       , dn.Value DriversLicenseNumber
       , ROW_NUMBER() OVER (
               PARTITION BY p.FirstName, p.LastName, c.DateOfBirth
                    , ds.Value, dn.Value 
               ORDER BY c.UpdateDate DESC) RowNum
  FROM Store.Customer c
  INNER …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

4
推荐指数
1
解决办法
234
查看次数

外部自联接过滤器与子查询

我有一张表存储有关门票的信息。售票时有一个记录,使用票时有另一个记录。有一个名为 TransType 的列,它被设置为“已售出”或“已使用”以标记它是哪一个。表中还有其他列,其中一些列在销售时包含值,但在使用时不包含值,反之亦然。该表实际上是数据仓库风格的事实表。

在其他事情中,我正在计算销售和使用之间的时间差,因此我将表格加入到自己的表格中,以便为每张票获取一条记录,以便能够在同一记录中计算两个事件的时间戳。

我需要包括所有售出的门票,所以外连接应该可以解决这个问题。

首先我运行了这个查询

select x.* 
from factI as x
left join factI as y on x.tickedId = y.tickedId
where x.TransType = 'sold'
and y.TransType = 'used'
Run Code Online (Sandbox Code Playgroud)

当我运行它时,过滤器 x.TransType = 'sold' 不起作用,并且查询实际上返回所有记录的结果,无论 TransType 是什么。如果我使用内连接,这会起作用,但显然不会返回尚未使用的票证。

所以我将查询更改为这个给我正确结果的查询。

select * from (
   select * from factI where TransType = 'sold'
) as x
left join (
   select * from factI where TransType = 'used'
) as y on x.ticketId = y.ticketId
Run Code Online (Sandbox Code Playgroud)

当我使用外部(左)连接时,为什么第一个查询中的 where 子句没有正确过滤掉?

join sql-server subquery sql-server-2012

4
推荐指数
1
解决办法
2139
查看次数

页面预期寿命下降时的缓冲区缓存大小

我正在对我们的一个 SharePoint 数据库的问题进行故障排除,我认为 PLE 的大幅下降主要是由于 I/O 活动增加(我同时看到读取、写入和延迟写入增加)

此时的缓冲区缓存命中率通常为 96%。

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 2012 年 10 月 19 日 13:38:57 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows NT 6.2(Build 9200:)上的基于核心的许可(64 位)(管理程序)

我想在 PLE 删除的确切时间检查缓冲区缓存的大小,所以我正在运行以下查询,我认为它以 MB 为单位给出了大小:

DECLARE @total_buffer INT;

SELECT @total_buffer = cntr_value
FROM sys.dm_os_performance_counters
WHERE object_name LIKE '%Buffer Manager%'
AND counter_name = 'Database Pages'

SELECT ((@total_buffer * 8) / 1024) AS CacheSizeMB
Run Code Online (Sandbox Code Playgroud)

我看到的大小没有意义(对我来说,我的意思是),通常为 250-350MB。我希望我会看到一个大尺寸,然后我可以检查哪些表在缓存中的页面最多,这有望引导我找到哪些 LOB 对象正在被检索/上传,从而导致问题。

我还需要查看计划缓存吗?即 PLE 丢弃可能是由一些繁重的表扫描引起的吗?

SQL Server 从可用的 16GB 分配了 12GB 的 …

performance sql-server memory sql-server-2012

4
推荐指数
1
解决办法
1188
查看次数

为什么 Op Stats 都是 0,而 Usage Stats 却显示 29 个搜索

为什么 Op Stats 都是 0,而 Usage Stats 却显示 29 个搜索。这是从 Brent Ozar 的 sp_blitzindex 返回的。

使用统计 操作统计
读取:29(29 次搜索)写入:14 0 次单例查找;0 次扫描/搜索;0 删除;0 次更新;

index-tuning sql-server-2012 sp-blitzindex

4
推荐指数
1
解决办法
856
查看次数

使用只有读取权限的帐户执行存储过程

我创建了一个有一个存储过程TRUNCATE,并INSERT在它的语句,我使用的一个SSRS报告。

我通常只使用作为db_datareaderSSRS 报告成员的帐户,但是此存储过程不会使用只有这些权限的帐户执行。尝试执行存储过程时报如下错误:

找不到对象“table_name”,因为它不存在或您没有权限。

我是否需要使用有db_datawriter成员的帐户来执行此 SP,或者有什么方法可以让我的db_datareader帐户执行它?

sql-server stored-procedures sql-server-2012

4
推荐指数
1
解决办法
1457
查看次数

由于错误从实时生产服务器中删除了 AlwaysOn 可用性数据库

今天错误地从实时服务器上删除了 AlwaysOn 可用性数据库。

让我来解释细节。

在 AlwaysON 可用性组中,有 2 个可用性副本。那是

主副本服务器(即 SQLServer1)

辅助副本服务器(即 SQLServer2)

在 中Primary Replica Server,有4 个数据库。

AlwaysOnTest 
Database2
Database3
Database4
Run Code Online (Sandbox Code Playgroud)

在辅助副本服务器 (SQLServer2) 中,我不能确切地说,因为那是另一个 SQLserver。但坦率地说,我想说我无权访问该服务器。

当我获得主服务器的可访问性时,它已经由第三方供应商配置。作为一名 DBA,我的任务是备份SQLServer1. 还要备份AlwaysONTest数据库。其中AlwaysOnTest 主副本服务器(SQLServer1)的数据库与辅助副本服务器(SQLServer2)同步。这只是一个与二级副本同步的数据库。

今天在卡塔尔时间下午 12:10 误将 AlwaysOn 数据库删除。我有主服务器昨天的完整备份。注意:备份的备份首选项是Secondary Only.

在实例之后,我还对主要副本进行了完整备份。

现在我想再次AlwaysONTest使用辅助副本配置数据库。

注意:只是误删了AlwaysOn Availability 数据库。环境就是这样。

我该怎么办。任何建议或帮助将不胜感激。

sql-server sql-server-2012 high-availability availability-groups

4
推荐指数
1
解决办法
1207
查看次数