Questions tagged «sql-server-2008-r2»

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


1
SQL Server多对一复制
我有8台单独的SQL Server 2008 R2计算机,每台托管1个数据库。每个数据库都有相同的表结构和架构,以及完全唯一的数据。 我想建立一个报表服务器(可能是2008或2012),它将来自8个源服务器的选定表中的行合并到报表服务器上那些表的单个实例中。这是单向复制(不会对报告服务器进行任何更改)。我将需要以相对较低的延迟(例如20-30秒)从源数据库复制更改。 此外,我想找到一种方法来实现这一目标,并且对源服务器的影响尽可能小。在我的环境中,那些服务器的第三方代理,触发器或架构模块很困难。 我的问题: 有哪些有希望的架构和技术可以实现这一目标? 我看过SQL Server合并复制,但是我担心延迟。这是实现此目标的合适技术吗? 是否有用于事务复制的多对一体系结构? 我应该查看报表服务器上8个数据库的1对1复制,然后进行一些自定义合并功能(两步复制)吗? 谢谢,约翰

5
强制SQL Server按照编写的条件运行查询条件?
我正在使用SQL Server 2008 R2,并且具有以下伪查询(SP): select ... from ... WHERE @LinkMode IS NULL AND (myColumn IN (...very long-running query...)) ... ... 问题是查询要花很长时间才能执行-即使我使用来执行SP @LinkMode=2。 正如您所注意到的,只有在@LinkMode为null时才应执行长时间运行的查询,在这种情况下不是这样。在我的情况下,@LinkMode = 2! 但是,如果我将其更改为: select ... from ... WHERE 1=2 AND (myColumn IN (...very long time exeted query...)) ... ... SP 确实运行很快。 我之前听说过,有时优化器可以优化条件的顺序。 所以我问: 即使优化器选择了其他路径,比检查if更快=null呢?我的意思是,我认为检查if a==null是多比正在运行的其他长的查询速度更快... 如何强制 SQL …



5
SQL Server链接服务器性能:为什么远程查询如此昂贵?
我有两个通过链接服务器连接的数据库服务器。两者都是SQL Server 2008R2数据库,并且链接的服务器连接是使用当前登录名的安全上下文通过常规的“ SQL Server”链接建立的。链接的服务器都位于同一数据中心中,因此连接不成问题。 我使用以下查询来检查列的哪些值identifier可远程使用,但不能在本地使用。 SELECT identifier FROM LinkedServer.RemoteDb.schema.[TableName] EXCEPT SELECT DISTINCT identifier FROM LocalDb.schema.[TableName] 在两个表上,列上的都是非聚集索引identifier。本地大约有260万行,远程只有54行。但是,在查看查询计划时,70%的执行时间专用于“执行远程查询”。此外,在研究完整的查询计划时,将使用估计的本地行数1代替2695380(这是仅选择后面的查询时的估计行数EXCEPT)。 当执行此查询时,确实需要很长时间。 这让我感到奇怪:这是为什么?估算是“正确”的吗?还是在链接服务器上进行远程查询真的那么昂贵?


1
SQL Server表名以用户数据库中的#开头,而不是tempdb(不是临时表)
几十年前,以某种方式在我们的数据库中创建了一个以#。开头的表。它显示在应用程序数据库下的对象资源管理器中,而不是中tempdb。由于某些原因,Azure不会像这样导入数据库。 我们无法删除它,对其重命名或与之交互。我试过从对象资源管理器中删除,从GUI中删除脚本,重命名,但它们都没有起作用。 我们正在使用SQL 2008 R2。 drop table [*app*].[dbo]."#OBSOLETE"; Database name '*app*' ignored, referencing object in tempdb. Msg 3701, Level 11, State 5, Line 1 Cannot drop the table '#OBSOLETE', because it does not exist or you do not have permission. exec sp_rename "dbo.#OBSOLETE", "dbo.obsolete" Msg 15225, Level 11, State 1, …


1
我如何尽快切碎此扩展事件XML?
我在SQL Server 2008 R2中创建了扩展事件会话。会话运行,并在事件发生时收集事件,完全符合您的期望。 如果在事件相对较少时切碎xml,则性能可以接受。当我有成千上万个事件时,将xml切碎是永远的。 我知道自己做错了事,只是对XML引擎的内部知识不足,无法理解。 这是我的扩展事件会话的定义: IF EXISTS ( SELECT 1 FROM sys.server_event_sessions dxs WHERE dxs.name = 'queries' ) BEGIN IF EXISTS ( SELECT 1 FROM sys.dm_xe_sessions dxs WHERE dxs.name = 'queries' ) BEGIN ALTER EVENT SESSION queries ON SERVER STATE = STOP; END DROP EVENT SESSION queries ON …

2
这两个SQL Server回滚有何不同?
在SQL Server 2008 R2中,这两个回滚有何不同: 运行ALTER语句几分钟,然后单击“取消执行”。完全回滚需要几分钟。 运行相同的ALTER语句,但是请确保该LDF文件的大小不足以使其成功完成。一旦达到LDF限制并且不允许“自动增长”,查询执行将立即停止(或发生回滚),并显示以下错误消息: The statement has been terminated. Msg 9002, Level 17, State 4, Line 1 The transaction log for database 'SampleDB' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases 这两个方面在以下几点上有何不同? 为什么第二个“回滚”是瞬时的?我不确定是否可以将其称为回滚。我的猜测是,事务日志是在执行过程中编写的,一旦它意识到没有足够的空间来完全完成任务,它就会以一些“结束”消息停止,而不会提交。 第一次回滚需要很多时间(回滚是单线程的)会发生什么? 2.1。SQL Server会返回并撤消LDF文件中的输入吗? 2.2。该LDF文件大小在回滚结束变得更小(从DBCC …

1
sys.partition.rows列的准确性如何?
系统视图sys.partitions具有“行”列,该列是给定分区中的总行数。对于未分区的表(或者只有一个分区,这取决于您的外观),此列给出了表中的行数。 我很好奇此列的准确性,以及是否可以使用它代替SELECT COUNT(1) FROM TableName。我做过一些实验,创建一个表并添加几千行,删除几百行,再添加几千个,等等,而且这种情况一直没有解决。但是,我有一张表,约有7亿行和几个索引。sys.partitions聚簇索引的行再次停滞不前,但是其他索引显示出一些细微的变化(+ -20k)。 有谁知道该行的计算方式以及它的准确性是否与所显示的相同?

1
在SQLCMD模式下设置变量
使用SQL Server 2008 R2企业版 考虑以下语句: :setvar source_server_name "SERVERNAME\INSTANCENAME" 是否可以在SQLCMD模式下使用TSQL获得该值 就像是: :setvar source_server_name = SELECT @@servername 谢谢 更新7/15/2013 下面提供的两个答案并没有给出理想的结果,因此我添加了一个更相关的示例。 :setvar source_server_name [myserver] 变量source_server_name设置为文本字符串[myserver_1] 我希望能够做到这一点: create table #tmp( id int identity(1,1), server sysname ) insert into #tmp values('myserver_1'),('myserver_2'); :setvar source_server_name = SELECT server FROM #tmp WHERE id = 1 select '$(source_server_name)' (No …

3
拒绝访问SQL Server中的信息架构
我正在寻找对SQL Server中的用户/组禁用对sys.tables/的访问的最佳方法Information Schema。 我从2008年发现了这个话题 它显示了一种如何拒绝访问的方法,[sys].[something]如下所示: DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole GO 但是没有办法如何禁用对的访问Information Schema: DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole 这似乎行不通。 如何禁用对information_schema的访问? 还有一种更简单的方法来禁用对所有sys/的访问information_schema吗? 更新: 实际上我不能同时运行以下语句: DENY SELECT ON [sys] …

4
重建索引,数据库现在的大小是原来的10倍
我有一个大约15演出的SQL Server数据库(2008 R2 SP1)。事实证明,维护已经有一段时间没有运行了,所以我创建了一个维护计划来重建所有索引,它们非常分散。 这项工作完成了,碎片消失了,但是现在数据库已超过120个演出!我知道它会使用额外的空间来进行所有重建,但是既然工作已经完成,我认为所有空间都是可用空间,但是可用空间仅显示为3个演出,因此正在使用117个演出即使索引重建作业已完成。 我很困惑,可以使用一些指导,我已经将数据库恢复到合理的大小,我们没有足够的磁盘空间。 提前致谢! 这是发布的两个查询的结果: log_reuse_wait_desc没有 name TotalSpaceInMB UsedSpaceInMB FreeSpaceInMB LIVE_Data 152 123 28 LIVE_Log 18939 89 18849 LIVE_1_Data 114977 111289 3688 第3个文件是.ndf文件,该文件仅在未使用的空间中显示3688,但是在111289中的存储量约为15 gigs。

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.