标签: sql-server-2017

从 SQL 查询中排除记录

我有一个表,我试图只返回 rendition_type Interactive 的记录,而没有其他关联的 rendition_type。如果一个记录有多个 rendition_type,我需要将它从列表中排除。

DOC_ID    RENDITION_ID    RENDITION_TYPE
001       001             Interactive
001       002             Web PDF
002       003             Interactive
003       004             Interactive
003       005             Print PDF
004       006             Interactive
005       007             Interactive
005       008             Web PDF
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个查询,该查询将仅返回 document_ID 的 Rendition_type 类型仅为 1 且该类型为 Interactive 的行。

sql-server t-sql sql-server-2017

0
推荐指数
1
解决办法
123
查看次数

仅分段恢复一个文件组,不恢复主文件组

我有一个简单恢复模型的数据库,并定期进行完整、差异备份。

该数据库还有每个月的文件组。每个文件组只有一个 NDF 文件。

像这样:

FileGroup: PRIMARY
File: Primary.mdf

FileGroup: FG201801
File: 201801.ndf

FileGroup: FG201802
File: 201802.ndf

FileGroup: FG201803
File: 201803.ndf

etc
Run Code Online (Sandbox Code Playgroud)

我的目标有两个:

  1. 能够按分区级别进行备份。正如我所读到的,只有当我将文件组标记为只读时才可能。所以我已经分离了部分备份BAK文件。 https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/partial-backups-sql-server

  2. 第二个目标是(我的问题在这里),能够仅恢复一个文件组,而无需恢复主文件组或触及任何其他文件组。

有可能吗?

据了解,如果我只想恢复 FG201802 ,而 PRIMARY 和其他文件保持不变,那么首先我必须恢复包含 PRIMARY 文件组的完整备份,然后我可以恢复 FG201802 的部分备份。如何在不恢复 PRIMARY 的情况下恢复 FG201802?

有人可以向我指出一个可以演示这一点的在线资源吗?网上的所有文章(我发现)总是开始恢复主完整备份,然后一一应用其余的部分备份。

我只想恢复部分备份,怎么办?

谢谢你!

sql-server backup filegroups restore sql-server-2017

0
推荐指数
1
解决办法
750
查看次数

缓冲池到底有多重要?

我一直在对新的(虚拟)服务器进行一些测试,以替换现有的生产服务器。我们怀疑当前的生产服务器规格过高,因此正在从低水平调整新服务器的虚拟组件(RAM、CPU 等),直到性能适合处理当前的工作负载。

虽然认识到新服务器处理现有服务器工作负载的能力的真正测试是针对新服务器测试该工作负载,但出于兴趣,我对现有服务器和新服务器进行了一些简单的、任意的测试:

  • 恢复数据库-读取速度
  • 备份数据库-写入速度
  • 大型数据库上的 DBCC CHECKDB - 花费的时间

(两台服务器上使用相同的数据库备份,以使上述所有测试保持一致)

以上所有内容都支持新服务器(更快的读写速度、更快的 CHECKDB)

我做的最后一个基本测试是测试执行一个简单的操作所需的时间SELECT *在冷缓存和热缓存上最大的表之一上执行简单操作所需的时间,以进一步了解读取速度。

测试代码如下,我在两台服务器上运行

USE StackOverflow

SET STATISTICS IO, TIME ON

CHECKPOINT

DBCC DROPCLEANBUFFERS

SELECT * FROM Users  /* cold cache run */
SELECT * FROM Users  /* warm cache run */
Run Code Online (Sandbox Code Playgroud)

统计IO如下:

SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 12 ms.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

 SQL Server Execution Times:
   CPU time = …
Run Code Online (Sandbox Code Playgroud)

performance sql-server memory buffer-pool sql-server-2017

0
推荐指数
1
解决办法
565
查看次数

AlwaysOn 可用性组和数据库计数限制


更新:

基本答案:我要求的东西不属于 AOAG 设计的一部分。

在我看来,这“不是一个好问题”。除非这冒犯了某人,否则我会将其保留在这里,以防万一有人有和我一样的坏主意。


请原谅我使用的术语,因为我不是 DBA。

我正在咨询一个很可能需要 700-900 个数据库的项目。该软件无法利用多个 SQL 实例,并且必须将所有数据库托管在同一 SQL 实例名称上。

客户的DBA解释了为什么在AlwaysOn可用性组上托管数百个以上的数据库可能是不合理的,并且微软官方文档虽然没有说明上限,但确实声明微软仅使用100个数据库进行测试。
AlwaysOn 故障转移群集不是一个选项,因为数据是共享的而不是复制的。

我的理解是,AOAG 可以作为 SQL 实例进行寻址,并且我无法在多个 AOAG 之间共享实例名称。

有人向我提到,也许可以做到这一点 - 添加一个额外的 AG 并将这些额外的数据库放在同一 SQL 实例名称下,但我无法通过搜索找到此选项的描述。

要么我使用错误的术语搜索相关信息,要么我假设 AG 与 SQL 实例是 1:1,甚至可能是 1:m,但每个实例都不是多个 AG。

更新

我(认为我)理解的术语:

  • 主机:运行一个或多个 SQL Server 实例的服务器。
  • 实例:在主机上运行的 SQL Server 进程的副本,可通过实例名称进行访问。
  • 实例名称:实例的逻辑地址,由hostname\instance
  • 数据库 - 实例中数据的容器。

没有 AOAG 的关系

Host --1:n--> Instance --1:n--> database
Run Code Online (Sandbox Code Playgroud)

我迷路的地方:

(如果我这里说错了,请纠正我)

  • AG - 一组 SQL Server 实例以及用于管理跨多个主机复制的托管数据的逻辑寻址的附加服务,这些实例可以在单个逻辑实例名称下进行寻址。

关系?与 AOAG 一起:

AO Cluster (logical name AO\All)
  +-- AG …
Run Code Online (Sandbox Code Playgroud)

sql-server availability-groups sql-server-2016 sql-server-2017 sql-server-2019

0
推荐指数
1
解决办法
802
查看次数

CTE 与 UNION ALL 未按预期工作

下面的查询看似简单明了,但却产生了意想不到的结果。


CREATE TABLE #NUMBERS
(
    N BIGINT
);

INSERT INTO #NUMBERS VALUES
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8),
(9)
;



WITH
A AS
(   
    -- CHOOSE A ROW AT RANDOM
    SELECT   TOP 1 *
    FROM     #NUMBERS            
    ORDER BY NewID()           
),
B AS
(
    SELECT A.N AS QUANTITY, 'METERS' AS UNIT FROM A
    
    UNION ALL

    SELECT A.N*100 AS QUANTITY, 'CENTIMETERS' AS UNIT FROM A
    
    UNION ALL

    SELECT A.N*1000 AS QUANTITY, 'MILLIMETERS' AS UNIT FROM A
    
    UNION ALL

    SELECT A.N*1000000 …
Run Code Online (Sandbox Code Playgroud)

sql-server cte union sql-server-2017

0
推荐指数
2
解决办法
3006
查看次数

还原数据库 - Linux 上的操作系统错误 5(访问被拒绝。)

我尝试在 Ubuntu 16 服务器上使用sqlcmd工具恢复 SQL Server 2017 Express 数据库。

我的 SQL 命令是:

RESTORE DATABASE [xxxxx] FROM DISK = N'/home/xxxxxx/DBBackups/xxxx.bak' WITH NORECOVERY, MOVE 'xxxx_Data' TO '/var/opt/mssql/data/xxxxx.mdf', MOVE 'xxxx_Log' TO '/var/opt/mssql/data/xxxx_log.ldf'

错误信息是:

BackupDiskFile::OpenMedia: 备份设备“/home/xxxxxx/DBBackups/xxxxxxxx.bak”无法打开。操作系统错误 5(访问被拒绝。)。

使用WITH MOVE在此描述选项不能正常工作。

更新

这是另一篇文章,仍然拒绝访问错误。

sql-server linux restore sql-server-2017

-1
推荐指数
1
解决办法
2651
查看次数

ssms 2017 中始终加密的 varchar 更新类型冲突

我正在使用 SSMS 17.6 并且我正在尝试始终加密功能。我能够通过声明一个参数然后使用该参数来更新/插入/搜索日期时间字段,例如:

DECLARE @NewValue datetime 
SET @NewValue = '19/05/2018' 
update MyTable set my_ae_column = @NewValue
Run Code Online (Sandbox Code Playgroud)

我正在尝试对设置了 bin2 排序规则的 varchar(30) 字段执行相同的操作,但我仍然得到

操作数类型冲突问题

有什么建议吗?

sql-server always-encrypted sql-server-2017

-2
推荐指数
1
解决办法
950
查看次数

查询将等待多长时间,以及在运行脱机索引重建时它将执行什么操作?

当离线索引重建正在运行时,并且会触发 CRUD 查询(假设重建需要几个小时)。

  1. 查询将等待重建完成多久?

  2. 假设重建仍在运行,一旦完成等待,它会做什么?

sql-server index-tuning sql-server-2017

-2
推荐指数
1
解决办法
95
查看次数