标签: sql-server-2014

授予非系统管理员更改最大内存设置 SQL Server 的能力

我收到了创建存储过程的请求,该存储过程将允许用户(有权访问数据库服务器)更改 SQL Server 的max server memory (MB). 这不是困难的部分。

另一个要求是该用户应该能够更改这个唯一的参数,max server memory (MB)而不能更改其他任何参数。我想知道的是,如果可能的话。

我确实意识到,为了能够执行sp_configure和运行RECONFIGURE,所需的最低权限是ALTER SETTINGS. 并且提供ALTER SETTINGS会破坏存储过程的目的(它被设计为只运行exec sys.sp_configure 'max server memory (MB)', @TheReqMemVal)以及 的最小和最大允许值max server memory (MB)

在阅读了一些评论后,我想补充一点,如果响应中包含可能存在的安全隐患,我们将不胜感激。

sql-server stored-procedures permissions sql-server-2012 sql-server-2014

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

sp_blitz 执行需要多长时间?

我正在尝试sp_blitz在 SQL Server 2014上运行,但似乎需要很长时间。正常长度是多少?

我们只有大约 30 个数据库。一个是 300GB,但它持续了 15 分钟。

sql-server sql-server-2014 sp-blitz

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

日期时间字段在视图中作为整数返回

今天我们遇到了一个奇怪的案例,一个执行“select * from table”的视图有几个日期时间字段作为整数返回。这在以前一直有效,直到最近。视图本身并没有强制这些列作为整数返回。

另一个奇怪的事情是重写视图以显式选择所有列会使数据作为日期时间返回。我在想这可能是某种糟糕的缓存计划,但我不确定。

数据错误回撤的罪魁祸首是什么?

view sql-server-2014

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

链接服务器“linkedserver”的“SQLNCLI11”返回消息“事务管理器已禁用对远程/网络事务的支持。”

我在 SQL Server 2014 AG 组 (AG1) 中有一个数据库。- 两个节点。

在两个节点上,都设置了链接服务器。我正在从 AG 组 (AG1) 数据库的表中选择数据并插入链接服务器(来自另一个 AG 组(AG2)的数据库)。事务中唯一的语句是插入语句。它不是分布式事务。

为什么会出现以下错误?

链接服务器“LinkedserverListener”的 OLE DB 访问接口“SQLNCLI11”返回消息“事务管理器已禁用对远程/网络事务的支持。”。
消息 7391,级别 16,状态 2,第 2 行
由于链接服务器“LinkedServerListener”的 OLE DB 提供程序“SQLNCLI11”无法开始分布式事务,因此无法执行该操作。

示例代码如下。

Drop table #Myatran
Select 'ABC' name into #Myatran

DECLARE @pndstop_ps NVARCHAR(4000)
SET @pndstop_ps = 
N'
INSERT INTO '+ 'linkedserver'+'.DB.dbo.MyaTEST(Name) SELECT name FROM #Myatran
'
SET XACT_ABORT ON
BEGIN TRANSACTION

EXEC sp_executeSQl @pndstop_ps

SET XACT_ABORT OFF
Run Code Online (Sandbox Code Playgroud)

sql-server linked-server availability-groups sql-server-2014

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

主键上的非聚集索引会加速删除并防止死锁吗?

我有一个非常高流量的数据库。在应用程序中,它们将发出删除操作,并且这些删除操作经常会与同一表上的其他删除操作发生死锁。我正在研究解决此问题的方法,我看到的一个答案是确保删除具有最快的记录路径。

目前,所有删除都遵循以下形式:

(@0 int) delete [dbo].[table] where (table_id = @0)
Run Code Online (Sandbox Code Playgroud)

这些表中的每一个在 上都有一个主键和聚集索引table_id

我的问题是,添加非聚集索引是否table_id有助于加快这些删除并防止发生死锁?


死锁图:

<deadlock victim="process2b53a408c8"><process-list><process id="process2b53a408c8" taskpriority="0" logused="284" waitresource="KEY: 19:72057597368270848 (0e2c6d2527ac)" waittime="2034" ownerId="14899585071" transactionname="user_transaction" lasttranstarted="2018-03-07T09:47:18.833" XDES="0x50746b1c0" lockMode="S" schedulerid="7" kpid="967168" status="suspended" spid="185" sbid="2" ecid="0" priority="0" trancount="2" lastbatchstarted="2018-03-07T09:47:18.850" lastbatchcompleted="2018-03-07T09:47:18.850" lastattention="1900-01-01T00:00:00.850" clientapp="redacted_service" hostname="redacted_host" hostpid="164656" loginname="redacted_domain\_SQL_redacted_database_P" isolationlevel="read committed (2)" xactid="14899585071" currentdb="19" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056" databaseName="redacted_database"><executionStack><frame procname="adhoc" line="1" stmtstart="16" stmtend="120" sqlhandle="0x020000001335f1027371c186c8d7405191cdef00ddd0ebe70000000000000000000000000000000000000000">
unknown     </frame><frame procname="unknown" line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">
unknown     </frame></executionStack><inputbuf>
(@0 int)DELETE [dbo].[redacted_table]
WHERE ([id] = @0)    </inputbuf></process><process id="process218b0a5468" taskpriority="0" …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock nonclustered-index sql-server-2014

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

动态端口被设置为不同的端口

在我们的 SQL Server 实例之一(如果您确实需要知道,则为 12.0.5571.0)上,我们使用多个 IP 地址进行连接。

  • 127.0.0.1 - 动态端口设置为 0。没有设置静态端口
  • 172.16.0.5 - SQL Server 所在服务器的 IP 地址。动态端口设置为 0(自动生成)。未分配静态端口
  • 172.16.0.6 - SQL Server 实例的 IP 地址(这样团队只需要点击 IP 地址而不知道他们真正在哪个服务器上)。未分配动态端口。静态端口 1433

我一直在玩 puppet 并且一直在搞乱注册表设置

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp
Run Code Online (Sandbox Code Playgroud)

看看我是否可以使用 puppet 来自动配置 IP 地址和端口分配。我创建了一个名为“IP172016000006”的新注册表路径

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP172016000006
Run Code Online (Sandbox Code Playgroud)

我从中模板化

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP1
Run Code Online (Sandbox Code Playgroud)

但是现在每当我启动 SQL Server 实例时,127.0.0.1 和 172.16.0.5 的动态端口都不同。

比如我会停止SQL Server的实例,进入

  • “SQL Server 配置管理器”
    • 导航到实例的网络配置
      • tcp/ip
        • IP地址
          • 并为 IP 地址 127.0.0.1 和 172.16.0.5 设置“TCP 动态端口 = 0”。

重新启动 SQL Server 后,该实例将侦听 127.0.0.1:43340 和 172.16.0.5:43341(似乎总是比另一个端口多 1) …

sql-server network sql-server-2014

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

在 SQL 2014 中拆分现有分区

我有一个包含超过 200 亿行的 SQL Server 表,最后一个分区中有 130 亿行。

该表目前按“时间”字段分为 6 种方式:

2011
2012
2013
2014
2015
2016/2017/2018
Run Code Online (Sandbox Code Playgroud)

2016/2017/2018分区需要拆分成自己的分区所以有2016、2017、2018分区。

如何做到这一点并在此过程中避免大量日志文件增长?数据库处于简单恢复中,当前每个分区都位于其自己的一组磁盘上的单独文件组中。

CREATE TABLE [dbo].[Log](

      [RefNo] [nchar](7) NOT NULL,

      [DevID] [nvarchar](7) NOT NULL,

      [Time] [datetime] NOT NULL,

      [summary] [float] NULL,

      [staging] [float] NULL,

      [position] [float] NULL,

CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED

(

      [RefNo] ASC,

      [DevID] ASC,

      [Time] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 96)

)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

sql-server partitioning sql-server-2014

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

备份性能最佳实践

我正在重新编写我们的维护计划,目前重点是备份。在准备此计划时,我想尝试确保程序到位,以确保备份性能最佳。我知道实施以下内容,但是我想了解如何在该范围之外进行改进。

当前考虑:

  • 备份压缩
  • 大型数据库的多个数据文件 - 可能超过 100GB?
  • 将备份写入另一个 I/O 子系统
  • 定义参数值,包括 BLOCKSIZE、MAXTRANSFERSIZE 和 BUFFERCOUNT
  • 清除旧文件
  • 删除备份历史

除了上述之外,还有什么是有利于实施的。另外,在设置 BLOCKSIZE、MAXTRANSFERSIZE 和 BUFFERCOUNT 的值时,我是否应该考虑/如何定义正确的值?我很欣赏测试过程中的一些反复试验,但了解最佳实践会很有用。

为了了解我的日常工作,我将运行每小时事务日志备份、每日差异和每周完整备份。

谢谢

backup optimization maintenance sql-server-2014 standard-edition

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

无法完成游标操作,因为在声明游标后表架构发生了变化

当我执行从多个链接服务器提取信息并聚合数据的存储过程时,偶尔会收到此错误消息。它看起来与我下面的相似。

DECLARE Cur CURSOR FOR SELECT name FROM sys.servers WHERE is_linked = 1 AND (@Environments IS NULL OR name IN (SELECT Item FROM clrStringSplit(@Environments, ',')))
OPEN cur
FETCH NEXT FROM cur INTO @Environment
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY   

    SET @Query = '          
        EXEC ' + @Environment + '.db.dashboard.storedproc ''' + CAST(@StartDate AS VARCHAR(10)) + ''', ''' + CAST(@EndDate AS VARCHAR(10)) + ''''

    INSERT INTO #Table (Environment, Column1, Column2, Column3, Column4, Column5, Column6, Column7)
    EXEC(@Query)
END TRY
BEGIN CATCH …
Run Code Online (Sandbox Code Playgroud)

schema linked-server sql-server-2014

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

如何使用 powershell 启用这些 Windows 防火墙规则?

我有几台服务器,我在 sql server 服务上看到一个蓝色的问号,如下图所示。

在此处输入图片说明

这是解决方案

启用这些 Windows 防火墙规则对我有用

Windows 管理规范 (WMI-In)

Windows 管理规范 (DCOM-In)

有没有办法通过powershell实现这一目标?

sql-server powershell windows-server connectivity sql-server-2014

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