我有下表。
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 接受它。
使用 SQL Server 2008 及更高版本,我想向大表添加一个 rowversion 列,但是当我只是
ALTER TABLE [Tablename]
ADD Rowversion [Rowversion] NOT NULL
Run Code Online (Sandbox Code Playgroud)
然后该表无法更新太长时间。
我可以使用哪些策略来减少这种停机时间?我会考虑任何事情。当然越简单越好,但我会考虑任何策略。
我的想法是,作为最后的手段,我可以维护一个由触发器维护的副本临时表,然后将临时表 sp_rename 到原始表中。但我希望有更简单/更容易的东西。
我正在使用 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)
这是什么原因?
我有一个空间索引用于该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) 我有一个包含 75 亿行和 5 个索引的大表。当我删除大约 1000 万行时,我注意到非聚集索引似乎增加了它们存储的页数。
我写了一个查询dm_db_partition_stats来报告页面中的差异(之后 - 之前):
索引1是聚集索引,索引2是主键。其他的都是非聚集的和非唯一的。
为什么那些非聚集索引上的页面会增加?
我预计这些数字在最坏的情况下会保持不变。
我确实看到性能计数器报告删除过程中页面拆分的增加。
删除时,ghost 记录是否必须移动到另一页?这与“唯一标识符”有关吗?
我们正在推出 RCSI,但现在,RCSI 已关闭。
它是可用性组中的主节点。我知道快照以某种方式在辅助节点上使用。如果这是相关的,我会感到惊讶。我打算深入研究这个(查看 dbcc 页面输出)以了解更多信息。希望有人看到过类似的东西。
我有一个 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) 我正在构建一个应用程序,我计划在其中嵌入 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 号码来自任务管理器中的“私人工作集”号码。来自 …
我们需要创建 nvarchar 数据的哈希值以进行比较。T-SQL 中有多种哈希算法可用,但在这种情况下,最好选择哪一种?
我们希望确保两个不同的 nvarchar 值具有重复哈希值的风险最小。根据我对互联网的研究,MD5 似乎是最好的。那正确吗?MSDN 告诉我们(下面的链接)有关可用算法的信息,但没有说明哪一种适用于什么条件?
我们需要在两个 nvarchar(max) 列上连接两个表。可以想象,执行查询需要很长时间。我们认为最好保留每个 nvarchar(max) 数据的散列值并对散列值进行连接,而不是 nvarchar(max) 值是 blob。问题是哪种哈希算法提供了唯一性,这样我们就不会遇到一个哈希值对应多个 nvarchar(max) 的风险。
出于安全原因,我们在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 2016 升级到 SQL Server 2017。该服务器是多个分布式可用性组 (DAG)和一个单独的可用性组 (AG) 的一部分。当我们升级这台服务器时,我们没有意识到它会进入一个不可读的状态,所以在过去的一个月里,我们一直完全依赖于主服务器。
作为即将进行的升级的一部分,我将CU 4补丁应用到服务器并重新启动它。当服务器重新上线时,刚刚打补丁的辅助服务器显示所有 DAG/AG 都在同步,没有任何问题。
然而,初选展示了一个非常不同的故事。报道称
在最初感到恐慌之后,我尝试了以下方法来使 DAG 中的事物再次同步:
ALTER DATABASE [<database] SET HADR RESUME;- 执行没有错误,但没有恢复任何同步我最后一次再次同步数据的尝试是登录到辅助服务器,然后手动重新启动 SQL Server 服务。手动重新启动服务似乎有点极端,因为我希望重新启动服务器就足够了。
有没有人遇到过重启后 DAG 没有开始同步到辅助节点的问题?如果有,是如何解决的?
我检查了 SQL Server 错误日志和辅助服务器上的事件查看器,没有发现任何异常。
sql-server upgrade availability-groups sql-server-2017 distributed-availability-groups
sql-server ×7
alter-table ×1
backup ×1
constraint ×1
dbcc-checkdb ×1
distributed-availability-groups ×1
encryption ×1
hashing ×1
memory ×1
mysql ×1
oracle ×1
oracle-11g ×1
pg-dump ×1
pivot ×1
postgresql ×1
spatial ×1
ssl ×1
t-sql ×1
upgrade ×1