「完全」復旧モードに設定されているデータベースがあります。データベースには、トランザクションログのバックアップが作成されたことは示されません。 _backup_finish_date
_がログにnullを表示します。
データベースのバックアップを毎晩フル(コピーのみ)します。バックアップはトランザクションログを切り捨てているように見えます。トランザクションログは約40GBです。バックアップ前は、75%使用されています。バックアップを実行すると、1%しか使用されません。 DBCC SQLPERF(logspace)
を使用します。
_sys.databases
_は、_recovery_model_desc FULL
_、_log_reuse_wait 0
_、_log_reuse_wait_desc NOTHING
_を示しています。
別のサーバーに同じデータベースのデータベースのコピーがありますが、トランザクションログが切り捨てられません。ちょうど成長しています。
コピーの_sys.database
_は、FULL
、_2
_、_LOG_BACKUP
_を示しています。これは私が期待することです。
私のデータベースのコピーは、物事が機能する方法であることを理解しています。しかし、ログがなぜ/どのように本番環境で切り捨てられるのか知りたいのですが。
ミラーリングなし、トランザクションログ配布なし。
既存の2つの回答のいずれかでコードを使用して、tログが取得されていないことを確認することをお勧めします。ユーザーのアクセス権によっては、誰かがあなたの知らないうちにバックアップを取っている可能性があります。
Pseudo-Simple SQL Server Recovery Model について話しているDenis Rubashkinによるコメントとリンクがありました。本質的に、完全なリカバリを行っており、完全なバックアップを行ったことがない場合(またはその他の方法でLSNチェーンを破壊した場合)、SQLは回復する方法がないことを認識しており、tログを保存しません。
しかし、あなたの説明を考えると:
バックアップはトランザクションログを切り捨てているように見えます。トランザクションログは約40GBです。バックアップ前は、75%使用されています。バックアップを実行すると、1%しか使用されません。
上記の2つの可能性のいずれかが問題の原因であるとは思いません。
プロセスのある時点で、バックアップジョブがデータベースをSIMPLE
リカバリに設定していると思われます。これにより、tログがクリアされます。次に、データベースをFULL
リカバリに戻します。このシナリオでは、表示されている症状が発生します。
バックアップコードを確認します。SIMPLE
への変更とFULL
への変更が発生している場合は、何かを変更する必要があります。データベースを常にSIMPLE
リカバリ状態のままにするか、定期的なt-logバックアップを作成してください。どちらを選択するかは、回復の目的に応じて、ビジネス上の決定です。
T-logバックアップをとっていない場合、完全に回復する必要はありません。
編集質問の別の手がかりに気づきました。
データベースの夜間フル(コピーのみ)。
なぜFull (Copy Only)
バックアップを取っているのですか?これを行う唯一の理由は、単一のバックアップを作成していて、回復のために差分バックアップに依存しているときにバックアップチェーンを保持したいということです。 Copy-Only Backups を参照してください
この手がかりは、気づいていないフルバックアップ、差分バックアップ、およびt-logバックアップが発生していることを示唆しています。copy only
が差分を認識しており、バックアップチェーンを保持したかったため、夜間のバックアップジョブを書いた人が誰かを示唆しています。これが事実である場合、私はt-logが1日に数回取得されることを期待します。通常のシナリオはFullsが週に1回、Differentialsが他の6日間、そしてt-logが1日を通して定期的に行われます。
または、SIMPLE
に変更を加えてFULL
に戻した人がcopy only
の理由や影響を知らなかったため、ランダムに追加しただけの可能性もあります。
バックアップと復元の開始時間と終了時間を取得する方法 に対する私の回答には、SQL Serverインスタンス上のすべてのデータベースのバックアップ情報を取得するスクリプトが含まれています。
---------------------------------------------------------------------------------
-- Database Backups for all databases For Previous Week
---------------------------------------------------------------------------------
SELECT
/* Columns for retrieving information */
-- CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS SRVNAME,
msdb.dbo.backupset.database_name,
msdb.dbo.backupset.backup_start_date,
msdb.dbo.backupset.backup_finish_date,
msdb.dbo.backupset.expiration_date,
CASE msdb..backupset.type
WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Diff'
WHEN 'L' THEN 'Log'
END AS backup_type,
-- msdb.dbo.backupset.backup_size / 1024 / 1024 as [backup_size MB],
-- msdb.dbo.backupmediafamily.device_type,
msdb.dbo.backupmediafamily.physical_device_name,
-- msdb.dbo.backupmediafamily.logical_device_name,
-- msdb.dbo.backupset.name AS backupset_name,
msdb.dbo.backupset.description,
msdb.dbo.backupset.is_copy_only,
msdb.dbo.backupset.is_snapshot,
msdb.dbo.backupset.first_lsn,
msdb.dbo.backupset.last_lsn,
msdb.dbo.backupset.database_backup_lsn,
msdb.dbo.backupset.checkpoint_lsn,
msdb.dbo.backupset.differential_base_lsn,
msdb.dbo.backupset.fork_point_lsn,
msdb.dbo.backupmediaset.name,
msdb.dbo.backupmediaset.software_name,
msdb.dbo.backupset.user_name,
'EOR'
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset
ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
INNER JOIN msdb.dbo.backupmediaset
on msdb.dbo.backupmediaset.media_set_id = backupmediafamily.media_set_id
/* ----------------------------------------------------------------------------
Generic WHERE statement to simplify selection of more WHEREs
-------------------------------------------------------------------------------*/
WHERE 1 = 1
AND msdb.dbo.backupset.database_name = 'YOUR_DATABASE'
ORDER BY
2 desc, -- backup start
1, -- database name
3 desc -- backup end
YOUR_DATABASE
をデータベースの名前に置き換えます。
このスクリプトをSQL Serverインスタンスに対して実行します。追加のWHERE
条件を追加して、データベースやその他の情報の検索を制限できます。
msdb.dbo.backupmediafamily.physical_device_name
列にcopy_only
バックアップに使用しているデバイス以外の情報が含まれている場合、それは他のソリューションがバックアップを実行していることを示しています。
本番環境では、287899b2-d08e-40c3-a83d-677d898b6671
(仮想テープドライブのバックアップソリューション識別子)に似たエンタープライズソリューションのエントリが表示されると思います。
一部のツールはmsdb.dbo.backupset.description
列にコメントを配置し、何が起こっているかについてのヒントを提供する場合があります。
バックアップ履歴から何を取得できるかを確認します。
確かに実行中のログのバックアップがあります。完全復旧モードでは、ログがディスクに空きがなくなるポイントまで増加します。以下のスクリプトを使用して、データベースのログバックアップを見つけてください。
select a.database_name,a.backup_size,backup_start_date,backup_finish_date,b.physical_device_name,a.type from msdb..backupset a
inner join msdb..backupmediafamily b on a.media_set_id = b.media_set_id
where a.database_name = 'YourDatabaseName' and a.type = 'L'
order by backup_start_date desc