数据库管理员

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

1
从SQL Server获取时区键名的最佳方法
以下是我拼凑而成的内容,但我想看看还有哪些其他可用的方法。 SET NOCOUNT ON; GO DECLARE @tz VARCHAR(50) EXEC [master].[dbo].[xp_regread] 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Control\TimeZoneInformation' ,'TimeZoneKeyName' ,@tz OUT; SELECT GETDATE() ,'(' + LEFT(PARSENAME(REPLACE(@tz, ' ','.'),3),1) + '' + LEFT(PARSENAME(REPLACE(@tz, ' ','.'),2),1) + '' + LEFT(PARSENAME(REPLACE(@tz, ' ','.'),1),1) +')' 输出:2014-10-14 16:22:21.037(CST)

4
重叠的候选键到底是什么?
有人可以简单地给我解释一下overlapping candidate key吗?overlapping顾名思义,这是什么意思? 考虑以下关系 R(L,M,N,O,P) { M -> O NO -> P P -> L L -> MN } 上面的哪个功能依赖性在上面的关系中带来了重叠的候选键? 让我们将讨论范围限制为依赖项,目前我对BCNF不感兴趣

1
为什么CTE对丢失的更新开放?
当克雷格·林格(Craig Ringer)评论时,我不明白他的意思: 如果插入事务回滚,则此解决方案可能会丢失更新。没有检查来强制UPDATE影响任何行。 在https://stackoverflow.com/a/8702291/14731上。请提供事件的样本序列(例如,线程1执行X,线程2执行Y),以演示丢失更新的发生方式。

1
如何在单个查询中获取所有孤立记录?
我只是注意到很少有具有孤立记录(外键)的表,这些记录不再指向任何主键。如何查询表以获取所有此类行的列表?这些父记录何时被删除或如何处理? 我使用的是SQL Server 2008 R2,我们尝试在清理后将3个类似的数据库导入一个数据库,请告知。 编写了一个示例子表(DocumentDistribution)和父表(DocumentSource)的脚本: ALTER TABLE [dbo].[DocumentDistribution] WITH NOCHECK ADD CONSTRAINT [fk_documentdistsourceid_documentsourceid] FOREIGN KEY([DocumentDistSourceID]) REFERENCES [dbo].[DocumentSource] ([DocumentSourceID]) GO ALTER TABLE [dbo].[DocumentDistribution] CHECK CONSTRAINT [fk_documentdistsourceid_documentsourceid] 难道不是告诉我表是在关系中并明确定义了外键约束吗?

1
如何用多个父母代表有向图?
http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html提供了一种用于从闭包表中插入和删除的算法。 除了节点可能具有多个父节点外,我想对类似的数据结构进行建模。 鉴于: 如果我们删除,[B, C]我期望最终得到: 如果我们删除节点,B我期望最终会得到: 但是,如果使用作者的算法删除链接或节点,则会注意到它标记[D, C, 1]为删除,这是不可取的。 到目前为止我尝试过的 我尝试通过添加一references列来适应原始数据结构,该列指示在两个节点之间有多少种行进方式。在上面的例子中,你可以从旅行A到C要么通过B或通过D。这个想法本来是要B删除的,从A到的路径C会保留,引用计数从2减少到1。从理论上讲这很好,但是我不知道如何使实现正常工作,现在我想知道是否这是有可能的(数据结构可能没有足够的信息来确定要删除的行)。 我在问什么 您将如何调整封闭表来支持多位家长?您会推荐哪些替代数据结构?https://stackoverflow.com/q/4048151/14731包含此类数据结构的详尽列表,但尚不清楚哪个数据结构支持(或最适合)多个父级。

3
持续收到消息:分配页面失败:FAIL_PAGE_ALLOCATION 540
在以下方面,我将不胜感激,我做了一些谷歌搜索,但是还没有解决这个问题。 我在SQL日志“分配页面失败:FAIL_PAGE_ALLOCATION 540”中始终收到一条消息,然后是转储,我将其添加到此问题的末尾。 供您参考,构建为: 在vCenter上运行的虚拟服务器 Windows Server 2008 R2 64位SQL Server 2012 SP1 Enterprise(11.0.2100)8GB RAM SQL Server最大和最小内存设置为6144 MB 该服务器是2节点可用性组的一部分,这是当前的主节点。 该实例托管Microsoft SharePoint的数据库 我运行了一个Perfmon跟踪24小时,该跟踪仅显示PLE在一次转储之后下降,然后又上升。没什么特别奇怪的。 SQL Server仍在运行。 从SQL日志中提取: 10/03/2014 09:59:52,spid866,Unknown,CACHESTORE_XMLDBELEMENT (node 0) KB<nl/>---------------------------------------- ----------<nl/>VM Reserved 0<nl/>VM Committed 0<nl/>Locked Pages Allocated 0<nl/>SM Reserved 0<nl/>SM Committed 0<nl/>Pages Allocated 8 10/03/2014 09:59:52,spid866,Unknown,CACHESTORE_XMLDBTYPE (node 0) KB<nl/>---------------------------------------- ----------<nl/>VM …

2
SQL Server 2014 Standard Edition试用版可以升级为完整的Core许可证吗?
如果我安装了SQL Server 2014 Standard Trial版副本,此版本之后是否可以升级到该版本(无需完全重新安装)到完整版本(核心许可证)?我很想在等待许可的同时安装和配置这些东西,但是如果不容易获得许可,我不想让自己感到悲伤。 编辑:更多信息,对于发现此问题的其他任何人- 下载评估版时,Microsoft网站未指定“ SQL Server 2014”以外的任何内容。但是由于他们不允许您选择特定的版本,我认为Shanky的评论是正确的(这是企业版)。 正如Thomas所指出的,这是SQL Server 2014 Evaluation Enterprise的升级路径(由于Microsoft喜欢移动/杀死链接): SQL Server 2014评估企业版2 SQL Server 2014 Enterprise(服务器+ CAL或Core许可) SQL Server 2014商业智能 SQL Server 2014标准版 SQL Server 2014开发人员SQL Server 2014 对于独立安装,支持从Evaluation Enterprise(免费版)到任何付费版本的Web升级,但对于群集安装,则不支持。

2
如何在Sql Server 2008中调度作业少于10秒?
我想每3秒运行一次作业,但是在SQL Server 2008中,我们不能将间隔定义为少于10秒。 该作业用于将访问者信息以及细分信息插入/更新到Google搜索所跟踪的数据库中。 2到3秒钟内最多插入约100行。该作业将插入并更新数据库中的表。有什么方法可以使用sp作业计划配置进行计划吗?

2
我对事实表粒度的理解正确吗?
我自己和我们公司的另一个DBA的任务是审查供应商为我们开发的数据库设计。该供应商表示,他们使用Kimball作为其设计的基础。(注意:我不是在寻找Kimball与Inmon等的论点。)他们设计了一个具有多个事实和维度的集市。 公平地说,我们公司从未设计过一个集市。我们一直都有顾问来做。而且我们从未上过课。因此,我们对仓储/超市/维度建模等的了解是基于我们的经验不足,可以在互联网上找到的内容以及自我阅读(我们拥有Inmon和Kimball的书,并正在努力通过它们进行学习) 。 现在已经为我的知识水平奠定了基础,现在我们来应对设计挑战。 有一个称为“索赔损失统计”的事实表(用于保险)。他们正在尝试同时获取索赔的付款(累计到每月水平),然后是准备金中的钱(类似于用于索赔的银行帐户)。他们希望看到每月的付款金额(没什么大不了的)。但是他们希望看到该帐户当前的准备金余额。 我将给出一个图片示例。 假设我们为索赔设置了1000美元的储备金。这被搁置了(因此在某些方面它的功能有点像银行帐户)。 在2014年10月,我们尚未支付任何款项。因此,该公司希望在10月底看到付款和储备金余额。 ----------------------------------------------- - MONTH_YEAR - PAYMENTS - RESERVE_BALANCE - ----------------------------------------------- - 102014 - 0.00 - 1000.00 - ----------------------------------------------- 然后十一月来了。我们会分别支付$ 100,$ 150和$ 75美元。他们希望看到这些总额,余额中的准备金如下: ----------------------------------------------- - MONTH_YEAR - PAYMENTS - RESERVE_BALANCE - ----------------------------------------------- - 102014 - 0.00 - 1000.00 - ----------------------------------------------- - 112014 - 325.00 …

2
VACUUM ANALYZE为什么不清除所有死元组?
VACUUM ANALYZE VERBOSE在对一些较大的表进行重大DELETE/INSERT更改之后,我们对它们进行了“手动” 处理。这似乎没有问题,尽管有时表的VACUUM工作将运行几个小时(有关类似问题和推理,请参阅此帖子)。 在进行更多研究时,我发现即使在运行后,我们也有包含大量死元组的大表VACUUM。例如,以下是此响应中查询产生的一些统计信息。 -[ RECORD 50 ]--+--------------------------- relname | example_a last_vacuum | 2014-09-23 01:43 last_autovacuum | 2014-08-01 01:19 n_tup | 199,169,568 dead_tup | 111,048,906 av_threshold | 39,833,964 expect_av | * -[ RECORD 51 ]--+--------------------------- relname | example_b last_vacuum | 2014-09-23 01:48 last_autovacuum | 2014-08-30 12:40 n_tup | 216,596,624 …



2
将Unicode转换为非Unicode /将NVARCHAR转换为VARCHAR时自动翻译
Unicode代码点9619是一个称为“深色阴影”的字符:▓(http://unicode-table.com/en/search/?q=9619)。 使用SQL_Latin1_General_CP1_CI_AS归类和1252代码页,我希望将Unicode字符转换/转换为非Unicode数据类型将导致出现问号(?),因为代码页1252似乎不包含此字符,并且这似乎是SQL Server的无法进行转换时的行为。 所以我的问题是:为什么SQL Server将此字符转换为ASCII代码166,即“管道,竖线损坏”:¦? SELECT NCHAR(9619), CAST(NCHAR(9619) AS CHAR(1)), ASCII(CAST(NCHAR(9619) AS CHAR(1)))

3
插入多于特定数量的行时,INSERT需要5个小时以上
当向表中插入少于1,350,000行的数据时,整个过程大约需要2分钟,但是,如果插入的行数较大,则插入数据所需的时间将增加到大约5小时。 该问题与查询或索引无关,因为很长一段时间以来一切正常,并且查询,表或索引的结构没有任何变化。 问题大约在2周前首次出现,并且在插入的行数大于+ -1,350,000的情况下在几天内反复出现。例如,一天中插入的行数为1,200,000,过程需要2分钟,另一天,行插入的数为1,450,000,插入数据需要5-6个小时。 我试图重建索引,但没有帮助。

4
每个连接的临时模式?
我正在尝试将单元测试从H2迁移到Postgresql。 当前,H2为我提供了一个内存中架构,这样每个连接都映射到一个唯一的架构,创建表,运行测试并删除该架构。模式的创建和销毁由H2自动处理。 单元测试可以同时运行。 在Postgresql中执行此操作的最佳方法是什么?特别, 如何为每个连接获取唯一的架构? 测试框架应该生成唯一的名称还是有内置的机制来做到这一点? 如何确保在删除连接时删除架构? 当单元测试被杀死时,我不想以悬挂模式结束。 哪种方法将产生最高的性能? 我需要每秒创建/删除数十个模式。 更新:我在这里找到了一个相关的答案,但是如果运行单元测试的进程被杀死,它无法删除架构。

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.