数据库管理员

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

1
在Postgresql中获取CLOB OID的TEXT值
我有一个数据库表,看起来像: 创建表格答案( id int不为null, question_id int不为null, 答案文字为空 ) 该表最初由Hibernate使用@Lob属性作为“答案”列构建。当时我没有意识到,但是以这种方式设置时,Hibernate在列中存储了OID而不是实际的文本。当我使用Hibernate检索值时,一切工作正常,因为它会自动将OID转换为CLOB字符串,但是,这已成为性能问题,我想摆脱OID。 从答案中选择* 编号QUESTION_ID答案 ============================== 1123 55123 2234 51614 3 345 56127 应该 编号QUESTION_ID答案 ============================== 1123男 2234 203-555-1212 纽约州纽约市3345555 我的愿望是在表“ ANSWER_VALUE TEXT”中添加额外的列,并执行以下操作,将实际值添加到表中,然后将Hibernate更改为不使用@Lob指示符 更新答案集ANSWER_VALUE = getValueFromOID(ANSWER) 该“ getValueFromOID”功能是否存在?如果没有,我能否获得一些有关如何创建一个OID或至少如何获取OID实际值的指示? 谢谢

9
错误:无法生成SSPI上下文
当某人尝试连接到SQL Server实例时,出现错误: 不可能生成SSPI上下文。 昨天我们停电了(不知道该用英语怎么说),我不得不关闭服务器。 寻找答案,我发现了这一点: SQL Server 2008连接问题:无法生成SSPI上下文 但这对我没有帮助,因为直到昨天他们都工作正常。我什么都不想改变。但是如果有必要,我会改变它。 Obs:我现在无法重新启动服务器。 编辑:自从我回答以来,我们没有任何错误。

2
SQL Server累积更新-在Windows Update中不可见
我刚刚在WS2008R2 / SQL2012实例上安装了所有可能的Windows更新。当我跑步 SELECT @@VERSION 我懂了 Microsoft SQL Server 2012 - 11.0.5058.0 (X64) May 14 2014 18:34:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) 根据 http://sqlserverbuilds.blogspot.com/ 在Microsoft网站和Microsoft网站上,有4个针对SQL Server 2012 SP2的累积更新可用,而最新版本为11.00.9000。 Windows Update为什么也没有获得累积更新?我应该手动下载并安装它们吗?

1
如何在SSRS报表中传递多值字符?
我有一个SSRS报告,其中包含3个数据集,它们来自一个数据源。主数据集是一个存储过程,它基于由其他两个数据集提供支持的一组参数来聚合某些数据。 支持该报告的主要存储过程具有4个参数。一个是数据类型的ID,两个是开始日期和结束日期,第三个只是标记参数。flag参数是多值参数,我想在其中传递多个也是VARCHAR值的标志值。 在我的@Flag参数的存储过程中,我有一个共同点: WHERE [Flag] IN (@Flag) 然后,当然,SSRS报表上的@Flag参数设置为允许“多个值”,这些值也从从维度表中提取那些@Flag值的查询中填充。 我的问题 在大多数情况下,处理INT值时,可以使用相同的技术。但是,当我处理字符值时,它会失败。如果我选择一个标志,该报告将产生神奇效果。如果选择多个标志,则似乎无法正确将标志传递给存储过程,并且不会返回任何结果。 在存储过程中直接测试多值标志时: WHERE [Flag] IN ('A', 'B', 'C') 该存储的过程正常工作。因此,问题不在于存储过程,而是SSRS如何将多值传递给@Flag参数。 尝试过的解决方案 我尝试为此@Flag参数对SSRS数据集进行以下调整: =join(Parameters!<your param name>.Value,",") 还有这个: =SPLIT(JOIN(Parameters!<your param name>.Value,","),",") 这些都适用于单个值,但不适用于多个值。 我在这里想念什么?

2
DB2是否通过主键对数据进行排序
我最近与一位同事进行了讨论,他一直在努力从生产查询中删除order by子句,因为order by列与主键相同。 经过长时间的讨论,我试图解释说他不能保证根据主键进行排序,最后的结论是他不会推动更改MSSQL查询。 但是他仍然打算更改DB2查询。 我无法立即找到一篇文章,以证明DB2通过主键对查询进行排序,并且当前正在想知道是否这样做。 所以我的问题是,如果没有order by子句,DB2如何对查询进行排序?它使用主键吗? 在并行系统中,如何保证数据输出正确无序?
8 db2  order-by 

2
查询正在运行的会话的会话参数值
我不认为有办法做到这一点,但我想能够查询当前正在运行的会话对其COMMIT_WRITE会话参数的值。 我在v $性能视图中什么都没有看到……有人知道SYS x $视图可以从中检索出这样的值吗? 澄清-需要为另一个会话拉出参数设置,该设置独立于当前会话运行。
8 oracle 

1
无法在ID处插入行,但行不存在
这是我面临的怪异问题。我正在尝试使用以下查询输入数据 insert into product_product (id, product_tmpl_id, make_equip, model_equip, name_template, serial_num_equip, location_equip, issue_date_equip, issue_to_equip, remarks_equip, pr, ch, categ_id,valuation) values (700,700,'Nikon','Action 10x50 Lookout','Nikon Action 10x50 Lookout','671386','40 Wall St.','5/13/2004 12:00:00 AM','','OM''s OFFICE',62,72,502,'manual periodic'); 我得到错误: ERROR: duplicate key value violates unique constraint "product_product_pkey" DETAIL: Key (id)=(700) already exists. ********** Error ********** ERROR: duplicate key …

4
我应该在什么时候拆分或分割一个很大但很简单的表
我们的网站上有一些大而简单的统计表(INT,INT,DATE)。每个表最多有300,000,000行,并且每天都在增加。 托管服务提供商建议我们拆分表或对表进行分区,而我在许多场合也看到了此建议。 然而... 我正在努力使建议与SQL Server的最大容量(数据库大小为524,272 TB)保持一致,而表行仅受“可用存储”限制。 根据这些数字,上述表格可以轻松地拥有数以百万计的行(10 等于 303的幂)。 啊哈,您可能会说,CAPABILITY和PERFORMANCE之间是有区别的。 但是,实际上在每个有关SQL Server性能的问题中,答案都是“这取决于表设计和查询设计”。 这就是为什么我问这个问题。桌子的设计再简单不过了。基于索引ID字段的简单count(*)操作查询也不能。

1
视图上的聚合操作将忽略索引
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 场景 曾几何时,一家小公司中有一个Staging数据库,该数据库正在参与ETL流程,充当来自多个第三方来源的各种格式文件的接收目录。E是通过DTS程序包处理的,几乎没有用于审计或控制的控制结构,但是被认为“足够好”,并且从所有意图和目的来看都是如此。 E部分提供的数据旨在供单个应用程序使用,并由少数年轻有能力的程序员开发和管理。尽管他们缺乏当时的数据仓库技术经验或知识,但他们还是根据应用程序代码创建并创建了自己的T和L流程。这些崭露头角的软件工程师大胆创新,发明了局外人所谓的“低于理想的轮子”,但是凭借“足够好”作为永远存在的服务水平,他们能够提供一个操作框架。 一段时间以来,在紧密耦合的领域中一切都很好,暂存目录以12个第三方的数据为美食,反过来又由应用程序提供。随着应用程序的增长,它的胃口也随之增加,但是随着熟练的白骑士开发人员对系统的观察,这些胃口很快得到了解决,在很多情况下甚至都得到了很好的解决。 但是,黄金时代不可能永远持续下去。随着成功应用程序的繁荣,业务不断发展。随着它的增长,登台环境和应用程序也随之增长。尽管他们保持了警惕,但只有少数英雄开发人员无法跟上现在扩展的系统的维护,并且消费者已经有权使用其数据。不再是他们需要甚至想要的事了,但是民众感到他们只是应得的,甚至要求更多。 有了很多钱,武装起来的公司就进入了市场,雇用了开发人员和管理员来帮助支持不断发展的系统。各式各样的雇佣兵蜂拥而至,但是随着这种增长突飞猛进,可用的专家指导却很少。新的开发人员和管理人员都在努力理解自制套件的复杂性,直到挫折导致全面的战争。每个部门都开始尝试单独解决每个问题,相互之间的工作比相互之间的工作更多。一个项目或计划将以几种不同的方式实施,每种方式与下一个略有不同。对于某些白骑士来说,这一切的压力实在太大了,当他们沦陷时,帝国崩溃了。不久,系统陷入混乱, 尽管这些承诺可以转换成意大利面条代码的领域已经发生了变化,但该公司还是坚持了下来。毕竟是“足够好”。 挑战 后来发生了一些政权更迭和招聘热潮,我发现自己从事公司的雇用。自大战以来已经有很多年了,但是所造成的损失仍然非常明显。我设法解决了系统E部分中的一些弱点,并以将DTS软件包升级到SSIS为幌子添加了一些控制表,现在一些实际的数据仓库专业人员正在使用它们创建正常的并记录了T和L替换。 第一个障碍是从第三方文件中导入数据,这种方式不会截断值或更改本机数据类型,但还包括一些用于重新加载和清除的控制键。这一切都很好,但是应用程序需要能够以无缝,透明的方式访问这些新表。DTS包可以填充一个表,然后由应用程序直接读取该表。由于QA的原因,SSIS升级需要并行进行,但是这些新软件包包括各种控制键,并且还利用了分区方案,更不用说实际的元数据更改足以显着保证一个新表的总和,因此新表用于新的SSIS包。 随着可靠的数据导入现已开始运作,并且由仓库团队使用,真正的挑战在于将新数据提供给直接访问暂存环境的应用程序,而对应用程序代码的影响最小(也称为“否”)。为此,我选择使用视图,重命名表(例如dbo.DailyTransactionto)dbo.DailyTranscation_LEGACY并dbo.DailyTransaction为视图重用对象名称,这实际上只是从现在开始选择所有内容。LEGACY指定表。由于从业务的角度来看,重新加载这些表中包含的数据的年数是不可行的,因为新的SSIS填充和分区表已进入生产阶段,因此关闭了旧的DTS导入,并且应用程序必须能够以及访问新表中的新数据。此时,将更新视图以在dbo.DailyTransactionComplete可用时从新表(例如)中选择数据,而在不可用时从旧表中选择数据。 实际上,正在执行以下操作: CREATE VIEW dbo.DailyTransaction AS SELECT DailyTransaction_PK, FileDate, Foo FROM dbo.DailyTransactionComplete UNION ALL SELECT DailyTransaction_PK, FileDate, Foo FROM dbo.DailyTransaction_LEGACY l WHERE NOT EXISTS ( SELECT 1 FROM dbo.DailyTransactionComplete t WHERE t.FileDate = l.FileDate …


3
当存储过程可以由不同的用户同时运行时,是否建议使用临时表?
我正在研究一种从活动目录检索objectGUID的存储过程。我将结果存储在临时表中,然后在输出参数中返回该值以用于其他进程。将通过不同的存储过程以及Web应用程序PHP,ASP Classic和ASP.Net调用SP。 我在这里读到(关于临时表): 如果在存储过程中创建,则它们将在存储过程完成时销毁。此外,任何特定临时表的范围都是创建该临时表的会话。表示仅对当前用户可见。多个用户可以创建一个名为#TableX的临时表,并且同时运行的任何查询都不会相互影响-他们将保持自主事务,而这些表保持自主对象。您可能会注意到我的示例临时表名称以“#”符号开头。 听起来我很高兴,但我想获得一些建议,以确保没有我不知道的陷阱。这是SP。 提前致谢。 CREATE PROCEDURE stp_adlookup @user varchar(100), @objectGUID varbinary(256) OUTPUT AS SET NOCOUNT ON; DECLARE @qry char(1000) CREATE TABLE #tmp( objectGUID nvarchar(256) ) SET @qry = 'SELECT * FROM openquery(ADSI, '' SELECT objectGUID FROM ''''LDAP://mydomaincontroller.com'''' WHERE sAMAccountName = ''''' + @user + ''''' '')' INSERT INTO …

5
将varchar数据类型转换为datetime数据类型导致超出范围的值
我正在尝试运行一个简单的查询来获取在11月创建的所有行: SELECT COUNT(*) FROM dbo.profile WHERE [Created] BETWEEN '2014-11-01 00:00:00.000' AND '2014-11-30 23:59:59.997'; SMSS返回: 从varchar数据类型到datetime数据类型的转换导致值超出范围。 我不明白为什么将“ Created”设置为datetime时将数据从varchar转换为datetime: 我需要告诉服务器“创建”是日期时间吗?如果没有,为什么我会收到此varchar消息? 编辑:数据库中的值为YYYY-MM-DD。下面来自@SqlZim的回复说,我需要使用convert()告诉sql数据库中的日期是什么格式-并将空格字符替换为字母T: select count(*) from dbo.profile where [created] between convert(datetime,'2014-11-01T00:00:00.000') and convert(datetime,'2014-11-30T23:59:59.997');`

2
SQL Server表插入性能优化
设置 在一个数据仓库中,我将一个事实表连接到20个维度。事实表具有3200万行和30列。这是一个临时暂存表,因此我不必与其他正在读取或写入该表的用户打交道。我从基础表中选择10列,并从各个维度中选择20列。尺寸表很小(介于3到15.000行之间)。连接的字段都是整数和nvarchars。我使用SELECT ... INTO语句。表上没有索引。 该查询的执行速度太慢,无法使用。 尝试过的解决方案 因为查询处理时间太长,所以我尝试了以下解决方案: 将20个联接拆分为5个表上的4个联接。但是查询性能仍然很低。 将索引放在外键列上。没有明显的时间减少。 确保联接条件的字段为整数。我注意到性能提高了25%。不完全是我要寻找的。 使用insert into语句代替select into。尽管数据库处于简单恢复模式,但由于日志文件增长而导致性能更差。 这些发现使我包括了实际的执行计划,该计划表明89%的成本在表插入中。其他成本是对事实表进行8%的表扫描,对内部联接进行2%的哈希匹配。 问题 缓慢插入表的可能原因是什么? 没有执行计划,有哪些方法可以识别此瓶颈? 我可以采取什么措施来减少表格插入的费用?

1
内存优化的DLL不会被删除
从BOL,我的理解是DBA不需要管理为内存优化表或本机编译的存储过程创建的DLL,因为它们在SQL Server服务启动时会自动重新编译,而在不再需要时会被删除。但是我正在见证,即使在删除内存优化表并重新启动服务之后,这些DLL仍然存在于文件系统中,并且仍会加载到SQL内存中并附加到进程中。这可以通过以下事实证明:它们仍然在sys_dm_os_loaded_modules中可见,并且如果您尝试在运行SQL Service的同时将其删除,则它们将锁定在文件系统中。 这是一个错误吗?还是稍后再清理?如果以后没有启动实例,那么是什么触发清除工作?

1
跟踪标志1222不起作用?
我有一个客户站点,其中有两个配置类似的2008r2 SQL Server“ A”和“ C”。在两台服务器上,启用了跟踪标志1204和1222,并DBCC tracestatus在两台服务器上显示以下内容: TraceFlag Status Global Session 1204 1 1 0 1222 1 1 0 3605 1 1 0 在A上,跟踪标志按预期工作,当发生死锁时,我们在错误日志中同时获取1204和1222死锁报告。但是,在C上,仅显示1204报告,而我们从未获得1222报告。 对于我的一生,我看不出有什么区别。我已经在Google上进行了广泛的搜索,并阅读(并重新阅读了)这些跟踪标志上的MS文档,但找不到任何此类行为的报告,也没有任何提示可能导致这种情况的提示。唯一接近的是偶尔声称没有跟踪标记起作用的情况,但是事实证明,如果它们在启用命令中有错别字。我知道这里不是这种情况,因为我已经使用DBCC TRACESTATUS进行了确认。 因此,对于可能导致仅跟踪标记1222不工作和/或如何修复跟踪标记的任何见解,将不胜感激。 好吧,这是一个有趣的发展。每当我自己生成一个死锁(使用此代码:https : //stackoverflow.com/questions/7813321/how-to-deliberately-cause-a-deadlock)时,我都会在错误日志中获得两个跟踪报告。从应用程序开始每两天就会发生“自然”死锁,似乎只触发其中一个死锁报告。不确定是否有帮助,是否有任何理由相信跟踪1222不会报告与1204相同的所有死锁条件?

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.