数据库管理员

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

1
在48个核心AMD Opteron盒上包含24个物理tempdb文件的TempDB争用
我刚刚收到有关SQL Server 2005实例的以下通知。该实例的核心与tempdb文件比为2:1,总tempdb文件数为24。争用不应发生-我将如何检测这种争用的根源?TempDB和所有其他数据库通过10 GB以太网存储在SAN存储上。SAN具有在一个RAID-60阵列中配置的46个10k SAS驱动器。该阵列与多台VMWare服务器和一台或两台Exchange服务器共享。 来自Idera SQL Diagnostic Manager的通知: 2012年11月8日10:49:00 PM,MGSQL01上的Tempdb争用(ms)至关重要。 在MGSQL01上检测到Tempdb锁存器争用。检测到的总等待时间为1782毫秒。这表明在tempdb中分配映射上的争用会影响性能。如果这是一个经常性的问题,则可以通过遵循有关tempdb文件数,大小和IO子系统的最佳实践来缓解。 PFS等待时间:1782 ms GAM等待时间:0 ms SGAM等待时间:0 ms Tempdb争用(ms):tempdb分配映射(GAM,SGAM和PFS)的当前等待时间,以毫秒为单位。仅在运行SQL 2005或更高版本的实例上会发出此警报。

1
与OUTPUT合并似乎没有做对的事情
我正在向表添加外键,并删除任何违反FK的行,然后将它们复制到ModifiedTable_invalid表中。作为脚本的一部分,我具有以下MERGE命令: MERGE ModifiedTable t1 USING TargetTable tt ON t1.JoinColumn = tt.JoinColumn WHEN MATCHED THEN UPDATE SET t1.FkColumn = tt.FkSource WHEN NOT MATCHED BY SOURCE THEN DELETE OUTPUT DELETED.* INTO ModifiedTable_invalid; 但是,此命令似乎是将ModifiedTable中的每一行插入到ModifiedTable_invalid中,而不仅仅是由MERGE命令删除的行。这是怎么回事,以及如何将其删除的行仅放入ModifiedTable_invalid中?

1
查询以查找最接近的较小日期
我有一张房价表。每个费率都有一个有效的开始日期。(任何记录的结束日期都暗示着有效起始日期较新的记录的存在。)我还有一个带有活动的表。每个活动都发生在一个日期上。 将活动与该日期生效的汇率相匹配的最佳方法是什么? (不幸的是,我没有能力修改数据结构,因此无法为费率添加明确的结束日期。) rates: StartDate Rate 9/1/2010 17.00 10/1/2010 18.70 11/1/2010 20.00 Activities: WorkCenter ActionDate Hours WC1 9/30/2010 10 WC1 10/1/2010 5 WC2 10/30/2010 8 WC2 11/3/2010 9 Desired result: Workcenter ActionDate Hours Rate Cost(=rate*hours) WC1 9/30/2010 10 17.00 170.00 WC1 10/1/2010 5 18.70 93.50 WC2 10/30/2010 8 18.70 149.60 …
8 db2 

2
关闭所有SQL Server数据库上的自动收缩。为什么不起作用?
我以为可以使用sp_MSforeachdb解决此问题,但是却收到错误消息。 sp_MSforeachdb ' BEGIN USE [?] DECLARE @dbid INT SET @dbid = DB_ID() IF(@dbid > 4) BEGIN --PRINT ''[?]'' + CONVERT(VARCHAR, @dbid) --ALTER DATABASE [?] SET AUTO_SHRINK OFF END END; ' 如果我在没有注释PRINT行的情况下运行上述查询,则会获得除系统数据库以外的所有数据库的列表。但是,当我取消注释ALTER DATABASE行时,出现以下两个错误消息: 消息5058,级别16,状态2,行9 无法在数据库“ master”中设置选项“ AUTO_SHRINK”。 消息5058,级别16,状态1,行9 无法在数据库“ tempdb”中设置选项“ AUTO_SHRINK”。 这似乎在某种程度上破坏了该操作,因此只有部分数据库被禁用了自动收缩。 知道如何在所有数据库上禁用自动收缩吗?额外的问题:为什么我的方法不起作用?

1
使用MySQL源命令执行SQL文件时禁用控制台输出
我首先启动MySQL命令行工具: mysql --user=myusername --password=mypassword --silent --force -b 最后一个-b选项用于禁用错误提示音。 然后我选择一个数据库: use Mydatabasename; 然后我执行SQL形式的文件,如下所示: source c:\x\y\z\myfile.sql 那是事情进展缓慢的时候。我之前已经执行了文件的一部分,因此控制台中充满了重复的行错误,从而严重降低了执行速度。我每秒执行5-10条语句。没有重复的行,代码每5秒执行数万条语句(30k +)。 我需要执行此操作,因为文件很大,并且无法一次执行。
8 mysql  windows 

3
MySQL单表静态和动态数据透视
我有一个看起来像这样的表: +----------------------------------------+ |Name | kode | jum | +----------------------------------------+ | aman |kode1 | 2 | | aman |kode2 | 1 | | jhon |kode1 | 4 | | amir |kode2 | 4 | +--------------------+-----------+-------+ 如何使用MySQL进行这样的视图? kode1 kode2 count aman 2 1 3 jhon 0 4 4 amir 0 4 4
8 mysql  pivot 

2
是否可以通过重复TableB将TableA的每一行连接到较小的TableB的行,但是需要多次?
抱歉,标题令人困惑,我不确定在那里写什么。 我有一张有几百条记录的表。我需要将此表的每条记录分配给一个较小的动态用户表,并且用户应交替选择要分配的记录。 例如,如果TableA是 Row_Number()ID 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 并且TableB是 Row_Number()ID 1 1 2 2 3 3 我需要的最终结果是 用户编号RecordId 1 1 2 2 3 3 1 4 2 5 3 6 1 7 2 8 …

2
如何等待PostgreSQL可启动/可恢复?
我正在运行自定义Linux发行版的虚拟机上测试将PostgreSQL 8.2.1升级到9.2。升级过程如下: 启动pg服务 清理所有数据库(不确定是否需要这样做) 备份 pg_dumpall 停止pg服务 移出存储数据的目录(/var/pg;这是一个简单的单服务器设置) 安装PostgreSQL 9.2 initdb 启动服务器 恢复转储的数据 reindexdb 所有数据库 重新创建referential_constraints视图 清理所有数据库(此升级后需要AFAIK) 此过程在一台主机上正常运行,可以毫无问题地进行备份和还原。在另一台具有不同数据库的机器上,从1到7的点可以正常工作,但是除非添加sleep 1after initdb,否则服务器将无法启动,即使那样,由于“数据库系统正在启动”,因此无法还原转储的数据。除了这些可怕的骇客之外,有什么标准的方法可以解决此问题: sleep在进行任何一项操作之前要花一些时间, 循环播放,直到它起作用或达到足够的超时,或者 循环直到它接受一个琐碎的查询或达到超时。 编辑:“ 解决方案 ”根本没有用。如何确定数据库已准备好运行还原?

2
开发完成后重命名表的最佳方法
在SQL Server 2008 r2中重命名数据库表和列的最简单,最可靠的方法是什么?我们已经完成开发,由于某些原因,我们需要重命名一些表和一些列。 使用同义词是这样做的好方法吗?我们应该为哪些陷阱做好准备?它也有助于优雅地重命名列吗? 我们有很多与这些表相关的脚本,.net开发人员在应用程序中也引用了它们。

2
PostgreSQL的高可用性
我是PostgreSQL数据库的新手。最近,我们的开发人员需要对我们的系统进行一些升级。 因此,我们计划实现某种方法以实现数据库故障转移。 根据我在此处的 Postgresql Wiki的阅读,我们正在尝试实现热备用或热备用。所以我的问题是: 它们之间的主要区别是什么? 哪一个更好? 我们还有其他方法可以考虑在Postgres数据库中实现高可用性吗?

3
SQL Server虚拟日志大小
我有些偶然,是DBA,是一位从对数据库管理了解甚少的人那里继承了几个数据库服务器(2005年和2008年)的开发人员,而且似乎对了解更多有关该主题的兴趣甚至更少。 我正在学习,目前正在尝试找出事务日志文件。 我们所有的数据库都已使用简单的恢复模型和自动收缩功能进行设置。我知道使用自动收缩通常是一个可怕的主意,但我的理解是这样做是为了防止事务日志变得不受控制。(自动收缩实际上是收缩日志文件还是仅收缩数据库?) 我发现有关SQL Server 2012的信息,并想知道2005和/或2008是否正确,以及它的确切含义:“当数据库使用简单恢复模型时,数据库引擎会在检查点后截断事务日志。 ..]当虚拟日志已满70%时,数据库引擎会在简单恢复模式下触发自动检查点。” 虚拟日志大小在哪里指定? 我想在所有数据库上禁用自动收缩,但是在此之前,我需要知道日志文件不会很快失去控制。 任何帮助将不胜感激。


2
如何在Oracle中修改更新以使其执行更快?
我有这个查询: UPDATE ( SELECT h.valid_through_dt, h.LAST_UPDATE_TMSTMP FROM ETL_FEE_SCH_TMP d, FEE_SCHEDULE_HISTORICAL h WHERE h.FUND_ID = d.FUND_ID AND h.FEETYPE_NAME = d.FEETYPE_NAME AND h.BREAKPOINT_TYPE = d.BREAKPOINT_TYPE AND h.BREAKPOINT_QTY = d.BREAKPOINT_QTY AND h.LOW_BREAKPOINT_AMT = d.LOW_BREAKPOINT_AMT AND h.VALID_THROUGH = TO_DATE ('31-DEC-9999', 'dd-mon-yyyy') AND h.universe = 'DC' AND h.universe = d.universe AND EXISTS ( SELECT 1 …
8 oracle  rdbms 

1
同一实体的维度和事实?
我是DW设计的新手,正在研究DW以对某些IT基础结构进行建模。 此时的主要问题/问题是如何对驱动器信息进行建模。 我们将在文件和文件夹上收集汇总数据,并在物理驱动器上收集单独的数据。驱动器信息将至少包括总空间和可用空间,并将每周更新几次。 需要回答的业务问题之一是驱动器使用率随时间变化的趋势。该驱动器信息还将用于向下到文件/文件夹级别的层次结构中。 我现在可以看到的选项是: 实施DRIVE为维度 简化层次结构设计 这会导致报告问题吗?仅在一个维度上报告有时间限制的数据对我来说似乎违反直觉 拥有一个维度,每次刷新数据时您都会知道,这似乎也有问题 实施DRIVE为事实表 简化报告 使层次结构复杂化(?)-我还将Drive用来将数据映射回特定的服务器或计算机。可以将事实表用作层次结构中的中间级别吗?我认为不是。 实施DRIVE既是事实和维度 事实将只包含密钥,日期和空间事实 维度将包括其他非累加数据,例如所用的计算机等。 似乎可以解决这两个问题,但这是一种反模式吗?

2
在存储过程中选择权限?
我已授予用户使用动态SQL的存储过程的执行权限。但是当他尝试执行它时,他得到了错误: 对对象“ [表名]”,数据库“ [数据库名]”,模式“ dbo”的SELECT权限被拒绝。 是否需要向用户授予存储过程使用的任何表的权限?这对我来说真的没有任何意义。

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.