小编MDC*_*CCL的帖子

ALTER DATABASE SET ALLOW_SNAPSHOT_ISOLATION ON 需要永远

需要在 POC 的测试服务器上安装的供应商软件之一。当 setup.exe 尝试使用SET ALLOW_SNAPSHOT_ISOLATION ON.

测试服务器在 Microsoft SQL Server 2016 (SP1-CU8) 开发版上。

回滚到 SP1-CU5 后,SET ALLOW_SNAPSHOT_ISOLATION ON工作。

有没有人经历过同样的行为?除了回滚 CU 之外还有其他解决方法吗?

没有阻塞,也没有其他用户。POC 处于隔离的实验室环境中。在实时环境中使用 2016 SP1 CU7 在其他 2 个开发 SQL Server 上尝试,遇到相同的行为。

sql-server snapshot-isolation sql-server-2016

5
推荐指数
2
解决办法
2440
查看次数

使用 ORDER BY 和 LIMIT 对每个组的 n 行求和,其中 LIMIT 是基于另一个表

我需要建立一个梦幻足球游戏用户排行榜。游戏的简化数据库如下:

  • users必须squad_playerssquads每一个matches(由相关transfer_period
  • playersmatch_points每个matches
  • squad_players位置优先。该优先级是如果换人的顺序squad_players不会出现在matches
  • squads具有formations确定从优先级排序的每个位置中选择的最大玩家数量

数据库为MySQL 5.6,最大数量users10K

我能够内部加入(按顺序)squad_players, squads, matches,match_points以获得每个squad_players玩过的人(players没有玩过的人没有match_points)的观点。

我奋力SUM的分X squad_playerssquads其中Xformations通过确定位置的的squad_players

我试图通过具有相关子查询的group by修改 …

mysql database-design group-by mysql-5.6 greatest-n-per-group

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

在 ALLOW_SNAPSHOT_ISOLATION 为 OFF 时将 RE​​AD_COMMITTED_SNAPSHOT 设置为 ON

我尝试了 SQL Server 数据库的各种配置,最终设置READ_COMMITTED_SNAPSHOTONwhile ALLOW_SNAPSHOT_ISOLATIONis OFF

我注意到启用此功能后,许多查询的速度要快得多。我仍然使用默认READ COMMITTED隔离级别连接到数据库。

这里究竟发生了什么?我认为 when ALLOW_SNAPSHOT_ISOLATIONis OFF,设置READ_COMMITTED_SNAPSHOTON不会有任何影响......我实际上仍然没有使用快照隔离,还是我?有人可以解释一下吗?我糊涂了。

我尝试在网上研究这个主题,但是每当我看到READ_COMMITTED_SNAPSHOT有人使用它时,它总是与 一起使用ALLOW_SNAPSHOT_ISOLATION,而我没有启用它。

sql-server transaction isolation-level snapshot-isolation

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

MariaDB - “ERROR 1205 ... Lock wait timeout exceeded; ...” 执行影响不同行的多个并行更新时

我们使用 MariaDB 10.1.19 托管旧数据库。我们有一个lpr表(在 InnoDB 上),我们想在其中从文本列移动gate到规范化外键gate_id。我们的代码并行执行 UPDATE,如下所示:

UPDATE lpr SET gate_id=1 WHERE gate_id IS null AND gate LIKE '%[1]%'
UPDATE lpr SET gate_id=2 WHERE gate_id IS null AND gate LIKE '%[2]%'
UPDATE lpr SET gate_id=3 WHERE gate_id IS null AND gate LIKE '%[3]%'
UPDATE lpr SET gate_id=4 WHERE gate_id IS null AND gate LIKE '%[4]%'
...
Run Code Online (Sandbox Code Playgroud)

由于受所有 UPDATE 影响的行是不相交的,并且表位于 InnoDB 上,我们不会期望锁争用,但我们得到错误:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

对于所有更新。提高innodb_lock_wait_timeout到100〜并不能改变什么,以及设置 …

mysql mariadb mariadb-10.1

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

从 Unix 日期获取年份 DATEPART

在我的数据库中,日期保留为自 1970 年 1 月 1 日起/之前经过的天数,我认为这是一种 Unix 日期格式,例如。今天是 2018 年 5 月 23 日,值为 17674。

我正在尝试select针对日期表中的列运行语句以仅显示年份。

如果我运行这个:

datepart(year, c.cko_date)
Run Code Online (Sandbox Code Playgroud)

我得到的日期是 1940 年代(应该是最近几年)。

当我跑

select datepart(year, getdate()) 
Run Code Online (Sandbox Code Playgroud)

它正确地告诉我日期是 2018 年。

关于我做错了什么的任何建议?

sql-server-2008 sql-server date-format format date

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

将行从“父”转移到“子”而不创建重复项并且不知道所有“父”列

我想建立一个具有不同模式的数据库,这些模式对应于不同的数据输入系统。需要有一个“master”(管理)模式和一个“party”表,以及多个其他模式,它们有自己的“party”表,这些表继承了 master party 表的字段

这是结构的一个简化示例:

'家长'

CREATE TABLE master.parties
(
  party_key serial NOT NULL,
  name text,
  date_of_birth date,
  phone text,
  CONSTRAINT "PK_master_parties" PRIMARY KEY (party_key)
)
Run Code Online (Sandbox Code Playgroud)

'孩子'

CREATE TABLE corporate.parties
(
  corp_key integer,
  corp_role text
) INHERITS (master.parties)
Run Code Online (Sandbox Code Playgroud)

我希望能够删除添加到 master.parties 表中的一行,并将其插入到其他模式(即公司)中的任何party表中,而无需在主表中创建重复的行。

我在另一篇文章(/sf/ask/2065641371/)上找到的这个解决方案非常接近我正在寻找的为了:

WITH deleted AS (
  DELETE FROM ONLY master.parties 
  WHERE party_key = 1
  returning *
)
INSERT INTO corporate.parties (name, date_of_birth, phone, corp_key, corp_role)
SELECT name, date_of_birth, phone, 2, 'President'
from deleted;
Run Code Online (Sandbox Code Playgroud)

但是,在我看来,应该有更好的方法将“父”表中的一行添加到“子”表中,而不必删除“父”表中的现有行。

该解决方案还带来了另一个更严重的问题:如果对主模式中的参与方表进行了更改(例如添加了新列),我不想更新与子模式对应的所有数据输入系统。 -schemas 在每个 INSERT …

schema postgresql duplication inheritance

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

了解一对一关系

据我了解,两个表之间的一对一关系意味着一个表中的每一行与另一个表中的一行完全匹配。

\n\n

其有用的原因有很多,例如虚拟地向表中添加列而不实际更改它。

\n\n

上面的描述表明这种关系是对称的:任一表中的行与另一个表中的行匹配。

\n\n

如果主键也是另一个主键的外键,那么这很容易完成:

\n\n
CREATE TABLE stuff (\n    id INT PRIMARY KEY REFERENCES more(id),\n    data VARCHAR(255)\n);\n\nCREATE TABLE more (\n    id INT PRIMARY KEY REFERENCES stuff(id),\n    data VARCHAR(255)\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在这里可以看到一个逻辑问题:当另一个表中没有\xe2\x80\x99t 行匹配时,如何向一个表添加一行?

\n\n

更轻松的版本是一对零或一的关系,我更喜欢将其称为一对可能的关系。如果一个表引用另一个表,则很容易实现这一点,但反之则不然:

\n\n
CREATE TABLE stuff (\n    id INT PRIMARY KEY, --  does not reference the more table\n    data VARCHAR(255)\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

关系仍然是主键之间的关系,但只有一个方向。这在逻辑上更容易,并且可以用于实现可选列,而无需陷入有关NULLs 的使用的争论。

\n\n

问题是:

\n\n
    \n
  • 一对一关系真的是指第一种情况,即两个表在两个方向上匹配吗?
  • \n
  • 在这种情况下,您将如何添加一行?
  • \n
\n

foreign-key database-design

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

请赐教有关 FILESTREAM 和 BLOB 文件的信息

这对我来说真的是一个令人困惑的话题。

我可以理解 BLOB 是什么,我可以轻松使用它。我能理解 FILESTREAM 是什么。我可以轻松地在数据库中实现,我可以备份数据库并使用为存储这些文件而创建的文件夹来恢复它。像这样的事情,我想,我能理解。

我不明白的是:

  1. .PDF仅使用数据库中的 VARBINARY(MAX) 列插入(例如)与将其存储.PDF在 FILESTREAM 数据库中有什么区别。我知道 BLOB varbinary(max).PDF是在数据库内部。如果我物理删除.PDF,我仍然可以使用存储在 varbinary(MAX) 列中的值来恢复它吗?

  2. 当我在.PDF文件流中插入这个文件时,我可以在文件夹中看到它(为文件组创建的那个),如果我插入 100 个文件,我可以在文件流文件夹中看到 100 个文件,但是当我运行DELETE FROM并删除 100 行时数据库,我仍然可以在文件流文件夹中看到这些文件。为什么会发生这种情况?我认为,为了保持一致性,这些文件也会被删除。

  3. 对于这两种情况,在.PDFBLOBVARBINARY(MAX)或 FILESTREAM 中插入文件后,我还需要原始文件吗?因为它在数据库中,所以我可以很容易地恢复它。

我以 .PDF 为例

我可以使用和实施这两种方法,但我仍然不清楚它们会发生什么。对我来说,它是一样的,但是一个存储在数据库之外,另一个存储在数据库内。

sql-server sql-server-2008-r2 filestream blob varbinary

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

对于 BCNF 分解,是否可以与任何原始函数依赖关系都没有关系?

鉴于R[c, f, g, h, e, j, a, b, d, i]与以下功能依赖项的关系,我提出了以下解决方案。但是,我不确定它,R8即使它具有某些 LHS,也没有列出的函数依赖项。我按照分解成 BCNF 的说明进行操作,但我不确定这是正确的解决方案吗?

功能依赖

a ? b
{ c, a } ? d
c ? e
f ? { g, h, i, j }
Run Code Online (Sandbox Code Playgroud)

解决方案

In BCNF:
R1[f, g, h, i, j]
R3[a, b]
R5[c, a, d]
R7[c, e]
R8[c, f, a]
Run Code Online (Sandbox Code Playgroud)

normalization database-design relational-theory

5
推荐指数
0
解决办法
508
查看次数

托管备份大型数据库到 Azure

这里有一个问题,我需要一些帮助来解决。

托管一个数据库,大约 400Gigs。这让我们有点头疼让它与托管备份到 Azure 存储容器一起工作。

这是我们得到的错误

10/21/2018 12:45:18,spid149,Unknown,Write to backup block blob device https://NAME.blob.core.windows.net/CONTAINER/DB_NAME_20181021120709+02.bak failed. Device has reached its limit of allowed blocks.
Run Code Online (Sandbox Code Playgroud)

设置完成

EXEC managed_backup.sp_backup_config_basic

@database_name = 'DB_NAME',
@enable_backup=1,  
@container_url = 'https://NAME.blob.core.windows.net/CONTAINER',  
@retention_days=30;


USE msdb;  
GO  
EXEC managed_backup.sp_backup_config_schedule   
     @database_name =  'DB_NAME'  
    ,@scheduling_option = 'Custom'  
    ,@full_backup_freq_type = 'Daily'  
    ,@backup_begin_time =  '00:30'  
    ,@backup_duration = '02:00'  
    ,@log_backup_freq = '00:05'  
GO
Run Code Online (Sandbox Code Playgroud)

并且日志备份运行良好,所以我们知道凭证没问题。但是它不会备份数据库,因为它太大了,所以需要拆分。但是怎么做呢?当我像这样运行手动备份时

Use MSDB  
Go  
EXEC managed_backup.sp_backup_on_demand  
 @database_name = 'DB_NAME'  
,@type = 'Database' 
Run Code Online (Sandbox Code Playgroud)

它确实在 Azure 容器中将其分成两部分。那么我如何获得拆分 BAK 文件的自动作业。

我们在 SQL Server 2017 上运行。 …

sql-server backup azure-blob-storage sql-server-2017

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