小编Kin*_*hah的帖子

TempDB 不会收缩。没有未结交易

我在 SQL 2008 上有一个 TempDB,它变得非常大(> 40gb),我想缩小它。我已经通过 Management Studio 使用了 dbcc 收缩数据库、dbcc 收缩文件和收缩命令。

我收到以下错误:

页面 1:4573184 无法移动,因为它是工作表页面。

通过运行 DBCC FREEPROCCACHE 并重新运行其中一个收缩例程,我已经能够回收一​​些空间使我脱离危险,但显然这并不理想,而且可能只会给我争取一点时间。

我已经运行 DBCC OpenTran 并且没有任何东西挂在那里。

我在互联网上读到的所有地方都归结为回收 SQL Server ……肯定有更好的方法……有人吗?

谢谢,

汤姆

sql-server-2008 shrink tempdb

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

SQL Server 2008 R2 分区 - 相同的文件组,1 个文件,2 个 partition_numbers - 帮助

这是我第一次在 SQL Server 中进行分区,我从 Brent Ozar 指南中学到了非常棒的 :)

有几次我遇到了一个奇怪的场景;当我运行时:

SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go
Run Code Online (Sandbox Code Playgroud)

有相同的文件组显示两次,其中包含 2 个不同的 partition_number,其中 1 个正确地在末尾带有范围值,另一个在开头时带有空 range_value。

点击这里放大图片

在此处输入图片说明

几个问题:

  1. 这是怎么回事,我哪里出错了?

  2. 我如何解决这个问题,这意味着如何摆脱一开始的问题,因为我一开始就已经有一个空分区。

我试过删除文件(在它为空时工作)和文件组,但文件组说它无法删除。

有人可以解释一下这是如何发生的以及如何摆脱分区 2 条目吗?

sql-server sql-server-2008-r2 partitioning

10
推荐指数
1
解决办法
211
查看次数

TDE 准备:用于还原的密钥/证书备份

我在开发环境中工作以更好地理解TDE加密。我让它与另一台服务器上的备份和恢复一起工作。有几个问题,我知道我需要使用相应的私钥备份证书。

USE master; 
GO 
BACKUP CERTIFICATE Test
TO FILE = 'C:\Test.cer'
WITH PRIVATE KEY
(FILE = 'C:\Test.pvk',
ENCRYPTION BY PASSWORD = 'Example12#')
Run Code Online (Sandbox Code Playgroud)

如果发生故障,这些需要在新服务器上移动/恢复。在需要恢复到另一台服务器的情况下,我还需要从源服务器备份什么吗?

还有关于私钥存储的任何建议吗?我目前的想法是将证书、私钥和密码备份到单独备份和异地复制的 KeePass 数据库中。

这留下了一个问题,即将 KeePass 私钥备份到哪里?

sql-server encryption transparent-data-encryption

10
推荐指数
1
解决办法
1353
查看次数

使用 MAXTRANSFERSIZE 和 CHECKSUM 时无法恢复启用 TDE 的数据库

更新@AmitBanerjee - Microsoft SQL Server 产品组的高级项目经理确认 MS 将调查该问题,因为它是一个缺陷。

有没有人遇到过在启用 TDE 并使用MAXTRANSFERSIZE> 65536(在我的情况下,我选择 65537 以便我可以压缩 TDE 数据库)的情况下恢复在 SQL Server 2016 上进行的备份的问题CHECKSUM

下面是一个repro:

--- create database 
create database test_restore
go
-- create table
create table test_kin (fname char(10))
go
-- Enable TDE 

use master
GO
CREATE CERTIFICATE test_restore WITH SUBJECT = 'test_restore_cert'
GO
SELECT name, pvt_key_encryption_type_desc, * FROM sys.certificates WHERE name = 'test_restore'
GO
use test_restore
go
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM …
Run Code Online (Sandbox Code Playgroud)

sql-server restore transparent-data-encryption sql-server-2016

10
推荐指数
1
解决办法
1231
查看次数

查看和编写对象的权限,但不能更改它们?

我是一名软件开发人员。

我有一个生产数据库,我需要完全 ddl 读取访问权限,但不需要任何 ddl 写入或执行访问权限。

是否有我可以发送给我的 DBA 的脚本,该脚本将授予我完整的 ddl 读取访问权限,而不允许我影响数据库?

sql-server permissions ddl sql-server-2012

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

插入表 select * from table vs 批量插入

我只是想知道 SQL 语句INSERT INTO TABLE1 SELECT * FROM TABLE2,会像批量插入一样工作吗?

如果没有,有没有办法在插入记录时排除索引。进程在一次执行中插入 1.5 亿条数据。

我们计划创建阶段表(不会有任何索引Table1),然后将其从阶段表转移到目标表(会有索引Table2

我们不是在从过程中创建平面文件的情况。

但是当我们将数据从Table1(未编入索引)传输到Table2(编入索引)时,我们正在寻找可以加快处理速度的方法。

任何方式使用BulkInsertTable1Table2

sql-server insert select bulk-insert

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

如何回收部分构建并因停电而终止的索引占用的空间

我在 Mac (10.10.4) 上运行 postgres (postgis) 9.4.2。

我有几张大桌子(几个 TB)。

在其中一个索引构建过程中大约需要一周时间,我看到可用的高清空间下降,正如您所期望的那样,当停电时间比电池单元和系统持续时间更长时索引将完成下楼。我fillfactor=100在构建期间关闭了缓冲区,因为它是一个静态数据源。重新启动时,驱动器上剩余的可用空间正是索引构建接近结束时的位置。真空分析不会释放空间。

我尝试放下桌子并重新摄取,但并没有减少空间。现在我所在的地方没有足够的空间来构建索引。

索引构建期间生成的文件是否由于停电期间机器停机的方式而无法被系统删除?

当我查看数据库中的表大小 + 索引(这是该驱动器上唯一的数据)时,它们加起来大约6TB。驱动器为8TB,驱动器上剩余的空间不足500GB,因此似乎在某处丢失了大约 1.5TB,这与索引的大小差不多。

有任何想法吗?

postgresql index disk-space vacuum postgresql-9.4

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

临时表在没有时记录更改吗?

不幸的是,我没有准备好访问 SQL 2016 实例来测试这个。如果我有一个具有以下架构的时态表:

create table blah (
    foo int identity(1,1),
    baa int
)
Run Code Online (Sandbox Code Playgroud)

我要运行以下语句:

update blah set baa = baa
Run Code Online (Sandbox Code Playgroud)

它会像我实际更新数据一样记录更改吗?

我已经查看了MSDN 文章中的临时表修改数据的文章,但在那里找不到任何指定此内容的内容。

sql-server temporal-tables sql-server-2016

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

SQL Server 最小服务器内存

将 SQL 2008 R2 与 SP2 与具有 64 GB RAM 的服务器一起使用。考虑到 SQL Server 仅限于仅与数据库引擎相关的服务,我已将最大服务器内存设置为 58GB。我有一个关于设置最小服务器内存的问题

如果我将最小服务器内存设置为 48 GB 是否意味着

a) 如果 Windows 向 SQL 发送低内存通知——SQL 服务器将修剪其所有池并尝试将内存使用量保持到 48 GB 的内存?

b) 在 Windows 进行积极的工作集修整的情况下 - 是否会将 SQL 服务器的内存使用量保留为 48 GB,为 SQL 的内存使用量设置“下限”。

c) 对最小服务器内存有什么建议吗?

搜索网络——互联网上有大量关于最大服务器内存的信息,但我读到的地方很少(Brent Ozar 博客中的配置最佳实践)将最小服务器内存设置为服务器上可用 RAM 总量的 50%。

sql-server-2008 sql-server sql-server-2012

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

为什么这两个 HADR DMV 报告不同的状态?

SQL Server 2012 (11.0.5058.0) 企业版

我们在 2(HA)+1(DR) 集群中有 8 个可用性组,我们的监控 DMV 报告的结果让我感到困惑。6 个可用性组用于 HA 和 DR,1 个仅用于 HA,1 个仅用于 DR。

6 个 HA/DR 可用性组中的每一个都将“SQLB”作为主副本,将“SQLA”作为辅助(同步)HA 副本,将“SQLC”作为辅助(异步)副本。

在两个辅助节点上:

SELECT dhags.group_id, dhags.synchronization_health_desc
FROM sys.dm_hadr_availability_group_states dhags
Run Code Online (Sandbox Code Playgroud)

报告所有可用性组复制同步运行状况NOT_HEALTHY

select replica_id,synchronization_health_desc
from sys.dm_hadr_availability_replica_states
Run Code Online (Sandbox Code Playgroud)

报告所有副本的同步健康状况为HEALTHY.

主副本报告同步运行状况为 的所有可用性组和副本HEALTHY

虽然我知道一个报告副本同步健康状况,另一个报告 AG 同步健康状况,但在我看来,如果更细化 (AG) 状态不健康,这将影响更广泛上下文(副本)的整体健康状况,这似乎是合乎逻辑的. 我找不到描述如何在每个级别确定运行状况的 MSDN 文档。

为什么辅助节点会报告NOT_HEALTHY可用性组同步健康状况,但会报告HEALTHY副本同步健康状况,为什么这与主要报告不同?

dmv sql-server-2012 availability-groups

8
推荐指数
1
解决办法
531
查看次数