小编Alf*_*f47的帖子

具有手动播种的分布式可用性组

我正在寻找有关如何使用手动播种设置分布式可用性组的分步演练。我可以让自动播种工作,但是当我尝试手动播种时,我无法将辅助数据库放入转发器上的 AG。

如果我在尝试将数据库添加到常规 AG 之前将分布式 AG 添加到辅助服务器,则会收到以下消息:

Msg 41190, Level 16, State 7, Line 22
Availability group 'MYDB' failed to process add-database command.  The local availability replica is not in a state that could process the command.  Verify that the availability group is online and that the local availability replica is the primary replica, then retry the command. 
Run Code Online (Sandbox Code Playgroud)

如果我尝试先添加数据库而不加入辅助数据库上的分布式 AG,我会收到以下消息,因为它认为它应该是主数据库:

Msg 927, Level 14, State 2, Line 22
Database 'MYDB' cannot be opened. It is in the middle of a …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2017 distributed-availability-groups

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

这两个查询在逻辑上是等价的吗?

这两个查询在逻辑上是等价的吗?

DECLARE @DateTime DATETIME = GETDATE()
Run Code Online (Sandbox Code Playgroud)

查询 1

SELECT *
FROM   MyTable
WHERE  Datediff(DAY, LogInsertTime, @DateTime) > 7   
Run Code Online (Sandbox Code Playgroud)

查询 2

SELECT *
FROM   MyTable
WHERE  LogInsertTime < @DateTime - 7 
Run Code Online (Sandbox Code Playgroud)

如果它们在逻辑上不是等价的,您能否给我第一个查询的逻辑等价,以便 WHERE 子句可以有效地使用索引(即消除函数包装)?

performance sql-server query query-refactor query-performance

10
推荐指数
3
解决办法
699
查看次数

使用检查点与 GO

通常,当开发人员或数据分析师之一需要执行非常大的数据更新或删除时(其中截断或截断/插入没有意义,因为要保留的数据集太大)我建议他们这样做类似于以下内容:

-- Delete 1 million rows 1 thousand at a time
DELETE TOP (1000) FROM TableA WHERE <condition>
WAITFOR DELAY '00:00:01'
GO 1000
Run Code Online (Sandbox Code Playgroud)

对处于完全恢复模式的数据库执行此操作的结果是 1) 等待允许其他事务在需要时进行处理 2) 当日志备份运行时,它能够在日志文件中将已完成的操作标记为脏操作可以复用空间,防止日志增长过快。

而不是这样做,我想知道是否可以使用检查点完成同样的事情。这句话是否会有效地导致同样的情况发生?

-- Delete 1 million rows 1 thousand at a time
WHILE EXISTS ( SELECT 1 FROM TableA WHERE <condition> )
BEGIN
DELETE TOP (1000) FROM TableA WHERE <condition>
WAITFOR DELAY '00:00:01'
CHECKPOINT
END
Run Code Online (Sandbox Code Playgroud)

同样,这些是处于完全恢复模式的数据库。

sql-server delete bulk checkpoint

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

使用 SSIS 将长列导出到平面文件的问题

我们有一个 SSIS 包,它将生成供 Google Big Query 使用的文件。这些文件将是 gzip 压缩的 .tsv 文件。

要求之一是文件必须是 UTF-8。我们已在平面文件目标中设置它,使其为 65001 - UTF-8。在此之后,生成的 gzip 文件将正确用于 Big Query。

现在的问题是某些字段的字符长度高达 21,000 个字符。DT_WSTR 不允许这个大小。

将平面文件目标字段更改为 DT_NTEXT 会产生以下错误消息

错误:0xC020802E at 14_3 Data Flow into MyTSV, Flat File Destination MyDestination [12]:“Flat File Destination MyDestination.Inputs[Flat File Destination Input].Columns[Value]”的数据类型是 DT_NTEXT,ANSI 不支持文件。改用 DT_TEXT 并使用数据转换组件将数据转换为 DT_NTEXT。

我读过的所有解决方案都涉及转换回 DT_WSTR 或将代码页改回 1252,由于 Big Query 代码页要求和数据长度,这不是一个选项。这个问题还有其他解决方案吗?

sql-server ssis sql-server-2016 ssis-2016

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