我在 sqlskills.com 上使用此博客作为练习在事务日志备份中查找相关 LSN 以进行时间点恢复的指南。
备份事务日志后,我尝试使用以下命令读取它:
SELECT COUNT(*) FROM fn_dump_dblog (
NULL, NULL, 'DISK', 1, 'D:\TEMP\test_tlog2.bak',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server sql-server-2008-r2 restore transaction-log
我已经使用下面的查询来获取运行 SQL Server 的历史查询,但它没有给我整个历史,它只返回几乎每小时运行近 1/2 的查询。我想在一周前运行查询。有什么解决办法吗?
SELECT dest.text, deqs.last_execution_time
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE dest.text NOT LIKE '%dest.text%'
order by deqs.last_execution_time desc
Run Code Online (Sandbox Code Playgroud) 谁能建议我如何检查具有相同数据的多行?
例如
我有 2 行具有以下值:
Cola Colb Colc
TYPE_APPLE 123 abc
Colb Colb Colc
TYPE_APPLE 123 abc
Run Code Online (Sandbox Code Playgroud)
我想编写一个 SQL 查询,它不会选择包含与上述相同数据的多行数据。我应该如何编写查询?
我在一个数据库中有 50 多个表。
我不想在数据库中的每个表上使用以下 SQL。
select * from {table_name}
Run Code Online (Sandbox Code Playgroud)
那么,是否可以使用 sql 显示同一数据库中每个表的前 10 条记录?
这是 IT 资产的库存数据库。所使用的模型经过修整,以专注于手头的问题。使用 SQL Server 2008。感谢您抽出时间阅读并提供您可以提供的任何输入。
我的设计包括一个Device表格,其中包含可以输入库存的各种设备。每个设备都有一个布尔标志,CanNetwork表明设备是否具有网络能力,例如,对于大多数计算机CanNetwork = true,对于硬盘驱动器CanNetwork = false;有些打印机是真的,有些是假的。你明白了。
该CanNetwork字段确定创建库存记录时与网络相关的信息是否相关。
我的第一个设计在表上使用索引Device.DeviceID并Device.CanNetwork在外键约束中使用Asset。

NetworkStatus在此设置中,该表如下所示:
+----------------------------------------------------------------------+
| NetworkStatusID | NetworkStatus | NetworkStatusDescription |
|----------------------------------------------------------------------|
| 1 | Connected | Device connected to network. |
| 2 | Not Connected | Device not connected to network. |
| 3 | Do Not Connect | Do not connect device to network. |
+----------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
我在Asset …
也许重复,但我相信我的情况有点不同。从我在 SQL Server Central 上得到的这篇文章的答案之一,它也很方便,但不是完全相同的场景:继承数据库时要做的 9 件事
几周前开始了一份新工作。我应该担任 BI 分析师和 SQL 开发人员。但就在第一次任务中,大家注意到一般来说一切都需要很长时间才能执行。问第一天指导我的人,我的主管你可以说,他告诉我他们知道数据库是一团糟。问我是否可以看一看可以做些什么,得到了肯定的回答。
所以我开始深入研究,使用几个非常方便的脚本,例如:
正如他们告诉我的那样,我发现一团糟。例如,blitzindex 过程返回近 2000 行,其中包含大量重复索引、NC 索引,包括表中的所有列、大量堆表、非常宽的索引等等。至于备份,几个星期以来一直没有完成,询问它,IT 人员只是每晚将数据库复制到不同的服务器。几个数据库超过 100Gb,其他几个也接近这个大小。每张桌子的统计数据每天都会更新。在不太大的表(只有几百万行)上,有些报告需要一个多小时才能完成。等等。
作为测试,我花了几天时间调整几个大表以及使用它们的不同过程和查询。使用分析器准备基线。然后做了一些更改并再次运行测试查询。正如预期的那样,一个现在需要大约 8 分钟的报告在大约 1 分钟内运行,而其他几个查询现在也只用了不到一半的时间。所有这些更改都是在测试服务器上完成的,我们还有一个报告服务器和一个生产服务器。
考虑到我应该是一名 BI 和 sql 开发人员,在办公室拥有有限的新权限,而不是 DBA。为了应对这种情况,您还建议我采取哪些其他措施?有一个指定的 DBA,但似乎只是一个做一些 dba 任务的 sql 开发人员。有 DBA,但他们告诉我他大约在半年前离开了。我应该忘记这些问题吗?或者作为一个大量使用数据库的人,我必须指出问题并提出解决方案?有人遇到过同样的情况吗?
编辑
谢谢大家的评论和回答。我发这个问题已经一个月了。所以现在我可以指出更准确的问题。
我相信索引是主要问题之一,但完全禁止删除索引,至少目前是这样。即使存在具有多个相同索引的关键情况,例如在其中一个主表上,大约有 3000 万行并且还在增长,也有 3 个 NC 索引,其中包含 7 个索引列并包括所有列。我可以在非常严格的监督下创建索引,但仅此而已。
有几个禁用的索引,它们会影响 CRUD 操作的性能吗?
“优步观点”综合症。在另一个视图中的另一个视图中有很多视图。关于这一点的一些建议?
许多 sp 在 SMSS …
我收到了来自外部来源的数据集,其中包含多个位掩码字段作为 varchars。它们的长度低至 3,长至 21 个值。我需要能够使用 AND 或 OR 逻辑基于这些字段运行 SELECT 查询。
使用计算字段,我只是将位转换为整数值,我可以通过使用简单的 WHERE rowvalue = requestvalue 轻松找到与 AND 查询匹配的行,但 OR 逻辑需要使用按位 & 才能找到匹配记录。
鉴于我需要处理其中的几个列并从数亿条记录中进行选择,我觉得在执行按位和操作来过滤我的 SELECT 结果时会产生巨大的性能损失。
我从搜索中找到了这个答案,看起来它可能符合我的需求,但我需要澄清一下它是如何实现的。
这是否像创建具有所有可能搜索条件的查找表一样简单?
使用 (a & b) 的 3 位示例(编辑:按位操作错误)
001,001
001,011
001,101
001,111
010,010
010,011
010,110
011,011
011,111
etc
Run Code Online (Sandbox Code Playgroud)
作者提到它最初是违反直觉的,但我不禁觉得我对解决方案的解释不正确,因为这会给我一个可能有数十亿行的查找表。
对我上面链接的答案的任何澄清或其他可以保留现有数据库的建议表示赞赏。
编辑:使用小数据的更具体示例。
四个标志,HasHouse、HasCar、HasCat、HasDog,0000 是没有,1111 是全部。
可以翻转任意数量的标志,从全部到无,并且必须过滤选择匹配所有(使用精确值比较)或至少 1(使用按位 &)的结果。
为每个位掩码添加一个计算列是可以的,但是为超过 100 位的每个位添加一列,再加上如何插入/更新数据是我试图寻找替代解决方案的原因。
所以我有一张不断增长的桌子。大多数查询只针对最近的数据,比如一个月前的数据。我想这是常见问题,但我不知道如何解决。
我愿意更改设计,或者 MsSql 中是否有解决此问题的机制。由于数据库正在生产中并且难以复制,因此我尝试不同解决方案的选择有限。
CREATE TABLE [dbo].[mydata](
[ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Code] [varchar](20) NOT NULL, -- index1 UNIQUE NONCLUSTERED INDEX
[Data2] [varchar](20) NULL,
[Data3] [nvarchar](50) NOT NULL,
... bunch of DATA around 5kb
[Time_1] [datetime] NULL, -- time created, -- index2 NONCLUSTERED INDEX
[Time_2] [datetime] NULL, -- time finished ( usualy within few days ) -- index3 NONCLUSTERED INDEX
[Status] [int] NOT NULL, -- active
[Modid] [timestamp] NOT NULL
)
Run Code Online (Sandbox Code Playgroud) 在安装了 MS SQL Server 2008 的服务器上,我们使用 SQL Server 代理来安排大量 SSIS 包,所有这些包全天都有唯一的时间表。
有时,服务器需要重新启动(修补等)。右键单击 SQL Server 代理并选择“停止”是否安全?SSIS 包不是那么好构建,如果它们在某些东西中间停止,数据可能会损坏。
那么,停止 SQL Server 代理是否意味着作业被“杀死”,或者只是为了从那一刻起不再安排更多的作业运行?
当我将我的包作为 SQL 服务器代理作业执行时,出现以下错误。
它是在 SQL Server 2008 实例上运行的 SSIS 2008 包。我的包裹安全性是 DontSaveSensitive。
我什至不知道如何开始修复这个错误。
我应该先去哪里检查?
Date a value of time
Log Job History (MyJob)
Step ID 1
Server PCTSQL004
Job Name MyJob
Step Name Job_1
Duration 00:00:00
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
Executed as user: CS\DmcSysManager. The process could not be created for step 1 of job 0x63BB5A86DB23F947866D2A806BE4CC6B (reason: A required privilege is not held by the client). …Run Code Online (Sandbox Code Playgroud)