数据库管理员

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

2
在dbo模式下未创建表
在SSMS中创建表时,我已经意识到,如果执行以下语句: CREATE TABLE [tableName]; 该表将在您自己的模式(而不是dbo)下创建。因此,为了在dbo模式下创建它,您需要像这样明确地声明: CREATE TABLE [dbo].[tableName]; 有谁知道一种方法(例如,服务器范围的设置),以便在创建表时不需要指定[dbo]部分?


2
PL / pgSQL中是否有一种简单的方法来检查查询是否未返回结果?
我目前正在尝试使用PL / pgSQL进行试验,并想知道是否存在一种更优雅的方法来执行以下操作: select c.data into data from doc c where c.doc_id = id and c.group_cur > group_cur order by c.id desc limit 1; EXCEPTION WHEN NO_DATA_FOUND THEN select c.data into data from doc c where c.doc_id = id and c.global_cur > global_cur order by c.id desc limit 1; EXCEPTION …

5
无法删除不存在的约束,也不能创建约束
在使用生产数据的副本测试某些迁移脚本(脚本与开发数据运行良好)时,我发现了一个奇怪的情况。约束已更改,因此我正在发出DROP + ADD命令: ALTER TABLE A_DUP_CALLE DROP CONSTRAINT A_DUP_CALLE_UK1; ALTER TABLE A_DUP_CALLE ADD CONSTRAINT A_DUP_CALLE_UK1 UNIQUE ( CONTROL_ID, CALLE_AYTO_DUPL ) ENABLE; DROP命令工作正常,但添加命令失败。现在,我陷入了一个恶性循环。我不能删除该约束,因为它不存在(初始删除按预期方式工作): ORA-02443:无法删除约束-不存在约束 我无法创建它,因为名称已经存在: ORA-00955:名称已被现有对象使用 我输入A_DUP_CALLE_UK1到SQL Developer的“ 搜索”框中,然后就可以了!所有者,表名,表景...一切都匹配:它不是具有相同名称的其他对象,这是我的原始约束。该表出现在约束详细信息中,但约束没有出现在表的详细信息中。 我的问题: 这有什么解释? 在实时服务器中进行真正的升级时,如何确保不会发生这种情况? (服务器为10g XE,我没有足够的声誉来创建标签。)

2
开源商业智能/ DWH解决方案
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 我想知道还没有问过这个问题。Google对我来说只有极少数的结果没有显示出高质量的工具 有哪些针对数据仓库,更具体地说是商业智能工具的开源(也可以免费使用)解决方案?您对他们有什么经验。我的硕士课程中有一门课程,我们与MS Business Intelligence和MSSQL一起用作数据仓库存储。现在,我想使用“开放式”工具深入了解该主题。 是否有任何可比较的商业智能工具(大多与数据库无关),您对它们有任何经验吗? 编辑玛丽安(Marian)对斯蒂芬妮(Stephanie)的回答时,我发现我把问题提成错误。我知道DWH只是“报告优化”的数据库,Stephanie对此的解释很清楚。我对如何使用哪种类型的BI软件/工具/其他技术将数据转换为这种优化形式感到更感兴趣。

1
datetime2(0)与datetime2(2)
根据文档datetime2(Transact-SQL): 存储大小 6字节,精度低于3。7 字节,精度3和4。 所有其他精度要求8字节。 的大小datetime2(0),datetime2(1),datetime2(2)使用相同的存储量(6个字节)。 我是否可以在datetime2(2)不增加任何尺寸费用的情况下继续使用并获得精度的好处是否正确? 请注意: 该列用PK索引,以形成复合聚集索引(用于表分区) 我不在乎毫秒 datetime2(0)在where子句中使用或在索引中查找时,CPU效率会更高吗? 这是一个庞大的表,因此最小的优化将有很大的不同。

2
MySQL-使用count(*)和information_schema.tables进行行计数之间的区别
我想要一种快速的方法来计算表中有几百万行的行数。我在Stack Overflow上找到了“ MySQL:最快的行数计数方法 ”一文,它看起来可以解决我的问题。Bayuah提供了以下答案: SELECT table_rows "Rows Count" FROM information_schema.tables WHERE table_name="Table_Name" AND table_schema="Database_Name"; 我喜欢它,因为它看起来像查找而不是扫描,因此它应该很快,但是我决定对它进行测试 SELECT COUNT(*) FROM table 看看有多少性能差异。 不幸的是,我得到了如下所示的不同答案: 题 为什么答案相差约200万行?我猜执行全表扫描的查询是更准确的数字,但是有没有一种方法可以不必运行此慢查询就可以获取正确的数字? 我跑了ANALYZE TABLE data_302,完成了0.05秒。当我再次运行查询时,我现在得到了34384599行的更接近的结果,但是它仍然select count(*)与34906061行的数字不同。分析表是否立即返回并在后台处理?我觉得值得一提的是,这是一个测试数据库,目前尚未写入。 没有人会在乎是否只是告诉某人一个表有多大的情况,但是我想将行数传递给一些代码,该代码将使用该数字来创建一个“大小相等”的异步查询来查询数据库并行地,类似于Alexander Rubin通过并行查询执行来提高慢查询性能中所示的方法。照原样,我将获得最高的ID,SELECT id from table_name order by id DESC limit 1并希望我的表不要过于分散。
16 mysql  mysql-5.6  count 

2
设计数据库和表以保留更改记录的最佳方法?
我需要在项目上设置历史记录功能,以跟踪先前的更改。 假设我现在有两个表: NOTES TABLE (id, userid, submissionid, message) SUBMISSIONS TABLE (id, name, userid, filepath) 示例:我在注释中有一行,并且用户想要更改消息。我想跟踪更改之前和更改之后的状态。 在这些表中的每个表上设置一列的最佳方法是什么,该列将说明某项是否“旧”。0,如果活性OR 1,如果删除/不可见。 我还想创建一个历史记录(AUDIT TRAIL)表,其中包含id先前状态的,id新状态的,这些ID与哪个表有关?

4
在SQL Server中同步两个数据库
我有两个SQL Server数据库。一个是客户端(Windows应用程序),第二个是服务器上。我想每隔一段时间(例如每2分钟!)同步这两个数据库。 我已经阅读了有关同步的不同方法,例如复制,时间戳,使用触发器的日志表,Microsoft Sync Framework等。 实际上,我不喜欢使用可能是黑匣子的同步方法(例如复制),因为我不希望在更新SQL Server特定表并将其与服务器同步时阻止SQL Server特定表。 在这种情况下,您认为我应该使用哪种方法?请记住,每隔几分钟,我必须将几个表更改从客户端发送到服务器,并且还要从服务器获取两个表更改。 我发现了一种奇怪但又新的方法。是否可以在客户端中记录所有已执行(针对特定首选)的存储过程,并将其参数与.sql文件一起发送到服务器,然后在服务器上执行?在服务器上也会发生同样的情况,并将其发送给客户端。您是否认为这是一种简单但有用的方法? 如果可以的话,请建议我任何有用的方法。非常感谢。 编辑:请记住,这是实时同步,这使其与众不同。这意味着当客户端用户使用表时,与服务器的同步过程必须每隔几分钟进行一次,因此任何表都不得锁定。

2
备份/还原用户/密码/特权
我正在从一台服务器移动到另一台服务器,并且想从我的MySQL Server备份所有数据库+用户/特权/密码。我发现使用来备份数据库mysqldump,但是我不知道如何备份所有用户和给定的特权。有没有办法实现这一目标,还是必须在新服务器上重新进行设置?

2
获取SQL Agent作业的详细输出
我们有一个SQL Server代理作业,该作业运行维护计划以重新索引服务器上的所有数据库。最近,这已失败,但是作业历史记录无法提供足够的信息来诊断问题。 在作业历史记录中,它指出作业失败。该作业已由用户foo \ bar调用。运行的最后一步是步骤1(重建索引)。 在详细信息窗口中,有以下格式的多条消息: Executing query "ALTER INDEX [something] ON [a...".: 0% complete End Progress Progress: 2015-03-15 22:51:23.67 Source: Rebuild Index Task 正在运行的SQL语句被截断,并且我假设该语句的输出也被截断了,这使我无法识别出哪个特定的语句失败以及为什么。有什么方法可以提取这些消息的全文吗?

2
mysqldump:得到错误:1044:使用锁定表时,用户'username'@'localhost'对数据库'databasename'的访问被拒绝
mysqldump:得到错误:1044:使用锁定表时,用户'username'@'localhost'对数据库'databasename'的访问被拒绝 我能够正确记录日志并能够从SQLyog Tool进行完整备份,但是当我尝试从MySQL Enterprise Workbencg进行备份时又收到错误消息。 mysqldump:得到错误:1044:执行锁定表时,拒绝用户'myuserid'@'%'对数据库'mydatabasename'的访问 操作失败,退出代码为2 并且MySQL Connection状态正常。 mysql>状态; 适用于Win32(x86)的mysql.exe Ver 14.14 Distrib 5.6.19 连接ID:23921当前数据库:数据库名当前用户:此处用户ID可以使用SSL:不在使用中使用分隔符:; 服务器版本:5.6.17-log MySQL社区服务器(GPL)协议版本:10连接:此处连接正常服务器特征集:utf8 Db特征集:utf8客户端特征集:cp850连接特征符:cp850 TCP端口:3306正常运行时间:21天21小时11分37秒 线程:24问题:20500671慢查询:3212打开:121998刷新表:1打开表:2000查询/秒平均:10.842
16 mysqldump 


4
如何使pg_dump跳过扩展名?
这是在9.3上,但我可以记住从7.x开始发生的类似事情。所以我创建数据库并将plpgsql扩展安装到其中。稍后,我创建一个pg_dump,然后将其恢复到数据库之前,请确保它也具有plpgsql扩展名。然后在还原时会发生这种情况: pg_restore: creating EXTENSION plpgsql pg_restore: creating COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] Error while PROCESSING TOC: pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql Command was: COMMENT ON EXTENSION plpgsql …

2
psql:致命错误:对不起,已经有太多客户端
当尝试访问使用postgresql数据库的网站,甚至使用psql实用程序或pgadmin3时,我突然收到此错误。 我的数据库设置为处理150个最大连接: # SHOW max_connections; max_connections ----------------- 150 (1 row) 重新启动我的网站所在的ubuntu服务器(这实际上是使用连接的唯一方法)后,我看到当前的连接数量为140: # select count(*) from pg_stat_activity; count ------- 140 (1 row) 我不明白重新启动服务器后突然有这么多连接。所以我检查了postgresql活动: # SELECT * FROM pg_stat_activity; 而且我看到100列具有相同的确切查询,如下所示: SELECT "reports".* FROM "reports" WHERE (("reports"."time" < '2014-06-28 13:30:42.000000' AND "reports"."unit_id" = 3192)) ORDER BY "reports"."id" DESC LIMIT 1 更重要的是它们都具有相同的客户端地址(我的Web服务器)。 该Web服务器在连接池为50的导轨上使用ruby。即使连接池为50,Passenger进程/ prefork …

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.