我有一个从 INFORMATION_SCHEMA.COLUMNS 中选择信息的视图,它似乎同时提供了列和视图。有没有一种简单的方法可以判断哪些行是列,哪些是视图?我应该与 INFORMATION_SCHEMA.VIEWS 进行比较吗?我需要列和视图,我只想知道哪个是哪个。
几天前我创建了一个 SQL Server 登录名。现在我需要删除相同的内容。所以我进入了 SQL Server Management Studio => Security => Logins 并选择了我想删除的登录名。它显示一条信息性消息,内容为
删除服务器登录不会删除与登录关联的数据库用户。要完成此过程,请删除每个数据库中的用户。可能需要首先将模式的所有权转移给新用户。
忽略此消息,当我确认删除过程时,我收到一个致命错误,上面写着
登录 'iis_login' 删除失败。(Microsoft.SqlServer.Smo)
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
此登录是 1 个作业的所有者。您必须先删除或重新分配这些作业,然后才能删除登录。(Microsoft SQL Server,错误:15170)
当登录名拥有作业(根据上面的消息)时,如何删除登录名。
问候,涅槃。
有谁知道优化整个 SQL Server 数据库的最佳工具是什么?
我不是在谈论如何编写查询,而是在谈论如何管理数据库文件、索引、分页和碎片。
痛苦的真相
工具与 DBA 之间的永恒斗争仍然存在......但我只是想知道基础知识,直到产品增长,然后我可以雇用一个不生气的 DBA :--)
在“需要帮助对 Sql Server 2005 死锁场景进行故障排除”的问题中,有人建议使用DBCC TRACEON (1204, -1)全局跟踪死锁。
当在 BOL 中阅读有关此命令时,它指出仅当用户或应用程序不在系统上同时运行语句时才应使用它。这是否意味着在启用此跟踪标志时我们必须处于单用户模式?此外,为什么需要它,遵循建议是否重要?(在始终运行的生产系统中似乎有点难以遵循。)
这是一个有点尴尬的问题,我不敢相信我已经错过了这么多年。
我有一个包含 401 个堆表的供应商第三方数据库。我最近开始使用 Brent Ozar 的脚本并设置sp_BlitzFirst为每 15 分钟运行一次以收集等待统计信息等。
它发现的是每次运行 24 小时期间,它都告诉我修复转发记录。可能会让一些读者感到震惊的是,我在 DMV 上运行了一个查询,并取回了一些包含超过 150,000 个转发记录值的表。
我明白要解决这个问题是在整个表中有一个聚集索引,或者作为运行ALTER TABLE [tablename] REBUILD.
然而,我无法找到的是这是否会使表脱机,以及在运行此命令之前我是否应该注意其他任何问题。
我正在使用 2008 R2 的企业版,我想知道以这种方式运行它是否会消除中断的需要?
ALTER TABLE [tablename] REBUILD WITH (ONLINE = ON);
Run Code Online (Sandbox Code Playgroud)
有人对这个有经验么?
sql-server maintenance sql-server-2008-r2 heap online-operations
我们有使用 SQL Server 2016 加密敏感列数据的要求,并选择了 Always Encrypted(AE) 功能来使用确定性方法加密这些列。
由于 AE 确定性加密不允许对这些加密列进行不等式、范围或 LIKE 查询,因此我们尝试使用对称密钥(列级)加密技术对这些类型的列进行加密。
在某些列(不需要任何不等式、范围或 LIKE 查询)上实现 AE 功能并在需要生成不等式、范围或 LIKE 查询的列上实现对称密钥类型加密是否是一个好习惯?
考虑到性能、安全性和维护性,将 AE 加密和列级加密结合在一个表上是一个好习惯吗?
请专家指教。
我对查询 LDAP 服务器进行了广泛的研究,但到目前为止还没有解决。所以请高手帮忙
背景:我有一个客户端,其 LDAP 服务器是 OnPremise(虽然面向公众),我在防火墙内有一个 SQL Server(2012 SE)。外部 LDAP 和内部 SQL Server 之间的通信很好,因为我可以互相 ping 通。我还创建了一个远程域帐户,并在 SQL Server 上创建链接服务器时使用了该帐户。我还有我们的内部域控制器,它具有域信任关系。现在,我使用域帐户创建了 2 个链接服务器,但我无法在内部和外部查询 LDAP 服务器。我希望这是有道理的。无论如何,这是我的链接服务器的定义和我收到的错误
[已解决] 链接服务器到内部 LDAP 服务器:这是通过使用 ADuser@domain.com 而不是 domain/ADuser 解决的
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'ADSI', @srvproduct=N'Active
Directory Service Interfaces', @provider=N'ADSDSOObject',
@datasrc=N'adsdatasource'
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'ADSI',@useself=N'False',@locallogin=NULL,
@rmtuser=N'Domain/ADUser',@rmtpassword='########'
Run Code Online (Sandbox Code Playgroud)
错误:
消息 7321,级别 16,状态 2,第 1 行准备查询时出错“SELECT *
FROM 'LDAP://Domain.com/OU=Accounts,DC=Domain,DC=com' --WHERE objectClass = 'User ' " 用于针对链接服务器 "ADSI" 的 OLE DB 提供程序 "ADSDSOObject" 执行。
链接服务器到外部 LDAP 服务器
USE …Run Code Online (Sandbox Code Playgroud) sql-server windows linked-server sql-server-2012 active-directory
存储过程查询有时会在其中一个表上的统计信息更新后得到一个糟糕的计划,但之后可以立即重新编译为好的计划。相同的编译参数。
问题似乎来自在 SP 中创建然后加入的一个小临时表。错误的计划在临时表上有一个警告,即连接列没有统计信息。是什么赋予了?
SQL Server 2016 SP1 CU4,具有 2014 兼容级别
糟糕的计划:
好计划:
USE AppDB
GO
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [MySchema].[MySP]
@MyId VARCHAR(50),
@Months INT
AS
BEGIN
SET NOCOUNT ON
SELECT *
INTO #MyTemp
FROM AppDB.MySchema.View_Feeder vf WITH (NOLOCK)
WHERE vf.MyId = @MyId AND vf.Status IS NOT NULL
SELECT wd.Col1
, vp.Col2
, vp.Col3
FROM AppDB.MySchema.View_VP vp WITH (FORCESEEK)
INNER JOIN #MyTemp wd ON wd.Col1 = vp.Col1
WHERE vp.Col3 > DATEADD(MONTH, @Months * -1, …Run Code Online (Sandbox Code Playgroud) sql-server optimization statistics execution-plan temporary-tables
我知道如果您根本不池化数据库连接,那么每次需要查询数据库时,您都要承担建立新数据库连接的开销,这会使您的应用程序变慢,并且您可以通过池化来节省该开销。
如果您将最大池大小设置得太小 - 比方说,最多 1 个连接 - 那么它的缺点是您的应用程序必须为所有请求共享该单个数据库连接,并且请求将不得不等待前一个连接完成数据库连接,然后才能从池中获取它并重新使用它。
但是,如果您只是将最大池大小设置得非常大,例如最大 1000 个连接,该怎么办。那么它不应该更倾向于重用连接而不是建立新连接,并且仅在实际需要时才最大化池大小以满足需求吗?
假设未使用的连接在空闲超时后关闭/从池中删除,使连接池大于满足应用程序需求所需的大小有什么缺点?
在 SQL Server 中,您可以IMPLICIT_TRANSACTIONS通过@@OPTIONS.
如何找到IMPLICIT_TRANSACTIONS另一个会话的值?
这绝对可以做到,因为 SQL Server Profiler 显示了这一点。
sql-server ×10
dbcc ×1
encryption ×1
heap ×1
maintenance ×1
metadata ×1
optimization ×1
statistics ×1
windows ×1