标签: sql-server

在 SSIS 包中创建事务的问题

我正在处理需要使用事务的包,但我目前收到以下错误:

SSIS package "CATS-Package.dtsx" starting.
Information: 0x4004300A at Data Flow Task, SSIS.Pipeline: Validation phase is beginning.
Information: 0x4001100A at CATS-Package: Starting distributed transaction for this container.
Error: 0xC001401A at CATS-Package: The SSIS Runtime has failed to start the distributed transaction due to error 0x8004D01B "The Transaction Manager is not available.". The DTC transaction failed to start. This could occur because the MSDTC Service is not running.
SSIS package "CATS-Package.dtsx" finished: Failure.
Run Code Online (Sandbox Code Playgroud)

以下是我目前所知道的:

  • 2012年套餐
  • 我正在包部署中运行
  • TransactionOption 属性设置为必需
  • 针对 2008 R2 实例运行 …

sql-server ssis sql-server-2008-r2 distributed-transactions ssis-2012

13
推荐指数
1
解决办法
7961
查看次数

为什么在进行差异备份时我的批处理请求会增加

我已经开始对 2012 SQL Server 上的各种活动进行一些长期跟踪,我注意到在增量备份期间批量请求有所增加。

举个例子,正常的日常我们大约每秒 10-20 个批处理请求,但在我们的差异备份运行期间,它跃升至每秒 100-130 个。

我知道这不是很多,但它让我好奇它增加了 10 倍是怎么回事。

不确定您可能需要哪些信息来帮助解决此问题。

performance sql-server backup

13
推荐指数
1
解决办法
103
查看次数

无法在 SSMS 2014 中打开还原数据库向导

在运行 Windows Server 2012 R2 的开发机器上,我刚刚将 SQL Server 从 2012 升级到 2014。

使用 SQL Server Management Studio 2014,当我右键单击一个数据库并且Tasks -> Restore -> Database...什么也没有发生时。“还原数据库”向导未按预期显示。

事件查看器中没有错误或崩溃。光标甚至不会变成沙漏。

使用 T-SQL 恢复工作正常,如果我回去使用 SSMS 2012,它工作正常。关于如何让向导在 SSMS 2014 中工作的任何想法?

我在两个版本的 SSMS 中连接到相同的 SQL Server 实例,并且我尝试以管理员身份运行 SSMS。

它是服务包 1:

Microsoft SQL Server Management Studio 12.0.4100.1
Microsoft Analysis Services Client Tools 12.0.4100.1
Microsoft Data Access Components (MDAC) 6.3.9600.17415
Microsoft MSXML 3.0 5.0 6.0 
Microsoft Internet Explorer 9.11.9600.18125
Microsoft .NET Framework 4.0.30319.34209
Operating System 6.3.9600
Run Code Online (Sandbox Code Playgroud)

sql-server ssms restore sql-server-2014

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

我的用户属于哪些 AD 组登录?

我不确定我是否为这个问题选择了正确的标题。我真正想要的是,给定一个单独的 Windows AD 用户,我想找出可以访问此服务器中特定数据库的 Windows AD 组(登录名)的列表

当我运行以下查询时

select
    name,
    principal_id,
    type,
    type_desc,
    default_schema_name,
    create_date,
    modify_date,
    owning_principal_id,
    sid,
    is_fixed_role
from sys.database_principals
Run Code Online (Sandbox Code Playgroud)

在我的服务器中

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 2011 年 6 月 17 日 00:54:03 版权所有 (c) Windows NT 6.1(内部版本 7601:Service Pack 1)上的 Microsoft Corporation 标准版(64 位)

我得到以下结果(部分列表):

在此处输入图片说明

我需要知道特定登录名的所有权限。此登录名可以通过 AD 组访问我的服务器/数据库。

1) 从上面的列表中,我的登录名属于哪些 AD 组?

在此处输入图片说明

我一直在下面这样做,但我真的很想找出该用户所属的 AD 组(根据上图可以访问该服务器)的列表。

首先,我以相关用户身份执行

    EXECUTE AS LOGIN='mycompany\HThorne'

    DECLARE @User VARCHAR(20)
    SELECT @USER = SUBSTRING(SUSER_SNAME(), 
CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME()))
Run Code Online (Sandbox Code Playgroud)

我确保我拥有正确的凭据

    SELECT   @USER …
Run Code Online (Sandbox Code Playgroud)

sql-server permissions sql-server-2008-r2 active-directory sql-server-2014

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

是否存在一种方法来确定包含多个文件的文件组中的分配单元的确切文件?

我希望能够详细了解哪些数据库文件包含数据库中各种 HoBT(对齐和非对齐)的分配单元。

在我们开始为每个文件组创建多个数据文件之前,我一直使用的查询(见下文)一直对我有用,我只能弄清楚如何获得与文件组级别一样的细粒度。

select 
    SchemaName = sh.name, 
    TableName = t.name, 
    IndexName = i.name, 
    PartitionNumber = p.partition_number,
    IndexID = i.index_id,
    IndexDataspaceID = i.data_space_id,
    AllocUnitDataspaceID = au.data_space_id,
    PartitionRows = p.rows
from sys.allocation_units au
join sys.partitions p
    on au.container_id = p.partition_id
join sys.indexes i 
    on i.object_id = p.object_id
    and i.index_id = p.index_id
join sys.tables t 
    on p.object_id = t.object_id
join sys.schemas sh
    on t.schema_id = sh.schema_id
where sh.name != 'sys'
    and au.type = 2
union all 
select 
    sh.name, 
    t.name, 
    i.name, 
    p.partition_number,
    i.index_id,
    i.data_space_id, …
Run Code Online (Sandbox Code Playgroud)

sql-server filegroups metadata compression sql-server-2014

13
推荐指数
1
解决办法
1077
查看次数

根据其他 3 列组合的重复值,获取一列具有不同值的行

我想根据具有其他 3 列的唯一组合的重复行,仅获取列(列名 DEF)中具有不同值的行。

示例:在下面的示例中,前两行的前 3 列具有相同的值。但它们的列 DEF 具有不同的值。所以这两行都列在输出中。

但是第 2 行和第 4 行的前 3 列具有唯一组合,但它们在 DEF 列中具有相同的值。因此不会在输出中列出。

不会列出第 5 行和第 6 行,因为它们是具有不同值的单行。

+----------+-------+--------+--------+
| dept     | role1 |role2   |DEF     |
+----------+-------+--------+--------+
| a        | abc   | er     | 0      |
| a        | abc   | er     | 1      |
| b        | qwer  | ty     | 0      |
| b        | qwer  | ty     | 0      |
| c        | der   | ui     | 1      |
| d        | …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql distinct

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

修剪空白(空格、制表符、换行符)

我在 SQL Server 2014 上,我需要从列内容的开头和结尾清除空格,其中空格可以是简单的空格、制表符或换行符(\n\r\n);例如

'    this content    '                          should become 'this content'
'  \r\n   \t\t\t this \r\n content \t  \r\n   ' should become 'this \r\n content'
Run Code Online (Sandbox Code Playgroud)

等等。

我只能实现第一个案例

UPDATE table t SET t.column = LTRIM(RTRIM(t.column))
Run Code Online (Sandbox Code Playgroud)

但对于其他情况,它不起作用。

sql-server t-sql sql-server-2014 string-manipulation

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

存储过程中的事务

我需要在单个事务中执行 UPDATE 和 INSERT。该代码本身运行良好,但我希望能够轻松调用它并传入所需的参数。当我尝试将这个事务嵌套在一个存储过程中时,我遇到了很多语法错误。

如何封装以下代码以便轻松调用?

BEGIN TRANSACTION AssignUserToTicket
GO

DECLARE @updateAuthor varchar(100)
DECLARE @assignedUser varchar(100)
DECLARE @ticketID bigint

SET @updateAuthor = 'user1'
SET @assignedUser = 'user2'
SET @ticketID = 123456

    UPDATE tblTicket SET ticketAssignedUserSamAccountName = @assignedUser WHERE (ticketID = @ticketID);
    INSERT INTO [dbo].[tblTicketUpdate]
           ([ticketID]
           ,[updateDetail]
           ,[updateDateTime]
           ,[userSamAccountName]
           ,[activity])
     VALUES
           (@ticketID,
           'Assigned ticket to ' + @assignedUser,
           GetDate(),
           @updateAuthor,
           'Assign');
GO
COMMIT TRANSACTION AssignUserToTicket
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures t-sql transaction sql-server-2012

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

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
Run Code Online (Sandbox Code Playgroud)

根据我的计算*,经过的时间应该在 349,103 左右——而不是 1,419,976。这减少了超过 4 倍。

* 从当前时间和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 Corporation
    Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack …
Run Code Online (Sandbox Code Playgroud)

sql-server dmv sql-server-2012

13
推荐指数
2
解决办法
4782
查看次数

SQL Server 未使用所有内存

我有 SQL Server 2014,最大内存设置为 6GB(物理内存为 8GB)。

目标服务器内存为6GB,有时,然后回落到总的服务器内存(约5.3GB,从未达到6GB)。我用committed_kbsys.dm_os_sys_info检查SQL Server所使用的内存。

当我监视sys.dm_os_buffer_descriptors 时,我看到页面已从缓存中删除 - 但仍有 700MB 的内存。如果不需要内存,您如何解释从缓存中删除页面的事实?我希望 SQL Server 仅在需要内存时删除页面。

解除分配的临时表在此服务器上不是问题。我的 PLE 是 3632。过程缓存是 2182 MB。

我希望只有在没有剩余内存时才会删除页面,但是我有 700MB 可用空间还是我误解了这一点?

有人可以尝试解释这种行为吗?

SQL Server 也在从磁盘读取,所以我想我可能会得出结论,并非所有需要的页面都在内存中。

我做了一些更多的研究,我将大量页面从磁盘读取到内存中,并在读取过程中注意到任务管理器中的一些内容:

  • 使用的内存从 7.0GB -> 7.2GB -> 7.0GB -> 7.2GB ->...
  • Sqlservr.exe 从 5.3GB -> 5.5GB -> 5.3GB -> 5.5GB -> ...

就像 Windows 不允许sqlservr.exe增长到 6GB 一样。

我运行了 Shanky 提供的查询:

select
(physical_memory_in_use_kb/1024) Physical_Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(Virtual_address_committed_kb/1024 )Total_Memory_in_MB,--RAM+ …
Run Code Online (Sandbox Code Playgroud)

sql-server memory sql-server-2014

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