标签: sql-server-2014

无法创建 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
查看次数

创建指向自身的链接服务器

我正在尝试servername\instancename使用以下调用在 SQL Server 2014 实例上创建链接服务器:

EXEC master.dbo.sp_addlinkedserver 
    @server = N'servername\instancename',
    @srvproduct=N'SQL Server'
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Msg 15028, Level 16, State 1, Procedure sp_addlinkedserver, Line 82
The server 'servername\instancename' already exists.
Run Code Online (Sandbox Code Playgroud)

这在 SQL Server 2005 中运行良好,并且根据MSDN

链接服务器不必是 SQL Server 的另一个实例,

所以我不确定最近版本中不允许这样做的更改。使用 UI 会生成类似的消息:

不能将本地 SQL Server 创建为链接服务器。

我知道请求是一件奇怪的事情,但它是为了支持一些在 2005 年工作的遗留代码(并且曾经在不同的实例上)。文档指出它应该可以工作,但事实并非如此。有没有办法让它在 2014 年工作,或者我将不得不修改底层代码?

sql-server linked-server sql-server-2014

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

SQL Server 服务帐户 Windows 特权和权限

我的问题是,如果为每个 SQL Server 进程创建一个新的域用户帐户,应该为每个帐户设置什么权限?或者 SQL 配置管理器是否真的处理了这个问题,而我只是遇到了一个无法预料的问题?

我经常不得不设置 Microsoft SQL Server,并想知道是否有人可以提供有关配置服务应作为运行的帐户的建议。IMO 这已经被微软模糊地记录了下来,虽然他们为你指明了正确的方向,但我从来没有找到任何具体的例子。

总结一下我到目前为止所看到的:

对于简单的部署\开发环境,可以使用安装程序使用的虚拟帐户默认值:例如 NT SERVICE\MSSQLSERVER

避免使用该SYSTEM帐户,这是不安全的。

对于生产环境和域环境,建议使用托管服务帐户,或为每个服务创建域用户帐户(而不是管理员)。据称,如果您在安装时使用域帐户,安装程序将为您设置任何所需的权限。

如果将现有安装上的服务帐户从虚拟帐户更改为域帐户,建议使用 SQL Server 配置管理器来设置新的服务帐户。据称,这将为您设置任何所需的权限。

我只是尝试将现有安装中的服务帐户更改为域帐户,但在我授予该帐户之前,它会使我登录失败 log on as service权限,这与 SQL Server 配置管理器将设置任何所需权限的部分相矛盾。(虽然我不确定 GPO 是否会干扰设置此本地安全策略)

Microsoft在此页面上提供了 SQL Server 安装程序授予的权限列表。

但是我不清楚这是否应该为我创建的用户手动执行以运行服务,或者使用 SQL 配置管理器是否应该自动设置这些权限。

SQL Server 2014,域控制器在 Windows Server 2008 R2 上。

sql-server configuration sql-server-2014 service-accounts

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

备份内部结构 - 当备份作业运行时会发生什么 - 在 SQL Server 中的锁定和性能开销方面?

对于 MySQL,我知道数据库是在 SQL 语句中逐表备份的,这会导致锁定,如果在备份时更新列,则最终可能会出现完整性问题。

据我了解,这不适用于 Microsoft SQL Server,但 SQL Server 是如何处理的?是否有一些内部冻结来保持数据库一致?

我还听说备份是单线程的,这意味着它只使用一个核心,假设您备份到单个文件。还假设您有一台多核机器,例如 16 核,或者至少比 1 多得多。

根据我的个人经验,我在备份时从未遇到过问题,既没有锁定也没有开销问题,但我的经验有限。这就是为什么我总是建议在服务器属性中打开备份压缩。

那么当备份作业正在运行时会发生什么?不同版本是否也有显着差异?例如 2008、2012 和 2014(不是许可证)。

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

14
推荐指数
3
解决办法
4717
查看次数

如何实现基于集合的算法/UDF

我有一个算法,我需要针对具有 800K 行和 38 列的表中的每一行运行该算法。该算法在 VBA 中实现,并使用来自某些列的值来处理其他列进行大量数学运算。

我目前正在使用 Excel (ADO) 来查询 SQL 并使用带有客户端游标的 VBA 通过循环遍历每一行来应用算法。它可以工作,但需要 7 个小时才能运行。

VBA 代码非常复杂,将其重新编码为 T-SQL 需要做很多工作。

我已经阅读了 CLR 集成和 UDF 作为可能的路由。我还考虑将 VBA 代码放在 SSIS 脚本任务中以更接近数据库,但我确信存在解决此类性能问题的专家方法。

理想情况下,我能够以基于并行集的方式对尽可能多的行(全部?)运行算法。

任何帮助都很大程度上取决于如何在此类问题上获得最佳性能。

- 编辑

感谢您的评论,我使用的是 MS SQL 2014 Enterprise,这里有更多详细信息:

该算法在时间序列数据中找到特征模式。算法中的函数执行多项式平滑、窗口化,并根据输入标准找到感兴趣的区域,返回十几个值和一些布尔结果。

我的问题更多是关于方法论而不是实际算法:如果我想一次在多行上实现并行计算,我的选择是什么。

我看到建议重新编码到 T-SQL 中,这是很多工作但可能的,但是算法开发人员在 VBA 中工作并且经常更改,因此我需要与 T-SQL 版本保持同步并重新验证每个改变。

T-SQL 是实现基于集合的函数的唯一方法吗?

sql-server ssis functions sql-server-2014

14
推荐指数
1
解决办法
521
查看次数

如何重新加载链接服务器?

我使用的是 Microsoft SQL Server 2014 企业版。链接服务器出现问题,需要重新启动服务器或停止MSSQLSERVER服务。当服务器再次运行时,链接的服务器(到 DB2)无法正常工作,并且 SQL Server 显示以下错误:

消息 7302,级别 16,状态 1,第 10 行
无法为链接服务器“Airspe”创建 OLE DB 提供程序“DB2OLEDB”的实例。

只有在多次重启服务器后,链接服务器才会开始工作。

  1. 为什么需要多次重启服务器才能启动链接服务器?
  2. 还有其他解决方案吗?

这是创建链接服务器之一的脚本:

EXEC master.dbo.sp_addlinkedserver 
@server = N'AIRS', 
@srvproduct=N'Microsoft OLE DB Provider for DB2', 
@provider=N'DB2OLEDB', 
@datasrc=N'###.###.###.##',@provstr=N'Provider=DB2OLEDB;
    Data Source=#####;Persist Security Info=True;Password=**********;
    User ID=######;Initial Catalog=######;
    Network Address=###.###.###;Package Collection=AICOLDP;DBMS Platform=DB2/AS400',
@catalog=N'#####'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'AIRS',@useself=N'False',@locallogin=NULL,@rmtuser=N'#####',@rmtpassword='########'
EXEC master.dbo.sp_serveroption @server=N'AIRS', @optname=N'collation compatible', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'AIRS', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'AIRS', @optname=N'dist', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'AIRS', @optname=N'pub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'AIRS', @optname=N'rpc', …
Run Code Online (Sandbox Code Playgroud)

sql-server linked-server sql-server-2014

14
推荐指数
1
解决办法
2887
查看次数

从具有不同用户权限的存储过程执行 SSIS 包

由于所需的权限级别不同,我在允许我的用户以合理的方式执行 SSIS 包时遇到了问题。

场景:我们创建了一个数据仓库,有两个不同的 SSIS 包负责加载数据,一个是自动运行的(通过 SQL 代理作业,并且工作正常),另一个必须运行 -一旦上游数据最终确定和清理等,用户的需求。

这个包执行非常有特权的操作,包括在运行开始时备份数据库(可以肯定,可以肯定),删除和重新创建计算表等。

我已经编写了一个存储过程来通过 [SSISDB].[catalog].[create_execution] 和 [SSISDB].[catalog].[start_execution] 存储过程来执行这个作业......这在我的帐户下运行时很好用(我是系统管理员)。

由于 SSISDB 和 MSDB 需要更高级别的权限才能将执行排入队列,因此普通用户运行存储过程失败,并且包本身失败,因为它在其(低级)安全上下文中运行。

我试过的

我试图在存储过程中使用“执行为”来解决这个问题,但是由于跨数据库链接问题、可信标志等,这失败了。

我还试图通过让代理作业运行包来解决这个问题,并且只是从存储过程中运行代理作业,但是我很快就进入了一个痛苦的世界,涉及:

  • 无法在每个作业的基础上设置执行权限
  • 希望通过中央服务器角色配置此访问权限以适应随时间变化的员工,并且工作只能有一个用户作为所有者
  • 代理帐户、凭据与 sql-auth 登录等的黑暗世界

计划 C 和 D

我能想到的唯一选择是创建一个具有提升权限的专用 SQL Server 登录,并相信用户不会传递凭据/失去对谁安排导入的可审计性(如何在其他领域解决此问题)组织),或者自定义构建一个 Web 前端,纯粹是为了允许用户作为他们的“服务器角色”帐户进行身份验证,然后让 Web 应用程序在第二个(特权)连接下运行存储过程。

所以....

关于如何:

  • 让 SSIS 包执行特权操作
  • 由低权限用户执行(使用 AD windows 帐户)
  • 最好是通过中央服务器角色管理运行作业的访问权限(我无法轻松为他们创建新的 Windows 组)
  • 并且任何新的中间/代理帐户都是 SQL Server 身份验证帐户(同样,对 AD 进行更改的能力非常有限)

我知道这里有很多活动部件(有些感觉像是在旋转刀片),所以如果您觉得我错过了任何其他信息,请告诉我。

干杯,蒂姆

编辑....

所以今天我创建了一个具有 ssis_admin 权限的专用 SQL Server 登录,创建了该用户拥有的三个 SQL Server 代理作业,并更新了我的最终用户调用execute as该用户的存储过程。由于无法create execution作为 SQL Server …

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

14
推荐指数
1
解决办法
2619
查看次数

TempDB 争用

我们在 SQL Server 2014 SP1 上有一个活动的 OLTP 40GB 数据库。发现查询缓慢,IO_Completion 等待,磁盘队列长度上升到 900,SQL Server 停止响应。我们尝试了什么:

  1. 重新启动实例,一分钟后它开始以相同的方式运行。

  2. 第二次重启后,我们更改了每个 tempdb 数据文件的初始大小(创建了 16 个数据文件),它开始正常工作。

注意:我们将表变量用于中间结果集。这些结果集非常小。

一个月内发生了两次。每次我手动向数据文件添加一点空间时,它就会开始正常工作。更有趣的是,我们在 SQL Server 2008 R2 和 SQL Server 2012 上的相同设置(相同的硬件、相同的文件夹和文件设置、相同的工作负载)运行良好。

请帮助我们找到永久解决方案。

所有数据文件的初始大小都是 1000MB,当前每个是 1500MB。都是一样的。每个自动增长是 100MB。在此之前,我们面临 PFS 和 GAM 页面争用,我们增加到 16 个并解决了问题。跟踪标志 1117 和 1118 都已启用。2 个 NUMA 节点上的 24 个内核。所有数据文件都在同一卷上。简单的磁盘,没有 SAN。

实例位于物理机上。带有表变量的查询和带有哈希联接的查询最常产生 IO_Completion 等待。


wBob 的详细回答促使我们进行更详细的搜索。我们之前是怎么错过的:

数据库 'tempdb' 中文件 'templog' 的自动增长被用户取消或在 7704 毫秒后超时。使用 ALTER DATABASE 为此文件设置较小的 FILEGROWTH 值或显式设置新文件大小。

这是我们在发生此类问题时在日志中发现的。我们正在移动 TempDB 以分离快速驱动器。

sql-server tempdb sql-server-2014

14
推荐指数
1
解决办法
804
查看次数