数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
同一列中日期的总间隔
如何最好地总结交织行之间同一列中日期范围的差异?我有一个Datetime列,想计算行之间的差异。我想以秒为单位。这个问题不是关于如何获得两个时间戳之间的差异,而是更多地集中于如何最有效地计算同一表的行之间的差异。在我的情况下,每一行都有一个datetime偶数类型,该类型将两行逻辑地链接在一起。 详细信息与如何对开始和结束事件类型进行分组有关。(Andriy M的问题)“应该”是连续的开始和结束。如果起点没有后续终点,则应将其排除在总和之外。移至下一个“开始”以查看其是否结束。仅应将连续的开始-结束对添加到总秒数之和。 在PostgreSQL 9.x中工作... 表中的示例数据; eventtype, eventdate START, 2015-01-01 14:00 END, 2015-01-01 14:25 START, 2015-01-01 14:30 END, 2015-01-01 14:43 START, 2015-01-01 14:45 END, 2015-01-01 14:49 START, 2015-01-01 14:52 END, 2015-01-01 14:55 注意,所有开始日期和结束日期将是连续的。 这是我的第一次尝试。似乎正在工作。 SELECT -- starts.* SUM(EXTRACT(EPOCH FROM (eventdate_next - eventdate))) AS duration_seconds FROM ( WITH x AS ( …

4
MySQL-mysql_upgrade-发生错误:无法设置服务器变量
我在官方docker映像中运行MySQL 5.7.11。 当我想要升级时,出现以下错误: mysql_upgrade -uroot -p password: Error occurred: Cannot setup server variables. 我四处搜寻,没有发现任何提示。我试着跑了--verbose,但没有运气。 供参考,这是我启动数据库时的日志: db_1 | 2016-02-17T11:23:10.453190Z 0 [ERROR] Incorrect definition of table performance_schema.events_waits_current: expected column 'NESTING_EVENT_TYPE' at position 15 to have type enum('TRANSACTION','STATEMENT','STAGE','WAIT', found type enum('STATEMENT','STAGE','WAIT'). db_1 | 2016-02-17T11:23:10.453233Z 0 [ERROR] Incorrect definition of table performance_schema.events_waits_history: expected column …
10 mysql  upgrade 

6
修剪空白(空格,制表符,换行符)
我正在使用SQL Server 2014,需要从列内容的开头和结尾清除空格,其中空格可以是简单的空格,制表符或换行符(\n和\r\n);例如 ' this content ' should become 'this content' ' \r\n \t\t\t this \r\n content \t \r\n ' should become 'this \r\n content' 等等。 我只能用 UPDATE table t SET t.column = LTRIM(RTRIM(t.column)) 但在其他情况下,则无效。

2
如何确定行的可见性?
在最简单的情况下,当我们在表中插入新行(并且提交事务)时,所有后续事务都将看到该行。xmax在此示例中看到为0: CREATE TABLE vis ( id serial, is_active boolean ); INSERT INTO vis (is_active) VALUES (FALSE); SELECT ctid, xmin, xmax, * FROM vis; ctid │xmin │ xmax │ id │ is_active ───────┼─────┼──────┼────┼─────────── (0,1) │2699 │ 0 │ 1 │ f 当我们更新它时(因为该标志被FALSE意外设置为),它会发生一些变化: UPDATE vis SET is_active = TRUE; SELECT ctid, xmin, …

1
为什么suser_name()无法反映AD帐户名称的更改?
我们的用户名之一已合法更改,因此我们将其Active Directory用户名更改为匹配-从domain \ oldname更改为domain \ newname。但是,当此用户在存储过程中调用suser_sname()时,它将返回旧名称,而不是新名称。 Googling将我引向了KB 946358,这表明它们的名称已在服务器上缓存并且未更新,大概是因为suser_name()正在调用LsaLookupSids。但是,该文章中的解决方法涉及重新启动服务器,即使是这样,我仍然想了解问题所在。 如果我将上下文更改为他们的上下文,则会返回正确的名称: EXECUTE AS LOGIN = 'domain\newname' GO SELECT suser_name() --returns 'domain\newname' ...我以为这也将调用LsaLookupSids,因此将返回错误的名称。我似乎不太了解此处的工作机制。 一些可能重要的观察结果: 该用户在服务器上没有显式登录。但是他们是这样做的AD组的成员。更改后的名称(domain \ newname)出现在的结果集中exec xp_logininfo 'domain\ADGroupName', 'members';域\旧名称没有。 用户正在从存储过程中调用suser_name(),该过程是从Access 2003 MDB中的直通查询调用的。 过去,我们已经更改了许多用户的帐户名,但是仅在上周才发现此问题(上周进行了两项更改,似乎都显示了该问题)。 该服务器正在Windows 2008 R2 Datacenter版上运行Sql Server 2008 SP3 x64。 这是怎么回事?作为DBA,我该怎么办?或者我打算在哪里解决这个问题?

1
升级后,SQL Server AlwaysOn数据库卡在“不同步” /“恢复”模式下。错误:无法打开数据库“…”版本782
测试从SQL Server 2014 SP1(12.0.4422.0)到SQL Server 2016 CTP 3.2(13.0.900.73)的升级时,我遵循建议的更新过程,并遇到了故障转移后数据库无法在旧主数据库上启动的问题到更新的中学。我们的设置是一个主副本和一个辅助副本,我完成的步骤是: 在同步提交的辅助副本上删除自动故障转移 将辅助服务器实例升级到新版本 手动故障转移到辅助副本 验证数据库在新的主副本上是否在线 将以前的主副本升级到新版本 辅助服务器的升级和故障转移以使其成为主要服务器,完全可以按预期进行。但是,在升级了先前的主副本之后,我注意到其上的数据库在SSMS中被列为“ 未同步/正在恢复”。同样尝试访问它们也会生成错误消息: 数据库...不可访问。(对象浏览器) 通过我看到的SQL Server日志进行检查 无法打开数据库“ ...”版本782。将数据库升级到最新版本。 查询master..sysdatabases表表明它确实是一个较旧的版本,并且在升级过程中未进行更新: 不幸的是,日志没有指出为什么不对其进行更新,并且可用性组仪表板仅给出一般性警告,指示某些可用性数据库的数据同步状态不正常,没有任何原因。 我尝试使用TSQL分离数据库或将其设置为脱机以“踢”数据库以进行更新,但是由于它们是SQL AG的一部分,因此这些命令不起作用。 如果数据库是SQL AG的一部分,如何将其升级到最新版本?



3
用空格替换列中的特殊字符
我正在尝试编写一个查询,以空格替换特殊字符。下面的代码有助于识别行。(字母数字字符,逗号和空格有效): SELECT columnA FROM tableA WHERE columnA like '%[^a-Z0-9, ]%' 如何将替换功能集成到select语句中,以便结果集中的所有字符(字母数字,逗号和空格除外)都被替换为''(空格)。这将不起作用: SELECT replace(columnA,'%[^a-Z0-9, ]%',' ') FROM tableA WHERE columnA like '%[^a-Z0-9, ]%'


2
可以默认配置/使用sp_executesql吗?
我正在寻找对SQL Server使用高度动态sql查询的应用程序。查看以非常奇怪和复杂的方式构造的查询,但这是一个不同的故事,我告诉它有一个很好的理由使我无法(太愚蠢)自己发现问题……我看不到查询用换行的任何代码sp_executesql。 但是,当我跟踪时,可以看到很多查询都用包裹了sp_executesql。整个应用程序解决方案甚至根本不包含命令sp_executesql。 因此,我想知道是否存在某种我不知道的配置,该配置默认情况下会强制软件使用sp_executesql包装查询? 什么可能导致这种行为?


3
仅在执行备份时,还原标头的用途是什么?
当我使用以下查询监视备份时: SELECT command, percent_complete, 'elapsed' = total_elapsed_time / 60000.0, 'remaining' = estimated_completion_time / 60000.0 FROM sys.dm_exec_requests WHERE command like 'BACKUP%' or command like 'RESTORE%' 我注意到,在备份之前,SQL Server仅执行备份头,然后执行备份。 我想知道它的用途是什么,以及是否可以以某种方式减少执行时间。它似乎比实际备份需要更长的时间。

1
如何重现“由于数据移动,无法使用NOLOCK继续扫描”
我偶尔会遇到NOLOCK一些大型作业“确实由于数据移动而无法继续扫描”的情况,这些作业确实存在WITH (NOLOCK)于选择查询中。 我知道这与尝试在发生页面拆分时选择数据有关,这导致数据不再位于应有的位置-我认为这就是我的环境中发生的事情。 我将如何重现? 我试图做一个短期的变通办法来捕获错误并在发生这种情况时重试,但是如果无法重现它,我将无法对其进行测试。是否有合理可靠的方法引起这种情况? 当发生这种情况时,再次执行查询会成功-因此,我对实际数据或数据库永久损坏没有任何担心。查询中的某些表(以及它们的索引)经常被删除,重新创建和重新填充,因此我假设它与此相关。 删除NOLOCK是我要解决的长期问题。首先NOLOCK放在这里的原因是,查询是如此糟糕,以至于它们陷入日常事务的僵局中,因此NOLOCK,用于阻止僵局(工作正常)的创可贴也是如此。因此,在我们可以做一个永久性解​​决方案之前,我需要一个创可贴。 如果我可以用《 Hello World》来复制它,我计划在不到一个小时的时间内将创可贴打入工作。无法进行搜索和替换删除NOLOCK,因为我将再次开始遇到应用死锁,这对我来说比偶尔的失败工作更糟糕。 使用读取提交的快照隔离是一种很好的可能性-我将不得不与我们的数据库团队合作以获取有关该快照的更多详细信息。问题的一部分是,我们没有SQL Server专家来处理此类问题,而且我对隔离级别的理解不充分,无法立即进行更改。

3
如何避免3个表之间的循环依赖关系(循环引用)?
我有3张桌子: 人 发布 喜欢 当我设计ER模型时,它具有循环依赖性: 1:N 人-------- <帖子 1:N 发表---------- <喜欢 1:N 人-------- <喜欢 逻辑是: 1人可以发表很多帖子。 1个帖子有很多赞。 1个人可以喜欢许多帖子(创建的人不能喜欢自己的帖子)。 如何删除这种循环设计?还是我的数据库设计错误?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.