数据库管理员

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

2
SQL查询以获取每周的最后一天
使用MySQL,我需要查询具有datetime字段的表。我需要计算特定一周的所有记录。使用date_format(colname,“%Y%V”)返回星期#,但是我需要该周的最后一天(每月01-28 | 29 | 30 | 31)。 输出例如 COUNT(*)| 日期 11 | 2012-01-07 22 | 2012-01-14 123 | 2012-01-21 帮帮我? 注意:在我的情况下,一周的最后一天是星期日。
8 mysql 

3
在全文搜索查询中优化ORDER BY
我有一张entities约有1500万条记录的大桌子。我想在其中找到与“曲棍球”匹配的前5行name。 我在上有全文索引name,该索引用于:gin_ix_entity_full_text_search_name 查询: SELECT "entities".*, ts_rank(to_tsvector('english', "entities"."name"::text), to_tsquery('english', 'hockey'::text)) AS "rank0.48661998202865475" FROM "entities" WHERE "entities"."place" = 'f' AND (to_tsvector('english', "entities"."name"::text) @@ to_tsquery('english', 'hockey'::text)) ORDER BY "rank0.48661998202865475" DESC LIMIT 5 持续时间25,623 ms 解释计划 1个限制(cost = 12666.89..12666.89行= 5宽度= 3116) 2->排序(费用= 12666.89..12670.18行= 6571宽度= 3116) 3排序键:(ts_rank(to_tsvector('english':: regconfig,(name):: text),'''hockey''':: tsquery)) 4->对实体进行位图堆扫描(cost = 124.06..12645.06行= 6571宽度= 3116) …

3
如何确定何时创建一个新表来保存可以从查询中获取的数据?
我们有一个付款表,代理商可以得到付款佣金。佣金基于几个不同的因素,例如获得付款所花的时间,因此在确定代理人获得的佣金率时需要进行一些计算,但是没有什么复杂的事情。 例如,它可能永远不会比这更复杂: SELECT Payments.Amount * CASE WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 1 THEN Rates.Rate1 WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 2 THEN Rates.Rate2 ELSE Rates.Rate3 END 建立第二个表来保存此数据而不是在需要时查询它是否有意义?还是我应该坚持使用运行时查询来在需要时提取数据? 更重要的是,在确定是否需要查询数据时是否应该运行查询,或者是否应该将数据存储在自己的单独表中时,应使用哪些因素?

4
从Oracle函数返回完全动态的表
我想编写一个带有两个IN参数的函数,其中第一个是a varchar,第二个是a的列表varchars。基于这些,我想返回一个具有不同列数和类型名称的表varchar。 据我所知,我必须始终创建一个对象/记录及其表类型。这意味着我的想法行不通吗?基本目标是将系统命令输出作为表传递回被调用方。 编辑:更多的任务。我想发出一个OS命令,使用输出并将其作为表返回。OS命令的输出将是CSV格式的数据。在执行时,我不知道要返回的行数,而仅知道作为第二个arg传递的列数。我想使用的Java与动态STRUCT和ARRAY包含它们。尽管我更喜欢前一种方法。 它看起来应该像这样: create function(clob query, list of varchars cols) returns table begin execute system command(query, cols); examine sysout from command; return tabular data from syscmd as table; end

1
sp_send_mail的数据库权限出现问题
我正在尝试发送数据库邮件,但是却收到了EXECUTE permission denied on the object 'sp_send_dbmail' database 'msdb', schema 'dbo'.。我正在运行的代码如下: SELECT SUSER_NAME(), USER_NAME(); Create USER kyle_temp FOR LOGIN Foo EXECUTE AS USER = 'kyle_temp'; SELECT SUSER_NAME(), USER_NAME(); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Profile', @recipients = 'test@test.com', @subject = 'Test', @body = 'Test' REVERT; DROP USER kyle_temp Foo登录显示它已映射到msdb中的Foo用户。当我查看msdb中的foo用户时,我看到它已检查“ DatabaseMailUserRole”,并且对dbo执行sp_send_dbmail。 我想念什么?

2
RFID合适的数据类型是什么,格式是否有标准定义?
我有一个数据库,该数据库基于嵌入在他们鞋子中的RFID标签来跟踪人们。该数据到达一VARCHAR(MAX)列,其他数据按特定顺序混合。到目前为止,所有RFID值的格式如下: AnnnnnnnnAnnAAAA (where A = 0-9 and n = A-Z) 我正在写一份报告,从这些消息中提取RFID并将它们存储在自己的表中。只要RFID遵循相同的模式,我就可以找到它们。如果RFID格式更改,我的提取过程将失败。 RFID标签是否有标准格式?哪种数据类型最适合存储RFID标签? 我现在要去VARCHAR(20)。

4
无法以root用户身份授予特权
由于存在一些问题,我决定重新创建除之外的所有用户root@localhost。这可以正常工作,但是新创建的用户无权执行任何操作。我想要的只是简单地将所有权限授予某个本地IP上的root用户。我root@localhost试过了 CREATE USER 'root'@'10.0.3.210'; GRANT ALL ON *.* TO 'root'@'10.0.3.210'; 第一个命令有效,第二个命令失败并显示消息 ERROR 1045 (28000): Access denied for user 'root'@'localhost' 我不明白为什么root@localhost不能做所有事情,我确定我没有弄乱它的特权。从 SHOW GRANTS FOR 'root'@'localhost' 我懂了 Grants for root@localhost GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, REPLICATION SLAVE, …

1
在整个SQL Server数据库上获取统计信息的最有效方法
我想要做的是查看我们的数据库并锁定所有auto-shrink设置,并掌握数据库/表高度分散的情况。 我是否可以运行特定的脚本来了解每个数据库的好主意? 我知道我可以在每个表级别(至少是SQL Server 2005)上运行以下命令: DBCC SHOWCONTIG ('DB.TABLE'); 但是如何运行才能显示数据库中的所有表? 谢谢

4
MySQL子查询速度大大降低,但它们独立运行良好
查询1: select distinct email from mybigtable where account_id=345 需要0.1秒 查询2: Select count(*) as total from mybigtable where account_id=123 and email IN (<include all from above result>) 需要0.2秒 查询3: Select count(*) as total from mybigtable where account_id=123 and email IN (select distinct email from mybigtable where account_id=345) 花费22分钟和90%的时间处于“准备”状态。为什么要花这么多时间。 表是在MySQL 5.0上具有320万行的innodb



1
PostgreSQL故障转移-我应该使用哪些工具?
这是场景: 有两台运行CentOS 6.2的计算机-machine0和machine1 两者都安装了PostgreSQL 9.1。 其中一个应处于活动状态,作为主系统,并且通过异步流复制另一台计算机,备用数据库应将更改从主系统复制到数据库。 假设机器0是主服务器,机器1是备用服务器。 如果主服务器(例如machine0)发生故障(此处的失败表示Postgresql服务器崩溃),则备用服务器应从主服务器接管并成为新的主服务器。 在machine1中,新的master处理所有的数据库操作,并且当machine0中的postgresql服务器恢复联机时,它应该成为备用服务器,从失去与machine1的连接点开始进行同步,并将所有更改复制到数据库并保持备用模式。 当machine1发生故障时,整个循环将重复。 当备用数据库发生故障并重新联机时,它应该开始从主数据库读取数据并同步数据。 我对需要使用哪些工具进行设置感到困惑,因为我了解PostgreSQL默认情况下没有故障转移。 如果有人可以将我链接到描述如何做我想做的事情的线程/页面,我将非常感激。

5
是否可以自动通知我SQL Server中的长时间阻塞?
大约每周一次,我必须解决SQL Server 2005数据库上的阻塞链,这是由Access 2003前端的长期读取锁定引起的。每当用户打开某个表单时,该锁便被取出;当用户完成滚动或关闭该表单时,该锁便被释放。由于我们的许多用户打开此表单作为参考,因此这些锁会保留一段时间。对表的任何更新都会导致阻塞,并且突然之间没有人可以从该表中进行选择,因为他们都在等待第一个锁。这对我们来说是个大问题,因为许多应用程序都依赖于此数据。我知道这种锁定行为是Access与链接表一起工作的一部分。 我一直在通过Activity Monitor解决问题,方法是在发现问题时杀死SELECT进程中的Head Blocker。这是一个问题,不仅是因为我花了一些时间手动进行操作,而且还因为它是被动的。到我听说时,对于许多人来说已经是一个问题。 我想知道是否有一种自动方法来检查这些持久的封锁链,并通过电子邮件发送或自动解决问题。逻辑看起来很简单(“如果匹配此SELECT查询的任何进程被阻塞超过一分钟,请通知我/杀死它”),但我不知道如何使用SQL Server来实现。 对于它的价值,我认为正确的解决方案是修复或重写应用程序。但是,由于部门的政治原因,在接下来的几个月中这不是一个选择,因此我正在寻找一个权宜之计。

1
如何在RDBMS中检测并报告死锁?
面试时我被问到了这篇论文类型的问题,但没有得到这份工作。完整的问题如下: 如何在RDBMS中检测并报告死锁?在检测和预防场景中,交易所有者和应用程序开发人员分别负责什么?
8 deadlock 

2
镜像日志在主数据库上为空,但在镜像服务器上为正常
我们有几十个基本服务器和相应的镜像,大多数都工作正常,但是其中1个的行为很奇怪。具体来说,sp_dbmmonitorresults对于给定的主体数据库,proc将所有列返回为NULL,而sp_dbmmonitorresults在镜像上则返回有效信息: 现在,我有一个大概的原因。当设置主服务器和镜像服务器时,在主服务器上设置不正确的区域设置(时间正确,但使用的是+4区域(美国等),则在设置镜像后,时间区域已更正为GMT +0(学校我知道的男孩错误,但c'est la vie!) 编辑:19/12/2012 今天,我删除了镜像,删除了镜像上的副本,然后重新设置了镜像,但这并没有解决问题!我将悬赏这个问题,以尝试深入研究这个问题。 要确认的是,如果我EXEC sp_dbmmonitorresults @database_name = 'ProScript'在每台服务器上手动运行,它将为主要服务器上的大多数值返回NULL,但在镜像服务器上返回正常,如下所示: 当跑到小学时: 缩放:单击查看完整尺寸的版本 照镜子时: 缩放:单击查看完整尺寸的版本 如您所见,时间是当前的并且数据库已同步,但是log_generation_rate,unsent_log,send_rate等在主数据库上都为NULL吗? 两台服务器都有每分钟运行的监控作业,并exec sys.sp_dbmmonitorupdate作为作业步骤等。 查看sys.sp_dbmmonitorupdate的源代码,它将从sys.dm_os_performance_counters- 中获取这些值,因此,如果我在镜像上运行以下命令: SELECT counter_name , cntr_value FROM sys.dm_os_performance_counters WHERE instance_name = 'ProScript' AND counter_name IN ( N'Log Send Queue KB', N'Log Bytes Sent/sec', N'Redo Queue KB', N'Redo Bytes/sec', N'Transaction Delay', N'Log …

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.