小编Chi*_*isu的帖子

删除辅助数据文件。DBCC SHRINKFILE:无法移动页面,因为它是工作表页面

我为 .ndf 创建了太多辅助数据文件 (.ndf) tempdb。要删除多余的文件,我需要清空文件(内容将移动到其他文件):

DBCC SHRINKFILE('tempdbfile8', EMPTYFILE);
Run Code Online (Sandbox Code Playgroud)

然后删除文件:

ALTER DATABASE tempdb REMOVE FILE tempdbfile8;
Run Code Online (Sandbox Code Playgroud)

但是EMPTYFILE命令返回错误:

DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page.
Msg 2555, Level 16, State 1, Line 2
Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation.
Run Code Online (Sandbox Code Playgroud)

不用担心,我只需要找到使用此页面的对象即可:

DBCC TRACEON (3604)
DBCC PAGE(2,8,41920) --dbid=2, fileid=8, pageid=41920
Run Code Online (Sandbox Code Playgroud)

该命令返回了很多信息,其中的object_id。但:

Metadata: ObjectId = 0 
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么办。什么猫阻止了这个页面被移动?如何定位该对象、进程、会话或其他任何内容?任何帮助将不胜感激,但请注意保持原样或删除其他文件不是解决此问题的有效方法;)。

编辑:

我正在删除这些文件,因为我们曾经遵循“最佳实践”,即为每个处理器内核创建一个文件(相同的初始大小,相同的增长率)。但据我所知,在遇到争用问题之前,没有必要在同一设备上创建额外的 tempdb 文件。在我们的例子中,这是有道理的,因为我们打开了MPIO,并且存储设备可以处理 4 个路径。但是有一个错误,我们最终得到了 …

sql-server data-pages dbcc sql-server-2008-r2 datafile

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

消息 7391,SQL Server 上的分布式事务 (DTC)

这可能与 DBA 相关或与开发人员相关,老实说我不知道​​。

我有两个数据库服务器:

A: SQL Server 2005 (Trigger that uses DBMail on Server B)
B: SQL Server 2008 R2 (DBMail configured)
Run Code Online (Sandbox Code Playgroud)

我在服务器 A 中有一个表,其中电子邮件通知排队,我创建了一个“插入后”触发器来sp_send_dbmail使用服务器 B执行,就像这样......

A: SQL Server 2005 (Trigger that uses DBMail on Server B)
B: SQL Server 2008 R2 (DBMail configured)
Run Code Online (Sandbox Code Playgroud)

这就是我需要帮助的奇怪之处,请注意,这似乎是一个记录非常差(或严重缺乏)的功能。

现在我可以使用一些示例数据执行最后一条语句,一切正常。但是当我尝试像这样插入表格时......

USE SampleDB
ALTER TRIGGER [dbo].[mail_inserted] 
   ON [dbo].[tblEmailQueue]
   AFTER INSERT
AS 
BEGIN
    declare @MailTo nvarchar(max), @MailSubject nvarchar(max), @MailBody nvarchar(max)
    -- Initialize vars
    select @MailTo=MailTo from inserted
    select @MailSubject=MailSubject from inserted
    select @MailBody=MailBody from …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server linked-server msdtc distributed-transactions

3
推荐指数
1
解决办法
7501
查看次数

条件 WHERE 子句

据我所知,我有一个独特的问题。我想知道是否有一种方法可以构造一个查询,其中实际 where 子句本身的存在是有条件的。

我正在编写一个存储过程,我想在其中传递一个过滤器(例如Col1=1 or Col2=3),并且我的查询如下所示:

set @filter = 'Col1=1 or Col2=3' --assume these variables have been declared already
select * from @tbl where @filter --I need to use a table variable
Run Code Online (Sandbox Code Playgroud)

注意:我尝试使用sp_executesqlandsp_sqlexec但都不采用表变量。我还想避免使用if-else声明。请不要建议其中任何一个作为您的答案。:)

sql-server-2005 sql-server condition

3
推荐指数
1
解决办法
2930
查看次数

通过插入触发器安全地发送数据库邮件

到目前为止,我已经花了大约 30 个小时努力sp_send_dbmail去上班。我终于得到了一些工作,但我严重怀疑它的安全性。我想知道一种更好但快速且易于设置的方法(此时我的时间受到严重限制),以及“理想”(最佳实践)解决方案。

当前 SQL Server 2005 配置

- `After Insert` Trigger on table executes `sp_send_dbmail`
- Database Mail SMTP Account setup (with successful mail test)
- Database Mail Profile setup (with "Public Profile" ticked)
- "guest" account added to "DatabaseMailUserRole"
Run Code Online (Sandbox Code Playgroud)

我发现这篇文章提出了“正确”的解决方案,我阅读了这篇文章,在那里我发现这是一个非常复杂的解决方案,似乎有太多可能出错的事情,更不用说难以维护了。

我对替代解决方案的想法是这些。

1. Setup an Application Role in msdb (this would be my first time using one
    and not even sure if it IS a solution :P), and use it to ensure that …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server-2005 security database-mail

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

更改为静态端口的影响

我目前有一个 SQL Server 托管两个生产实例,其中有许多 Web 应用程序可以访问它们。据我所知,这些应用程序都没有在其连接字符串中使用特定端口,我也不知道这是否重要。

我的问题是,将这些实例分配给静态端口有什么含义?这会破坏我的应用程序吗?在执行此操作之前,我还需要进行或考虑其他调整吗?

问的原因?我的基础架构团队要求我分配静态端口,以便为受限委派权限分配 SPN。谢谢。;)

sql-server

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