我的数据库文件增长非常快(设计者不是我,只是每周报告使 7 GB 增长)。最后,我的磁盘空间不足。以及计数的未报告周数。
我有一些选择可以执行,但需要您的建议:
缩小数据库(缩小是否为操作系统提供了空间?)
从外部磁盘或网络存储分离和附加 DB。(SQL Server 2005 是否支持网络存储?)
将 RAID 配置从 1 更改为 5 以将磁盘大小增加一倍。(这是最安全的选择,但也有 RAID 配置更改的危险。)
感谢这些关于我的问题的伟大而有用的答案。我检查了日志文件,99% 的空间未使用。所以,我缩小了它。由于 DB 仅在我们需要一些报告时使用(按时间请求,并不总是需要访问 db )我认为性能对我来说不是问题。
我们已经完成了 4 节点 SQL Server 2005 集群的设置。我们使用 Windows 2008 R2 作为底层操作系统。
我们正在寻找关于我们可以执行的一组测试的建议来测试 SQL 实例的故障转移?
我们使用的是 SQL Server 2005。在我们的数据库中,一些行被删除;如何找到系统(主机名/IP 地址)、程序以及删除日期和时间?
我正在编写一些动态 SQL 来识别,也许如果我觉得够疯狂,可以自动将我的NONCLUSTERED索引转换为CLUSTERED索引。
ORDER BY 1,2,3 DESC;下面的 SQL 中的这一行旨在在DROP INDEX...语句之前输出语句ALTER TABLE...,以便先删除 NONCLUSTERED 索引,然后添加一个 CLUSTERED 索引。我必须在第DESC3 列之后添加DROP,然后是 ALTER。这是倒退,除非我失去它!
DECLARE @Server nvarchar(max);
DECLARE @Database nvarchar(max);
DECLARE @cmd nvarchar(max);
DECLARE @IndexType int;
SET @IndexType = 2; /* 1 is CLUSTERED, 2 is NONCLUSTERED */
SET @Server = 'MyServer';
SET @Database = 'MyDatabase';
SET @cmd = '
DECLARE @cmd nvarchar(max);
SET @cmd = ''
SET NOCOUNT ON;
DECLARE @IndexInfo TABLE (TableName nvarchar(255), IndexName …Run Code Online (Sandbox Code Playgroud) 我在生产服务器上有几个数百 GB 的数据库,每天都有成千上万的事务通过它们运行。
几乎所有这些数据库都使用 SQL Server 镜像进行镜像。
尽管我们已经仔细规划了物理日志文件大小以匹配预期的日志文件活动;偶尔会出现问题,日志需要增长到超出我们预测的最大值。我们已将所有日志文件设置为增长 8192MB,但是当数据库面临增长日志文件的压力时,它有时只会以非常小的块增长日志,从而在某些情况下创建数十万个虚拟日志文件 (VLF) .
当我们的一个生产数据库意外恢复超过 200,000 个 VLF 时,我开始理解保持低 VLF 数量的重要性。恢复需要 20 多个小时;在此期间,我们的部分业务无法运营。
我需要一个可以监控服务器上所有数据库的虚拟日志文件数量的解决方案,如果任何特定日志文件的 VLF 数量超过给定数量,则发送警报电子邮件。
我知道DBCC LOGINFO;返回 VLF 列表,但是,我不想手动运行它。
我创建了以下 SQL 语句,该语句创建了一个列出数据库以及 VLF 数量的漂亮表,但是,我不知道如何将其放入 SQL 代理作业中,以便在任何数据库的数量超过“x”时向我们的团队发送电子邮件的 VLF。
DECLARE @cmd_per_database_prefix nvarchar(max);
DECLARE @cmd_per_database nvarchar(max);
DECLARE @database_name nvarchar(255);
SET @cmd_per_database = '';
SET @cmd_per_database_prefix =
'
SET NOCOUNT ON;
DECLARE @vlf_count_table TABLE (database_name nvarchar(255), vlf_count int);
DECLARE @params nvarchar(max);
DECLARE @db_name nvarchar(255);
DECLARE @vlf_count int;
SET @params = ''@db_name nvarchar(255) OUTPUT, @vlf_count …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个查询,该查询仅根据 UTC 日期时间字段的本地日期部分对记录进行分组。
例如,如果我的表包含10/19/2012 2:00:00,那么它应该被分组为10/18/2012,因为我的本地时间是美国东部时间 (-5h) 并且我只对字段的日期部分感兴趣。
我知道我DateAdd(day, DateDiff(day, 0, MyDate), 0)只能从日期时间字段中获取日期部分,我可以DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)用来将 UTC 日期时间转换为本地日期时间。
但是将两者结合起来严重冒犯了我。
在 SQL Server 2005 中,是否有比这更好的方法来获取 UTC 日期时间字段的日期部分,转换为本地时间?
SELECT DateAdd(day, DateDiff(day, 0, DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)), 0)
, Count(*)
FROM MyTable
GROUP BY DateAdd(day, DateDiff(day, 0, DateAdd(minute, DateDiff(minute, GetUtcDate(), GetDate()), MyUtcDate)), 0)
Run Code Online (Sandbox Code Playgroud) 最近几个月我发生了三起事件,其中表中的记录已被删除或整个表中的值更新为零。我们有一个由四人组成的团队,他们拥有权限并负责更新本可以执行此操作的数据库。令人失望的是,没有人承认进行了这些更改。
展望未来,我希望能够记录这些交易。我想知道其他人用什么来跟踪这些变化?他们使用跟踪更改的软件还是创建存储过程或跟踪文件?如果有人在他们的设施中设置了这个,我想知道他们使用什么。跟踪文件确实有我想要的信息,例如登录名机器号和 sql 语句,因此如果我提前设置它们,它将为我提供信息。
当这些更改发生时,我有数据库和事务日志的副本。我能用这些旧文件做些什么来帮助追查罪魁祸首吗?预先感谢任何回复的人。我们使用的是 SQL Server 2005。
几个星期以来,我一直在解决一个问题,我的 SQL Server 查询的性能在使用几天后会下降。此外,每隔几天,我的应用程序的 ODBCSQLExecute()调用就不会返回查询。
手动重建索引(在 SQL Server Management Studio 中)“修复”了这两个问题。
这是更多信息;
我很难理解为什么相同的查询在一段时间内可以正常工作,但随后开始减慢 waaay ?
任何想法将不胜感激。
我像这样运行 SQL Server 2005 的批量复制程序 BCP:
bcp mydb.dbo.mytbl in myfile.blk -c -S mysvr -U mylogin -P mypass
Run Code Online (Sandbox Code Playgroud)
它运行并产生如下输出:
Starting copy...
1000 rows sent to SQL Server. Total sent: 1000
...
1000 rows sent to SQL Server. Total sent: 55000
Run Code Online (Sandbox Code Playgroud)
但后来它停止了。光标没有返回提示,我没有收到“...行已复制”。信息。
我尝试查询目标表,我已经可以看到我想要导入的行。
我要终止控制台吗?会回滚吗?
有什么方法可以强制 SQL Server 永远不要将订阅标记为非活动状态?
当出现连接问题并且我不想每次都重新初始化订阅时,它会偶尔发生。
请注意,我不是在谈论订阅被标记为过期......就像不活动一样。
我们将保留设置为 0(无限)。我宁愿拥有一个大型分发数据库,也不愿通过 WAN 为订阅者重新初始化 15GB 的数据库。无论如何,这里真正的问题是,它们有时会在短短几个小时内被标记为不活动……或者有时是几天……这似乎是零星的。有什么方法可以告诉为什么 SQL 决定将它们标记为非活动状态?
sql-server-2005 ×10
sql-server ×6
audit ×1
bulkcopy ×1
clustering ×1
dml ×1
dynamic-sql ×1
index ×1
maintenance ×1
performance ×1
replication ×1
windows ×1