标签: sql-server-2012

SQL Server 2012 标准版灾难恢复选项?

建议我的 DR 计划的最佳方法。目前我们有一组数据库 (6) 用于我们的应用程序,我们正在构建 DR 和 HA 计划。由于我们是小型企业,我们使用的是 2012 年标准版,因此无法使用 AG 功能。

谢谢你的帮助。

sql-server-2012 disaster-recovery standard-edition

6
推荐指数
1
解决办法
1498
查看次数

如何每 1 秒运行一次 SQL 作业?

我有一个 SQL 作业,它在给定时间处理最少的行。目前它每 10 秒运行一次,这是 Job Scheduler 中可用的最小值。但正因为如此,作业处理使用的表会被许多记录填满。所以我需要每 1 秒运行一次作业。怎样才能做到这一点?请指教。

sql-server sql-server-2012 jobs

6
推荐指数
1
解决办法
2万
查看次数

对等连接重置:套接字写入错误

我们有一个开发 Java (JDBC) 应用程序的供应商说他们收到了错误

对等连接重置:套接字写入错误

他们坚持认为 SQL Server (SQL Server 2012) 出于某种原因强行断开了他们的应用程序服务器。我已经运行 Profiler 跟踪来收集注意力和用户错误消息事件,但没有发现任何帮助。我检查了环形缓冲区并且只有失败的登录 - 没有断开连接。

SELECT CAST(record AS XML) FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = 'RING_BUFFER_CONNECTIVITY'
Run Code Online (Sandbox Code Playgroud)

Windows 日志没有显示任何有用的信息。这是我应该能够在 SQL Server 中跟踪的错误,还是纯粹是需要网络跟踪或其他什么的网络错误?有任何想法吗?

sql-server jdbc sql-server-2012 connectivity

6
推荐指数
1
解决办法
2万
查看次数

合并来自多行的数据

我在处理查询时相对较新,所以让我提前道歉。这是我将使用的 SQL Server 2012。这些数据已通过每晚从 Excel 导入的方式导入临时表。我需要将此数据从该表移动到我们的主硬件表中,并确保在检查时插入任何新数据以确保它更新任何旧数据。我会提供尽可能多的信息,请耐心等待。

字段名称是:

|Ticket_Num | Name | Worker | date1 | Serial | Part | Description1 | Type1 | Eqmt_Type |
Run Code Online (Sandbox Code Playgroud)

我需要将它们带入具有以下内容的表中:

   |Event_NUM|Name|Install_Date|Pull_Date|Install_Tech|Pull_Tech| PMP1_Desc|PMP1_Part|PMP1_Serial|PMP2_Desc|PMP2_Part|PMP2_Serial|PMP3_Desc|PMP3_Part|PMP3_Serial|Motor1_Desc|Motor1_Serial|Motor1_Part|Motor2_Desc| Motor2_Serial| Cab1_Disc|Cab1_Part|Cab1_Serial|Cab2_Desc|Cab2_Part|Cab2_Serial|Dis1_Desc|Dis1_Part|Dis1_Serial|Dis2_Desc|Dis2_Part|Disc2_Serial|
Run Code Online (Sandbox Code Playgroud)

这是 SQL Fiddle 的示例,其中包含从 Excel 中提取的数据: SQL Fiddle for data to be insert

这是 SQL Fiddle 和我想要的示例:SQL Fiddle example of what I would like

pivot t-sql sql-server-2012

6
推荐指数
1
解决办法
144
查看次数

SQL Server 数据库级审核过滤不起作用

我已经SQL Server 2014 Enterprise Edition安装了。出于隐私考虑,需要记录私有数据上的 SELECT 语句(特定域用户除外),由写入数据库的服务使用。

创建数据库级审计规范效果很好。例如

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-01]
FOR SERVER AUDIT [My_Audit]
ADD (SELECT ON SCHEMA::[dbo] BY [public])
WITH (STATE = OFF)
GO
Run Code Online (Sandbox Code Playgroud)

导致每个人的所有 SELECT 语句都写入日志文件。当我用 替换SCHEMA::[dbo][MyTable],日志被正确过滤为 SELECTs on MyTableonly。

但是当我替换public为特定的用户名时MYDOMAIN\myuser,日志条目不会像我预期的那样针对给定的用户名进行过滤。

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-01]
FOR SERVER AUDIT [My_Audit]
ADD (SELECT ON SCHEMA::[dbo] BY [MYDOMAIN\myuser])
WITH (STATE = OFF)
GO
Run Code Online (Sandbox Code Playgroud)

任何用户发出的每个 SELECT被记录下来。

我查询sys.server_principals以检查给定的用户是否是有效的主体名称,但它实际上显示在结果中。

我的第二个审计规范有什么问题?

编辑:似乎有问题的 CREATE 语句已被 …

sql-server sql-server-2012 sql-server-2014

6
推荐指数
1
解决办法
1099
查看次数

缓冲区大小改变?

我有一个生产数据库,它遇到了剧烈波动的页面预期寿命 (PLE) 问题。(它在随机时间崩溃为零。)

我一直在研究 PLE 问题,并发现一些似乎指向 VMWare 问题的内容,但我不确定我是否正确使用了数据。似乎我正在丢失缓冲区/缓存页面。

我正在使用这个查询:

SELECT  COUNT(*) AS cached_pages_count, 
        CASE database_id
            WHEN 32767 THEN 'ResourceDb'
            ELSE DB_NAME(database_id)
        END AS database_name
FROM    sys.dm_os_buffer_descriptors
GROUP BY DB_NAME(database_id), database_id
ORDER BY cached_pages_count DESC;
Run Code Online (Sandbox Code Playgroud)

(在这里找到)

我正在计算 PLE 崩溃前后的结果(计数)。一个例子是之前的 1,097,820 和之后的 131,394。所以我似乎“丢失”了 966,426 页。

我的猜测是所有虚拟机的硬件都处于压力之下,因此它会随机从服务器中交换一些内存一段时间。(这只是一个猜测。)当这种情况发生时,所有页面都丢失了,因此 PLE 直线下降。

那么,我sys.dm_os_buffer_descriptors是否正确使用了视图? 从我读到的它总是显示使用过的缓冲区/缓存页面。所以如果它是空的(或显着减少),我要么不再有内存,要么是空的。(我很想用一种方法来证实这个结论。)

或者还有另一种解释为什么计数下降这么多?

该行下方的信息是从 OP 的评论中添加的


我们的系统管理员管理虚拟机。我希望在使用这些数据去找他们之前了解我的查询。从数据库的角度来看,PLE 崩溃的时间似乎是随机的。(在 PLE 崩溃期间不会发生重新索引或其他高性能的事情)

我做了大量的工作,看看它是否与工作负载有关。虽然存在一个性能不佳的查询,但用完所有缓存还不够。[没有] 当缓冲区计数下降时,服务器上没有重建或其他非常规用户活动。即使是这样,我也不会在上面的查询中看到使用它吗?(意味着如果它是 SQL Server 操作,计数不会保持不变,只是内容不同吗?)

我无权访问 VMWare 设置。我希望在涉及那些做的事情之前更好地理解我的发现。这个问题的重点是确保我首先正确使用视图。

在评论链的末尾:

我试图说 PLE 问题导致我丢失了缓冲页面问题。我用来获取 PLE 的查询将显示低 PLE,因为页面正在丢失。所以他们身上的东西消失了。这是一个错误的读数,因为内存量减少了。

这是我的@@Version:

Microsoft SQL Server 2012 …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 page-life-expectancy buffer-pool

6
推荐指数
1
解决办法
2766
查看次数

如何调试缓冲区问题?

我有一个产品“Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64)”,它显示出奇怪的缓冲区和页面预期寿命 (PLE) 症状。

我每分钟都在我的服务器上运行这个(跟踪这个问题):

SELECT @ple = CAST([cntr_value] AS VARCHAR(20))
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Manager%'
AND [counter_name] = 'Page life expectancy'

SELECT @usedBufferPages = CAST(COUNT(*) /128 AS VARCHAR(20)) 
FROM sys.dm_os_buffer_descriptors

DECLARE @StartDate VARCHAR(8) = Convert(VARCHAR(8), GETDATE(), 14)
RAISERROR ('%s. PLE at %s and Used Buffers at %s at %s ', 0, 
            1,@runCountString ,@ple, @usedBufferPages, @StartDate) WITH NOWAIT  
Run Code Online (Sandbox Code Playgroud)

这是一些示例输出:

16. PLE at 858 和 Used Buffers at 7290 at 09:51:42 
17. PLE at …

performance sql-server sql-server-2012 page-life-expectancy buffer-pool

6
推荐指数
3
解决办法
1060
查看次数

备份中缺少 CDC 系统表

我正在将使用 CDC 的数据库从 SQL Server 2008 R2 迁移到 SQL Server 2012。

对象资源管理器的“系统表”分支下有CDC相关的表:

cdc.ddl_history
cdc.lsn_time_mapping
cdc.captured_columns
cdc.index_columns
cdc.change_tables
Run Code Online (Sandbox Code Playgroud)

备份数据库并在不同的服务器上恢复后,CDC 相关的表不存在。

我尝试使用 SSIS 复制它们,但它们在“导出数据”向导 GUI 中不可见。似乎实际复制它们的唯一方法是手动导出它们或将SELECT * FROM...结果输出到文件。

如何确保正确恢复变更数据捕获相关表?

sql-server-2008 sql-server sql-server-2012 change-data-capture

6
推荐指数
1
解决办法
2997
查看次数

在线重建索引而不会对其他请求造成风险

我们有一个 SQL Server 2012 企业版数据库,它的索引碎片非常快。

我们使用维护计划每天重新组织这些索引,并每周重建它们。重建在线进行并使用 tempdb(企业版 SQL Server 功能)。

然而,在重建的 2 分钟内,与数据库的其他连接受到影响。我们会遇到几次超时或死锁。有时,重建本身也会因死锁而失败。

重建失败没问题,我们可以再试一次。但是其他连接超时甚至需要很长时间是非常麻烦的。

有没有办法以较低的优先级运行重建,或者如果当前的处理资源不足以进行在线重建,则自动失败?

此数据库没有停机时间窗口,因此我们无法离线重建索引。有什么方法可以在线重建索引而不会对其他请求造成重大干扰?

sql-server sql-server-2012 index-maintenance

6
推荐指数
1
解决办法
8676
查看次数

db_datareader、db_datawriter 和 db_owner 权限

首先,抱歉,因为我不是 DBA,也不熟悉所有权限。

我的问题是,如果我授予用户db_owner对一个数据库的权限。我是否需要也给db_datareaderdb_datawriter权限有完全控制权?我认为db_owner足以对数据库执行各种查询?(创建、删除、更改、选择和所有其他内容)。

所以,简而言之:如果我选择db_owner,那么db_datareaderdb_datawriter将自动包含在内。我对吗?

sql-server permissions sql-server-2012

6
推荐指数
2
解决办法
1万
查看次数