名站网址导航为大家提供关于数据库教程相关的教程网站知识。
SQL Server误区30日谈 第13天 在SQL Server 2000兼容模式下不能
误区 #13.在SQL Server 2000兼容模式下不能使用DMV,错误,对于兼容模式已经存在了很多误解。80的兼容模式的网站数据库是否意味着能够附加或恢复到SQL Server 2000网站数据库?当然不是。这只是意味着一些T-SQL的语法,查询计划的行为以及一些其它方面和SQL,在SQL Server 2008中,您可以使用ALTER DATABASE SET COMPATIBILITY_LEVEL开始执行命令来改变兼容模式,对于SQL Server 2008之前的版本,则使用系统存,兼容模式对于网站数据库的实际版本毫无影响,网站数据库的实际版本会随着对于网站数据库的升级而升级,这个升级会阻止更新版本的网站数据库恢复或附加到之前的网站数据库,因为之前版本的实例无法理解新版本网站数据库的版本。假如如果想看详细内,在SQL Server 2005中设置为80兼容模式,貌似DMV就不能用了,运行下面具体相关代码创建测试网站数据库:,CREATE DATABASE DMVTest; GO USE DMVTest; GO CREATE TABLE t1 (c1 INT); CREATE CLUSTERED INDEX t1c1 on,EXEC sp_dbcmptlevel DMVTest, 80; GO,SELECT * FROM sys.dm_db_index_physical_stats ( DB_ID ('DMVTest'), -- database ID OBJECT_ID ('t1'), -,您会得到如下报错信息:,消息 102,级别 15,状态 1,第 3 行 '(' 附近有语法错误。,看上去这足以证明80兼容模式不支持DMV。但其实并不是那样。,编者:写到这里之后,我突然意识到我陷入了一个悖论。DMV在80兼容模式下是完全支持的,但不支持的是在80兼容模式下调用函数作为DMV的参数。,下面是一个可以在80兼容模式下使用函数作为DMV参数的技巧,不得不说是神来之笔。那就是在一个90以上兼容模式的网站数据库下额外调用80兼容模式下的网站数据库,看下面具体相关代码:,USE master SELECT * FROM sys.dm_db_index_physical_stats ( DB_ID ('DMVTest'), -- database ID OBJECT_I,虽然DMVTest网站数据库工作在80兼容模式下,但上述具体相关代码依然可用。,但是有一点值得注意的是,您一定要保证Object参数的正确,假如如果您仅仅让第二个参数还是OBJECT_ID ('t1'), 那么这个函数会尝试在Master网站数据库中找表t1,正常来说这就会返回NULL,,还有,sys.dm_db_index_physical_stats并不算是一个真正的DMV,而是一个在后台处理大量信息后返回相关信息的DMF,因此假如如果您以NULL作为参数返回所有的索引信息的话,那代价,还有一种在80兼容模式下使用DMV的相关方式是不再DMV中以函数作为参数,而是传变量进去,具体相关代码如下:,DECLARE @databaseID INT; DECLARE @objectID INT;,SELECT @databaseID = DB_ID ('DMVTest'); SELECT @objectID = OBJECT_ID ('t1');,SELECT * FROM sys.dm_db_index_physical_stats ( @dbid, -- database ID @objid, -- object ID NULL, -- i,嗯,又揭示了一个误区。
误区 #14.清除日志后会将相关的LSN填零初始化
错误
当日志网站网站文件在手动增长,自动增长和创建时都会进行填零初始化操作办法。但是请不要把这个过程和定期清除日志的过程搞混。日志截断仅仅意味着将一个或多个VLF标记为不活动以便被重复使用。在日志清除的过程中,并没有任何日志被清除或是填0。“清除日志”和”截断日志”意思是一样的,但都属于用词不当,因为在这个过程中日志的大小不会有任何改变。
您可以在我的博客中看到有关日志网站网站文件填零初始化的博文:Search Engine Q&A #24: Why can't the transaction log use instant initialization?。以及我发布在TechNet杂志的文章:Understanding Logging and Recovery in SQL Server。
您可以通过跟踪标记3004来查看SQL Server对日志网站网站文件进行填零初始化的过程。将这个追踪标记打开当日志网站网站文件增长时,您就可以在SQL Server日志中看到相关信息,下面是测试具体相关代码:
复制具体相关代码 具体相关代码如下:
DBCC TRACEON (3004, 3605);
GO
-- Create database and put in SIMPLE recovery model so the log will clear on checkpoint
CREATE DATABASE LogClearTest ON PRIMARY (
NAME = 'LogClearTest_data',
FILENAME = N'D:\SQLskills\LogClearTest_data.mdf')
LOG ON (
NAME = 'LogClearTest_log',
FILENAME = N'D:\SQLskills\LogClearTest_log.ldf',
SIZE = 20MB);
GO
-- Error log mark 1
ALTER DATABASE LogClearTest SET RECOVERY SIMPLE;
GO
USE LogClearTest;
GO
-- Create table and fill with 10MB - so 10MB in the log
CREATE TABLE t1 (c1 INT IDENTITY, c2 ChAR (8000) DEFAULT 'a');
GO
INSERT INTO t1 DEFAULT VALUES;
GO 1280
-- Clear the log
ChECKPOINT;
GO
-- Error log mark 2
ALTER DATABASE LogClearTest SET RECOVERY SIMPLE;
GO
相应的,在日志中您可以看到:
复制具体相关代码 具体相关代码如下:
2010-04-13 13:20:27.55 spid53 DBCC TRACEON 3004, server process ID (SPID) 53. This is an informational message only; no user action is required.
2010-04-13 13:20:27.55 spid53 DBCC TRACEON 3605, server process ID (SPID) 53. This is an informational message only; no user action is required.
2010-04-13 13:20:27.63 spid53 Zeroing D:\SQLskills\LogClearTest_log.ldf from page 0 to 2560 (0x0 to 0x1400000)
2010-04-13 13:20:28.01 spid53 Zeroing completed on D:\SQLskills\LogClearTest_log.ldf
2010-04-13 13:20:28.11 spid53 Starting up database 'LogClearTest'.
2010-04-13 13:20:28.12 spid53 FixupLogTail() zeroing D:\SQLskills\LogClearTest_log.ldf from 0x5000 to 0x6000.
2010-04-13 13:20:28.12 spid53 Zeroing D:\SQLskills\LogClearTest_log.ldf from page 3 to 63 (0x6000 to 0x7e000)
2010-04-13 13:20:28.14 spid53 Zeroing completed on D:\SQLskills\LogClearTest_log.ldf
2010-04-13 13:20:28.16 spid53 Setting database option RECOVERY to SIMPLE for database LogClearTest.
2010-04-13 13:20:29.49 spid53 Setting database option RECOVERY to SIMPLE for database LogClearTest.
上面测试具体相关代码中ALTER DATABASE是作为日志中这部分的开始和结束标记。在两个Alter Database开始执行命令中的CheckPoint并不会引起填0操作办法。假如如果您需要进一步验证这点,在Checkpoint之前和之后分别使用DBCC SQLPERF (LOGSPACE)来查看日志网站网站文件的大小,您会发现虽然日志网站网站文件大小没有变,但是日志的使用空间百分比会大大减少。
(下图是译者测试的结果):
关于数据库教程相关的教程网站知识今天我们就说到这里了,希望可以帮到大家。