我继承了一台带有 35 个数据库的服务器和一个重新索引所有数据库上所有表的工作(使用sp_MSForEachTable)。它需要 14 多个小时才能完成,现在正在阻止其他进程。
我的问题是这样的:
在一周内错开重新索引是一个可以接受的策略吗?比如说,每晚 5 分贝?
谢谢。
故事:每周一次,我们运行一个特殊的维护计划,其中涉及重新索引 2 个关键表,它们之间有大约 600 万条记录。我们使用 SQL Server 2005 标准版。
问题:在此重新索引期间(大约 15 分钟的操作),我们无法将数据插入表中,并且我们的客户端没有数据。
有人告诉我,SQL Server 2008 Enterprise 有一个“在线重新索引”,它在较低版本的 SQL Server 中不存在,可以解决我们的问题。
但是,我刚刚在我们的维护计划选项(SQL 2005 标准)中找到了以下选项:

我的问题:这是否执行与 2008 Enterprise 相同的“在线重新索引”?启用此选项的影响(性能方面)是什么?我是否几乎被不必要地吸引购买了 2008 Enterprise 许可证?
出于一些原因,我希望将所有权限被拒绝的错误(编号 229)通过电子邮件发送给我。检查 master.sys.messages 显示此错误的 is_event_logged 为 0。因此,排除使用依赖 SQL Server 错误日志的 SQL Server 代理错误警报(我已经测试过 - 我没有收到警报)。
我想我会查看 mssqlsystemresource 并查看 sys.messages 的视图定义,想也许我可以为相关消息更新 is_event_logged。但是这个视图从 获取系统错误消息OpenRowset(TABLE SYSERRORS),所以这是不行的。
有没有一种相当简单的方法可以让我立即(或在 30 秒内)通过电子邮件将所有 229 个错误发送给我,而不会损害服务器性能?电子邮件之间 60 秒的冷却时间也可能是一个好主意。
我有什么可能是一个相当不寻常的问题。是否有一个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 工作,但有一个单独的垫打开(在需要分号的工具中)并且只允许自己在那里编写数据操作查询。这会让我非常安心,因为我知道我永远不会错过选择我常用的更新查询。如果我这样做了,它就不会运行,因为它没有分号。
我在捷克语中对重音不敏感的搜索有以下问题。我的数据库设置为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
我正在使用 Red Gate SQL Compare 根据 SVN 和数据库之间的差异创建发布脚本。这导致脚本包含一堆表和过程更改,并且工作正常。然而,有一件事让我感到困惑,它使用了可序列化的事务隔离级别。
我知道它对 dml 语句的作用,但我不确定它对 ddl 意味着什么。有人可以启发我,也许举个例子吗?
我的机器没有安装完整的 SQL Server。我的机器上安装了以下可分发的软件包:-
我有一个运行 bcp 实用程序的批处理文件。如果我从 bcp.exe 所在的文件夹(...tools\binn)运行这个批处理文件,它就可以工作。
我的转储问题是是否有任何方法可以仅从 c:\ 驱动器运行 bcp 实用程序。现在,如果它从 c:\ drive 运行,它会说:-
bcp 不被识别为内部或外部命令,..
使用 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_name、last_name、scores、 中的任何一个或全部,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
我只想知道如何使用 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 列,因此我更改了它们的数据类型如下:
然后,设置新的 OLB DE 连接,编辑它,在“表或视图的名称”下设置 [dbo].[Test] + 将每一列从输入映射到目标。
但是当我运行它时,出现了这些错误:
警告:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。Execution 方法成功,但引发的错误数 (4)
达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。 …
我有一个 Epicor 9 ERP 数据库,我最近负责(新工作)。服务器正在运行带有 SQL Server 2008 R2 64 位的 Server 2008 R2。主要生产数据库在 7 个月前(上线)从 16GB 开始,并稳步增长到 80GB+。他们确实安排了一项维护工作,在每个星期天晚上缩小所有数据库,限制为 50 MB,可用空间为 10%。
按照目前的增长速度,服务器的驱动器空间将在不到 90 天的时间内达到最大值,我将被迫升级服务器或将数据库移至 SAN。整体系统性能很差,系统很慢。
当我运行“顶级表的磁盘使用情况”报告时,我看到以下内容:
我正在等待 Epicor 关于适当照顾和喂养他们的系统的回音,但索引似乎使用了大量的空间。如前所述,我最近才接管了这个系统,我正在努力尽快弄清楚。
任何帮助,将不胜感激。
编辑:警告任何阅读本文的人。删除了重复索引,如这里的答案中所述,由测试 Epicor 9 数据库完成。E9 显然以非标准方式使用索引。它有一个 Progress 层,用于优化 Progress 和 4GL(又名 ABL)代码的索引。我不能肯定地说这是导致问题的原因,但它似乎是最有可能的罪魁祸首。尝试登录 E9 测试会出现“需要运行 SQL 脚本”错误,并且数据库似乎卡在 ALTER 状态。
sql-server-2008 ×10
sql-server ×5
bcp ×1
ddl ×1
deadlock ×1
index ×1
index-tuning ×1
locking ×1
ssis ×1
t-sql ×1