Questions tagged «sql-server-2014»

SQL Server 2014(主要版本12.0.xxxx)。还请标记sql-server。

2
24/7多用户环境中的SQL Server 2014架构更改
我们安装了SQL Server 2014 Enterprise,以运行应该24/7可用的数据库。我们的数据库足够大(200gb +)。另外,我们有很多服务每分钟都会访问数据库,以读取,更新或插入新数据。我们希望为客户提供“热”重新部署功能,并使我们的每日更新(.net和架构更新)对客户透明。我们已经找到了一种基于群集的解决方案,该群集具有负载平衡器来更新应用程序的二进制文件,但是对于数据库的更新部署过程以及解决此问题的最佳实践还有一些误解。 对于架构更改,请关闭一台服务器,应用架构更改,将其备份,然后将相同的更改应用于第二个实例。可以使用SQL Server工具来完成吗,这是一种通用方法吗?备份服务器后如何同步数据?还是我完全想错了方向,是否有更好的解决方案? 我们常见的架构更改:添加/删除列,添加/删除存储过程

2
在SQL Server 2014上崩溃CLR(Windows 2012R2)
我有这个小的CLR,它对列中的字符串执行RegEX功能。 在Windows Server 2012R2的SQL Server 2014(12.0.2000)上运行时,该进程崩溃 消息0,级别11,状态0,行0当前命令发生严重错误。结果(如有)应丢弃。 并给我一个堆栈转储 select count (*) from table where (CLRREGEX,'Regex') 但是当我这样做 select * from table where (CLRREGEX,'Regex') 它返回行。 可以在Windows 8.1上运行的同一SQL Server版本上完美运行。 有任何想法吗? -编辑尽可能简单 using System; using System.Collections.Generic; using System.Text; using System.Data.SqlTypes; //SqlString, SqlInt32, SqlBoolean using System.Text.RegularExpressions; //Match, Regex using Microsoft.SqlServer.Server; //SqlFunctionAttribute public partial class UserDefinedFunctions …

1
SQL Server服务帐户Windows特权和权限
我的问题是,如果您为每个SQL Server进程创建一个新的域用户帐户,则应为每个帐户设置什么权限?还是SQL配置管理器实际上会解决这个问题,而我只是遇到了无法预料的问题? 我经常不得不设置Microsoft SQL Server,并且想知道是否有人可以提供有关配置服务应以其身份运行的帐户的建议。IMO已被Microsoft模糊地记录在案,尽管他们指出了正确的方向,但我从未找到任何具体的例子。 总结到目前为止我所看到的: 对于简单的部署\开发环境,可以使用安装程序使用的默认虚拟帐户: NT SERVICE\MSSQLSERVER 避免使用该SYSTEM帐户,这是不安全的。 对于生产环境和域环境,建议为每个服务使用托管服务帐户或创建域用户帐户(而非管理员)。据称,如果您在安装时使用域帐户,则安装程序将为您设置任何必需的权限。 如果将现有安装上的服务帐户从虚拟帐户更改为域帐户,建议使用SQL Server配置管理器设置新的服务帐户。据说这将为您设置任何必需的权限。 我只是尝试将现有安装中的服务帐户更改为域帐户,这会导致登录失败,直到我授予该帐户log on as service权限为止,这与SQL Server配置管理器将设置任何必需权限的部分相矛盾。(尽管我不确定GPO是否会干扰设置此本地安全策略) Microsoft确实在此页面上提供了SQL Server安装程序授予的权限列表。 但是我不清楚这是否是我应该为创建该用户以运行该服务的用户手动执行的操作,还是使用SQL配置管理器是否应自动设置这些权限。 SQL Server 2014域控制器位于Windows Server 2008 R2上。

4
如何使用密码将登录从2008R2转移到2014?
我已经尝试过Tasks>,Generate Scripts...并在“高级脚本选项”中设置了“脚本登录名”,但在输出中得到了此信息: /* For security reasons the login is created disabled and with a random password. */ 有没有一种简单的方法可以用密码对这些登录进行脚本编写,或者可以通过其他方法将登录从2008R2实例传输到2014实例?


3
如何调查BULK INSERT语句的性能?
我主要是使用Entity Framework ORM的.NET开发人员。但是,因为我不想失败使用ORM,所以我试图了解数据层(数据库)中发生的情况。基本上,在开发过程中,我启动了探查器,并检查了查询中代码的某些部分生成了什么。 如果我发现非常复杂的东西(即使不仔细编写,ORM甚至可以从相当简单的LINQ语句生成可怕的查询)和/或繁重的事情(持续时间,CPU,页面读取),请在SSMS中进行处理并检查其执行计划。 对于我的数据库知识水平,它工作正常。但是,BULK INSERT似乎是一种特殊的生物,因为它似乎不会产生SHOWPLAN。 我将尝试说明一个非常简单的示例: 表定义 CREATE TABLE dbo.ImportingSystemFileLoadInfo ( ImportingSystemFileLoadInfoId INT NOT NULL IDENTITY(1, 1) CONSTRAINT PK_ImportingSystemFileLoadInfo PRIMARY KEY CLUSTERED, EnvironmentId INT NOT NULL CONSTRAINT FK_ImportingSystemFileLoadInfo REFERENCES dbo.Environment, ImportingSystemId INT NOT NULL CONSTRAINT FK_ImportingSystemFileLoadInfo_ImportingSystem REFERENCES dbo.ImportingSystem, FileName NVARCHAR(64) NOT NULL, FileImportTime DATETIME2 NOT NULL, CONSTRAINT UQ_ImportingSystemImportInfo_EnvXIs_TableName UNIQUE …

1
寻求谓词与谓词之间的区别
我正在尝试性能调整SQL Server 2014 Enterprise中的查询。 我已经在SQL Sentry Plan Explorer中打开了实际的查询计划,并且可以在一个节点上看到它具有Seek谓词和Predicate。 Seek谓词和Predicate有什么区别? 注意:我可以看到此节点存在很多问题(例如,估计行与实际行,剩余IO),但问题与任何这些都不相关。

4
网络备份的替代方法
在我们的环境中,有些服务器位于“始终在线”可用性组中,有些则是独立的。 我们通常备份到网络共享,但是最近我们观察到,随着数据库的增大,花费的时间越来越长,这会使整个网络变慢。 Ola hallengren的脚本被用于压缩,并且还分割备份文件。我仅执行每日“完整”备份。备份将转到网络共享EMC isilon驱动器。 我从不满意EMC DD Boost。唯一的选择是执行本地备份,然后复制到相同的网络共享。 除了上述以外,还有其他有效的方法吗?

1
N'Șc'使用Latin1_General_CI_AS排序规则将N'C'的重复密钥视为
我有一个带有唯一键的表,该键包括一NVARCHAR(50)列(是否正确,但在那里)。因此,当尝试插入Șc或C(与插入顺序无关)时,由于排序规则问题,它在第二个插入处中断。这是错误: (受影响的1行)消息2601,级别14,状态1,行16无法在具有唯一索引'IX_TestT'的对象'dbo.testT'中插入重复的键行。重复的键值为(C)。 选择返回: 数据库默认排序规则为Latin1_General_CI_AS。花了一些时间研究如何解决该问题,而又没有太大改变现有的结构,但是找不到找到工作的方法。尝试了不同的排序规则和组合,一切都失败了。阅读(此处和此处)有关字符扩展等方面的信息,但仍然受阻。这是我用来复制问题的示例代码,可以随时进行修改并提出可以帮助解决此问题的任何建议。 CREATE TABLE testT ( [Default_Collation] [NVARCHAR] (50) COLLATE DATABASE_DEFAULT, [Latin1_General_CI_AS] [NVARCHAR] (50) COLLATE Latin1_General_CI_AS, [Latin1_General_CI_AI] [NVARCHAR] (50) COLLATE Latin1_General_CI_AI, [SQL_Collation] [NVARCHAR] (50) COLLATE SQL_Latin1_General_CP1_CI_AS); CREATE UNIQUE CLUSTERED INDEX [IX_TestT] ON [dbo].[testT] ([Default_Collation]) ON [PRIMARY] GO INSERT INTO testT SELECT N'Șc', --COLLATE Latin1_General_CI_AS N'Șc', --COLLATE Latin1_General_CI_AS N'Șc', …

1
SQLServer升级顾问2014挂起
我尝试对SQL Server 2008服务器运行SQL Server Upgrade Advisor 2014。 连接到2008服务器时,一切看起来都很好,我可以选择要分析的数据库。 但是一旦启动,它将永远运行,无需进行任何操作(停留在分析规则步骤:0/112)。 发生了什么事,我该如何解决? SQL Server 2008和2014均为Express版本,均安装在我的笔记本电脑上。不幸的是,这是我发现运行升级顾问的唯一方法(存在太多限制,无法在实际的pro / dev数据库上运行它)。 在SQL 2008实例是SP3的需要。 Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) 当Advisor冻结时,我们可以看到4个休眠查询(没有活动查询): SELECT name, cmptlevel FROM …

3
是否可以根据SQL Server版本选择RAISERROR或THROW?
现在是我的代码: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH 除非它在装有SQL 2008的计算机上运行,​​否则效果很好。我想让CATCH块对SQL版本进行检查,如果THROW等于或高于2012,则运行THROW,如果它等于或高于2012,则运行RAISERROR。语法错误,我想知道是否有可能。即使像这样简单的事情也对我不起作用。 BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH 任何建议表示赞赏。

1
在这种情况下将使用哪个索引?
SQL Server 2014标准版 我需要找到特定月份往返特定城市的航班数量。例如 select count(*) from flights where flightTo_AirportCode = 'aaaa' and flightFrom_Airportcode = 'bbbb' and flightdate < '2016-04-01' and flightdate > '2016-02-28' ; 表模式如下。 我正在尝试评估索引模型A或索引模型B(如下)是否更可取(建立索引需要花费数小时,并且磁盘空间一次只能存在一个,因此我想在跳之前先进行研究)。 根据我的经验,任何一个索引都可以。我对吗? create index [modelA] on flights (flightTo_AirportCode, flightFrom_AirportCode, flightDate) create index [modelB] on flights (flightDate, flightTo_AirportCode, flightFrom_AirportCode) (或者,更好的是,我可以使用二进制索引或高级机制来解决这个问题吗?) CREATE TABLE [dbo].[flights]( [flightId] [uniqueidentifier] …

2
SQL Server中的索引视图
我有一张桌子和它的索引视图 Create table mytable1 (ID int identity(1,1), Name nvarchar(100)) Create table mytable2 (ID int identity(1,1), Name nvarchar(100)) Create view myview with schemabinding as select a.name, b.name from mytable1 a join mytable2 b on a.Id = b.Id 现在,如果我运行以下查询 select a.name, b.name from mytable1 a join mytable2 b on a.Id = b.Id …

1
在while循环中是否需要显式事务?
SQL Server 2014: 我们有一个非常大的表(一亿行),我们需要在表上更新几个字段。 对于日志传送等,显然,我们也希望将其保持在很小的规模上。 如果让下面的代码运行一段时间,然后取消/终止查询,那么到目前为止已完成的工作将全部提交吗,还是我们需要添加显式的BEGIN TRANSACTION / END TRANSACTION语句以便我们可以随时取消? DECLARE @CHUNK_SIZE int SET @CHUNK_SIZE = 10000 UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or deletedDate is null WHILE @@ROWCOUNT > 0 BEGIN UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' …

1
HADR_SYNC_COMMIT的奇怪情况等待
我们注意到HADR_SYNC_COMMIT在我们的环境中等待的一种有趣模式。我们有三个副本。数据中心中有一个主,一个同步辅助和一个异步辅助,我们刚刚在另一个数据中心(相距约2400英里)中添加了三个ASYNC副本。 从那时起,我们开始注意到HADR_SYNC_COMMIT等待的数量大大增加。当我们查看活动会话时,我们看到一堆COMMIT TRANSACTION查询在SYNC副本上等待 从屏幕截图中,我们可以清楚地看到HADR_SYNC_COMMIT6月29日的等待时间有所增加,我们最终于7月1日中午某个时候在远程数据中心删除了三个异步副本中的“两个”。这大大减少了等待时间。 到目前为止,我们已检查的内容–日志发送队列,重做队列,远程副本上的上次强化时间和上次提交时间。我们在工作时间内连续发生小笔交易,因此在给定的时间戳(介于60KB和1MB之间的任何地方),发送队列非常小。远程副本几乎是同步的,副本上任何单独的lsn的上次提交时间和上次强化时间之间的差异很小。 网络管道为10G,我们将传输缓冲区的大小从256兆修改为2兆,这是在假定网络正在丢弃数据包并重新传输数据的前提下完成的。两种方法似乎都没有太大帮助。 因此,我想知道ASYNC副本与HADR_SYNC_COMMIT等待有什么关系?SYNC副本不应该仅依赖于此等待类型吗,我在这里缺少什么?

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.