现代 SQL Server 中有两种不同的页面验证选项;被撕裂页面检测和校验和。无当然也是一种选择。
我相信校验和是在 SQL Server 2005 中引入的,并且从先前版本升级或恢复数据库将保持其先前的页面验证方法。即没有隐式升级。
所涉及的问题是我们有一个生产数据库,该数据库使用 SQL Server 2000 投入生产,此后转移到 SQL Server 2008 R2 服务器。当我一直期望它是Torn Page Detection时,页面验证被设置为None。回顾这段时间,我们似乎认为 DB 最初是在 SQL Server 7.0 中开发的,然后迁移到 SQL Server 2000,这可以解释观察到的结果。
我想知道撕裂页面检测和校验和何时成为 SQL Server 的一项功能,以及它们在迁移或升级到新版本时的表现。
编辑:总结一些答案:
撕裂页面检测进入 SQL Server 的某些日期存在一些差异。
链接 1:http
: //support.microsoft.com/kb/230785
链接 2:http : //technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx
第一个链接指示 SQL 7.0 和第二个 SQL2000。我倾向于相信 SQL7.0 的建议,并且链接 2 对它在 SQL7.0 中默认关闭而在 SQL2000 中默认打开感到困惑。
通常,在将数据库从生产服务器还原到非生产服务器时,我将使用 WITH REPLACE 选项,因为当我忘记收到有关未备份尾日志的错误时。
根据 MSDN我确实应该在恢复之前备份我的尾部日志:
如果数据库处于联机状态并且您计划对数据库执行还原操作,请先备份日志的尾部。为避免联机数据库出现错误,您必须使用 BACKUP Transact-SQL 语句的 ... WITH NORECOVERY 选项。
我这样做的方式有哪些危险或缺点?为什么首先备份尾部日志对我有利?
我正在使用 SQL Server 2008R2,但我认为这个查询将与大多数较新版本的 SQL Server 相关,因此最初没有将其标记为这样。
我想知道在更改SQL Server 2008 R2盒子的IP地址之前是否有任何危险或相关预防措施。
我们使用 Windows Server 2008 R2 和 SQL Server 2008 R2 构建了一台虚拟 PC。这台机器的目的是运行一个作业来恢复备份文件(由不同的服务器复制),操作它,再次备份它,然后将它复制到其他服务器。我们已经在我们的测试/开发 DMZ 中运行了几次,现在正在考虑部署。
最简单的选择是重新 IP。服务器名称将保持不变。我的问题是一位同事建议这是不安全的(重新 ip 一个 SQL Server)。我的问题是
a) 对于我正在使用的操作系统和 SQL,这是真的吗?(赢得 2008 R2 和 SQL 2008 R2?)
b) 对于 OS 和/或 SQL 的任何其他组合是否如此?
c) 在准备过程中,我们有什么特别需要做的吗?
到目前为止,我的研究表明它会很好,但我比那些社交 MSDN 人员更信任 DBA StackExchange 的人。
http://www.sqlservercentral.com/Forums/Topic1164450-391-1.aspx
我可以强制用户的查询始终使用提示 NOLOCK 运行吗?例如他们输入
select * from customer
Run Code Online (Sandbox Code Playgroud)
但是在服务器上执行的是
select * from customer with (nolock)
Run Code Online (Sandbox Code Playgroud)
这个问题不是:
关于NOLOCK的各种优缺点,敬上。我知道它们是什么,这里不是讨论它们的地方。
在这个问题中:https : //stackoverflow.com/questions/18445825/how-to-know-status-of-currently-running-jobs
提出了这个答案:
SELECT sj.name
, sja.*
FROM msdb.dbo.sysjobactivity AS sja
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id
WHERE sja.start_execution_date IS NOT NULL
AND sja.stop_execution_date IS NULL
Run Code Online (Sandbox Code Playgroud)
但是,对于我的其中一台服务器,它有一个可追溯到 10 个月前的条目。查看 SQL 代理作业活动监视器显示没有正在运行的作业。查看 msdb..sysjobs 仅显示 3 个作业。谁能解释这个现象?
孤立行的 queued_date、stop_execution_date、job_history_id 和 next_scheduled_date 为 NULL。其余的值看起来合理。
我有一个使用 SQL Server 作为后端的 3rd 方应用程序。具体来说,我们在 SQL Server 2000、SQL Server 2008 和 SQL Server 2008R2 上都有它。任何解决方案都必须可供所有人使用,但只有一部分人的解决方案仍然值得关注。
该应用程序是定制的,不受支持,供应商不再存在。我想要做的是当它写入插入时有一个触发器来读取该插入并开始一个复杂的过程。但是,应用程序在 SQL 插入完成之前不会返回焦点,这意味着冗长的触发器将导致应用程序认为 SQL Server 没有响应并取消/回滚事务。
是否有任何类型的触发器会立即“释放”然后继续处理?或者也许我可以在 SQL Server 内部实现一些其他解决方案。
最近我正在阅读这篇博文:http : //blogs.msdn.com/b/sqlazure/archive/2010/05/05/10007304.aspx
其中包含此部分:
选择聚集索引
有几种选择聚集索引的策略;最简单和最好的方法之一是添加另一列数据类型为 datetime 的列,并将该列用于聚集索引。以下是您需要做的:
将列添加为数据类型日期时间
我通常称之为日期
将默认值设置为 GetDate()。
使其非空。
在向您插入数据之前,先在其上创建聚集索引。
我的问题是这是否会为日期创建两个相同的值?如果使用并行性,这个答案会改变吗?(假设从未指定值,总是来自 GetDate())
我相信我的假设是正确的,因为添加了幕后唯一标识符,这无关紧要,对吧?但反正我很感兴趣。
我是从 SQL2008R2 的角度提出问题,但如果答案对 7.0 以上的任何 SQL Server 版本有所不同,我会很感兴趣。
我的情况是我照顾一个带有基于 VB6 的前端和一个 SQL 后端的旧系统(好消息,正在开发替代品,但同时我需要保持这种状态)。现在该应用程序在十几个站点上使用,其中大多数在SQL2000上,一个在SQL2008上,一个在SQL2008R2(均为标准)上。更改版本/版本将是一个很大的问题。
SQL2008R2 上托管的站点碰巧也是最大的站点。我们现在有一个包含超过 20 亿行和 700GB 数据的表。这是一小部分列,其中一个是用于存储序列化 blob 数据的 256 个字符 varchar。现在,当人们尝试插入、删除和更新它(通过应用程序)时,用户偶尔会互相锁定。随着时间的推移,这种情况只会变得更糟。然而,下一个最大的是 SQL2000..
我需要缩小这张桌子的大小。我可以使用哪些方法或技术来实现这一目标?理想情况下,该技术将与 SQL2000 标准版兼容,因此我可以在所有站点上使用它。然而,仅仅修复 SQL2008R2 标准上最大的违规者就可以了。
该表确实有一个标识列,并且由于表定义由应用程序控制,因此无法更改(我提到这一点是因为我相信这排除了分区视图 - 应用程序插入、更新和删除行)。
我目前的想法是删除过去 X 个月过去的所有数据(占总数的 50%),并将其分配到不向用户或应用程序公开的表中。然后在应用程序中,我可以为用户提供一种方法来请求将数据项复制回,这将通过预定的作业(可能在一夜之间)完成。然而,这对我来说感觉很笨拙。
sql-server ×8
index ×1
insert ×1
msdb ×1
network ×1
partitioning ×1
restore ×1
tcpip ×1
trigger ×1