标签: sql-server-2016

分布式可用性组和侦听器

我目前正在使用分布式可用性组进行我的第一次设置。这是目前的 POC 设置,但通常很快就会实施。我有 4 个节点,2 个节点放在一起,另外 2 个也放在一起,但它们之间有一些距离。

我使用自动播种设置了 Distributed AG,到目前为止一切都很好。数据库已同步到辅助可用性组,没有任何问题。

现在是实际问题:我为我的 AG(主要和次要)创建了两个侦听器,但是我无法为我的分布式 AG 创建一个侦听器(关于它的信息不多)。这带来了我的应用程序必须是侦听器感知的问题......

有没有办法为分布式 AG 创建侦听器,即使我们对分布式可用性组进行故障转移,应用程序也始终能够通过它进行连接?

sql-server listener availability-groups sql-server-2016

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

将 csv 文件加载到 SQL Server 2016 的最有效方法是什么?

好的,所以这个问题看起来很简单。好吧,它不仅仅是加载文件。

整个故事是这样的:出于某种原因,我们的客户向我们发送了只能被描述为关系数据库的内容,被压缩,压缩成单个 csv 文件(但分隔符是波浪号而不是逗号)。实际上,这有点可怕;相同的数据在整个文件中无限重复。因此,为了使这些数据恢复秩序,我将其加载到实际的关系数据库中。由于数据量很大,将其加载到数据库中可以更轻松地检查数据是否存在问题。它还使导出变得更加容易。

每条记录有 53 行,每次传输大约有 250,000 条记录。我想把它分成 6 个标准化表。我不确定是否要验证 C# 程序或我正在使用的 SQL Server 2016 LocalDb 实例中的数据。

我不是经验丰富的 DBA;我是一名 C# 程序员,对 SQL 有所涉猎。我对语法感到很舒服,但我想确保我这样做是正确的。

此外,一切都必须完全自动化。文件进来,C# 程序在收到文件时启动,并将其加载到数据库中。

让我解释一下布局。该文件有 53 个字段,每行包含一个报表明细行(他们的收费内容、项目收费的频率、该项目的总成本或贷项等)。问题是每一行都包含整个邮寄、付款人、居民、财产和汇款的信息。知道了这一点,让我解释一下我现在是如何做的:

  1. 打开文件
  2. 对于文件的每一行,检索描述邮寄、付款人、居民、财产和汇款目的地的表的键。
  3. 将该数据与缓存的数据进行比较。如果缓存的数据无效,请查询数据库以查看是否已添加该实体。如果没有,请创建它。缓存那个。
  4. 添加新的详细信息行并将其与邮件相关联,邮件与详细信息是一对多的关系。(邮寄本身与付款人、财产和汇款是多对一的关系。)
  5. 完成后关闭文件。

这不是世界上最慢的事情,但它完全是在 RAM 中完成的。由于程序在当前状态下非常接近 RAM 耗尽,我们决定将数据加载到数据库中,而不是将其全部保存在本地 RAM 中。希望这可以为潜在的回答者提供更多信息。谢谢!

sql-server c# csv sql-server-2016

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

基于前一行合并一行数据

我正在尝试从审计日志中构建一个历史表(最终构建一个类型 2 的维度表)。不幸的是,审计日志只记录正在更改的特定字段。这是我正在谈论的一个粗略的例子;

CREATE TABLE Staff(
  [ID] int, 
  [Surname] varchar(5), 
  [FirstName] varchar(4), 
  [Office] varchar(9), 
  [Date] varchar(10)
);

INSERT INTO Staff ([ID], [Surname], [FirstName], [Office], [Date])
VALUES
  (001, 'Smith', 'Bill', 'Melbourne', '2015-01-01'),
  (001, NULL, NULL, 'Sydney', '2015-03-01'),
  (002, 'Brown', 'Mary', 'Melbourne', '2014-04-01'),
  (002, 'Jones', NULL, 'Adelaide', '2014-05-01'),
  (002, NULL, NULL, 'Sydney', '2015-01-01'),
  (002, NULL, NULL, 'Perth', '2015-03-01');
Run Code Online (Sandbox Code Playgroud)

特定工作人员的第一个条目是创建他们的记录的时间,每个后续记录都是更新...但仅显示对已更新字段的更新*。我想用当前员工记录的其余部分“填写”更新行。即,这样的结果;

001, Smith, Bill, Melbourne, 2015-01-01
001, Smith, Bill, Sydney, 2015-03-01
002, Brown, Mary, Melbourne, 2014-04-01
002, Jones, Mary, Adelaide, 2014-05-01
002, …
Run Code Online (Sandbox Code Playgroud)

audit slowly-changing-dimension dimension sql-server-2016

4
推荐指数
2
解决办法
762
查看次数

sp_BlitzIndex v 4.5 (2016-11-15) 因整理错误而失败

发布此信息以防其他人遇到此问题...(修复如下)更新到 SQL 2016 SP1 后,我还更新到了 sp_Blitz procs 的最新版本。不幸的是,sp_BlitzIndex 现在在“收集计算列信息”中爆炸了。线 1586 附近的部分。

这是错误文本:

Gathering Computed Column Info.
Failure populating temp tables.
Msg 2787, Level 16, State 1, Procedure sp_BlitzIndex, Line 1620 [Batch Start Line 4]

Invalid format specification: 
    '%.%' THEN 1 ELSE 0 END AS is_function,
    'ALTER TABLE ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + 
    ' ADD ' + QUOTENAME(c.name) + ' AS ' + cc.definition  + 
    CASE WHEN is_persisted = 1 THEN ' PERSISTED' ELSE '' END + ';' …
Run Code Online (Sandbox Code Playgroud)

sql-server-2016 sp-blitzindex

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

如何存储有关 SQL Server 地理线串每个点的附加信息?

我正在使用 SQL Server 2016 并且我有一个 Trajectory 表和一个 TrajectoryPoint 表。一个轨迹由多个轨迹点组成,一个轨迹点只与一个轨迹相关。每个轨迹点都有许多值,例如位置、时间戳、速度、SSR 代码等。

这是当前的轨迹表(简化版):

CREATE TABLE [dbo].[Trajectory](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [TypeId] [tinyint] NOT NULL,
    [TimeOverFir] [time](7) NULL,
    [DistanceOverFir] [float] NULL,
    [FlightRules] [nvarchar](1) NULL,
    [LinkInfoId] [int] NULL,
    [StateId] [int] NOT NULL,
    [CO2Emission] [float] NULL,
    [FuelConsumption] [float] NULL,
    [Flight_Id] [int] NULL,
 CONSTRAINT [PK_dbo.Trajectory] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

这是当前的轨迹点表(简化版):

CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

sql-server spatial sql-server-2016

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

表中重复行 (x) 的次数

我有一张如下所示的表:

?????????????????????????????????
?      SO  ?   SO_Line ?  ...   ? 
?????????????????????????????????
?      ABC ?        1  ?        ?
?      ABC ?        3  ?        ?
?      ABC ?        5  ?        ?
?      DEF ?        1  ?        ?
?      DEF ?        2  ?        ?
?????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

我想做的是复制结果集 (x) 次。例如,给定这个结果集:SELECT * FROM Table WHERE SO = 'ABC',我想将该结果集复制 10 次。基本上我想保持所有其他列中的所有数据相同,但我会将主键更改为其他内容(例如,ABC-1)。复制该集合后,我的最终表将是这样的:

?????????????????????????????????
?      SO  ?   SO_Line ?  ...   ? 
?????????????????????????????????
?      ABC ?        1  ?  ...   ?
?      ABC ?        3  ?  ...   ? …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016

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

设置 AlwaysOn 可用性组时,主数据库是否应该是“可用性数据库”之一?

我刚刚获得了一个 Sql Server 2016 可用性组设置(一个主节点、一个同步辅助节点和一个异步辅助节点)。我在服务器上有五个数据库。

我设置了一个应用程序来对服务器运行查询(使用带有“故障转移伙伴”连接字符串的实体框架。)

当我尝试通过重新启动主服务器来测试故障转移时,出现以下错误:

服务器 MySecondaryServer,数据库主服务器没有配置数据库镜像。

像这样镜像系统数据库似乎很奇怪,所以我们没有将它设置为“可用性数据库”之一。

所以,这是我的问题:我是否应该将主数据库添加到“可用性数据库”列表中,如果我这样做会导致问题吗?

sql-server availability-groups sql-server-2016

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

如何解决两个表上并发 MERGE 的死锁

最近在尝试同时在两个表上插入数据时,偶尔会遇到死锁。

以下是表结构

Create Table TableA
(
  Id Bigint not null primary key ,
  FieldA1 nvarchar(50)
)
go

Create Table TableB
(
  Id Bigint not null primary key,
  TableAId Bigint not null constraint FK_TableA Foreign Key (TableAId) References TableB(Id),
  FieldB1 nvarchar(50)
)
go

CREATE type TableBParam as table
(
    Id Bigint,
    TableAId Bigint not null,
    FieldB1 nvarchar(50)
)

--Deadlock was observed on the save query
go
CREATE PROC SaveTableB
(  
 @val [dbo].[TableBParam] READONLY  
)  
AS 
BEGIN 
SET NOCOUNT ON;  

MERGE [dbo].[TableB] …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock sql-server-2016

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

查看哪个模式匹配单个单词的有效方法

我正在创建一个函数来找出最适合单个字符串的搜索模式。要匹配的字符串将与可能有数百种可能模式的表格进行比较,以查看它是否与其中任何一种匹配。

我现在有一个不太优雅的函数,它可以将所有模式读入内存表并遍历它们以查看每个模式是否匹配。它有效,但想到在生产环境中使用它让我感到恶心,尤其是当模式表增长到数千个模式时。

要匹配的示例字符串:'Master'

可能的模式:

  1. 先生
  2. abc%
  3. xyz%
  4. A B C D

结果将与模式#1 匹配。

在这个场景中,我需要能够匹配潜在的部件号、品牌和其他可能拼错的短语。我正在合并 Double Metaphone,但是当涉及到只有一个模式才能捕捉到的其他项目时,我需要知道哪些模式是匹配的。“StringToSearch”只会返回 1 个匹配的模式。

有没有人有理论或其他代码类型可以帮助我完成这个反向模式匹配过程?

sql-server pattern-matching sql-server-2016 string-manipulation

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

在维护窗口期间是否有任何理由停止事务日志备份?

我们最近遇到了事务日志增长并最大化存储空间的问题。这发生在维护窗口期间(正在使用 Ola Hallengren 索引优化脚本。)出于某种原因,过去有人将事务日志备份设置为停止 3 小时,似乎是在索引作业运行时(它们是设置运行 3 小时)。

我的组织最近从 2008r2 迁移到 sql server 2016。负责迁移的人员将不做事务日志的窗口更改为缩短了 30 分钟,因此他们现在从早上 5:30 开始。我认为他认为他们正在停止进行完整备份。但我相信他们被停止是为了让索引维护运行。在这两种情况下都需要吗?似乎停止 tlog 备份弊大于利。

sql server 2008r2 计划是:

  • 3:00am:事务日志备份停止
  • 3:00am:每周索引
    优化作业开始(由于日志
    空间,这在 2 小时 30 分钟后失败)
  • 4:00am:完整备份
  • 早上 6:00/更改为早上 5:30:事务日志备份开始(但日志保持完整)

附加信息:

我的组织最近在 2008r2 中从 2008r2 升级到 sql server 2016,我们从未经历过这种情况(都是企业版)。这可能只是巧合还是升级会改变某些东西?任何人都可以提供有关检查原因的建议吗?服务器管理员已将作业设置回原始计划;从凌晨 3 点到早上 6 点没有 tran 日志备份,认为索引维护和事务日志备份的重叠导致了问题,这是真的吗?我对事务日志主题所做的研究越多,我们似乎就越应该在此维护窗口期间进行日志备份而不是将其关闭。我对为什么他们首先被阻止感到有些困惑,原来的管理员不再在公司工作。一世'

sql-server backup maintenance transaction-log sql-server-2016

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