我一直试图弄清楚为什么我们的生产数据库最近增长如此之快,并发现原因是审计表。我们将存档表以解决问题,但我只是想检查表的大小对于像这样的大型 SQL 服务器表是否正常。它有 4,000,000 行,结构如下...
Name Type Nullable
AuditLogId bigint no
UserName nvarchar no
TimeOfChange datetime no
ObjectName nvarchar no
ChangeName nvarchar no
RecordId int yes
OriginalValues nvarchar yes
ResultingValues nvarchar no
Run Code Online (Sandbox Code Playgroud)
使用 AuditLogId 上的主键
ALTER TABLE [dbo].[AuditLog] ADD CONSTRAINT [PK_AuditLog] PRIMARY KEY CLUSTERED
(
[AuditLogId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
在 RecordId 上更新的记录还有一个外键。nvarchar 字段似乎有多达 12,000 …
我有一个 C# 计划任务,它每晚运行,并包含一个 kill 命令来删除现有数据库,以便可以重新创建它。它大约每周随机生成一次此错误。
杀死数据库失败。用户无权更改数据库“Foo”、数据库不存在或数据库未处于允许访问检查的状态。杀死数据库失败。
使用的C#如下。
srv.KillAllProcesses;
srv.KillDatabase;
Run Code Online (Sandbox Code Playgroud)
所以我已经在尝试终止所有进程。在执行 kill 命令之前是否还有其他检查或命令可以确保它成功执行?这不可能是用户权限问题,因为该操作大部分时间都在工作,那么什么可能导致“未处于允许访问检查的状态”?