数据库管理员

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

1
无法看到MySQL提交的数据来选择查询
上下文:使用的框架是Spring,所有查询都使用JdbcTemplate运行。Mysql Server版本是5.6.19。和table是InnoDB table,默认设置为,并且设置了auto commit隔离级别可重复读取。 问题:Insert在事务内部发生的事情和select读取相同插入数据的事务看不到该数据。在select运行后,在insert之后的insert交易都有commited。 我已经启用bin日志以及mysql中的常规日志。以下相关日志 二进制日志: SET TIMESTAMP=1438265764/*!*/; BEGIN /*!*/; # at 249935389 #150730 14:16:04 server id 1 end_log_pos 249935606 CRC32 0xa6aca292 Query thread_id=40 exec_time=0 error_code=0 SET TIMESTAMP=1438265764/*!*/; insert into user_geo_loc_latest(user_id, lat, lng) values(x,y,z) on duplicate key update lat=y, lng=z /*!*/; # at 249935606 #150730 14:16:06 server id 1 …

1
获得客户的百分之十和百分之九十
我有一个包含客户和得分的表(基于不同的因素,在这种情况下不相关;一个客户可以有多个得分),看起来像这样: customer_id | score | score_giver_id ==================================== 1 | 100 | 1 1 | 102 | 1 1 | 101 | 1 1 | 140 | 1 2 | 131 | 3 1 | 44 | 1 3 | 223 | 1 3 | 1 | 2 3 | 201 …

3
备份内部-在运行备份作业时会发生什么-就SQL Server中的锁定和性能开销而言?
对于MySQL,我知道数据库是在SQL语句中逐表备份的,这会导致锁定,如果在备份时更新列,则可能会遇到完整性问题。 据我了解,这不适用于Microsoft SQL Server,但是SQL Server如何处理呢?是否有一些内部冻结来保持数据库一致? 我还听说备份是单线程的,这意味着它仅使用一个核心,假设您备份到单个文件。还要假设您有一台多核计算机,例如16个核,或者至少有一个比一个大得多的核。 从我的个人经验来看,备份时我从来没有遇到过问题,既没有锁定也没有开销问题,但是我的经验有限。这就是为什么我总是建议在服务器属性中打开备份压缩的原因。 那么当备份作业运行时会发生什么呢?而且不同版本之间也存在显着差异吗?例如2008、2012和2014(不是许可)。

2
sp_send_dbmail存储过程带有附件发送
我的任务是向其中一位客户发送一份小型月度报告。该报告以前是在实例上手动运行的,输出已复制到电子表格中并作为附件发送给客户。 我正在寻找一个更永久的解决方案,因此我打算使用sp_send_dbmail存储过程来运行查询并将其作为附件发送。 一切正常,但消息格式正确。最初,我尝试将输出附加为带有CSV文件的CSV文件,@query_result_seperator = ','但结果无处不在! 当我正常运行报表时,在SQL中输出看起来不错。但是,将其作为CSV或仅在邮件正文中发送就没有了。 我认为如果将输出导出为HTML并以附件/或XML格式发送输出可能会更好,但是我不知道该怎么做。 有没有人有什么建议? 提前致谢!

1
为什么新用户能够在PostgreSQL中创建表?
我遵循了两个教程来使用以下内容创建数据库: 完全特权的用户链接 只读用户链接 然后,我从CJ Estel的教程中获得了一条提示,指出“ 即使我们从未明确将其提供给新用户,您也可能继承了创建表的功能”。果然,只读用户能够创建和拥有表! CJ Estel指出了根本原因,即模板数据库。但是创建表的功能破坏了您通过搜索“只读用户postgres”获得的大多数教程,包括postgresql.org上托管的教程。您的用户不仅具有只读权限! 为什么新用户具有此功能?撤消该特权后,数据库对于该用户是否真正是只读的?

1
如何调试空闲查询?
我有一个每天在数据库上运行的批处理查询。但是,它似乎陷入了空闲状态,并且调试发生的事情非常困难。 该查询是同时插入的表上的聚合,我猜这与问题有关。(聚合是基于前几天的数据,因此插入不会影响结果。) 线索 我正在使用sqlalchemy在python脚本中运行它。但是,我已将事务级别设置为自动提交,因此我认为事情不会卷入事务中。另一方面,在sql终端中手动运行查询时,我看不到查询挂起。 通过查询pg_stat_activity,查询最初以形式进入数据库state='active'。大约15秒钟后,状态更改为“空闲”,此外,xact_start设置为NULL。等待标志永远不会设置为true。 在弄清楚sqlalchemy的事务级别自动提交之前,它会挂在状态'idle in transaction'而不是'idle'。自进行更改以来,它挂起的频率可能会稍微降低一些? 我觉得我没有能力对此进行更深入的研究。任何反馈,甚至在不给出明确答案的情况下,甚至解释更多有关不同状态和相关postgres内部的信息,都将不胜感激。

1
授予对数据库所有表的访问权限
我最近想与服务器的一个用户共享定期访问权限和我认识到,一个简单的CREATE USER和GRANT ALL ON DATABASE命令没有让他运行一个简单SELECT的数据。 我想将给定数据库中所有表的权限授予指定用户,但是我不确定授予他对整个模式的访问权限是否是最好的主意,public因为我不知道是否允许某种特权升级。还有其他办法吗?

2
Postgres不完整的启动包错误
我正在尝试在Ubuntu 14.04上安装Postgres 9.3,并且在启动时遇到一个令人讨厌的错误。这是我所看到的: $ sudo service postgresql restart * Restarting PostgreSQL 9.3 database server * Error: could not exec /usr/lib/postgresql/9.3/bin/pg_ctl /usr/lib/postgresql/9.3/bin/pg_ctl start -D /var/lib/postgresql/9.3/main -l /var/log/postgresql/postgresql-9.3-main.log -s -o -c config_file="/etc/postgresql/9.3/main/postgresql.conf" : [fail] 因此,我使用以下输出检查了日志文件: 2015-01-05 21:50:05 EST LOG: database system was shut down at 2015-01-05 21:50:03 EST 2015-01-05 21:50:05 EST LOG: …

3
避免多个`或`表达式
我有以下oracle SQL及其工作原理,但与所有ors 比较难看。有更简洁的方法吗? SELECT * FROM foobar WHERE (SUBJECT ='STAT' and TERM ='111') or (SUBJECT ='STAT' and TERM ='222') or (SUBJECT ='ENGLISH' and TERM ='555') or (SUBJECT ='COMM' and TERM ='444') or (SUBJECT ='COMM' and TERM ='333') or (SUBJECT ='STAT' and TERM ='666') ...

1
高可用性还原SQL Server 2012数据库
我有一个始终处于高可用性模式的数据库,该数据库与另一个实例上的另一个数据库同步。如何使用从.bak文件还原到主数据库T-SQL? 我是高可用性的新手,并被告知我需要先使数据库脱离高可用性,然后才能进行还原,然后再次将其重新设置为高可用性,但我不确定。 我希望我可以在AlwaysOn仍启用的同时直接还原到主数据库,并且它将与辅助数据库自动同步。

6
事务日志不会减少,数据库认为它正在复制
我有一个运行Kaspersky Security Center的SQL Server 2008 R2 Express数据库,我不知道在什么情况下会进行安装,但是该数据库似乎认为它已被复制并且不会从事务日志中释放任何空间。例如: USE master; SELECT name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled FROM sys.databases WHERE name = 'KAV'; SELECT DATABASEPROPERTYEX('KAV', 'IsPublished'); 返回: name | log_reuse_wait | log_reuse_wait_desc | is_cdc_enabled -----|----------------|---------------------|--------------- KAV | 6 | REPLICATION | 0 DATABASEPROPERTYEX('KAV', 'IsPublished') ---------------------------------------- 0 [not published] 同样Replication,SSMS 的部分中没有列出任何内容。 到目前为止,我已经尝试了一些来自Google结果的陈述: USE KAV; …

6
使用PowerShell发现所有正在运行的SQL Server实例的最有效方法是什么?
我的任务是发现我们域中运行的所有SQL Server实例。在某些情况下,每个服务器有多个实例。我已经看到了找到这些实例的两种不同的PowerShell方法,但是似乎都找不到所有实例。 1)使用WMI $srvr = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer $computerName $instances = $srvr | ForEach-Object {$_.ServerInstances} | Select @{Name="fullName";Expression={$computerName +"\"+ $_.Name}} return $instances 2)使用远程注册表(与Get-SQLInstance 1一样) 我遇到的最大问题是,并不是我所知道的所有服务器都与SQL Server WMI提供程序一起运行,也不是它们都允许远程注册表。有第三种方法吗?我可以使用远程桌面访问所有服务器,但是我正在寻找大约30台计算机,如果可能的话,我希望避免手动操作。这仅适用于SQL Server 2008及更高版本,虽然很高兴了解其他SQL Server服务(SSIS / SSAS / SSRS),但我的主要重点是SQL Server本身。

1
SQL Server中执行计划创建的确定性如何?
给定以下常量: 具有相同结构(表,索引等)的相同数据库 相同的数据 相同的SQL Server和硬件配置 相同的统计 客户端中相同的SET选项 相同的SQL Server版本 相同的跟踪标志 给定这些常量,SQL Server会始终为给定查询生成相同的计划吗? 如果没有,还有其他考虑吗?是否还需要考虑不确定性因素?

1
更新另一个表中的所有列
我需要从另一个表更新一个表,并且需要更新所有列。除了列出SET子句中的每一列之外,还有没有办法一次更新所有列?像这样: update tableA set * = tableB.* from tableB where tableA.id = tableB.id 我在psql中尝试过,它不起作用。我必须像这样列出每一列: update tableA set c1 = tableB.c1, c2 = tableB.c2, ... from tableB where tableA.id = tableB.id tableB被创建使用create .. like tableA。因此,它们基本上是相同的。我这样做的原因是,我需要将.csv数据加载到临时表中tableB,然后tableA根据中的新数据进行更新tableB。tableA需要尽可能少地锁定,并且tableA需要保持完整性。我不确定“先删除然后插入”是否是一个好选择?

3
限制用户仅复制备份
我希望在我的生产环境中部署日志传送。这意味着我将不得不管理备份链,而备份链可能会因人们进行备份以刷新开发环境而中断。如果发生故障,并且想使用日志备份还原到某个时间点,则还需要开发人员进行备份。 如果开发人员仅使用“仅复制”备份,则不会发生这种情况。所以我的问题是:是否有一种方法可以限制用户只能执行“仅复制”备份?

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.