数据库管理员

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

1
生成带有上下文的异常
PostgreSQL引发异常时,将出现“ CONTEXT”行,例如: ERROR: INSERT has more target COLUMNS than expressions LINE 3: ... ^ QUERY: INSERT INTO ... CONTEXT: PL/pgSQL FUNCTION "XXXXX" line 4 at SQL statement 但是当我抛出异常时,此行不存在。我没有找到如何添加它。 RAISE EXCEPTION 'blablabla' USING HINT = 'blablablabla'; 是否可以将此行添加到我的例外中?

2
NoSQL和RDBMS在一起?
我想知道是否有什么好的解决方案可以在NoSQL数据库中记录数据,然后将其转换为RDBMS? 例如,如果您想快速捕获一些数据(例如会话日志),但是希望以后能够为其创建报​​告。 我最喜欢的数据库是Postgres,因此,如果您的答案与Postgres相关,那将很棒。
13 nosql  rdbms 

3
我应该使用SQL JOIN还是IN子句?
我对最佳方法有疑问。当将数据视为大小可变时,我不确定哪种方法最好。 考虑以下3个表: 雇员 EMPLOYEE_ID,EMP_NAME 项目 PROJECT_ID,PROJ_NAME EMP_PROJ(上面两个表中的许多表) EMPLOYEE_ID,PROJECT_ID 问题:给定EmployeeID,找到与该Employee关联的所有项目的所有雇员。 我用两种方法尝试过。无论使用什么数据大小,这两种方法的区别仅相差几毫秒。 SELECT EMP_NAME FROM EMPLOYEE WHERE EMPLOYEE_ID IN ( SELECT EMPLOYEE_ID FROM EMP_PROJ WHERE PROJECT_ID IN ( SELECT PROJECT_ID FROM EMP_PROJ p, EMPLOYEE e WHERE p.EMPLOYEE_ID = E.EMPLOYEE_ID AND E.EMPLOYEE_ID = 123) 走 select c.EMP_NAME FROM (SELECT PROJECT_ID FROM EMP_PROJ WHERE …
13 postgresql  join 

1
将表复制到其他数据库名称
我们的质量检查环境具有所有后缀为“ test”的数据库名称。例如,生产中的dbname1在质量检查中将具有对应的dbname1test。(这主要是为了防止prod / qa配置混淆)。 我想将几个表复制到QA中。我不确定如何告诉它说“从那里的dbname1复制到那里的dbname1test” 这有可能吗?

2
如何从Postgres数据库中分离所有其他用户?
我需要对数据库的独占访问权。是否可以使用SQL命令从Postgres数据库中“分离”所有其他用户。或者关闭所有其他连接,然后获得独占访问权限。 这是用于单元测试,并且测试只能手动运行,因此没有危险。仅旧的无效连接将受到影响。 没有其他用户连接到这些单元测试数据库。 旧的死联系来自发展。当正在编写或失败的测试没有清除时,就会一直发生这种情况。 如果在生产环境中断开其他用户的连接后还需要将其锁定一段时间,请参阅下面的Scott Marlowe的回答:https : //dba.stackexchange.com/a/6184/2024 另请参见dba上的类似问题:如何在不停止服务器的情况下删除与特定数据库的所有连接?
13 postgresql 

2
如何恢复文件被移动到的InnoDB表
所以我有一个在复制流上安装的测试数据库服务器。顾名思义,优化过程很快就被填补了从属数据目录上的空间。MySQL尽职尽责地只是在等待更多的空间。 该数据目录是仅用作mysql的数据目录的文件系统,因此没有其他可释放的内容。 我有一个4 gig innodb测试表,它不是复制流的一部分,所以我想尝试一些方法来查看它是否可以工作,并且作为测试环境,我不太担心事情出了什么问题。 这是我采取的步骤 弄丢了我要移动的桌子 在其上放置一个读锁(即使没有任何写入,并且不在复制流中) 将.frm和.ibd复制到带有一些备用空间的文件系统中 解锁桌子 删减了该表-释放了足够的空间以使优化完成,复制开始重新进行。 停止奴隶/关闭mysql 将文件从tmp中复制回数据目录 重启mysql .err日志中没有任何显示,一切看起来不错。我连接并使用mydb;并在显示表中查看我正在弄乱的表。但是,如果我尝试 select * from testtable limit 10; 我得到错误 ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist 从目前为止我所知道的,我可以从其他所有表中读取数据,并且复制开始备份而没有任何抱怨。 从这一点上我有什么办法可以恢复?如果需要,我可以从头开始重建它,但是很好奇其他人对该企业的总体看法。关于我采取的一系列步骤,如果没有更完美的结果,是否有任何结果? 如果这不是测试服务器,我不能只是“实时运行”并看看会发生什么?如果我愿意,最好的方法是暂时释放生产从属服务器上的空间?

1
优化BLOB数据的BCP性能
我正在计划将2TB数据库实时迁移到分区表的过程。从广义上讲,该系统是一个文档存储,其中大部分空间分配给了50kb至500kb之间的LOB,其中很小的一部分位于500kb至1MB范围内。迁移的一部分将涉及从旧数据库到新数据库的BCPing数据。 BCP是首选方法,因为数据的当前/历史划分允许在最终切换之前分阶段(在较安静的时段)提取较旧的数据,从而将对实时系统的影响降至最低。数据量和存储的可用性排除了对分区方案进行原位重建的麻烦。 我怀疑由于BLOB内容的原因,尝试KILOBYTES_PER_BATCH而不是ROWS_PER_BATCH可能会带来一些性能提升。BCP文档中建议SQL可以基于该值优化操作。 我找不到关于这些优化的性质或从哪里开始测试的任何指导。在缺乏建议的情况下,我将尝试从4/8/16/32 / 64mb边界开始进行短期运行。 更改数据包大小可能会带来一些好处(BCP-一个参数,而不是服务器级别设置),但除非有人采用更规范的方法,否则我倾向于将此值提高到最大值65535。


5
MySQL Workbench的替代品
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 我一直在遇到MySQL Workbench的一些问题,我不确定该问题是否可以解决(即,似乎是一个可能已经浮出水面的旧错误),所以我希望能够找到一个如果我无法使用它,请备份好它。我已经筛选了几种建议的替代方法,例如Navicat(Navicat 并非免费用于商业用途,它只有30天的试用期),但没有一个能够令人满意地满足我当前的要求。 我需要的: 兼容Linux(最好是Linux本地,我正在使用Ubuntu) 能够通过SSH隧道连接到远程数据库 免费和/或开源(我目前没有资金花100美元以上购买产品,无论如何都希望支持一个好的开源项目) 至少与Workbench的界面一样好(这可能是因为我已经习惯了它,但是我喜欢它的界面,非常干净且直观的选项卡式界面;尽管不必相同) 支持MySQL 5+ 虽然很高兴,但我不需要Workbench拥有的额外数据建模内容。我也不需要花哨的GUI东西(查询设计器等)。我真正需要的是一种有序查看数据的方式以及一个编辑查询的地方。 我目前正在检查HeidiSQL,但它使我想起了我在运行Win9x / Win2k,仅通过WINE运行时曾经使用过的东西,曾经使我崩溃,并且总体上感觉笨拙,尽管我确实喜欢它的简单性转储数据库或更改多个表的功能。

2
INSERT是否自动提交?
我们的应用程序向MySQL数据库触发INSERT查询以添加记录。我想知道记录是否自动提交。如果我运行ROLLBACK命令,数据库何时执行回滚?提交后是否可以回滚?
13 mysql  innodb 

4
SQL Server 2008 R2上的SQL Server语句间歇性变慢
对于我们的一位客户,我们的应用程序遇到了一些性能问题。这是一个.NET 3.5 Web应用程序,正在使用和更新SQL Server数据库上的数据。当前,我们的生产环境由一台Windows 2008 R2计算机作为前端,而在后端则是一个SQL Server 2008 R2群集。我们的应用程序使用COM +和MSDTC连接到数据库。 这是正在发生的事情:我们的最终用户有时会抱怨应用程序运行缓慢。某些页面的加载时间比预期的要多。在尝试找出正在发生的事情时,我设法找出了数据库方面的一些奇怪行为,这可能是性能下降的原因。我注意到有时有些SQL语句需要花费更多的时间才能运行。我设法使用探查器跟踪(带有TSQL_Duration模板)来识别长时间运行的查询,从而识别其中一些语句(主要是对应用程序存储过程的调用)。 问题是,当我直接在SQL Management Studio的数据库上运行这些存储过程时,有时它们会花费很长时间(大约7/8秒),而其他时候它们却很快(不到1秒)。我不知道为什么会这样,这让我发疯,因为其他任何应用程序都没有使用SQL机器(4核,32 GB),并且这些查询的运行时间不会太长。 不是DBA或SQL Server专家,我一直在尝试研究一些可以帮助我理解问题的东西。这是我尝试解决问题以及到目前为止发现的步骤: 应用程序调用的所有TSQL代码都是在存储过程中编写的。 我在SQL Server事件探查器上确定了一些长时间运行的查询,但是,当我在Management Studio上运行这些查询时,它们要么运行很长时间(从4到10秒),要么运行很快(不到1秒)。我正在使用参数中传递的相同数据运行完全相同的查询。这些查询主要是存储过程,其中包含选择语句。 我尝试查看等待和排队统计信息,以尝试确定是否有某些资源在等待进程。我运行了以下查询: WITH Waits AS (SELECT wait_type, wait_time_ms / 1000.0 AS WaitS, (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS, signal_wait_time_ms / 1000.0 AS SignalS, waiting_tasks_count AS WaitCount, 100.0 * wait_time_ms …

3
如何将MySQL日志输出到syslog?
我想使用syslog在Ubuntu(10.04 LTS)上记录MySQL(5.1.41)。我发现了将错误日志输出到syslog的信息。 [mysqld_safe] syslog 但是我想使用syslog记录常规日志和慢查询日志。请告诉我如何写配置文件? 我在参考手册中找不到该怎么做。 http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
13 mysql  logs 

2
修剪大型SQL Server数据库
我有一个大型SQL Server 2008测试数据库(1.9TB),我想减小其在磁盘上的大小。我一直在删除未使用的表,并清除大量数据,但是磁盘上的大小却没有减少。我该怎么办? 我已经看过SSMS中的收缩任务,但是选择令人困惑。我要收缩数据库或文件吗?有什么选择?
13 sql-server 


6
在Oracle SQL查询中创建增量编号
如何在不创建任何表的情况下在oracle sql查询中创建增量编号?我曾尝试使用“ with”子句,但未能获得预期的结果。我正在使用oracle 10g 这是我尝试的代码,它似乎不起作用: WITH TABLE3 AS ( SELECT 2008 YEARS FROM dual WHERE 1=1 union all select t3.YEARS+1 from TABLE3 t3 WHERE 1=1 AND t3.YEARS < 2011 ) select YEARS from TABLE3 我想要的预期结果是: 2008 2009 2010 2011
13 oracle-10g 

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.