我正在 SQL Server 2014 中创建聚集列存储索引。 
我收到错误
“超时已过期。在操作完成之前超时时间已过,或者服务器没有响应。(Microsoft SQL Server)”。
我设置
EXEC sp_configure 'remote query timeout', 60000;
reconfigure
EXEC sp_configure
行数 = 304969603 数据空间 = 88,812.266 MB
我正在从没有文档的旧系统中归档数据。幸运的我...
我想知道表的创建时间、上次访问时间等。我可以相信这个查询会给我正确的答案还是我首先需要检查一些参数?SQL Server 2008 R2:
SELECT t.Name AS Tabelname, p.rows AS NoOfRows, MAX(us.last_user_lookup) AS LastUsed, t.create_date AS CreatedDate
FROM sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
LEFT JOIN --A lot of the tables did not have any records in this table
sys.dm_db_index_usage_stats as us ON t.OBJECT_ID = us.OBJECT_ID
GROUP BY t.Name, p.rows, create_date
ORDER BY MAX(us.last_user_lookup) DESC
Run Code Online (Sandbox Code Playgroud) 我们最近将生产实例从 SQL 2008 R2 迁移到全新的 SQL 2014 服务器。这是我们在使用 Service Broker 时发现的一个有趣场景。考虑一个Broker Enabled = true带有MyService和的数据库MyQueue。此队列上禁用了毒物消息处理。队列中至少有 2 个与消息的活动对话。
在一个进程 (SPID 100) 中执行:
BEGIN TRANSACTION;
DECLARE @conversation_group_id UNIQUEIDENTIFIER;
RECEIVE TOP (1) @conversation_group_id = conversation_handle FROM MyQueue;
Run Code Online (Sandbox Code Playgroud)
请注意,我们将事务保持打开状态。假设它是一个 .NET 程序,它在某些外部资源上等待了很长时间。通过sys.dm_tran_locks我们看到该 SPID 已被授予对队列的 IX 锁。
| type | resource_id | mode | status | spid |
| OBJECT | 277576027 | IX | GRANT | 100 |
Run Code Online (Sandbox Code Playgroud)
在单独的进程 (SPID 101) 中执行五次:
BEGIN TRANSACTION;
DECLARE @conversation_group_id …Run Code Online (Sandbox Code Playgroud) 我们正在将 IIS/SQL Server 站点从 2008 年迁移到 2012 年,但我遇到了身份验证问题。我们使用 Windows 身份验证作为 进行身份验证DOMAIN\COMPUTER$,但这不起作用,并给出错误消息:
用户 'DOMAIN\COMPUTER$' 登录失败。原因:找不到与提供的名称匹配的登录名。[客户端:<本地机器>]
我已经验证该帐户存在,甚至删除并重新创建它
create login "DOMAIN\COMPUTER$" from windows
Run Code Online (Sandbox Code Playgroud)
如果我再做一次,我得到的回应是:
消息 15025,级别 16,状态 2,第 1 行
服务器主体 'DOMAIN\COMPUTER$' 已经存在。
(DOMAIN\COMPUTER替换为真实的域和计算机名)
所以看起来该站点正在查询 SQL Server,但 SQL Server 并没有非常努力地查看其登录信息。
我错过了什么?
有一个在 Windows 2012 R2 上运行的 SQL Server 2014 实例,每周运行 Ola Hallengren 的数据库完整性脚本,最近两周开始出现此错误:
DESCRIPTION: The operating system returned error 665(The requested operation could
not be completed due to a file system limitation) to SQL Server during a write at
offset 0x000036ec240000 in file 'E:\DBFiles\XXXXX.mdf_MSSQL_DBCC42'. Additional
messages in the SQL Server error log and system event log may provide more detail. This
is a severe system-level error condition that threatens database integrity and must be
corrected immediately. Complete a full database consistency …Run Code Online (Sandbox Code Playgroud) 我应该如何转义%参数中的字符,以便我重新调整RAISERROR我的消息
declare @msg varchar(max) = (SELECT ' Message with % ' AS MSG)
if @msg is not null
begin
RAISERROR (@msg ,16,1);
end
Run Code Online (Sandbox Code Playgroud)
这将引发错误消息
消息 2787,级别 16,状态 1,第 4 行
无效的格式规范:“%”。
对于最终用户,此消息是不可读的。
我的消息是从数据库生成并设置此消息。
我避免收到错误消息的方法是替换
set @msg = REPLACE(@msg,'%','P')
Run Code Online (Sandbox Code Playgroud)
但是我还是不知道怎么加%符号
我试图了解不同的设置如何影响我的服务器 - 客户端通信的行为。在服务器上,我安装了一个自签名 CA,并带有已发布的交换证书,该证书也已配置为供我的 SQL 服务使用。
起初,当客户端上尚未安装根 CA 时,我希望看到此连接失败。但无论我做什么,它似乎都有效。
为了更好地理解原因,我试图列出所有选项以及它们应该产生的效果。但我不确定我是否理解正确......
任何人都可以帮我更正并填写这里缺少的部分吗?
在SQL Server 上启用“强制加密”设置时:
Encrypt=True;TrustServerCertificate=True;我的连接字符串中的设置相同。客户端对是否应该使用加密以及是否应该信任服务器没有发言权。在SQL Server 上启用“强制协议加密”设置时:
在客户端上使用“强制协议加密”设置时:
在服务器和客户端上启用“强制协议加密”设置时:
在服务器上同时启用“强制加密”和“强制协议加密”时:
我在 SQL Azure 上有一个数据库,想为此创建一个数据库图表,但不想安装 SQL 服务器并复制数据库等。有什么方法可以做到这一点,有人知道吗?
我不确定是否有一个命名模式,或者是否没有,因为这是一个糟糕的主意。但我需要我的服务在主动/主动负载平衡环境中运行。这只是应用程序服务器。数据库将位于单独的服务器上。我有一个服务,需要为表中的每条记录运行一个过程。此过程可能需要一两分钟,并且每 n 分钟重复一次(可配置,通常为 15 分钟)。
有一个需要此处理的 1000 条记录表,以及针对同一数据集运行的两个服务,我希望每个服务“签出”要处理的记录。我需要确保一次只有一个服务/线程在处理每条记录。
我有同事过去使用过“锁表”。将一条记录写入此表以在逻辑上锁定另一个表中的记录(顺便说一句,该其他表非常静态,并且添加了非常偶然的新记录),然后删除以释放锁定。
我想知道如果新表有一个列指示它何时被锁定,并且它当前被锁定,而不是不断插入删除,是否会更好。
有没有人有这种事情的提示?是否存在长期(ish)期限逻辑锁定的既定模式?关于如何确保一次只有一项服务获取锁的任何提示?(我的同事使用 TABLOCKX 锁定整个表。)
大家早,
我一直在研究一些中等复杂的 sql,以从第三方产品数据库“获取”一些数据,并将其显示在我们自己的内部应用程序中。
我添加了一个选择以从子查询中的表中获取顶部记录(如果这是有道理的)
查询用了将近 3 分钟才返回一个包含 100 条记录的最终结果集
SELECT TOP 1 ...
Run Code Online (Sandbox Code Playgroud)
我在网上查看了我试图实现的改进,有人建议我更改我的选择以使用变量,如下所示
DECLARE @topCount INT
SET @topCount = 1
SELECT TOP (@topCount) ...
Run Code Online (Sandbox Code Playgroud)
这将相同的查询从 3 分钟缩短到 1 秒,这太棒了!
但谁能解释为什么会这样。
sql-server ×10
locking ×2
t-sql ×2
columnstore ×1
dbcc-checkdb ×1
encryption ×1
metadata ×1
raiserror ×1
ssl ×1