我似乎记得,在 2008 年,您可以通过更改还原向导中“目标数据库”字段中的名称,将备份还原到数据库的新副本。它将创建一个全新的数据库,它是还原到您想要的时间点的原始数据库的副本。我一生都没有想出如何让 SQL 2012 做到这一点。
现在,我明白(感谢 Aaron Bertrand)这并没有真正改变,而且 2012 年实际上让我更明显地意识到,这个策略首先是一个坏主意!
所以,我需要做的是:通过使用现有数据库“MyDB”的备份文件,创建一个新数据库“MyDB_Copy”。我们有每晚完整备份 (.bak) 和每 15 分钟的 TLog (.trn)。我根本不希望现有的“MyDB”受到影响/触及,因为它是“活的”。
在从主完整备份文件创建 MyDB_Copy 之后,我需要恢复几十个 TLog 备份以使其及时到达某个时间点。
这是一个奇怪的情况,但我希望有人有答案。
在一些性能故障排除期间,我们按照sp_BlitzIndex. 第二天我们检查了它的使用情况,它显示0 次读取(0 次扫描/搜索,0 次单例查找),因此我们禁用了它。
就在下一分钟,我们收到了与我们在添加 INDEX 时首先尝试检查和解决的应用程序缓慢(性能问题)相同的投诉。
现在,我知道理论上,这听起来纯属巧合。INDEX 是可证明的,可衡量的,NOT USED。禁用它不应该导致查询性能下降。但它几乎TOO巧合。
所以我的问题很简单,就是这样:
是否有可能,一个未使用的索引(来自 DMV / sp_BlitzIndex)的使用统计数据显示没有使用,仍然以某种方式帮助受影响表上的查询性能?
database-design sql-server index-tuning nonclustered-index sql-server-2016
我这里有一个有趣的情况。我们基本上是在尝试将一些 SQL Server 基础结构迁移到新硬件,其中一个机器(单实例、2 节点集群)正在运行 2008R2。其他的是 2012 年和 2014 年,但那些没有出现这个问题。
有一个应用程序连接到名为“OLD-SQL”的服务器;假设 IP 是 11.22.33.44。这是运行默认实例 SQL 2008R2 和 Windows Server 2008R2 的旧 SQL 框的名称。目前无法更改应用程序的连接设置/配置/字符串/任何内容。
设置用来替换那个的新 SQL 框被命名为“NEW-SQL”;假设它的 IP 是 11.22.33.55。还运行 SQL 2008R2(相同的 SQL 版本)。操作系统是 Windows Server 2012 R2(较新的操作系统)。两个盒子实际上都是集群实例,每个都有 2 个节点(老式的故障转移集群,没什么特别的)。
因此,为了帮助迁移,目前,出于测试/QA 目的,我们已完成以下操作: 1. 在客户端 QA 机器上设置 Hosts 文件以将名称“OLD-SQL”重定向到 11.22.33.55(新服务器)。2.在NEW-SQL服务器上创建一个SQL Server别名(使用SQL Config Mgr.),命名为“OLD-SQL”,指向自身,端口1433,协议TCP/IP。
为了测试它,我尝试通过 SSMS 连接;我输入“OLD-SQL”作为要连接的服务器名称。它因臭名昭著的“SSPI 上下文”错误(https://support.microsoft.com/en-us/kb/811889)而失败。正在测试的应用程序也会发生同样的事情。来自 cmd-line 的 Ping 解析得很好——它知道“OLD-SQL”根据 Hosts 文件解析为新的 IP 11.22.33.55。
现在,真正把扳手扔进东西里。我回到服务器 NEW-SQL,并添加另一个别名,参数相同但命名为“OLD-SQL2”。此名称在域网络中是唯一的。我回到我的盒子,将我的主机文件更改为从该名称指向 IP (11.22.33.55),然后转到 SSMS 并尝试再次连接。 这有效!
我通过执行 a 来验证我是否在“正确的服务器”上 …