标签: sql-server-2014

如何查询 SSISDB 以找出包中的错误?

我看过这个问题 SSIS 2012 - How to Query Current Running Packages in T-SQL?

它给了我以下脚本:

SELECT
    E.execution_id
,   E.folder_name
,   E.project_name
,   E.package_name
,   E.reference_id
,   E.reference_type
,   E.environment_folder_name
,   E.environment_name
,   E.project_lsn
,   E.executed_as_sid
,   E.executed_as_name
,   E.use32bitruntime
,   E.operation_type
,   E.created_time
,   E.object_type
,   E.object_id
,   E.status
,   E.start_time
,   E.end_time
,   E.caller_sid
,   E.caller_name
,   E.process_id
,   E.stopped_by_sid
,   E.stopped_by_name
,   E.dump_id
,   E.server_name
,   E.machine_name
,   E.total_physical_memory_kb
,   E.available_physical_memory_kb
,   E.total_page_file_kb
,   E.available_page_file_kb
,   E.cpu_count
,   F.folder_id
, …
Run Code Online (Sandbox Code Playgroud)

sql-server ssis troubleshooting sql-server-2014 ssis-2014

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

资源池默认系统内存不足,无法运行此查询

我在 Windows Server 2012 上使用 SQL Server 2014 - 12.0.2269.0 (X64),但遇到了一些内存问题。当我运行一个执行相当“繁重”计算的存储过程时,我在大约 10 分钟后收到一个错误:

资源池“默认”中的系统内存不足,无法运行此查询。

我的 SQL Server 有多个数据库(比如 15 个,但它们并不总是同时使用)。我查看了 SQL Server 日志文件(在我得到错误之后),我看到了很多这样的行:

2015-12-17 12:00:37.57 spid19s 由于资源池“default”内存不足,不允许为数据库“Database_Name”分配页面。有关详细信息,请参阅“ http://go.microsoft.com/fwlink/?LinkId=330673 ”。

在日志中生成一个报告,其中包含每个组件使用的内存(我认为)。如果我正确解释了报告,我们可以看到MEMORYCLERK_SQLBUFFERPOOL. 您可以在此处找到该报告:http : //pastebin.com/kgmk9dPH

我还生成了一个带有图表的报告,该图表显示了相同的“结论”:

![内存使用情况

这可能是另一个有用的报告:

在此处输入图片说明

在此处输入图片说明

请注意,我还在日志中看到了此错误:

2015-12-17 12:04:52.37 spid70 由于数据库内存压力导致页面分配失败:FAIL_PAGE_ALLOCATION 8

以下是有关服务器内存的一些信息:

  • 服务器上的总内存:16 Gb

  • 分配给 SQL 服务器的内存:12288 Mb

  • 使用中的物理内存(来自sys.dm_os_process_memory):9287 Mb

如果它可以提供帮助,则该服务器不会托管任何 SharePoint 数据库。

sql-server sql-server-2014

16
推荐指数
1
解决办法
4万
查看次数

无法创建 SSISDB 目录

尝试在 sql server 2014 集成服务中创建目录时出现以下错误。知道我在安装或其他任何地方错过了什么吗?

无法访问目录备份文件“C:\Program Files\Microsoft SQL Server\120\DTS\Binn\SSISDBBackup.bak”。确保数据库文件存在,并且 SQL Server 服务帐户能够访问它(Microsoft.SqlServer.IntegrationServices.Common.ObjectModel)

sql-server ssis integration sql-server-2014

15
推荐指数
4
解决办法
6万
查看次数

压缩 NVARCHAR(MAX) 的替代方法?

我正在尝试压缩一些具有NVARCHAR(MAX)字段的表。不幸的是,压缩rowpage压缩没有预期的影响(对于 20 GB 表仅节省了大约 100/200 MB)。此外,我无法应用列存储和列存储归档压缩,因为它们不支持NVARCHAR(MAX)字段压缩。

谁能告诉我这里是否有其他选择?

我也猜测rowpage压缩没有效果,因为NVARCHAR(MAX)列的内容是唯一的。

sql-server compression sql-server-2014

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

无法从完整备份恢复 SQL Server 数据库,日志处理失败,数据库处于“正在恢复”状态

我正在尝试在我 PC 的本地 SQL Server Developer Edition 12.0.2000.8 上设置用于开发目的的数据库。我有一个完整的数据库备份和单独的事务日志备份文件,它们通过网络发送给我。

尝试从完整备份恢复时,一段时间后(大约 1 小时,数据库大小约为 270 GB),出现错误:

System.Data.SqlClient.SqlError: 处理数据库“数据库名称”的日志时出错。如果可能,从备份中恢复。如果备份不可用,则可能需要重建日志。(Microsoft.SqlServer.SmoExtended)

在此之后,数据库处于“正在恢复..”状态。

我想运行类似的东西(从这个问题中得到)

ALTER DATABASE recovery_test_2 SET EMERGENCY;
ALTER DATABASE recovery_test_2 SET SINGLE_USER;

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
Run Code Online (Sandbox Code Playgroud)

反对它,但自然我不能,因为数据库处于“正在恢复......”状态。重新启动恢复过程会导致相同的错误消息,再次删除和恢复也无济于事。

我如何启动数据库并开始工作?事务一致性对我来说并不重要。

SSMS 自动生成的恢复脚本:

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:\database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf',
  MOVE N'database_name_index' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_index.ndf',
  MOVE N'database_name_log' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO
Run Code Online (Sandbox Code Playgroud)

@Craig Efrein 建议的查询结果

无法重建日志,因为在数据库关闭时有打开的事务/用户,数据库没有发生检查点,或者数据库是只读的。如果由于硬件或环境故障手动删除或丢失事务日志文件,则可能会发生此错误。

sql-server restore transaction-log sql-server-2014

15
推荐指数
1
解决办法
2985
查看次数

从非系统管理员域用户拥有的 SQL 代理作业运行 SSIS 包

我有两个 SSIS 包,它们作为更大的 SSIS 部署的一部分在夜间(通过 SQL Server 代理)运行,没有任何问题。一切都使用 Windows 身份验证,计划作业由系统管理员(好吧,我)拥有并作为SQL Server 代理服务帐户运行。

因此,数据基本上在source system ~> transit db ~> staging ~> NDS一夜之间消失了。

我关心的两个 SSIS 包分别处理一组特定数据的transit db ~> stagingstaging ~> NDS部分。

域用户(非系统管理员)在 中执行某些操作source system并将有趣的数据推送到 中transit db,因此我需要一种方法来在工作时间内获取此更新的数据以更新NDS:决定此人触发的最简单方法该 ETL 是通过单击启用宏的 Excel 工作簿中的按钮来实现的,该工作簿通过 ODBC(使用 Windows 身份验证)连接到 SQL Server 并执行存储过程。

存储过程如下所示:

create procedure dbo.UpdateMaterialInventory
as
begin
    execute msdb.dbo.UpdateMaterialInventory;
end
Run Code Online (Sandbox Code Playgroud)

[msdb] 中的“姐妹”存储过程如下所示:

create procedure dbo.UpdateMaterialInventory
with execute as 'SqlAgentProxy'
as
begin
    execute msdb.dbo.sp_start_job …
Run Code Online (Sandbox Code Playgroud)

sql-server permissions ssis sql-server-agent sql-server-2014

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

SELECT INTO 语句的进展

我们的 ETL 流程有一个长时间运行的 SELECT INTO 语句,它动态地创建一个表,并用数亿条记录填充它。

该声明看起来像 SELECT ... INTO DestTable FROM SrcTable

出于监控目的,我们希望大致了解此语句在执行时的进度(大约行计数、写入的字节数或类似内容)。

我们尝试了以下方法无济于事:

-- Is blocked by the SELECT INTO statement:
select count(*) from DestTable with (nolock)

-- Returns 0, 0:
select rows, rowmodctr
from sysindexes with (nolock)
where id = object_id('DestTable')

-- Returns 0:
select rows
from sys.partitions
where object_id = object_id('DestTable')
Run Code Online (Sandbox Code Playgroud)

此外,我们可以在 中看到事务sys.dm_tran_active_transactions,但我无法找到一种方法来获取给定的受影响行数transaction_id(类似于@@ROWCOUNT也许,但带有transaction_idas 参数)。

我知道在 SQL Server 上,SELECT INTO 语句是 DDL 和 DML 语句合二为一,因此,隐式表创建将是一个锁定操作。我仍然认为必须有一些聪明的方法来在语句运行时获取某种进度信息。

sql-server insert sql-server-2014

15
推荐指数
4
解决办法
9535
查看次数

较新版本的 SQL Server 不太稳定?

我们的数据库架构师告诉我们的一位客户,SQL Server 2014 与 2012 相比是一个糟糕的选择,因为它缺乏 2012 具有的性能和稳定性优势。我读过的所有内容都与此相矛盾。 Aaron Bertrand 说的正好相反,我从 MS 那里读到的所有白皮书也同意——2014 年得到了增强,解决了人们在 2012 年遇到的一些 AG 问题。

选择 2014 年而不是 2012 年有什么主要缺点吗?

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

15
推荐指数
1
解决办法
7274
查看次数

为什么我的 EXISTS 查询执行索引扫描而不是索引查找?

我正在优化一些查询。

对于下面的查询,

SET STATISTICS IO ON;
DECLARE @OrderStartDate DATETIME2 = '27 feb 2016';
DECLARE @OrderEndDate  DATETIME2 = '28 feb 2016';

SELECT  o.strBxOrderNo
        , o.sintOrderStatusID
        , o.sintOrderChannelID
        , o.sintOrderTypeID
        , o.sdtmOrdCreated
        , o.sintMarketID
        , o.strOrderKey
        , o.strOfferCode
        , o.strCurrencyCode
        , o.decBCShipFullPrice
        , o.decBCShipFinal
        , o.decBCShipTax
        , o.decBCTotalAmount
        , o.decWrittenTotalAmount
        , o.decBCWrittenTotalAmount
        , o.decBCShipOfferDisc
        , o.decBCShipOverride
        , o.decTotalAmount
        , o.decShipTax
        , o.decShipFinal
        , o.decShipOverride
        , o.decShipOfferDisc
        , o.decShipFullPrice
        , o.lngAccountParticipantID
        , CONVERT(DATE, o.sdtmOrdCreated, 120) as OrderCreatedDateConverted
FROM    tablebackups.dbo.tblBOrder o
WHERE   o.sdtmOrdCreated >= …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization index-tuning sql-server-2014 query-performance

15
推荐指数
3
解决办法
2488
查看次数

如何使用子查询进行 SQL 删除

我们的一位开发人员添加了以下代码以从表中删除重复记录:

DELETE  SubQuery

FROM
(
    SELECT  ID
            ,FK1
            ,FK2
            ,CreatedDateTime
            ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber

    FROM    Table
)
AS SubQuery

WHERE   RowNumber > 1
Run Code Online (Sandbox Code Playgroud)

在查看代码时,我认为它不起作用,但是在我们的测试环境 (SQL 2014) 中测试它表明它起作用了!

SQL 如何知道解析子查询并从中删除记录table

sql-server subquery sql-server-2014

15
推荐指数
1
解决办法
3577
查看次数