小编Geo*_*ios的帖子

在日志备份期间,数据是备份到操作开始还是结束?

假设我正在运行日志备份,并且该日志备份需要 10 分钟才能完成。在这 10 分钟的窗口中,将运行进一步的事务。鉴于以下示例,日志备份实际上包含哪些事务?

  1. 事务 A 提交
  2. 事务 B 打开
  3. 日志备份开始
  4. 交易 C 开启
  5. 事务 B 提交
  6. 日志备份完成
  7. 事务 C 提交

sql-server backup sql-server-2012 transaction-log

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

ALTER TABLE ... DROP COLUMN 真的是元数据操作吗?

我发现了几个声明 ALTER TABLE ... DROP COLUMN 是仅元数据操作的来源。

来源

怎么会这样?DROP COLUMN 期间的数据是否不需要从底层非聚集索引和聚集索引/堆中清除?

此外,为什么Microsoft Docs暗示它是一个完整记录的操作?

对表所做的修改会被记录下来并且完全可以恢复。影响大表中所有行的更改(例如删除列或在某些版本的 SQL Server 上添加具有默认值的 NOT NULL 列)可能需要很长时间才能完成并生成许多日志记录。以与影响多行的任何 INSERT、UPDATE 或 DELETE 语句相同的方式运行这些 ALTER TABLE 语句。

作为次要问题:如果数据没有从底层页面中删除,引擎如何跟踪删除的列?

sql-server alter-table transaction-log

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

如何检查触发器是否在 INSERT、UPDATE 或 DELETE 语句上触发?

如何确定触发器是针对 INSERT、UPDATE 还是 DELETE 语句?

我已签入sys.triggers,但看不到与触发器触发的操作相关的任何内容。

trigger sql-server

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

删除自动创建的 NT AUTHORITY 和 NT SERVICE 帐户

所以我最近转移了工作——我在我们的新 SQL Server 安装的构建脚本中发现的一段代码如下。

IF EXISTS ( SELECT  *
            FROM    [sys].[syslogins]
            WHERE   [name] = N'NT AUTHORITY\SYSTEM' )
    BEGIN
        DROP LOGIN [NT AUTHORITY\SYSTEM];
    END

IF EXISTS ( SELECT  *
            FROM    [sys].[syslogins]
            WHERE   [name] = N'NT SERVICE\SQLWriter' )
    BEGIN
        DROP LOGIN [NT SERVICE\SQLWriter];
    END

IF EXISTS ( SELECT  *
            FROM    [sys].[syslogins]
            WHERE   [name] = N'NT SERVICE\Winmgmt' )
    BEGIN
        DROP LOGIN [NT SERVICE\Winmgmt];
    END
GO
Run Code Online (Sandbox Code Playgroud)

默认情况下,这些帐户是在 SQL Server 安装过程中创建的。

是否建议删除上述登录?这会导致任何副作用吗?这些登录有什么用?

我阅读了能否删除 NT SERVICE\SQLWriter 和 NT SERVICE\Winmgmt 登录名?但这还不够具体-我可以看到它们的用途,但除此之外很少见。他们需要系统管理员访问权限吗?等等。

例如(取自配置 Windows 服务帐户和权限 …

security sql-server sql-server-2016

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

帮助解释执行计划(哈希聚合)

所以我有一个我正在尝试优化的执行计划,并且有一段我不太明白的操作符。

计划中有一部分使用了计算标量,然后是使用哈希匹配的聚合。

我有一个问题:

如何使用哈希匹配聚合器的属性来告诉我它输出的是哪些列?我不知道正在对哪些列执行聚合。

这是计划的部分: 在此处输入图片说明

这是运算符属性:

在此处输入图片说明

为元素规划 XML:

<RelOp NodeId="489" PhysicalOp="Hash Match" LogicalOp="Aggregate" EstimateRows="25432.8" EstimateIO="0" EstimateCPU="621.202" AvgRowSize="1038" EstimatedTotalSubtreeCost="12113" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
                  <OutputList>
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="id" />
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="description" />
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="unitPrice" />
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="units" />
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="billCurrencyAmount" />
                    <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="Item" />
                    <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="InvoiceLineCategory" />
                    <ColumnReference Column="Expr1066" />
                    <ColumnReference Column="Expr1067" />
                    <ColumnReference Column="Expr1068" />
                    <ColumnReference Column="Expr1069" /> …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization execution-plan

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

在计划中遵循计算标量运算符的错误行估计

我正在努力理解执行计划中行估计的来源。

粘贴计划链接

declare
@BatchKey INT = 1, @ParentBatchKey INT = 1,
@QuoteRef varchar(50) = 'Q00018249',
@MpanRef varchar(50) = '1425431100004'


SELECT DISTINCT
        ISNULL(c.ContractReference,-1) AS [ContractReference] ,
        ISNULL(d_cd.ContractDetailsKey,-1) AS [ContractDetailsKey] ,
        -1 AccountManagerKey,
        -1 SegmentationKey,
        ISNULL(d_tpi.TpiKey,-1) AS [TpiKey] ,
        ISNULL(d_cu.CustomerKey,-1) AS [CustomerKey] ,
        ISNULL(d_p.ProductKey,-1) AS [ProductKey] ,
        -1 as PayPointKey,
        -1 AS [GspBandingKey], --Not used in Junifer ESOB
        ISNULL(d_pps.[ProductPricingStructureKey],-1) AS [ProductPricingStructureKey],
        ISNULL(d_tou.TouBandingKey,-1) AS [PricingStructureBandingKey],
        -1 AS [VolumePointCategoryKey],
        ISNULL(d_ppc.PowerPeriodCategoryKey,-1) AS [PowerPeriodCategoryKey],
        ISNULL(d_pcat.[PriceComponentAggregationTypeKey],-1) AS [PriceComponentAggregationTypeKey],
        -1 AS [MarginRateBandingKey], --Not used in Junifer ESOB
        -1 …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization execution-plan sql-server-2014 cardinality-estimates

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

关于非生产数据库刷新和 TDE 的最佳实践

假设我们有一个生产系统,其中有几个使用 TDE 加密的数据库和一个自生成的证书。

我们经常需要使用这个数据库并更新我们的非生产系统。此过程涉及备份源数据库、将其恢复到预生产状态、混淆个人数据和许多其他项目。

这里的关键事实是预生产系统具有生产的加密证书副本

我正在寻找使此过程更安全的方法 - 我对预生产环境中的证书不满意。有没有另一种方法可以:

  1. 永远不要在任何地方保存未加密的备份
  2. 不允许将个人数据从生产传播到非生产系统?

sql-server best-practices transparent-data-encryption sql-server-2014

5
推荐指数
2
解决办法
1127
查看次数

SQL Server 可以在单个 INSERT 语句中将多少行处理到一个表中?

为了说明我的问题,以下是一个查询,检测尚未插入数据仓库并插入它们的订单的 id:

With NewOrders 
As
(   
    Select OrderID From Orders
    Except
    Select OrderID From FactOrders
)
Insert Into FactOrders(OrderID, OrderDate, CustomerId)
    Select OrderID, OrderDate, CustomerId From Orders
    Where OrderID in (Select OrderID from NewOrders);
Run Code Online (Sandbox Code Playgroud)

假设查询是第一次运行并且Orders包含 4 亿行或更多行:

SQL Server 能否在一条INSERT语句中处理这么多行?

如果没有,我应该如何进行?我应该限制INSERT语句中提取的行数吗?引擎可以在单个INSERT语句中处理多少行?

data-warehouse sql-server t-sql azure-sql-data-warehouse

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

我应该为同一个 SQL 实例上的两个可用性组创建两个端点吗?

我有一个运行 SQL Server 2012 的两节点集群。我想在 SQL Server 的同一实例中创建两个可用性组。

我应该为每个 AG 添加一个端点,还是应该允许两个 AG 使用相同的端点?

我已阅读此处的文档但与多个端点有关的唯一部分与多个 SQL 实例有关

请注意,如果给定计算机上的多个服务器实例需要数据库镜像端点,请为每个端点指定不同的端口号。

sql-server sql-server-2012 availability-groups

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

有没有办法减少在时间点恢复上花费的时间?

我很确定我知道这个问题的答案,但时间点恢复的局限性让我大吃一惊。

假设我有一个 2TB 的数据库设置为FULL恢复模式。我认真地每 30 分钟进行一次每周完整备份、每日差异备份和日志备份。

现在,我想将数据库回滚到 1 小时前。我真的必须在一小时前恢复整个完整备份、差异和日志吗?我是否正确地认为这将需要很长时间?

有没有办法ROLLBACK使用事务日志文件进行更改,以便这种类型的恢复需要几分钟?

sql-server backup recovery sql-server-2017

5
推荐指数
2
解决办法
631
查看次数