重新启动Windows是否也会重新启动SQL Server?
长话短说,我刚刚进行了更改,以便 SQL Server 和 Windows 身份验证用户都可以登录。服务器需要重新启动才能使更改生效,我可以只重新启动计算机而不是服务器吗?
我的服务器存在配置问题,我想更改其中一项设置,以便 SQL 凭据也可以登录(而不仅仅是 Windows 身份验证)。我的管理员说您可以进行任何更改,但不要重新启动 SQL Server。我问我可以重新启动SQL Server所在的Windows服务器吗,他说可以。
重新启动计算机与重新启动 SQL Server 的作用不一样吗?
SQL Server 有一个类型标志,称为is_nullable您可以在 上看到它sys.types。目前,(SQL Server 2019)它只设置为FALSE两种类型,sys.timestamp和sys.sysname. 对sys.timestamp这种类型似乎接受null。在sys.sysname它没有。这种行为有什么解释吗?
你可以看到这些类型
SELECT * FROM sys.types WHERE is_nullable = 0;
SELECT TYPEPROPERTY('timestamp', 'AllowsNull'); -- returns 0
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它,
CREATE TABLE foo ( a sys.timestamp );
INSERT INTO foo (a) VALUES ( null );
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用,这将不起作用 sys.sysname
Run Code Online (Sandbox Code Playgroud)Msg 515 Level 16 State 2 Line 1 Cannot insert the value NULL into column 'a', table 'dbo.foo'; column does not allow nulls. INSERT …
有人可以帮我弄清楚我的理解是否正确:
在我的可读辅助副本的 AG 仪表板上,我看到:
那么,如果我的辅助 AG 需要将节点/故障转移或 SQL 重新启动作为活动的一部分,这究竟意味着什么?
这是否意味着我的二级数据库需要 4598 秒才能使用 24 GB 的重做队列启动这个数据库?
我很担心,因为我们的一个生产秒方在白天的大部分时间里重做大小为 400 GB,而从 AG 仪表板恢复时间将近 10 小时。这是否意味着所谓的 DR 受到了损害?
我刚刚做了一个测试故障转移,正如我从错误日志消息中看到的那样,数据库按预期进行了恢复,并看到它在 1235 秒内完成。只是好奇,因为估计恢复的数量还差得很远。这只是为了解释我的业务用户帮助他们我们正在谈论的中断窗口。
sql-server high-availability availability-groups sql-server-2017
如果 SQL Server 聚集索引是表的物理顺序,并且包含所有列,那么它是表本身吗?聚集索引是如何物理存储的?
我看过问答什么是聚集索引?但我的问题是关于这些的物理组织,而不是它们的功能。
从磁盘映像快照还原时,我想强制SQL Server 数据库进入恢复模式。有什么建议可以强制恢复单个或一组数据库,以便可以应用其他事务日志?
所以我有一个表,其中包含以下 select 语句中列出的一些列。
SELECT [AccountName],
[AccountNumber],
[Tenor],
[Currency],
[TotalCredit],
[TotalDebit],
[CreditCount],
[DebitCount],
[AccountBalance],
[StatementStartDate],
[StatementEndDate]
FROM [TAF.EligibilityService].[dbo].[AccountStatements]
Run Code Online (Sandbox Code Playgroud)
我想使用StatementStartDate和StatementEndDate选择 6 个月前和今天之间存在的记录。
例如,如果开始日期是 1 年前,只要结束日期还在 6 个月前,就应该返回记录。
提前致谢。
我知道表分区主要是为了数据管理。我知道大表的表维护变得更加困难,因为例如索引重建不能适应内存或因为例如使用 O(n*log(n)) 对比例进行排序,这会导致大表出现额外问题。
有人可以举一些例子,相对于服务器上的内存量,一个表应该有多大才能成为分区的明确候选者?假设表大于 RAM 量。不分区表是不好的做法吗?
我正在寻找一些可以作为分析依据的原则。
在下面的答案中链接到的文章中,它还提到:
- 长期运行的索引维护作业(或无法在所有运行他们,因为他们会花这么长时间)的参考。
所以我想我的问题可以表述为:考虑到硬件规格,当 SQL Server 没有分区时,SQL Server 何时开始出现行存储索引重建问题?
我不相信“这与桌子的大小无关”。当索引无法重建时,我会说分区与表的大小非常相关。
我有一种情况,我需要对大量类似的数据库运行查询。他们中的大多数人都会有一个表,我需要更新其中的一些行,但其中一些人没有该表。
我想编写一个查询,该查询具有IF检查表是否存在EXEC sp_executesql的UPDATE语句,而无需使用该语句。有没有办法在 SQL Server 中做到这一点?
这是我今天正在做的一个例子:
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[MyTableName]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
-- this is what I want to be able to do but cannot
UPDATE [dbo].[MyTableName] SET [SomeColumn] = NULL WHERE [SomeColumn] NOT IN (1, 2, 3)
-- this is the only way I know to do this without an error
EXEC sp_executesql N'UPDATE [dbo].[MyTableName] SET [SomeColumn] = NULL WHERE [SomeColumn] NOT …Run Code Online (Sandbox Code Playgroud) 考虑以下表达式,它从日期时间值截断(不舍入)毫秒数:
declare @now datetime2 = sysdatetime();
select @now;
select convert(datetime2, convert(varchar(20), @now, 120));
-- Output
2021-07-30 09:38:33.5566666
2021-07-30 09:38:33.0000000
Run Code Online (Sandbox Code Playgroud)
请注意varchar(20). 我不喜欢那个特定的长度值,因为如果我应该更改我的数据类型,可能会丢失数据:
declare @now datetimeoffset = sysdatetimeoffset() at time zone 'Pacific Standard Time';
select @now;
select convert(datetimeoffset, convert(varchar(20), @now, 120));
-- Output
2021-07-30 02:39:12.7200000 -07:00
2021-07-30 02:39:12.0000000 +00:00 -- oops, we lost the time zone too!
Run Code Online (Sandbox Code Playgroud)
因此,我更愿意使用以下内容:
declare @now datetimeoffset = sysdatetimeoffset() at time zone 'Pacific Standard Time';
select @now;
select convert(datetimeoffset, convert(varchar(max), @now, 120)); -- note …Run Code Online (Sandbox Code Playgroud) 我们在具有 8 个套接字和 20 个处理器的 VM 上托管了一个 UAT3 服务器,我们在具有相同配置的同一 VM 上托管了类似的 UAT2 服务器。
我们在两个服务器上运行以下查询
select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)
两个服务器具有相同的数据和相同的结构。
UAT2 和 UAT3 具有默认设置并行度5 和最大并行度的成本阈值0。
IN UAT2 服务器并行处理正在发生。它需要 10 秒才能完成,但 UAT3 串行处理正在发生,因为它需要 3 分 30 秒。
我们比较 UAT2 和 UAT3 服务器配置都相同。不知道为什么 SQL Server 在 UAT2 中选择并行执行而不是在 UAT3 中。
下面是表定义
select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)
下面是视图
CREATE TABLE [dbo].[FKMB_CUSTOMER](
[RECID] [nvarchar](64) NOT NULL,
[XMLRECORD] [xml] NULL,
[ALT_CUSTOMER] AS
([dbo].[IX_CUSTOMER_ALT_CUSTOMER]([XMLRECORD]))
PERSISTED,
[SMS] AS
([dbo].[IX_CUSTOMER_SMS_1]([XMLRECORD])) …Run Code Online (Sandbox Code Playgroud) sql-server ×10
datatypes ×2
metadata ×1
null ×1
parallelism ×1
partitioning ×1
performance ×1
recovery ×1
snapshot ×1
t-sql ×1