Questions tagged «sql-server-2008-r2»

SQL Server 2008 R2(主要版本10.50.xxxx)。请同时用sql-server标记。

3
SQL Server TDE的替代方法
由于包含透明数据加密功能的SQL Server Enterprise Edition的成本很高,我在寻找替代产品,但只找到了两个选择: DbDefence NetLib加密器 谁能提供上述两种产品的使用经验的详细信息(性能影响,易用性等)? 还有其他替代SQL Server TDE的方法吗? 注意:我们当前正在使用SQL Server 2008 R2 Standard Edition。

3
检查子查询结果中是否有任何值
我有一个复杂的子查询,该查询返回订单ID列表。我需要获得拥有这些订单的客户列表。问题是有两种将客户分配给订单的方式(两个字段之一)。我可以做这样的事情: select * from Customers where orderId in (select...) or secondaryOrderId in (select ...) 问题在于,子查询在执行时间和屏幕空间上都是巨大的。有没有一种方法可以检查其中一个字段是否包含所需结果之一?

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 …

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相同的所有死锁条件?

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
最新服务器上的性能降低
我们有几个生产中的数据库服务器,其中有四个具有非常相似的硬件配置。Dell PowerEdge R620,唯一的不同是2个最新的(购买和配置3个月前)具有RAID控制器v710、256GB RAM和CPU,是2个物理Xeon E5-2680 2.80GHz。旧版本(大约在1年前购买和配置)具有RAID控制器v700、128GB RAM并运行在第2台物理Xeon E5-2690 2.90GHz上。BIOS已更新,所有驱动程序已更新为最新版本,等等。所有正在运行的SQL Server 2008R2 Enterprise(SP1)已更新为最新CU和Windows 2012R2 Standard。两者都在200 GB SSD x5 RAID10上运行。每个数据库上仅运行一个数据库,使用调用SSIS程序包的作业进行同步。我们的系统管理员已进行了大量性能和压力测试,以确保我们没有任何硬件或网络遗漏配置或故障。不出所料,最新的表现出更好的性能结果。到目前为止,一切都很好。 在Kibana的屏幕截图中可以看到我们遇到的问题。黄色和橙色是2台较新的服务器(表上为6.7),在所有其他服务器之下。完全可见这2台新服务器的响应时间较慢。不仅如此,而且这2台服务器的负载也比2台旧服务器(表上的浅蓝色和深蓝色线-4,5)要少一些。 有几个监视脚本,用于收集有关性能计数器的信息。尽可能地利用DMV和第三个监视工具进行挖掘,我掌握了很多信息。但是这里应该有(ofc)我缺少的东西,因为我找不到这种较慢的响应时间的答案。 这两个最新的服务器使用的RAM较少,但是与其他较旧的服务器相比,这是可以预期的,因为它们的负载较低。 | Server Name| Mem_MB | Mem_GB | Server_RAM_GB | SQL_max_mem_GB| SQL_min_mem_GB | |------------|--------|--------------|---------------|---------------|----------------| | 4 | 41108 | 40.145263671 | 128 | 120 | 16 | | 5 | …

2
sys.dm_db_index_usage_stats中的信息是否可靠
我正在从没有文档的旧系统中归档数据。幸运的我... 我想找出表的创建时间,上次访问时间等。我是否可以相信此查询将为我提供正确的答案,还是我首先需要检查一些参数?SQL Server 2008 R2: SELECT t.Name AS Tabelname, p.rows AS NoOfRows, MAX(us.last_user_lookup) AS LastUsed, t.create_date AS CreatedDate FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id LEFT JOIN --A lot of the tables did not …

3
如何创建具有相同约束和索引的新表?
我正在创建一个具有主键约束和该表中的非聚集索引的新表。 我知道,我想创建另一个具有相同结构和值以及键和索引的表。 create table Dummy (id integer ,name varchar(20),salary integer Constraint PK_Con_id primary key(id)) insert into Dummy values(11,'AAA',1000); insert into Dummy values(12,'BBB',2000); insert into Dummy values(13,'CCC',3000); insert into Dummy values(14,'DDD',4000); select * from Dummy; create nonclustered index IX_Name on Dummy(Name) 现在,我正在创建Dmy表,但是“键和约束”未反映Dmy在SQL Server 2008 R2的表中。 SELECT * INTO Dmy FROM Dummy

1
SQL Server如何在UPDATE期间同时返回新值和旧值?
在高并发期间,我们遇到了返回无意义结果的查询的问题-结果违反了发出查询的逻辑。重现了一段时间。我设法将可重现性问题分解为少数几个T-SQL。 注意:实时系统中有问题的部分由5个表,4个触发器,2个存储过程和2个视图组成。对于发布的问题,我已经将实际系统简化为更易于管理的内容。事情已经减少了,列被删除了,存储过程被内联了,视图变成了普通的表表达式,列的值改变了。说了这么长的话,虽然后面的内容会重现错误,但可能更难以理解。您必须避免怀疑为什么某种事物以这种方式构造。我在这里试图弄清楚为什么这种玩具模型中的错误情况可重复发生。 /* The idea in this system is that people are able to take days off. We create a table to hold these *"allocations"*, and declare sample data that only **1** production operator is allowed to take time off: */ IF OBJECT_ID('Allocations') IS NOT NULL DROP TABLE Allocations CREATE …

1
如何在SQL Server中批量迁移架构之间?
我们目前有多个数据库,但希望将它们组合起来,而是使用架构将我们的域上下文分开。 在MS SQL Server 2008 R2中,如何将一个架构的所有内容批量重新放置到另一个架构中? 例如,我们在dbo架构中创建的所有表,视图,过程,索引等... 现在都将存在于foo架构中。 编辑:我想根据AaronBertrand的精彩评论进行澄清。这不是多租户的情况。我们的情况是内部工具插件是由没有将表合并到工具数据库中的开发人员隔离开发的。

2
tempdb位置损坏,无法恢复
犯了一个错误,并为tempdb输入了一个alter database命令。 现在该实例将无法启动。我无法使用-m在单用户模式下启动,因为它指出找不到tempdb。我尝试使用: net start msqsqlserver /f /t3608 但是,我实际上根本无法使用sqlcmd或连接到实例ssms。



2
“清除”启用了即时文件初始化的SQL Server数据库文件?
我在SQL Server上启用了即时文件初始化,因此数据库文件的“空”部分在分配之前没有清零。我的理解是,这意味着该文件可能包含“已删除”数据。 因此,现在我想向公司外部发送数据库的副本(可能是备份文件)。但是,所有潜在的敏感“已删除”数据都位于文件内部。现在,我想将文件的未使用部分归零。 那可能吗?我想我可以创建一个新数据库并复制所有内容,或者在不启用即时文件初始化的情况下将数据库的副本还原到另一台服务器,然后使用ShrinkFile命令主动删除数据库文件的大部分或全部未使用部分,但是有没有那么耗时的手动方法?理想情况下,该命令告诉SQL将文件归零,就像未启用即时文件初始化的情况一样。

1
SQL Server最大和最小内存配置
在此用例中,最小内存和最大内存的正确设置是什么? 该服务器具有8GB内存,双Intel Xeon处理器,运行Windows Server 2008 R2 / SQL Server 2008 Standard Edition。它运行着多个数据库,大小从30GB到5GB不等。 最初,内存使用情况已设置为默认设置(最小= 0,最大= 2,147,483,647)。在这些设置上,大多数内存使用量已由sqlservr.exe占用,并且最终将需要每天或每两天重新启动服务器一次。它最初会正常运行,但一天之内就会在一些简单的操作(例如,使用主键查找记录)上超时。 我更改了最小值= 4,096和最大值= 6,144。这样只会占用1.4GB的内存。但是,现在所有四个cpus始终以50-60%cpu的使用率运行。尽管服务器要稳定得多,但执行任务所需的时间大约要长1/3。

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.