我要做的是查看我们的数据库并锁定所有auto-shrink设置,以及处理哪些数据库/表高度碎片化。
是否有我可以运行的特定脚本来获得每个数据库的好主意?
我知道我可以在每个表级别(至少 SQL Server 2005)运行以下内容:
DBCC SHOWCONTIG ('DB.TABLE');
Run Code Online (Sandbox Code Playgroud)
但是我可以运行什么来显示数据库中的所有表?
谢谢
是否可以检查何时将特定行插入到 SQL Server 中的特定表中?如果这有帮助,该表有一个索引。
我需要为已经插入行的现有表执行此操作。
谢谢。
比方说,我有一个单一的数据库.mdf和.ldf文件。
数据库已分离,没有事务并且 SQL Server 已停止。
我假设所有数据都已经在.mdf文件中了?
该.ldf文件基本上是空的?如果.ldf文件不为空,它包含什么?
如果我删除.ldf文件并手动创建一个.ldf与以前相同名称的新的 0 字节长文件,我是否能够再次附加数据库而不会丢失数据?
我们使用 ASPState 数据库在 SQL Server 2005 群集上保留 .NET 会话状态。我们在高峰期看到一些奇怪的行为
DeleteExpiredSessions 过程通过代理作业每分钟运行一次。有时这项工作需要花费几分钟来运行和删除过期的会话
从应用程序到 ASPState 数据库的请求非常缓慢。我相信这是因为 DeleteExpiredSessions 过程在表上持有排他锁
代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[DeleteExpiredSessions]
AS
SET NOCOUNT ON
SET DEADLOCK_PRIORITY LOW
DECLARE @now datetime
SET @now = GETUTCDATE()
DECLARE @tblExpiredSessions TABLE
(
SessionID nvarchar(88) NOT NULL PRIMARY KEY
)
INSERT INTO @tblExpiredSessions (SessionID)
SELECT SessionID
FROM [ASPState].dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
WHERE Expires < @now
--EXPIRED SESSION LOGGING
/*
DECLARE @ExpiredSessionCount Int;
SELECT @ExpiredSessionCount = COUNT(SessionID)
FROM @tblExpiredSessions; …Run Code Online (Sandbox Code Playgroud) 我们在一个 SQL Server 2005 实例上有两个数据库,它们之间有事务复制(3 个表作为文章)。该服务器同时充当发布者和分发者。
然后服务器上的 RAID 失败。然而,我们设法.mdf在崩溃之前分离并复制了几乎所有文件。
系统恢复后,我们重新安装了SQL Server,恢复了系统数据库(master、model、msdb)并将.mdf文件放在相同的路径下。于是开始了。
问题出现在复制中。在本地发布文件夹是空的,虽然本地订阅文件夹包含有问题的订阅。当我尝试添加新出版物时,我得到了:
新发布向导在检索发布名称时遇到一个或多个错误。
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
无效的对象名称“dbo.syspublications”。(Microsoft SQL Server,错误:208)
我决定尝试删除左订阅(最终我设法)并禁用服务器上的发布和分发,这给了我:
SQL Server 无法禁用“someserver”上的发布和分发。
无效的对象名称“dbo.syssubscriptions”。EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。 EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。 EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。 EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。 EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK …
replication sql-server-2005 sql-server transactional-replication
我想获得一些关于 SQL Server 删除行为的额外见解/推理。我们有一个相当大的数据库,超过 1800 GB。
其中有一些非常浅的表(只有几个整数列)有数百万行。当我们从这些浅表中删除 10,000 行时,删除查询通常非常快(最多几秒钟)。
我们还有一个表,其中的字段类型image存储平均 100 KB 的图像。当我们从这个表中只删除几千行时,需要一分钟多的时间。
虽然区别很明显(删除了更多的数据大小),但我很想了解更多关于 SQL Server 内部发生的事情。这样我就可以更好地理解后者的删除速度要慢得多。
任何人都可以请说明一下吗?
我有一个我依赖的愚蠢的应用程序,里面有硬编码的连接字符串。
为了提高我的 SQL Server 的安全性,我想让 SQL 用户与内部应用程序的硬编码相同,但我希望该用户只能从特定主机(IP 地址)使用 SQL Server。
由于包含透明数据加密功能的 SQL Server 企业版成本高,我正在寻找替代产品,但只找到了几个选项:
任何人都可以提供他们对上述任何一种产品的体验的详细信息(性能影响、易用性等)?
SQL Server TDE 的任何其他替代方案?
注意:我们目前使用的是 SQL Server 2008 R2 标准版。
sql-server sql-server-2008-r2 encryption transparent-data-encryption
我刚刚在 Win8.1 的加入域的 VM 实例上成功安装了 SQL Server 2014 Express。
在我运行的安装过程中,我DOMAIN\Admin接受了将当前用户添加为 SQL 管理员的默认配置。但是,在完成后重新考虑后,我想使用该DOMAIN\DbAdmins组而不是域上的单个用户。
一切都很好。创建组,将其添加到 SSMS 中 SQL Server 的安全节点,将其置于 SysAdmin 角色中,授予“连接 SQL”安全性,然后我们就可以关闭并运行了——对吗?
没那么快。
安装程序映射DOMAIN\Admin到这两个数据库上的 dbo 用户:
当然,dbo 不能被修改或删除。
我想在不卸载和重新安装 Reporting Services 的情况下执行此操作。有可能这样做吗?
有没有办法跟踪对 SQL Server 代理作业所做的更改?
如果您有理由相信有人在玩弄您的工作设置。您将如何继续跟踪是谁做的以及从哪里对单个工作进行了更改?
我正在考虑扩展事件的思路。
sql-server ×10
security ×2
encryption ×1
jobs ×1
locking ×1
logins ×1
performance ×1
replication ×1
session ×1
transparent-data-encryption ×1
users ×1