Questions tagged «sql-server-2012»

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

5
截断表需要什么权限?
我有一个对数据库具有以下权限的SQL帐户: db_executor您看到此帐户是该帐户成员的角色是通过以下脚本创建的: CREATE ROLE [db_executor] AUTHORIZATION [dbo] GO GRANT EXECUTE TO [db_executor] GO 当我运行一个select,update,insert或delete放在桌子上,它工作正常。当我尝试到truncate表时,它给了我这个错误信息: 无法找到对象“ TableName”,因为该对象不存在或您没有权限。 该帐户缺少什么权限?

3
如何最好地维护SQL日志文件大小
我有点像是新的DBA,并且正在管理一个活动量很大的SQL Server 2012实例。我正在完全恢复模式下运行,因为我们需要时间点恢复。 现在,我每天凌晨5点对数据库和日志进行完整备份。一些日志文件已膨胀到300GB,即使备份后它们也不会减小大小。我可以通过运行类似于以下内容来减小它们的尺寸: BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn'; DBCC ShrinkFile([db1_log], 0); BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn'; DBCC ShrinkFile([db1_log], 0); 当我检查备份文件的LSN时,会看到类似以下内容的内容: RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn' FirstLSN: 15781000014686200001 SecondLSN: 15802000000665000001 RESTORE headeronly FROM DISK = …

4
表中的NULL值自我比较
我总是对某些神秘的t-sql行为感到困惑,如下所示 -- Create table t and insert values. use tempdb CREATE TABLE dbo.t (a INT NULL); -- insert 3 values INSERT INTO dbo.t values (NULL),(0),(1); GO set ansi_nulls off -- purposely turn off, so we can allow NULL comparison, such as null = null go -- expect 3 rows returned …

1
删除语句中未使用的聚集索引
我有一个SQL Server表定义如下 CREATE TABLE [dbo].[Production_Detail] ( [Id] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [dbo].[Production_Detail_Seq]), [Meta_Data_ID] INT NOT NULL , [Production_Detail_Time] DATETIME NOT NULL, [Production_Detail_Time_Local] DATETIME NOT NULL, [Production_Detail_Value] FLOAT NULL, [IntegratedDM] BIT NOT NULL DEFAULT 0, [DailyIntegratedDM] BIT NOT NULL DEFAULT 0, [InsertedDate] DateTime NOT NULL, [ModifiedDate] DateTime NOT …

2
使用来自组的先前填充日期的数据值填写缺少的日期
绘制在部门之间转移的服务台票证。我们想知道开票当天每一天的部门是什么。该表包含每个票证在其打开的每一天的最后一个部门,该部门发生更改(包括最初打开票证的日期和关闭票证的日期的行)。数据表如下所示: CREATE TABLE TicketAssigment ( TicketId INT NOT NULL, AssignedDate DATE NOT NULL, DepartmentId INT NOT NULL); 我需要的是使用每个DateId的前一个TicketAssigment行中的DepartmentId填写每个TicketId的所有缺失日期。 如果我有这样的TicketAssigment行: 1, '1/1/2016', 123 -- Opened 1, '1,4,2016', 456 -- Transferred and closed 2, '1/1/2016', 25 -- Opened 2, '1/2/2016', 52 -- Transferred 2, '1/4/2016', 25 -- Transferred and closed 我想要这个输出: 1, …

3
DMV sys.dm_exec_requests中的total_elapsed_time是否完全不正确?
我正在运行SQL Server 2012,并尝试将一些查询放在一起以使用DMV进行监视。但是,当查看DMV 中的total_elapsed_time字段时sys.dm_exec_requests,数字看起来相去甚远。这是一个例子: SELECT session_id, RunTime = CURRENT_TIMESTAMP, start_time, total_elapsed_time FROM sys.dm_exec_requests WHERE session_id = 284; session_id RunTime start_time total_elapsed_time 284 2016-04-07 16:14:03.690 2016-04-07 16:08:14.587 1419976 根据我的计算*,经过时间应该在349,103左右,而不是1,419,976。相差四分之一。 *根据当前时间与start_time之间的差(以毫秒为单位),即 SELECT DATEDIFF(MILLISECOND, '2016-04-07T16:08:14.587', '2016-04-07T16:14:03.690'); 这是服务器信息: SELECT @@VERSION; Microsoft SQL Server 2012 - 11.0.5592.0 (X64) Apr 17 2015 15:18:46 Copyright (c) Microsoft …

2
批量插入时间差异很大
因此,我有一个简单的批量插入过程,可以从暂存表中获取数据并将其移入我们的数据集市。 该过程是一个简单的数据流任务,默认设置为“每批行数”,选项为“ tablock”和“无检查约束”。 桌子很大。587,162,986,数据大小为201GB,索引空间为49GB。该表的聚集索引为。 CREATE CLUSTERED INDEX ImageData ON dbo.ImageData ( DOC_ID ASC, ACCT_NUM ASC, MasterID ASC ) 主键是: ALTER TABLE dbo.ImageData ADD CONSTRAINT ImageData PRIMARY KEY NONCLUSTERED ( ImageID ASC, DT_CRTE_DOC ASC ) 现在我们遇到了一个问题,即BULK INSERT通过SSIS的运行速度非常慢。1小时插入一百万行。填充表的查询已经排序,并且要填充的查询需要不到一分钟的时间才能运行。 当进程运行时,我可以看到查询正在等待BULK插入,这需要5到20秒的时间,并且显示的等待类型为PAGEIOLATCH_EX。该过程一次只能执行INSERT大约一千行。 昨天,在针对我的UAT环境测试此过程时,我遇到了同样的问题。我运行了几次该过程,试图确定此缓慢插入的根本原因是什么。然后突然之间不到5分钟就开始运行了。所以我又运行了几次,结果都一样。等待5秒或更长时间的散装插入物数量也从数百下降到大约4。 现在,这令人困惑,因为这并不像我们的活动有所减少。 CPU持续时间很短。 速度较慢的时间似乎较少等待磁盘。 实际上,磁盘延迟会在5分钟以内运行该进程的时间内增加。 在此过程运行不佳的时期,IO更低。 我已经检查过了,并且文件没有增长,因为文件仅占70%。日志文件仍有50%可用。数据库处于简单恢复模式。DB仅具有一个文件组,但分布在4个文件中。 所以我想知道的是:为什么我看到那些大批量插入的等待时间如此之长。B:发生了什么魔术使它运行得更快? 边注。今天又像废话一样运行。 UPDATE,当前已分区。但是,这样做的方法充其量只是愚蠢的。 CREATE PARTITION SCHEME …

1
为什么SQL Server拒绝使用Fullscan以外的任何内容来更新这些统计信息?
我注意到在每日数据仓库构建中,运行时间相对较长(超过20分钟)的自动更新统计信息操作。涉及的表是 CREATE TABLE [dbo].[factWebAnalytics]( [WebAnalyticsId] [bigint] IDENTITY(1,1) NOT NULL, [MarketKey] [int] NOT NULL CONSTRAINT [DF_factWebAnalytics_MarketKey] DEFAULT ((-1)), /*Other columns removed*/ CONSTRAINT [PK_factWebAnalytics] PRIMARY KEY CLUSTERED ( [MarketKey] ASC, [WebAnalyticsId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MarketKeyPS]([MarketKey]) ) ON …

3
备份内部-在运行备份作业时会发生什么-就SQL Server中的锁定和性能开销而言?
对于MySQL,我知道数据库是在SQL语句中逐表备份的,这会导致锁定,如果在备份时更新列,则可能会遇到完整性问题。 据我了解,这不适用于Microsoft SQL Server,但是SQL Server如何处理呢?是否有一些内部冻结来保持数据库一致? 我还听说备份是单线程的,这意味着它仅使用一个核心,假设您备份到单个文件。还要假设您有一台多核计算机,例如16个核,或者至少有一个比一个大得多的核。 从我的个人经验来看,备份时我从来没有遇到过问题,既没有锁定也没有开销问题,但是我的经验有限。这就是为什么我总是建议在服务器属性中打开备份压缩的原因。 那么当备份作业运行时会发生什么呢?而且不同版本之间也存在显着差异吗?例如2008、2012和2014(不是许可)。

1
高可用性还原SQL Server 2012数据库
我有一个始终处于高可用性模式的数据库,该数据库与另一个实例上的另一个数据库同步。如何使用从.bak文件还原到主数据库T-SQL? 我是高可用性的新手,并被告知我需要先使数据库脱离高可用性,然后才能进行还原,然后再次将其重新设置为高可用性,但我不确定。 我希望我可以在AlwaysOn仍启用的同时直接还原到主数据库,并且它将与辅助数据库自动同步。

5
检测SQL Server表中的更改
在我的应用程序中,有了在SQL Server 2012上运行的数据库,我得到了一个作业(计划任务),该作业会定期执行昂贵的查询并将结果写入表中,以供应用程序以后查询。 理想情况下,仅当自上次执行查询以来发生某些更改时,我才想运行该昂贵的查询。由于源表非常大,因此我不能只选择所有候选列之类的校验和。 我有以下想法: 每当我更改源表中的内容时,都应将最后更改的时间戳,“必须查询”标志或类似的内容显式地写入跟踪表。 使用触发器执行相同的操作。 但是,我真的很想知道是否存在一种轻量级的方法来检测表上的更改,而无需我明确跟踪写入。例如,我可以获取表的“当前” ROWVERSION值或诸如此类的东西吗?

2
安装SQL Server 2012 Express失败,并显示错误“找不到数据库引擎启动句柄”。
我正在尝试在Windows 7 SP1 x64上安装带SP1 x64的SQL Server Express 2012。这台机器以前安装了SQL Server Express 2012。此实例已升级到SQL Server 2012 Standard,此版本已卸载。 以下是在安装过程中选择的选项: 在安装中包括SQL Server产品更新-2与知识库文章2793634相关 将所有功能安装到默认目录 默认实例根目录中的命名实例SQLEXPRESS 默认服务帐户:SQL Server数据库引擎-> NT Service \ MSSQL $ SQLEXPRESS 默认数据库引擎配置 安装失败,并出现以下错误: 标题:Microsoft SQL Server 2012 Service Pack 1安装程序 发生以下错误: 找不到数据库引擎启动句柄。 要获取帮助,请单击:http : //go.microsoft.com/fwlink?LinkID=20476&ProdName=Microsoft%20SQL%20Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=11.0.3128.0&EvtType=0xD15B4EB2%25400x4BDAF9BA%25401306%254025 - - - - - - - - - …

3
SQL Server自动修剪varchar值,相等比较但不喜欢比较
今天,我在SQL Server上遇到了一些有趣的行为(在2005年和2012年观察到),希望有人能解释一下。 使用=NVARCHAR字段进行比较的查询会忽略字符串中的尾随空格(或在比较之前自动修剪值),但是使用like运算符的同一查询不会忽略该空格。2012年使用的归类为Latin1_General_CI_AS。 考虑以下SQL Fiddle:http://sqlfiddle.com/#!6/72262/4 请注意,like运算符不会返回结尾空格字符串的结果,但=运算符会返回结果。为什么是这样? 优点:我无法在VARCHAR字段上复制它,我会认为在两种数据类型中都将以相同的方式处理空间-这是真的吗?

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

1
将SQL Server 2012 Standard与Bitlocker一起使用
我们正在尝试使用Bitlocker保护SQL Server 2012数据库。使bitlocker正常工作没有任何问题...我们遇到的问题是,一旦驱动器被锁定,SQL Server就无法再读取数据。 显然,我们很想使用TDE,但是由于它仅限于企业版,所以这是不行的。我们在服务器上激活了TPM。这是在Windows域中,我们使用Windows身份验证...,但是驱动器加密后,我们将无法访问任何内容。 我在这里想念什么?

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.