标签: sql-server

记录查询和其他 T-SQL

我想知道 SQL Server 2008 R2 是否有默认的SELECT语句日志记录方案(或任何其他与此相关的 T-SQL)。

如果是,我在哪里可以看到它?如果没有,我该如何设置?

sql-server sql-server-2008-r2

17
推荐指数
4
解决办法
5万
查看次数

将 SSMS 连接到集成服务时出现“访问被拒绝”

尝试使用特定 SQL Server 群集的网络名称将 SSMS 连接到 Integration Services 时收到以下错误:

连接到计算机 'FooDB' 上的 Integration Services 服务失败,出现以下错误:“访问被拒绝”。

如果计算机尚未配置为允许通过 DCOM 进行远程连接,或者用户确实有权通过 DCOM 访问 SQL Server Integration Services 服务,则会发生此错误。

这是一个有据可查的解决方案的常规问题。例如,请参阅此处此处的解决方案。

但是,我已经尝试了我所知道的所有解决方案,但问题仍然存在。

更详细地说,我做了以下工作:

  • 验证连接的用户是否具有以上 MsDtsServer100 上链接的文章中列出的 DCOM 权限:

    1. 启动和激活权限:允许本地启动、允许远程启动、本地激活、远程激活

    2. 访问权限:允许本地访问,允许远程访问

    3. 配置权限:允许读取

  • 使用数据包嗅探器确认与连接相关的所有流量都成功通过了防火墙。在 TCP 连接断开之前显示的最后一个数据包是来自服务器的回复,其中包含 MSRPC 标头中“拒绝访问”的 Windows 状态代码。

  • 测试将用户添加到“分布式 COM 用户”组和/或本地管理员组,然后重新启动服务器。这允许用户使用本地节点名称(FooDBN1、FooDBN2)从 SSMS 连接到 SSIS,但是在连接到集群网络名称(FooDB)时,他们仍然会收到“访问被拒绝”错误,这是他们的习惯使用,以及什么对我们的其他集群有效。

此外,我还没有发现在其他集群上更改这些组的成员身份是必要的。

在我检查过的其他集群上,我可以使用集群名称将 SSMS 连接到 SSIS,无需任何非默认配置。

我意识到这可能更适合 ServerFault,如果需要,可以迁移问题,但这也是一个 SQL Server 问题,我认为这里的用户之前可能更可能处理过它。

平台详情:

  • Windows Server 2008 R2 SP1
  • SQL Server 2008 R2 SP2
  • 具有单个 SQL Server 实例的 2 节点主动-被动群集 …

sql-server windows permissions clustering ssis

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

重置 IDENTITY 值

我有一个带有 IDENTITY 列的表。在开发时,我不时删除行并再次添加它们。但是 IDENTITY 值总是不断增加并且当我再次添加它们时并没有从 1 开始。现在我的 id 从 68 -> 92 开始,这会导致我的代码崩溃。

如何重置 IDENTITY 值?

sql-server auto-increment alter-table identity ddl

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

在调用数据库上下文中执行的中央存储过程

我正在使用该sys.dm_db_index_physical_stats视图开发定制的维护解决方案。我目前从存储过程中引用它。现在,当该存储过程在我的一个数据库上运行时,它会执行我想要它做的事情并拉下有关任何数据库的所有记录的列表。当我将它放在不同的数据库上时,它会拉下与该数据库相关的所有记录的列表。

例如(底部的代码):

  • 针对数据库 6 运行的查询显示了数据库 1-10 的 [请求] 信息。
  • 针对数据库 3 运行的查询仅显示数据库 3 的 [请求] 信息。

我希望这个过程专门针对数据库 3 的原因是因为我更愿意将所有维护对象保留在同一个数据库中。我希望这项工作位于维护数据库中,并像在该应用程序数据库中一样工作。

代码:

ALTER PROCEDURE [dbo].[GetFragStats] 
    @databaseName   NVARCHAR(64) = NULL
    ,@tableName     NVARCHAR(64) = NULL
    ,@indexID       INT          = NULL
    ,@partNumber    INT          = NULL
    ,@Mode          NVARCHAR(64) = 'DETAILED'
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @databaseID INT, @tableID INT

    IF @databaseName IS NOT NULL
        AND @databaseName NOT IN ('tempdb','ReportServerTempDB')
    BEGIN
        SET @databaseID = DB_ID(@databaseName)
    END

    IF @tableName IS NOT NULL
    BEGIN
        SET @tableID = …
Run Code Online (Sandbox Code Playgroud)

index sql-server-2008 sql-server stored-procedures maintenance

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

使用 WITH REPLACE 还原备份时出现错误 3154

我的计算机上安装了 SQL 2012 SP1。我做了一个数据库的备份test.bak

我有一个test2同名的数据库,但数据发生了变化。

我想test.bak通过test2数据库恢复。

我总是收到错误:

错误 3154:备份集包含现有数据库以外的数据库的备份。

我试过:

  1. 我右键单击 test2 -> Restore database -> From device

    我选择test.bak并检查了With Replace但我收到错误。

  2. 然后我尝试右键单击 test2 -> Restore file and filegroups

    我选择test.bak并检查了With Replace但我收到错误。

我可以删除旧数据库,然后使用正确的名称恢复备份,但是当我使用 SQL 2008 时,恢复现有数据库没有问题。

好像是因为我用的是SQL2012,所以经常出现这个错误!

sql-server backup restore sql-server-2012

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

一次将多个数据库从 C: 移动到 D:

我的 SQL Server 2008 R2 有 323 个数据库,在我的 C: 驱动器上消耗了大约 14 GB,这是一个快速的 SSD。

因为我想回收 C: 驱动器上的一些空间,所以我想将它们移动到我的 D: 驱动器。

我找到了这篇 MSDN 文章,但这似乎是只移动一个数据库的过程。

是否有自动方式或脚本一次移动我的所有数据库?

sql-server sql-server-2008-r2 alter-database

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

DBCC CHECKDB 无法修复的损坏:索引视图包含不是由视图定义生成的行

TL;DR:我在索引视图中有一个无法修复的损坏。以下是详细信息:


跑步

DBCC CHECKDB([DbName]) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS

在我的数据库之一上产生以下错误:

消息 8907,级别 16,状态 1,第 1 行 空间索引、XML 索引或索引视图“ViewName”(对象 ID 784109934)包含不是由视图定义生成的行。这不一定表示此数据库中的数据存在完整性问题。(……)

CHECKDB 在表“ViewName”中发现 0 个分配错误和 1 个一致性错误。

repair_rebuild 是最低修复级别 (...)。

我确实理解此消息表明索引视图“ViewName”的物化数据与基础查询生成的数据不同。但是,手动验证数据不会出现任何差异:

SELECT * FROM ViewName WITH (NOEXPAND)
EXCEPT
SELECT ...
from T1 WITH (FORCESCAN)
join T2 on ...

SELECT ...
from T1 WITH (FORCESCAN)
join T2 on ...
EXCEPT
SELECT * FROM ViewName WITH (NOEXPAND)
Run Code Online (Sandbox Code Playgroud)

NOEXPAND用于强制在 上使用(唯一)索引ViewNameFORCESCAN用于防止索引视图匹配发生。执行计划确认这两种措施都有效。

这里没有返回任何行,这意味着两个表是相同的。(只有整数和 guid 列,排序规则不起作用)。

无法通过在视图上重新创建索引或运行DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS …

sql-server materialized-view corruption dbcc-checkdb

17
推荐指数
2
解决办法
2217
查看次数

由于潜在的数据丢失,无法转换该值

首先让我澄清一下,这不是一个重复的问题,也不是一个潜在的重复问题。我已经尝试对 StackOverflow 和 DBA Stack Exchange 上已经存在的这个问题的每一个变体实施每一个答案,但没有任何运气。

过去两天我一直在努力解决这个问题(每天大约工作 7 小时),即使在谷歌搜索这个问题之后,似乎没有其他人遇到我的问题的完全相同的变体。

我想做什么?

在 SSIS 中,我试图从 CSV 文件中读取数据,并将其中的行插入到 OLE DB 数据库中。为此,我进行了有史以来最简单的设置,如下所示。

  1. Flat File Source - 读取 CSV 行。
  2. Derived Column - 目前什么都不做(它只是为了试验)。
  3. Data Conversion - 目前什么都不做(它只是为了试验)。
  4. OLE DB Destination - 将行存储在数据库中。

当我尝试运行它时,它停止在我的OLE DB 目标处执行并显示以下错误消息。

输入“OLE DB 目标输入”(51) 上的输入列“数量”(187) 出错。返回的列状态为:“由于潜在的数据丢失,无法转换该值。”。

失败 ( Amount)的列当前的类型是DT_STR。这似乎是我现在最相信的类型。

我尝试了什么?

  • 我已尝试在Flat File Connection失败的列上使用“建议类型”功能。这使得它推荐Single byte signed int数据类型。
    • 停在我的平面文件源
    • 错误数据转换失败。列“金额”的数据转换返回了状态值 2 和状态文本“由于潜在的数据丢失,无法转换该值。”。
  • 我试过使用 Derived Column …

sql-server-2008 sql-server ssis windows-server

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

SQL Server 2012 将备份还原到新的数据库名称

我似乎记得,在 2008 年,您可以通过更改还原向导中“目标数据库”字段中的名称,将备份还原到数据库的新副本。它将创建一个全新的数据库,它是还原到您想要的时间点的原始数据库的副本。我一生都没有想出如何让 SQL 2012 做到这一点。

现在,我明白(感谢 Aaron Bertrand)这并没有真正改变,而且 2012 年实际上让我更明显地意识到,这个策略首先是一个坏主意!

所以,我需要做的是:通过使用现有数据库“MyDB”的备份文件,创建一个新数据库“MyDB_Copy”。我们有每晚完整备份 (.bak) 和每 15 分钟的 TLog (.trn)。我根本不希望现有的“MyDB”受到影响/触及,因为它是“活的”。

在从主完整备份文件创建 MyDB_Copy 之后,我需要恢复几十个 TLog 备份以使其及时到达某个时间点。

sql-server sql-server-2012

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

为什么顶级数据库平台中没有无符号整数类型?

数据库通常是非常可定制的,具有不同的数据类型和自定义长度。

这让我感到惊讶,因为我试图寻找语法来使用unsigned int它们在 PostgreSQL 和 MS SQL Server 中都不可用的类型。MySQL 和 Oracle 似乎都可以。

这对他们来说似乎是一个明显的遗漏 - 下一个最佳性能选项是 long/bigint,(8 字节整数),但可能完全没有必要!有谁知道为什么他们会选择不包含本机 unsigned int 支持?

postgresql sql-server datatypes

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