2016-07-29 4 views
-1

В SQL Server я знаю, что журнал транзакций - это место, где вы можете регистрировать транзакции, прежде чем они, наконец, попадут в файл DB (или MDF). Почему мы не можем напрямую атомарно записывать транзакции в файл DB, где в случае сбоя питания мы можем откат до последнего известного согласованного состояния.Зачем использовать журнал транзакций в качестве промежуточного этапа до записи в базу данных

+1

Любая достойная веб-статья о TLogs объяснит .... –

+0

Можете ли вы указать мне приличную статью в Интернете? –

+0

Не можете найти? –

ответ

0

Каждая база данных SQL Server имеет журнал транзакций, который регистрирует все транзакции и изменения базы данных, сделанные каждой транзакцией. Журнал транзакций является критическим компонентом базы данных.

Why cant we directly atomically write transactions to the DB file where 
in case of a power failure we can rollback to the last known consistent state. 

Это действительно происходит, но сначала в журнал транзакций, а затем, когда совершил, получил в файл мдф, если Откат, они не хранятся в мдф.

Управление/откат управляется приложением, подключенным к базе данных.

Если произошел сбой системы, вам понадобится этот журнал, чтобы вернуть базу данных в согласованное состояние.

В журнале транзакций хранится каждая транзакция, сделанная в базе данных SQL Server, за исключением некоторых, которые минимально регистрируются как BULK IMPORT или SELECT INTO.

Может ли база данных SQL Server работать без журнала транзакций? Нет, это невозможно из-за конструкции SQL Server.

Операции резервного копирования и восстановления SQL Server происходят в контексте модели восстановления базы данных.

Существует три модели восстановления: простой, полный и объемный.

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

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

для более подробной информации:

Recovery Models

The Transaction Log

-1

Написать вперед каротаж, который не является специфичным для SQL Server, используется в основном для повышения производительности.

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

Во-вторых, записи журнала транзакций не обязательно содержат все измененные блоки, а скорее различия между старыми и новыми записями. Ввод/вывод данных данных выполняется во всех блоках или даже в экстентах (группы блоков), поэтому изменение даже одного байта в записи потребует записи всего блока (объема) в файл данных, что значительно увеличит объем данных, переданных в каждая сделка.

В-третьих, журналы транзакций могут использоваться для воспроизведения изменений, внесенных в базу данных с момента предыдущей резервной копии, что позволяет восстановить базу данных в произвольный момент времени или после предыдущей резервной копии. Если вы записывали изменения непосредственно в файлы данных и вдруг потеряли эти файлы (например, из-за сбоя диска), единственным вариантом было бы восстановить состояние базы данных во время предыдущей резервной копии. Это, конечно, подразумевает, что ваши журналы транзакций находятся на отдельном устройстве и в идеале мультиплексируются.

+1

Использование TLogs, разумеется, не «используется в основном по соображениям производительности» - это механизм, гарантирующий согласованность. –

+0

@MitchWheat - согласованность может быть гарантирована без каких-либо дополнительных журналов, просто записывая каждое изменение на диск сразу, но это может привести к гибели производительности. – mustaccio

+0

каждое изменение записывается в TLog сразу: вы, похоже, не понимаете, как они работают. –

 Смежные вопросы

  • Нет связанных вопросов^_^