小编Tho*_*ger的帖子

基于填充因子的索引中数据的行为

假设您有一个默认填充因子为 20 的数据库。每当插入数据时,它是否只创建填充到 20% 的页面?

据我了解,插入数据时,页面中将有大约 20% 的数据。但是,当数据更新时,它会扩展到索引的 20% 以上,直到填充它并生成页面拆分,对吗?

index sql-server sql-server-2008-r2 fill-factor

14
推荐指数
1
解决办法
1526
查看次数

列出现有的 SQL Server 登录名和用户

我知道我们可以使用 SQL Server 中的 GUI 检查登录名和定义的用户,但我想知道如何使用脚本进行此检查。

我运行了下面的查询,但它显示了 Principal_id,我不确定如何映射以获得权限级别。

SELECT * FROM Sys.login_token 
Run Code Online (Sandbox Code Playgroud)

那么是否有任何内置的存储过程可以列出登录名和具有权限级别的用户?

谢谢你。

sql-server-2008 security sql-server

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

移动日志文件而不使数据库脱机

我需要将数据库日志文件移动到新分区而不使数据库脱机。

执行此操作的正常方法是分离数据库,移动日志文件,然后重新附加数据库。

是否可以在不使数据库本身离线的情况下执行此操作,如果可以,如何执行?

sql-server sql-server-2008-r2

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

DBCC CHECKDB 每 20 - 60 秒触发一次

我有一个开发环境,它正在快速部署到生产环境中,并且在日志中注意到大约每 20 秒我就会看到一条消息:

Starting up database 'dbname'
CHECKDB for database 'dbname' finished without errors
Run Code Online (Sandbox Code Playgroud)

我注意到这一点是因为正在测试它的最终用户有一个问题,我将其与我在 Windows 事件日志(应用程序日志)中注意到的错误隔离开来:

The log for database 'dbname' is not available. Check event log for related messages.
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我没有发现相关消息,但通过离线/在线循环解决了。

我唯一能想到的是,这个应用程序每 1 毫秒收集一次数据,但所有这些数据都没有插入到数据库中。作为一个开发服务器,它被配置为日志和数据在同一个驱动器上。考虑到这两条信息,我倾向于这是一个 IO 问题,并且服务器正试图从与存储 (SAN) 的连接丢失中恢复。然而,即使这对我来说也没有意义,因为它并没有丢失所有 dbs,只是丢失了这个。还有什么可能导致这种情况?

平台:Windows Server 2008 R2 (Std.) 上的 SQL Server 2008 R2 (Ent.)

sql-server sql-server-2008-r2 transaction-log

13
推荐指数
1
解决办法
5746
查看次数

“数据库正在转换”错误

今天,我试图在现有数据库上恢复数据库,我只需在 SSMS --> 任务 --> 脱机中右键单击该数据库,以便我可以恢复数据库。

一个小的弹出窗口出现并显示Query Executing.....了一段时间,然后抛出一个错误说Database is in use cannot take it offline。我从中收集了一些与该数据库的活动连接,因此我尝试执行以下查询

USE master
GO
ALTER DATABASE My_DatabaseName
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
Run Code Online (Sandbox Code Playgroud)

再次在这一点上 SSMS 显示Query Executing.....了一段时间,然后抛出以下错误:

Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'My_DatabaseName'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Run Code Online (Sandbox Code Playgroud)

在此之后,我无法通过 SSMS 连接到数据库。当我尝试使用 SSMS 将其离线时,它抛出了一个错误:

Database is …
Run Code Online (Sandbox Code Playgroud)

sql-server backup sql-server-2008-r2 restore

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

SQL Server 2008/R2 恢复模型

我们在某些服务器上的几乎所有数据库都不需要完全恢复模型(我们不进行事务日志备份),并且默认设置应该始终是创建数据库并指定简单恢复模型。

很多时候,出于某些实际原因,许多数据库是使用 SSMS 创建的。然而,可能会犯错误,操作员可能会忘记指定简单恢复模型。几天后,当由于三四个 60GB 的日志文件从未被截断而使盒子在磁盘空间上挣扎时,这会导致“意外”。

通过在model数据库上配置恢复模型,我可以使简单恢复模型成为新数据库的默认设置。但是,这是推荐的,如果我这样做,它会在将来以任何方式回来咬我吗?

sql-server-2008 sql-server sql-server-2008-r2

11
推荐指数
2
解决办法
1761
查看次数

是否可以在 SSMS 的对象资源管理器中过滤数据库列表?

我知道如何过滤表列表 - 使用过滤器图标。但是,选择数据库节点时,禁用此图标。

不过,我想知道是否有可能。

sql-server ssms

11
推荐指数
1
解决办法
5823
查看次数

一个索引还是两个?

我在数据库的表上创建了以下索引:

CREATE INDEX [idx_index1]
on [table1]
(col1, col2, col3)
Run Code Online (Sandbox Code Playgroud)

服务器建议以下“缺失”索引:

CREATE INDEX [idx_index2]
on [table1]
(col1, col2)
INCLUDE (col3, col4, col5, col6....)
Run Code Online (Sandbox Code Playgroud)

在我看来,修改现有索引定义以包含建议的列而不是创建需要维护的新索引似乎是合乎逻辑的。在 col1 和 col2 上进行选择的查询可以像使用 index2 一样有效地使用 index1。我是正确的还是我可能遗漏了什么?

index sql-server sql-server-2008-r2 index-tuning

11
推荐指数
2
解决办法
256
查看次数

镜像数据库上的事务日志维护

SQL Server 版本:2008 R2 Enterprise SP2

我正在尝试处理我们的 SQL Server 维护,但我遇到了一些我认为不正确的事情。我们有一个带有 3 个数据库的单个生产实例,每个数据库都异地镜像到一个 DR 实例。

在查看 DR 实例时,我注意到 LDF 文件很大,对于频繁使用的数据库超过 35GB。

我知道这可能是由于镜像数据库处于完全恢复模式并且日志从未备份过,它们只会继续增长,直到驱动器空间耗尽。

我们在主体数据库上做日志备份,我的问题是在镜像上做日志备份有什么问题?

在进行日志备份之前,必须至少完成一次来自镜像的完整数据库备份,在这种情况下,是否需要使用特殊选项,因为它是镜像?

这也是MIRROR数据库上的事务日志维护建议。

感谢您提供任何意见

sql-server-2008 sql-server mirroring transaction-log

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

获取失败或从未提交的事务

有什么地方可以查找 SQL Server 2012 中的失败事务吗?

sql-server transaction sql-server-2012

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