小编Pau*_*ite的帖子

检查约束不起作用?

我有下表。

create table test (
   id smallint unsigned AUTO_INCREMENT,
   age tinyint not null,
   primary key(id),
   check (age<20)
);
Run Code Online (Sandbox Code Playgroud)

问题是CHECK约束不适用于年龄列。例如,当我为年龄字段插入 222 时,MySQL 接受它。

mysql constraint

23
推荐指数
3
解决办法
3万
查看次数

如何以最少的停机时间将 rowversion 列添加到大表中

使用 SQL Server 2008 及更高版本,我想向大表添加一个 rowversion 列,但是当我只是

ALTER TABLE [Tablename]
ADD Rowversion [Rowversion] NOT NULL
Run Code Online (Sandbox Code Playgroud)

然后该表无法更新太长时间。

我可以使用哪些策略来减少这种停机时间?我会考虑任何事情。当然越简单越好,但我会考虑任何策略。

我的想法是,作为最后的手段,我可​​以维护一个由触发器维护的副本临时表,然后将临时表 sp_rename 到原始表中。但我希望有更简单/更容易的东西。

sql-server-2008 sql-server alter-table

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

pg_restore: [archiver] 在文件头中没有找到魔法字符串

我正在使用 PostgreSQL 9.1 并希望恢复使用pg_dump以下命令生成的备份文件:

sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name
Run Code Online (Sandbox Code Playgroud)

该命令生成一个有效的 sql 文件,首先删除任何现有的数据库对象,然后生成所有表、索引、序列等,最后插入数据。

当我尝试使用以下方法恢复生成的备份文件时:(添加换行符仅用于显示目的)

sudo pg_restore 
    -d database_name -h 127.0.0.1 -U postgres
    --format=c --clean --create out.sql
Run Code Online (Sandbox Code Playgroud)

它失败并打印:

pg_restore: [archiver] did not find magic string in file header
Run Code Online (Sandbox Code Playgroud)

这是什么原因?

postgresql backup postgresql-9.1 pg-dump

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

无法修复的空间索引损坏是否正常?

我有一个空间索引用于该DBCC CHECKDB报告损坏:

DBCC CHECKDB(MyDB) 
WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS, TABLERESULTS
Run Code Online (Sandbox Code Playgroud)

空间索引、XML 索引或索引视图“sys.extended_index_xxx_384000”(对象 ID xxx)不包含视图定义生成的所有行。这不一定表示此数据库中的数据存在完整性问题。

空间索引、XML 索引或索引视图“sys.extended_index_xxx_384000”(对象 ID xxx)包含不是由视图定义生成的行。这不一定表示此数据库中的数据存在完整性问题。

CHECKDB 在表“sys.extended_index_xxx_384000”(对象 ID xxx)中发现 0 个分配错误和 2 个一致性错误。

维修级别为repair_rebuild.

删除并重新创建索引不会删除这些损坏报告。没有EXTENDED_LOGICAL_CHECKS但有DATA_PURITY错误是不报告的。

此外,CHECKTABLE尽管它的 CI 大小为 30 MB 并且有大约 30k 行,但该表需要 45 分钟。该表中的所有数据都是点geography数据。

在任何情况下都会出现这种行为吗?它说“这不一定代表完整性问题”。我应该做些什么?CHECKDB正在失败这是一个问题。

此脚本重现了该问题:

CREATE TABLE dbo.Cities(
    ID int  NOT NULL,
    Position geography NULL,
 CONSTRAINT PK_Cities PRIMARY KEY CLUSTERED 
(
    ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = …
Run Code Online (Sandbox Code Playgroud)

sql-server spatial dbcc-checkdb sql-server-2014

23
推荐指数
1
解决办法
1068
查看次数

删除行时,为什么非聚集索引会占用更多空间?

我有一个包含 75 亿行和 5 个索引的大表。当我删除大约 1000 万行时,我注意到非聚集索引似乎增加了它们存储的页数。

我写了一个查询dm_db_partition_stats来报告页面中的差异(之后 - 之前):

dm_db_partition_stats 增量

索引1是聚集索引,索引2是主键。其他的都是非聚集的和非唯一的。

为什么那些非聚集索引上的页面会增加?
我预计这些数字在最坏的情况下会保持不变。
我确实看到性能计数器报告删除过程中页面拆分的增加。

删除时,ghost 记录是否必须移动到另一页?这与“唯一标识符”有关吗?

我们正在推出 RCSI,但现在,RCSI 已关闭。

它是可用性组中的主节点。我知道快照以某种方式在辅助节点上使用。如果这是相关的,我会感到惊讶。我打算深入研究这个(查看 dbcc 页面输出)以了解更多信息。希望有人看到过类似的东西。

sql-server nonclustered-index sql-server-2014

23
推荐指数
1
解决办法
1558
查看次数

将行转为多列

我有一个 SQL Server 实例,它具有到 Oracle 服务器的链接服务器。Oracle 服务器上有一个名为的表,PersonOptions其中包含以下数据:

???????????????????????
? PersonID ? OptionID ?
???????????????????????
?        1 ? A        ?
?        1 ? B        ?
?        2 ? C        ?
?        3 ? B        ?
?        4 ? A        ?
?        4 ? C        ?
???????????????????????
Run Code Online (Sandbox Code Playgroud)

我需要对这些数据进行透视,因此结果是:

????????????????????????????????????????????
? PersonID ? OptionA ? Option B ? Option C ?
????????????????????????????????????????????
?        1 ?       1 ?        1 ?          ?
?        2 ?         ?          ?        1 ?
?        3 ?         ? …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g pivot linked-server

22
推荐指数
3
解决办法
8万
查看次数

为什么 SQL Server 2012 Express 在我的服务器上使用 9.5GB 的 RAM?

我正在构建一个应用程序,我计划在其中嵌入 SQL Server 2012 Express 作为主数据存储。在我的开发机器(具有 3GB RAM 的 Win7-32​​)上进行测试时,我从未观察sqlservr.exe到使用超过 1GB RAM的过程,正如我对已发布的 SQL Server Express 版硬件扩展限制所期望的那样。

然后我将我的应用程序移到一台服务器级机器(Win Server 2008R2 64 位,16GB RAM)来评估它的性能,并惊讶地发现该sqlservr.exe过程迅速扩展到大约 9.5GB 的 RAM 并停留在那里。

我重新启动了几次,看看是否会有任何影响,但每次,该过程都迅速恢复到 ~9.5GB。现在我当然很高兴让 SQL Server Express 使用我的 RAM,但我想知道这是否是预期的行为,以便我不会依赖基于不正确的 RAM 使用的性能级别。

仅供参考,根据SELECT @@VERSION,我的服务器机器上的 SQL Server 版本是:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Run Code Online (Sandbox Code Playgroud)

我的 9.5GB 号码来自任务管理器中的“私人工作集”号码。来自 …

sql-server memory sql-server-2012 sql-server-express

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

在 HashBytes 函数中选择正确的算法

我们需要创建 nvarchar 数据的哈希值以进行比较。T-SQL 中有多种哈希算法可用,但在这种情况下,最好选择哪一种?

我们希望确保两个不同的 nvarchar 值具有重复哈希值的风险最小。根据我对互联网的研究,MD5 似乎是最好的。那正确吗?MSDN 告诉我们(下面的链接)有关可用算法的信息,但没有说明哪一种适用于什么条件?

哈希字节 (Transact-SQL)

我们需要在两个 nvarchar(max) 列上连接两个表。可以想象,执行查询需要很长时间。我们认为最好保留每个 nvarchar(max) 数据的散列值并对散列值进行连接,而不是 nvarchar(max) 值是 blob。问题是哪种哈希算法提供了唯一性,这样我们就不会遇到一个哈希值对应多个 nvarchar(max) 的风险。

sql-server t-sql sql-server-2008-r2 hashing

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

禁用 TLS 1.0 和 SSL 3.0 后,SQL 服务器服务不会启动

出于安全原因,我们在windows上禁用了TLS 1.0和旧协议,在以下注册表路径下只启用了TLS 1.1和TLS 1.2:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 之后,SQL服务赢了'不以以下错误开头:

2015-02-13 17:35:10.12 spid13s     The server could not load the certificate it needs to initiate an SSL connection. It returned the following error: 0x80090331. Check certificates to make sure they are valid.
2015-02-13 17:35:10.12 spid13s     Error: 26014, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s     Unable to load user-specified certificate [Cert Hash(sha1) "9B49E2FB65EE880F7C8818A90187F572566C9213"]. The server will not accept a connection. You should verify that the certificate is correctly installed. See "Configuring Certificate for Use by SSL" in …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 encryption ssl

22
推荐指数
3
解决办法
11万
查看次数

服务器重新启动后,SQL Server 分布式可用性组数据库不同步

我们正准备对我们的 SQL Server执行大规模升级,并注意到分布式可用性组的一些异常行为,我正试图在继续之前解决这些问题。

上个月,我将远程辅助服务器从 SQL Server 2016 升级到 SQL Server 2017。该服务器是多个分布式可用性组 (DAG)和一个单独的可用性组 (AG) 的一部分。当我们升级这台服务器时,我们没有意识到它会进入一个不可读的状态,所以在过去的一个月里,我们一直完全依赖于主服务器。

作为即将进行的升级的一部分,我将CU 4补丁应用到服务器并重新启动它。当服务器重新上线时,刚刚打补丁的辅助服务器显示所有 DAG/AG 都在同步,没有任何问题。

然而,初选展示了一个非常不同的故事。报道称

  • 单独的 AG 同步没有任何问题
  • 但 DAG 处于不同步/不健康状态

在最初感到恐慌之后,我尝试了以下方法来使 DAG 中的事物再次同步:

  • 从主数据库中,我停止并恢复了数据移动。这并没有开始同步数据。
  • 在二级(我刚刚修补的那个)上我跑了ALTER DATABASE [<database] SET HADR RESUME;- 执行没有错误,但没有恢复任何同步

我最后一次再次同步数据的尝试是登录到辅助服务器,然后手动重新启动 SQL Server 服务。手动重新启动服务似乎有点极端,因为我希望重新启动服务器就足够了。

有没有人遇到过重启后 DAG 没有开始同步到辅助节点的问题?如果有,是如何解决的?

我检查了 SQL Server 错误日志和辅助服务器上的事件查看器,没有发现任何异常。

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

22
推荐指数
1
解决办法
6325
查看次数