April 2007

You are currently browsing the monthly archive for April 2007.

Давно уже, ещё с версии 6.5, была замечена эта команда. Назначение её в том, что она выводит ряд групп системных метаданных, относящихся к указанному параметром имени или идентификатору базы данных. Например, в листинге (который включается специальным флагом трассировки) Вам могут встретиться такие абривеатуры: DBT (DB Table) и FCB (File Control Block).
Многие из выводимых метаданных понятны сами по себе, некоторые не так очевидны…
Вызова команды следующий:

DBCC TRACEON (3604) – разрешает вывод на консоль GO DBCC DBTABLE (model) – вывзов команды для базы model GO

Вот результат вызова для SQL Server 2005:

Выполнение DBCC завершено. Если DBCC выдает сообщения об ошибках, обратитесь к системному администратору. DBTABLES: DBTABLE @0x40338040 dbt_dbid = 3 dbt_dbname = model dbt_cmptlevel = 90 dbt_crtime = 2003-04-08 09:13:36.390 dbt_dbdes = 0x00000000 dbt_protstamp = 92134265 dbt_cryptostamp = 92134265 dbt_nextid = 2073058421 dbt_dbname = model dbt_stat = 0x10000 dbt_stat2 = 0x8 dbt_relstat = 0x41000000 dbt_maxDbTimestamp = 2000 dbt_dbTimestamp = 2000 database version = 611 dbt_repltrans = -2081099653 dbt_replcount = 0 dbt_replrate = 0.000000 dbt_repllatency = 0.000000 dbt_dbMirroring = 0x00000000 dbt_dbMirroringState = 0x0 m_DbmHistoryCount = 1 m_HasMirroringStarted = 0x0 Mirror History = Entry 0(0x0), State 0x0, Caller 0x020FDE21 distbackuplsn = (0:0:0) distlastlsn = (0:0:0) replbeginlsn = (0:0:0) replnextlsn = (0:0:0) dbt_category = 0 RecoveryUnit 3:0, @0x403383D8 m_StartupState = Available m_CurrentState = Online m_DesiredState = Online m_OnDiskVersion = 611 m_CommitLsnTickCount = 4701392268739739648 m_CommitLsn = 0:0:0 0x(0:0:0) m_RecoveryMode = FullyLogged m_CkptState.cps_pagesOutstanding = 0 m_IsFinishedStarting = 0 m_IsReadOnly = 0 m_IsShuttingDown = 0 m_MayHaveDeferred = 0 m_IsCkptReqPending = 0 m_IsOutOfSpace = 0 m_StartupThread = 0x00000000 m_RollbackThread = 0x00000000 m_StartupTick = 92134265 FCB @0x03920040 fcb_hdl = 0x000007B0 fcb_dbid = 3 fcb_fileid = 1 fcb_filepath = C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\model.mdf fcb_lname = modeldev m_status = 2 m_size = 280 m_maxSize = 4294967295 m_minSize = 64 m_preShrinkSize = 0 m_maxPreShrinkSize = 0 m_allocSize = 280 m_growth = 128 m_perf = 0 m_FormattedSectorSize = 4096 m_ActualSectorSize = 512 m_lastLongIOWaitWarning = 0 m_numOfLongIOsSinceLastWarning = 0 FCB @0x039207E8 fcb_hdl = 0x000007BC fcb_dbid = 3 fcb_fileid = 2 fcb_filepath = C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\modellog.ldf fcb_lname = modellog m_status = 1048642 m_size = 128 m_maxSize = 4294967295 m_minSize = 64 m_preShrinkSize = 0 m_maxPreShrinkSize = 0 m_allocSize = 128 m_growth = 10 m_perf = 0 m_FormattedSectorSize = 4096 m_ActualSectorSize = 512 m_lastLongIOWaitWarning = 0 m_numOfLongIOsSinceLastWarning = 0 LogMgr @0x038DC680 m_spaceReserved = 0 m_criticalSpaceReserved = 0 m_logState = 2 m_spaceLeft = 786432 m_noOfAllocBlks = 1 m_noFreeFiles = 3 m_nextLSN = 19:448:1 0x(13:1c0:1) m_flushLSN = 19:448:1 0x(13:1c0:1) m_lastBlkSize = 4096 m_lastLSN = 19:440:1 0x(13:1b8:1) m_spaceSinceLastCkpt = 0 m_rowsSinceLastCkpt = 0 m_tickCountLastCkpt = 92135859 m_ioMesgOutstanding = 0 m_totalPendingWrites = 0 m_totalPendingBytes = 0 m_totalLogSize = 1040384 m_totalMinSize = 524288 m_maxSpaceUsed = 2207744 LogTruncMgr @0x40338450 m_replLSN = 0:0:0 0x(0:0:0) m_ckptLSN = 19:432:1 0x(13:1b0:1) m_oldActXact = 0:0:0 0x(0:0:0) m_backupLSN = 0:0:0 0x(0:0:0) m_oldestBackupXactLSN = 0:0:0 0x(0:0:0) m_dbMirroringLSN = 0:0:0 0x(0:0:0) m_private = 0 m_disableList = EMPTY m_freeList = EMPTY XdesMgr @0x403384F0 m_activeCount = 0 Выполнение DBCC завершено. Если DBCC выдает сообщения об ошибках, обратитесь к системному администратору.

Вот результат вызова для SQL Server 2000:

DBCC execution completed. If DBCC printed error messages, contact your system administrator. DBTABLES: ——— DBTABLE @0x42D96038 ——————- dbt_dbid = 3 dbt_dbname = model dbt_spid = 0 dbt_cmptlevel = 80 dbt_crtime = 2000-08-06 01:40:52.437 dbt_dbdes = 0x02443140 dbt_protstamp = 258703 dbt_nextid = 1977058079 dbt_dbname = model dbt_stat = 0x40000010 dbt_stat2 = 0x100000 dbt_relstat = 0x41000000 dbt_maxDbTimestamp = 200 dbt_dbTimestamp = 200 dbt_dbVersion = 539 dbt_repltrans = 568952 dbt_replcount = 0 dbt_replrate = 0.000000 dbt_repllatency = 0.000000 dbt_logmgr = 0x42D58EC0 dbt_BackupManager = 0x42D64620 distbackuplsn = (0:0:0) distlastlsn = (0:0:0) replbeginlsn = (0:0:0) replnextlsn = (0:0:0) dbt_category = 0 dbt_dbccLogging = 0 dbt_dbccLoggingFailure = 0 dbccLoggingActive = 0 nonLoggedAllocActive = 0 WorkfileExtents = 0 FCB @0x42D3B538 ————— fcb_hdl = 0x394 fcb_dbid = 3 fcb_fileid = 1 fcb_name = C:\Program Files\Microsoft SQL Server\MSSQL$MEDIAPROD03\data\model.m df fcb_lname = modeldev fcb_nwrt = 0 fcb_nread = 0 m_status = 51380482 m_size = 96 m_maxSize = 4294967295 m_minSize = 64 m_allocSize = 96 m_growth = 10 m_perf = 0 m_FormattedSectorSize = 512 m_ActualSectorSize = 512 FCB @0x42D43338 ————— fcb_hdl = 0x3d8 fcb_dbid = 3 fcb_fileid = 2 fcb_name = C:\Program Files\Microsoft SQL Server\MSSQL$MEDIAPROD03\data\modello g.ldf fcb_lname = modellog fcb_nwrt = 0 fcb_nread = 0 m_status = 51380546 m_size = 64 m_maxSize = 4294967295 m_minSize = 64 m_allocSize = 64 m_growth = 10 m_perf = 0 m_FormattedSectorSize = 512 m_ActualSectorSize = 512 LogMgr @0x42D58EC0 —————— m_spaceReserved = 0 m_spaceSinceLastCkpt = 1536 m_rowsSinceLastCkpt = 4 m_tickCountLastCkpt = 434759565 m_logStatus = 0 m_nextLSN = (4:1ba:1) m_logState = 2 m_spaceLeft = 281600 m_lastLSN = (4:1b9:1) m_lastBlkSize = 512 m_ioMesgOutstanding = 0 m_flushLSN = (4:1ba:1) m_totalPendingIO = 0 m_noOfAllocBlks = 1 m_noFreeFiles = 1 m_totalLogSize = 516096 m_totalMinSize = 524288 m_maxSpaceUsed = 569856 LogTruncMgr @0x42D96224 ———————– m_replLSN = (0:0:0) m_ckptLSN = (4:1b5:2) m_oldActXact = (4:1b5:1) m_backupLSN = (4:1ba:1) m_oldestBackupXactLSN = (0:0:0) m_disableList ————- m_freeList ———- m_startLSN 0 = (4:1b5:1) DBCC execution completed. If DBCC printed error messages, contact your system administrator.


Выяснилась ещё одна недокументрованная особенность, позволяющая обойти требование по монопольному использованию базы данных, во время её проверки командой DBCC CHECKDB. Если не переводит базу в однопользовательский режим доступа, в ответ на попытку проверки базы выводятся показанные ниже сообщения:

Msg 5030, Level 16, State 12, Line 1
Базу данных нельзя заблокировать монопольно для выполнения операции.

Msg 7926, Level 16, State 1, Line 1
Инструкция проверки отменена. База данных не может быть проверена, так как не удалось создать ее моментальный снимок, и база данных или таблица не может быть заблокирована.
Более подробно о том, когда возникает данная ситуация и какие существуют обходные пути, см. электронную документацию. См. также предыдущие сообщения об ошибках.

 

Вы можете выполнипть проверку не самой базы, а предварительно созданного её моментального снимка, что равноценно. Вот пример:

CREATE DATABASE ИМЯ_СНИМКА_ВАШЕЙ_БАЗЫ ON ( NAME = 'СУЩЕСТВУЮЩЕЕ_ЛОГИЧЕСКОЕ_ИМЯ_ФАЙЛА', FILENAME = 'Z:\MSSQL\DATA\ ИМЯ_СНИМКА_ВАШЕЙ_БАЗЫ.SNP' ) AS SNAPSHOT OF ИМЯ_ВАШЕЙ_БАЗЫ GO DBCC CHECKDB ('ИМЯ_СНИМКА_ВАШЕЙ_БАЗЫ') GO


Выбор места для размещения файлов моментального снимка базы данных нужно делать с осторожностью, учитывая все особенности и ограничения применяемых в технологии моментальных снимков базы разреженных файлов.