需要在 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 上尝试,遇到相同的行为。
我需要建立一个梦幻足球游戏用户排行榜。游戏的简化数据库如下:
users必须squad_players在squads每一个matches(由相关transfer_period)players有match_points每个matchessquad_players有位置,优先。该优先级是如果换人的顺序squad_players不会出现在matches squads具有formations确定从优先级排序的每个位置中选择的最大玩家数量数据库为MySQL 5.6,最大数量users为10K。
我能够内部加入(按顺序)squad_players, squads, matches,match_points以获得每个squad_players玩过的人(players没有玩过的人没有match_points)的观点。
我奋力SUM的分X squad_players每squads其中X是formations通过确定位置的的squad_players。
我试图通过具有相关子查询的group by修改 …
mysql database-design group-by mysql-5.6 greatest-n-per-group
我尝试了 SQL Server 数据库的各种配置,最终设置READ_COMMITTED_SNAPSHOT为ONwhile ALLOW_SNAPSHOT_ISOLATIONis OFF。
我注意到启用此功能后,许多查询的速度要快得多。我仍然使用默认READ COMMITTED隔离级别连接到数据库。
这里究竟发生了什么?我认为 when ALLOW_SNAPSHOT_ISOLATIONis OFF,设置READ_COMMITTED_SNAPSHOT为ON不会有任何影响......我实际上仍然没有使用快照隔离,还是我?有人可以解释一下吗?我糊涂了。
我尝试在网上研究这个主题,但是每当我看到READ_COMMITTED_SNAPSHOT有人使用它时,它总是与 一起使用ALLOW_SNAPSHOT_ISOLATION,而我没有启用它。
我们使用 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〜并不能改变什么,以及设置 …
在我的数据库中,日期保留为自 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 年。
关于我做错了什么的任何建议?
我想建立一个具有不同模式的数据库,这些模式对应于不同的数据输入系统。需要有一个“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 …
据我了解,两个表之间的一对一关系意味着一个表中的每一行与另一个表中的一行完全匹配。
\n\n其有用的原因有很多,例如虚拟地向表中添加列而不实际更改它。
\n\n上面的描述表明这种关系是对称的:任一表中的行与另一个表中的行匹配。
\n\n如果主键也是另一个主键的外键,那么这很容易完成:
\n\nCREATE 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);\nRun Code Online (Sandbox Code Playgroud)\n\n我在这里可以看到一个逻辑问题:当另一个表中没有\xe2\x80\x99t 行匹配时,如何向一个表添加一行?
\n\n更轻松的版本是一对零或一的关系,我更喜欢将其称为一对可能的关系。如果一个表引用另一个表,则很容易实现这一点,但反之则不然:
\n\nCREATE TABLE stuff (\n id INT PRIMARY KEY, -- does not reference the more table\n data VARCHAR(255)\n);\nRun Code Online (Sandbox Code Playgroud)\n\n关系仍然是主键之间的关系,但只有一个方向。这在逻辑上更容易,并且可以用于实现可选列,而无需陷入有关NULLs 的使用的争论。
问题是:
\n\n这对我来说真的是一个令人困惑的话题。
我可以理解 BLOB 是什么,我可以轻松使用它。我能理解 FILESTREAM 是什么。我可以轻松地在数据库中实现,我可以备份数据库并使用为存储这些文件而创建的文件夹来恢复它。像这样的事情,我想,我能理解。
我不明白的是:
.PDF仅使用数据库中的 VARBINARY(MAX) 列插入(例如)与将其存储.PDF在 FILESTREAM 数据库中有什么区别。我知道 BLOB varbinary(max).PDF是在数据库内部。如果我物理删除.PDF,我仍然可以使用存储在 varbinary(MAX) 列中的值来恢复它吗?
当我在.PDF文件流中插入这个文件时,我可以在文件夹中看到它(为文件组创建的那个),如果我插入 100 个文件,我可以在文件流文件夹中看到 100 个文件,但是当我运行DELETE FROM并删除 100 行时数据库,我仍然可以在文件流文件夹中看到这些文件。为什么会发生这种情况?我认为,为了保持一致性,这些文件也会被删除。
对于这两种情况,在.PDFBLOBVARBINARY(MAX)或 FILESTREAM 中插入文件后,我还需要原始文件吗?因为它在数据库中,所以我可以很容易地恢复它。
我以 .PDF 为例
我可以使用和实施这两种方法,但我仍然不清楚它们会发生什么。对我来说,它是一样的,但是一个存储在数据库之外,另一个存储在数据库内。
鉴于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) 这里有一个问题,我需要一些帮助来解决。
托管一个数据库,大约 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 ×5
mysql ×2
backup ×1
blob ×1
date ×1
date-format ×1
duplication ×1
filestream ×1
foreign-key ×1
format ×1
group-by ×1
inheritance ×1
mariadb ×1
mariadb-10.1 ×1
mysql-5.6 ×1
postgresql ×1
schema ×1
transaction ×1
varbinary ×1