标签: sql-server-2008

惊人的重新索引工作是一个好策略吗?

我继承了一台带有 35 个数据库的服务器和一个重新索引所有数据库上所有表的工作(使用sp_MSForEachTable)。它需要 14 多个小时才能完成,现在正在阻止其他进程。

我的问题是这样的:

在一周内错开重新索引是一个可以接受的策略吗?比如说,每晚 5 分贝?

谢谢。

sql-server-2008 sql-server index-tuning

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

SQL Server 2005/2008 标准中的在线重新索引

故事:每周一次,我们运行一个特殊的维护计划,其中涉及重新索引 2 个关键表,它们之间有大约 600 万条记录。我们使用 SQL Server 2005 标准版。

问题:在此重新索引期间(大约 15 分钟的操作),我们无法将数据插入表中,并且我们的客户端没有数据。

有人告诉我,SQL Server 2008 Enterprise 有一个“在线重新索引”,它在较低版本的 SQL Server 中不存在,可以解决我们的问题。

但是,我刚刚在我们的维护计划选项(SQL 2005 标准)中找到了以下选项:

SQL 2005 在线重新索引

我的问题:这是否执行与 2008 Enterprise 相同的“在线重新索引”?启用此选项的影响(性能方面)是什么?我是否几乎被不必要地吸引购买了 2008 Enterprise 许可证?

index sql-server-2005 sql-server-2008

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

错误 229(权限被拒绝)的即时电子邮件警报

出于一些原因,我希望将所有权限被拒绝的错误(编号 229)通过电子邮件发送给我。检查 master.sys.messages 显示此错误的 is_event_logged 为 0。因此,排除使用依赖 SQL Server 错误日志的 SQL Server 代理错误警报(我已经测试过 - 我没有收到警报)。

我想我会查看 mssqlsystemresource 并查看 sys.messages 的视图定义,想也许我可以为相关消息更新 is_event_logged。但是这个视图从 获取系统错误消息OpenRowset(TABLE SYSERRORS),所以这是不行的。

有没有一种相当简单的方法可以让我立即(或在 30 秒内)通过电子邮件将所有 229 个错误发送给我,而不会损害服务器性能?电子邮件之间 60 秒的冷却时间也可能是一个好主意。

sql-server-2008 sql-server

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

需要分号来结束语句的 T-SQL 工具

我有什么可能是一个相当不寻常的问题。是否有一个T-SQL工具需要用分号来终止语句?我知道在SQL Server 2008 R1 中不需要使用分号,这是我要连接的,但实际上我想被迫使用它来运行更新查询。我相信我们都知道在 sql pad 中间编写如下查询的危险,然后突出显示它并运行它(不幸的是,这是我经常做的事情):

UPDATE dbo.Customers
SET ZipCode = '40223'
WHERE Name = 'Bob Loblaw'
Run Code Online (Sandbox Code Playgroud)

...因为您只需错选一次您的文本即可核对所有客户的邮政编码!

所以,理想情况下,我想继续在SQL Server Management Studio中完成我的大部分 sql 工作,但有一个单独的垫打开(在需要分号的工具中)并且只允许自己在那里编写数据操作查询。这会让我非常安心,因为我知道我永远不会错过选择我常用的更新查询。如果我这样做了,它就不会运行,因为它没有分号。

sql-server-2008

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

MS SQL Server 2008 R2 中的捷克语排序规则 Czech_CI_AI 的问题

我在捷克语中对重音不敏感的搜索有以下问题。我的数据库设置为Czech_CI_AI整理。对于某些变音符号系统正常工作(即I),但对于某些不正常(即R)。在我的数据库中有几条'DVORA*'记录:

SELECT contact_name 
FROM   CONTCTSM1 
WHERE  CONTACT_NAME LIKE 'DVO%' 
Run Code Online (Sandbox Code Playgroud)

结果:

DVO?Á?KOVÁ,
IVETA DVO?Á?KOVÁ,
JI?INA DVO?ÁK

sql-server-2008 t-sql

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

可序列化隔离级别对 DDL 语句有什么影响?

我正在使用 Red Gate SQL Compare 根据 SVN 和数据库之间的差异创建发布脚本。这导致脚本包含一堆表和过程更改,并且工作正常。然而,有一件事让我感到困惑,它使用了可序列化的事务隔离级别。

我知道它对 dml 语句的作用,但我不确定它对 ddl 意味着什么。有人可以启发我,也许举个例子吗?

sql-server-2008 sql-server ddl isolation-level

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

如何从根驱动器运行 bcp 实用程序?

我的机器没有安装完整的 SQL Server。我的机器上安装了以下可分发的软件包:-

  1. Microsoft® SQL Server® 2008 R2 命令行实用程序
  2. Microsoft® SQL Server® 2008 R2 本机客户端

我有一个运行 bcp 实用程序的批处理文件。如果我从 bcp.exe 所在的文件夹(...tools\binn)运行这个批处理文件,它就可以工作。

我的转储问题是是否有任何方法可以仅从 c:\ 驱动器运行 bcp 实用程序。现在,如果它从 c:\ drive 运行,它会说:-

bcp 不被识别为内部或外部命令,..

sql-server-2008 bcp

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

插入/更新死锁

使用 SQL Server 2008 R2:

我目前正在尝试追踪我们遇到的死锁问题的原因。不知道该往哪里转。这是设置。

TABLE Scores:
id INT IDENTITY(1,1),
first_name VARCHAR(50),
last_name VARCHAR(50),
player_id VARCHAR(50),
score INT

PRIMARY KEY/CLUSTERED INDEX: 
id

NON-CLUSTERED INDEX:
first_name, last_name INCLUDES id, player_id, score
Run Code Online (Sandbox Code Playgroud)

多线程应用程序处理消息,然后为每条消息调用两个存储过程之一。

如果应用程序尚未处理用户,它将调用一个存储过程,将一行插入到表中。

如果应用程序已经处理了用户,它会更新first_namelast_namescores、 中的任何一个或全部,first_name并且last_name player_id不会改变。

每个 表中只有一行player_id

应用程序处理消息的线程是根据 player_id 选择的,因此两个线程不会同时处理同一个玩家的消息。

INSERT 和 UPDATE 语句正在使用该WITH (ROWLOCK)指令。

这是问题:

该进程导致死锁,线程 1 锁定主聚集索引,线程 2 锁定非聚集索引。

我不明白为什么会发生锁 - UPDATE 和 INSERT 语句正在使用行锁,并且已经过测试并证明线程没有访问相同的行。

我能做些什么来解决这个问题?

注意事项:

必须存在两个存储过程,一个是更新,一个是插入。尽管我很想切换到单个 MERGE,但这不会发生。:/

sql-server-2008 sql-server deadlock sql-server-2008-r2 locking

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

SSIS SQL Server 2008 错误

我只想知道如何使用 SSIS 将数据从源导入到 SQL Server 2008 数据库。

我有一个简单的txt文件(实际上它来自这个博客:http : //blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert- load-comma-delimited-file-into-sql-server/ )

1,James,Smith,19750101
2,Meggie,Smith,19790122
3,Robert,Smith,20071101
4,Alex,Smith,20040202
Run Code Online (Sandbox Code Playgroud)

我在 SQL Server 中创建了一个新表:

CREATE TABLE Test
(ID INT,
FirstName VARCHAR(50),
LastName VARCHAR(50),
BirthDate SMALLDATETIME)
Run Code Online (Sandbox Code Playgroud)

我拖动了数据流任务,然后是平面文件源和 OLE DB 目标。

我创建了新的平面文件连接,选择文本文件,在高级选项卡中,有 4 列,因此我更改了它们的数据类型如下:

  • 第 0 列:两字节有符号整数 [DT_I2]
  • 第 1 列:String[DT-STR] - Outputcolumnwith :20
  • 第 2 列:String[DT-STR] - Outputcolumnwith :20
  • 第 3 列:精确的数据库时间戳 [DT_DBTIMESTAMP2]

然后,设置新的 OLB DE 连接,编辑它,在“表或视图的名称”下设置 [dbo].[Test] + 将每一列从输入映射到目标。

但是当我运行它时,出现了这些错误:

警告:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。Execution 方法成功,但引发的错误数 (4)
达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。 …

sql-server-2008 sql-server ssis

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

数据库像疯了一样增长 - 我该怎么办?

我有一个 Epicor 9 ERP 数据库,我最近负责(新工作)。服务器正在运行带有 SQL Server 2008 R2 64 位的 Server 2008 R2。主要生产数据库在 7 个月前(上线)从 16GB 开始,并稳步增长到 80GB+。他们确实安排了一项维护工作,在每个星期天晚上缩小所有数据库,限制为 50 MB,可用空间为 10%。

按照目前的增长速度,服务器的驱动器空间将在不到 90 天的时间内达到最大值,我将被迫升级服务器或将数据库移至 SAN。整体系统性能很差,系统很慢。

当我运行“顶级表的磁盘使用情况”报告时,我看到以下内容:

  • 记录数:115,117,737
  • 保留 (KB):83,609,584
  • 数据 (KB):81,867,248
  • 索引 (KB):52,263,296
  • 未使用 (KB) 1,742,336

我正在等待 Epicor 关于适当照顾和喂养他们的系统的回音,但索引似乎使用了大量的空间。如前所述,我最近才接管了这个系统,我正在努力尽快弄清楚。

任何帮助,将不胜感激。

编辑:警告任何阅读本文的人。删除了重复索引,如这里的答案中所述,由测试 Epicor 9 数据库完成。E9 显然以非标准方式使用索引。它有一个 Progress 层,用于优化 Progress 和 4GL(又名 ABL)代码的索引。我不能肯定地说这是导致问题的原因,但它似乎是最有可能的罪魁祸首。尝试登录 E9 测试会出现“需要运行 SQL 脚本”错误,并且数据库似乎卡在 ALTER 状态。

sql-server-2008

3
推荐指数
2
解决办法
1231
查看次数