что такое dbcc opentran
Русские Блоги
Транзакция запроса SQL Server
Умышленно или неумышленно, если транзакция остается открытой в базе данных, она блокирует другие процессы от работы с измененными данными (функция ACID). Точно так же длительные транзакции могут также привести к заполнению журнала. Длительные транзакции могут сохранять журнал транзакций активным из файла виртуального журнала, содержащего первую запись журнала транзакций, а открытые транзакции будут приводить к увеличению журнала (или даже к достижению физического предела), пока транзакция не будет зафиксирована Или откат.
(1) Запрос транзакций через DBCC OPENTRAN
1.1 Введение в DBCC OPENTRAN
С помощью оператора DBCC OPENTRAN вы можете идентифицировать идентификатор пользователя владельца транзакции, поэтому вы можете неявно отслеживать источник транзакции, чтобы получить более упорядоченное завершение (зафиксируйте его вместо отката). Эта команда также возвращает самую раннюю активную транзакцию и самые ранние распределенные и нераспределенные реплицированные транзакции в указанной базе данных. Если нет активных транзакций, вместо данных уровня сеанса отображается информационное сообщение.
DBCC OPENTRAN очень полезен для потерянных соединений (открытых в базе данных, но отключенных от приложения или клиента), и может помочь нам найти отсутствующий COMMIT Или ROLLBACK транзакция.
1.2 Пример использования DBCC OPENTRAN
DBCC OPENTRAN синтаксис
Пример использования
A. Returning the oldest active transaction
【Результаты】
В результате отображается соответствующая информация из самого раннего журнала активности, включая идентификатор процесса сервера (SPID), идентификатор пользователя (UID) и время начала транзакции. Ключом является SPID и время начала.
B. Specifying the WITH TABLERESULTS option
The following example loads the results of the DBCC OPENTRAN command into a temporary table.
(2) Запрос транзакций через DMV (представление динамического управления)
1. sys.dm_tran_session_transactions: предоставляет информацию, связанную с представлением, и содержит информацию о конкретном сеансе.
2. sys.dm_tran_active_transactions: возвращает информацию о транзакциях, которые активны на уровне экземпляра.
3. sys.dm_tran_database_transactions: возвращает информацию о транзакции на уровне базы данных.
Для длительных транзакций наиболее важные столбцы, на которые следует обратить внимание, включают: время первой записи журнала, текущее состояние транзакции (database_transaction_state) и порядковый номер журнала (LSN), который начал запись в журнале транзакций.
Экземпляр, база данных и сеанс
пример
Это незафиксированная транзакция, выполненная в другом окне запроса следующим образом:
DBCC OPENTRAN (Transact-SQL)
Инструкция DBCC OPENTRAN помогает определить активные транзакции, которые могут препятствовать усечению журнала. Инструкция DBCC OPENTRAN отображает сведения о самой старой активной транзакции и о самых старых реплицированных транзакциях, распределенных и нераспределенных, если таковые имеются в журнале транзакций указанной базы данных. Результаты отображаются только при наличии активной транзакции, которая приведена в журнале, или в случае, если в базе данных имеются сведения о репликации. Если в журнале нет активных транзакций, отображается информационное сообщение.
DBCC OPENTRAN не поддерживается для издателей, отличных от издателей SQL Server.
Синтаксические обозначения в Transact-SQL
Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
database_name | database_id| 0
Имя или идентификатор базы данных, для которой необходимо отобразить сведения о самой давней транзакции. Если значение не указано или указано значение 0, используется текущая база данных. Имена баз данных должны соответствовать правилам идентификаторов.
TABLERESULTS
Указывает, что результаты должны выводиться в табличном формате, чтобы их можно было загрузить в таблицу. Используйте этот параметр для создания таблицы результатов, которые могут быть вставлены в таблицу для сравнений. Если этот аргумент не указан, результаты форматируются так, чтобы они были более удобочитаемыми.
NO_INFOMSGS
Подавляет вывод всех информационных сообщений.
Remarks
Используйте инструкцию DBCC OPENTRAN, чтобы определить, существует ли открытая транзакция в журнале транзакций. При выполнении инструкции BACKUP LOG только неактивная часть журнала может быть усечена; открытая транзакция может помешать полному усечению журнала транзакций. Для определения открытой транзакции получите идентификатор системного процесса, выполнив инструкцию sp_who.
Результирующие наборы
Инструкция DBCC OPENTRAN возвращает следующий результирующий набор, если нет открытых транзакций:
Разрешения
Примеры
A. Возвращение самой старой активной транзакции
В следующем примере сведения о транзакциях извлекаются для текущей базы данных. Полученные результаты могут отличаться от приведенных ниже.
Результат «UID (идентификатор пользователя)» не имеет смысла и будет удален в следующих версиях SQL Server.
Б. Указание параметра WITH TABLERESULTS
В следующем примере результаты команды DBCC OPENTRAN загружаются во временную таблицу.
DBCC (Transact-SQL)
Язык Transact-SQL предоставляет инструкции DBCC, которые выступают в качестве консольных команд базы данных для SQL Server.
Инструкции консольных команд базы данных группируются по следующим категориям.
Категория команды | Выполнение |
---|---|
Обслуживание | Обслуживание задач в базе данных, индексе или в файловой группе. |
Разное | Вспомогательные задачи, например установка флага трассировки или удаление из памяти библиотеки DLL. |
Informational | Задачи, собирающие и отображающие разные типы сведений. |
Проверка | Проверочные операции в базе данных, таблице, индексе, каталоге, в файловой группе или распределение страниц базы данных. |
Команды DBCC принимают входные параметры и возвращают значения. Все команды DBCC могут принимать в качестве параметров как литералы в Юникоде, так и литералы в двухбайтовой кодировке.
Использование внутреннего моментального снимка базы данных в командах DBCC
Следующие команды DBCC выполняют операции с внутренним моментальным снимком базы данных, предназначенным только для чтения, который создает компонент Компонент Database Engine. Тем самым предотвращаются проблемы блокировки и параллелизма при выполнении этих команд. Дополнительные сведения см. в разделе Моментальные снимки базы данных (SQL Server).
При выполнении одной из этих команд DBCC компонент Компонент Database Engine создает моментальный снимок базы данных и приводит ее в согласованное состояние на уровне транзакций. Затем команда DBCC выполняет проверку этого моментального снимка. После завершения команды DBCC этот моментальный снимок удаляется.
Иногда внутренний моментальный снимок базы данных не требуется или его невозможно создать. В этом случае команда DBCC выполняется в отношении реальной базы данных. Если база данных находится в режиме в сети, команда DBCC использует блокировку таблиц для обеспечения согласованности проверяемых объектов. Это поведение то же самое, как если бы был указан параметр WITH TABLOCK.
Внутренний моментальный снимок базы данных не создается, если команда DBCC выполняется:
Команды DBCC используют блокировки таблиц, а не внутренние моментальные снимки базы данных, если выполняются:
Для запуска команды DBCC CHECKALLOC или эквивалентной части DBCC CHECKDB с параметром WITH TABLOCK требуется X-блокировка базы данных. Такую блокировку нельзя устанавливать для базы данных tempdb или master: это может привести к ошибкам во всех остальных базах данных.
Команда DBCC CHECKDB вызывает ошибку при выполнении в базе данных master, если невозможно создать внутренний моментальный снимок базы данных.
Формирование отчета о состоянии команд DBCC
В представлении каталога sys.dm_exec_requests содержатся сведения о ходе выполнения и текущем этапе выполнения команд DBCC CHECKDB, CHECKFILEGROUP и CHECKTABLE. В столбце percent_complete указывается процент выполнения команды, а в столбце command отображается текущий этап ее выполнения.
Определение единицы хода выполнения зависит от текущего этапа выполнения команды DBCC. Иногда отчет о состоянии формируется на уровне гранулярности страницы базы данных, на других этапах — на уровне гранулярности одной базы данных или исправления распределения пространства. В следующей таблице представлены все этапы выполнения и уровень гранулярности, на котором команда формирует отчет о состоянии.
Этап выполнения | Описание | Уровень гранулярности отчетов о состоянии |
---|---|---|
DBCC TABLE CHECK | Во время этого этапа проверяется логическая и физическая согласованность объектов в базе данных. | Отчет о состоянии сформирован на уровне страниц базы данных. Значение отчета о состоянии обновляется через каждые 1000 проверенных страниц базы данных. |
DBCC TABLE REPAIR | Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне объектов. | Отчет о состоянии сформирован на уровне отдельных исправлений. Счетчик обновляется для каждой завершенной операции исправления. |
DBCC ALLOC CHECK | Во время этого этапа проверяются структуры распределения. Примечание. Те же проверки выполняет команда DBCC CHECKALLOC. | О состоянии не сообщается |
DBCC ALLOC REPAIR | Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне распределения пространства. | О состоянии не сообщается. |
DBCC SYS CHECK | Во время этого этапа проверяются системные таблицы базы данных. | Отчет о состоянии сформирован на уровне страниц базы данных. Значение отчета о состоянии обновляется через каждую 1 000 проверенных страниц базы данных. |
DBCC SYS REPAIR | Во время этого этапа выполняются исправления базы данных, если указывается параметр REPAIR_FAST, REPAIR_REBUILD или REPAIR_ALLOW_DATA_LOSS и имеются ошибки на уровне системных таблиц. | Отчет о состоянии сформирован на уровне отдельных исправлений. Счетчик обновляется для каждой завершенной операции исправления. |
DBCC SSB CHECK | Во время этого этапа проверяются объекты компонента SQL Server Service Broker. Примечание. Этот этап не выполняется при выполнении инструкции DBCC CHECKTABLE. | О состоянии не сообщается. |
DBCC CHECKCATALOG | Во время этого этапа проверяется согласованность каталогов базы данных. Примечание. Этот этап не выполняется при выполнении инструкции DBCC CHECKTABLE. | О состоянии не сообщается. |
DBCC IVIEW CHECK | Во время этого этапа проверяется логическая согласованность всех индексированных представлений базы данных. | Отчет о состоянии сформирован на уровне отдельных представлений баз данных. |
Информационные инструкции
Инструкции проверки
Инструкции обслуживания
Вспомогательные инструкции
DBCC OPENTRAN (Transact-SQL)
DBCC OPENTRAN helps to identify active transactions that may be preventing log truncation. DBCC OPENTRAN displays information about the oldest active transaction and the oldest distributed and nondistributed replicated transactions, if any, within the transaction log of the specified database. Results are displayed only if there is an active transaction that exists in the log or if the database contains replication information. An informational message is displayed if there are no active transactions in the log.
DBCC OPENTRAN is not supported for non- SQL Server Publishers.
Transact-SQL Syntax Conventions
Syntax
To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.
Arguments
database_name | database_id| 0
Is the name or ID of the database for which to display the oldest transaction information. If not specified, or if 0 is specified, the current database is used. Database names must comply with the rules for identifiers.
TABLERESULTS
Specifies the results in a tabular format that can be loaded into a table. Use this option to create a table of results that can be inserted into a table for comparisons. When this option is not specified, results are formatted for readability.
NO_INFOMSGS
Suppresses all informational messages.
Remarks
Use DBCC OPENTRAN to determine whether an open transaction exists within the transaction log. When you use the BACKUP LOG statement, only the inactive part of the log can be truncated; an open transaction can prevent the log from truncating completely. To identify an open transaction, use sp_who to obtain the system process ID.
Result Sets
DBCC OPENTRAN returns the following result set when there are no open transactions:
Permissions
Requires membership in the sysadmin fixed server role or the db_owner fixed database role.
Examples
A. Returning the oldest active transaction
The following example obtains transaction information for the current database. Results may vary.
Here is the result set.
The «UID (user ID)» result is meaningless and will be removed in a future version of SQL Server.
B. Specifying the WITH TABLERESULTS option
The following example loads the results of the DBCC OPENTRAN command into a temporary table.
DBCC (Transact-SQL)
The Transact-SQL programming language provides DBCC statements that act as Database Console Commands for SQL Server.
Database Console Command statements are grouped into the following categories.
Command category | Perform |
---|---|
Maintenance | Maintenance tasks on a database, index, or filegroup. |
Miscellaneous | Miscellaneous tasks such as enabling trace flags or removing a DLL from memory. |
Informational | Tasks that gather and display various types of information. |
Validation | Validation operations on a database, table, index, catalog, filegroup, or allocation of database pages. |
DBCC commands take input parameters and return values. All DBCC command parameters can accept both Unicode and DBCS literals.
DBCC Internal Database Snapshot Usage
The following DBCC commands operate on an internal read-only database snapshot that the Database Engine creates. This prevents blocking and concurrency problems when these commands are executed. For more information, see Database Snapshots (SQL Server).
When you execute one of these DBCC commands, the Database Engine creates a database snapshot and brings it to a transactionally consistent state. The DBCC command then runs the checks against this snapshot. After the DBCC command is completed, this snapshot is dropped.
Sometimes an internal database snapshot is not required or cannot be created. When this occurs, the DBCC command executes against the actual database. If the database is online, the DBCC command uses table-locking to ensure the consistency of the objects that it is checking. This behavior is the same as if the WITH TABLOCK option were specified.
An internal database snapshot is not created when a DBCC command is executed:
The DBCC commands use table locks instead of the internal database snapshots when the command is executed against the following:
Trying to run DBCC CHECKALLOC, or the equivalent part of DBCC CHECKDB, by using the WITH TABLOCK option requires a database X lock. This database lock cannot be set on tempdb or master and will probably fail on all other databases.
DBCC CHECKDB fails when it is run against master if an internal database snapshot cannot be created.
Progress Reporting for DBCC Commands
The sys.dm_exec_requests catalog view contains information about the progress and the current phase of execution of the DBCC CHECKDB, CHECKFILEGROUP, and CHECKTABLE commands. The percent_complete column indicates the percentage complete of the command, and the command column reports the current phase of the execution of the command.
The definition of a unit of progress depends on the current phase of execution of the DBCC command. Sometimes progress is reported at the granularity of a database page, in other phases it is reported at the granularity of a single database or allocation repair. The following table describes each phase of execution, and the granularity at which the command reports progress.
Execution phase | Description | Progress reporting granularity |
---|---|---|
DBCC TABLE CHECK | The logical and physical consistency of the objects in the database is checked during this phase. | Progress reported at the database page level. The progress reporting value is updated for each 1000 database pages that are checked. |
DBCC TABLE REPAIR | Database repairs are performed during this phase if REPAIR_FAST, REPAIR_REBUILD, or REPAIR_ALLOW_DATA_LOSS is specified, and there are object errors that must be repaired. | Progress reported at the individual repair level. The counter is updated for each repair that is completed. |
DBCC ALLOC CHECK | Allocation structures in the database are checked during this phase. Note: DBCC CHECKALLOC performs the same checks. | Progress is not reported |
DBCC ALLOC REPAIR | Database repairs are performed during this phase if REPAIR_FAST, REPAIR_REBUILD, or REPAIR_ALLOW_DATA_LOSS is specified, and there are allocation errors that must be repaired. | Progress is not reported. |
DBCC SYS CHECK | Database system tables are checked during this phase. | Progress reported at the database page level. The progress reporting value is updated for every 1000 database pages that are checked. |
DBCC SYS REPAIR | Database repairs are performed during this phase if REPAIR_FAST, REPAIR_REBUILD, or REPAIR_ALLOW_DATA_LOSS is specified, and there are system table errors that must be repaired. | Progress reported at the individual repair level. The counter is updated for each repair that is completed. |
DBCC SSB CHECK | SQL Server Service Broker objects are checked during this phase. Note: This phase is not executed when DBCC CHECKTABLE is executed. | Progress is not reported. |
DBCC CHECKCATALOG | The consistency of database catalogs are checked during this phase. Note: This phase is not executed when DBCC CHECKTABLE is executed. | Progress is not reported. |
DBCC IVIEW CHECK | The logical consistency of any indexed views present in the database is checked during this phase. | Progress reported at the level of the individual database view that is being checked. |