バックストーリー:複数のSQL 2012データベースのコピーを別の環境に復元しようとしていますが、アプリケーションはそれらを(ほぼ)時間内に「同期」する必要があります。
(もちろん、これを行うideal方法は、フルバックアップとログバックアップを使用してFULLリカバリモードを使用し、同じタイムスタンプを使用してポイントインタイムリストアを実行することです。しかし、私の場合、それらを必要とする完全に同期され、ちょうど約10分以内で、フルバックアップと復元のみを処理したい。フルバックアップを実行するタイミングを制御できるが、問題はデータベースのサイズは非常に異なるため、完全バックアップは非常に異なる時間で実行されます。
だから私の質問:完全バックアップの開始時刻を同期する必要がありますか?または終了時間?
つまり、完全バックアップを復元した場合、バックアップ時の外観はstarted、またはfinished?になります。
これをチェックしてください リンク
データベースの完全バックアップでは、データベースの完全なコピーが提供され、データベースを復元できる単一の時点が提供されます。バックアッププロセスの実行には何時間もかかる場合がありますが、バックアップを復元できるのは単一のポイントのみです(事実上、バックアップの最後にありますが、そのポイントについては、この記事の後半で詳しく説明します)。完全バックアップでは、バックアップの実行中の任意の時点への回復はできません。
SQL Serverバックアップには、割り当てられたすべてのデータページと十分なトランザクションログが含まれているため、復元操作でデータベースを回復できるため、データの読み取り操作が完了した時点でトランザクションの一貫性が保たれます。
だから、あなたの質問に答えるために
完全バックアップの「瞬間」とは何ですか?開始時間または終了時間?
[〜#〜] finish [〜#〜]時間です。
バックアップ操作を呼び出して、バックアップの実行中に一部のデータに変更を加え(確実にコミットして)、そのバックアップをどこかに復元し、変更を確認することで、これを自分で証明するのは非常に簡単です。
SQLバックアップは、msdbデータベースのbackupsetテーブルにバックアップの終了時刻を書き込むときに行われます。検索すると、完全バックアップはタイプD、ログバックアップはタイプLです。また、コピーのみのバックアップをマークするコピーのみの列があります。
中央管理サーバーで作成したグループに対して定期的に次のクエリを実行します。必要に応じて変更できます。
select a.server_name as hostname, a.Database_Name,a.name,
a.backup_finish_date
--over (partition by database_name)
as Backup_End_Time
,Backup_Type =
case a.type
when 'D' then 'Full backup'
when 'I' then 'Differential Backup'
when 'L' then 'Transaction Log Backup'
when 'F' then 'filegroup Backup'
when 'G' then 'Differential File backup'
else 'See Books Online'
end, cast((a.backup_size/1048576)as bigint) as Size_of_Backup_MB ,
a.software_major_version, a.compatibility_level, a.has_backup_checksums,
a.is_copy_only
from msdb..backupset a
inner join sys.dm_hadr_availability_replica_cluster_states b on
a.server_name = b.replica_server_name
--inner join sys.dm_hadr_availability_replica_cluster_states e on
d.server_name = e.replica_server_name
inner join sys.dm_hadr_availability_replica_states c on c.replica_id =
b.replica_id
inner join sys.databases e on a.database_name = e.name
where exists
(select 1 from msdb..backupset d
where a.server_name = d.server_name
and a.database_name = d.database_name
and d.is_copy_only = 0
having a.backup_finish_date = max(d.backup_finish_date))
and a.Type = 'd'
--and a.name in ('CommVault Galaxy Backup')
--and a.has_backup_checksums = 0
--and c.role_desc = 'primary'
group by a.backup_finish_date, a.database_name, a.server_name, a.Type,
a.backup_size, a.compatibility_level, a.database_version,
a.software_major_version
, a.has_backup_checksums, a.is_copy_only, a.name, a.description
having max(a.backup_finish_date) < getdate() -2
order by a.server_name, a.database_name