Cara menulis skrip atau kueri yang akan menampilkan cadangan lengkap terakhir dan cadangan log terakhir untuk setiap database di setiap server produksi menggunakan tabel sistem "backupset" dan tabel cadangan terkait.
sumber
Cara menulis skrip atau kueri yang akan menampilkan cadangan lengkap terakhir dan cadangan log terakhir untuk setiap database di setiap server produksi menggunakan tabel sistem "backupset" dan tabel cadangan terkait.
Sesuatu seperti ini akan memberi Anda hasil yang Anda cari. Kueri di bawah ini menarik cadangan terbaru dari jenis penuh, diferensial, atau cadangan log untuk setiap database.
;with backup_cte as
(
select
database_name,
backup_type =
case type
when 'D' then 'database'
when 'L' then 'log'
when 'I' then 'differential'
else 'other'
end,
backup_finish_date,
rownum =
row_number() over
(
partition by database_name, type
order by backup_finish_date desc
)
from msdb.dbo.backupset
)
select
database_name,
backup_type,
backup_finish_date
from backup_cte
where rownum = 1
order by database_name;
Saya menulis posting tentang menggunakan backupset di sini jika Anda tertarik lebih detail tentang tabel. Sederhananya di sini adalah permintaan untuk menarik apa yang Anda inginkan.
use msdb
go
-- D = Full, I = Differential and L = Log.
-- There are other types of backups too but those are the primary ones.
SELECT backupset.database_name,
MAX(CASE WHEN backupset.type = 'D' THEN backupset.backup_finish_date ELSE NULL END) AS LastFullBackup,
MAX(CASE WHEN backupset.type = 'I' THEN backupset.backup_finish_date ELSE NULL END) AS LastDifferential,
MAX(CASE WHEN backupset.type = 'L' THEN backupset.backup_finish_date ELSE NULL END) AS LastLog
FROM backupset
GROUP BY backupset.database_name
ORDER BY backupset.database_name DESC
Catatan: Disebutkan bahwa saya telah bergabung dengan backmediaset dan itu tidak diperlukan. Ini benar dan saya hanya bisa berasumsi bahwa saya lupa menghapusnya dari permintaan asli di tautan. Saya sudah menghapusnya dari sini.
Anda mungkin ingin melihat msdb
database, untuk detailnya.
Contohnya:
DECLARE @DBName SYSNAME;
SET @DBName = DB_NAME(); -- modify these as you desire.
SET @DBName = NULL; -- comment this line if you want to limit the displayed history
SELECT DatabaseName = bs.database_name
, BackupStartDate = bs.backup_start_date
, CompressedBackupSize = bs.compressed_backup_size
, ExpirationDate = bs.expiration_date
, BackupSetName = bs.name
, RecoveryModel = bs.recovery_model
, ServerName = bs.server_name
, BackupType = CASE bs.type
WHEN 'D' THEN 'Database'
WHEN 'L' THEN 'Log'
ELSE '[unknown]' END
, LogicalDeviceName = bmf.logical_device_name
, PhysicalDeviceName = bmf.physical_device_name
FROM msdb.dbo.backupset bs
INNER JOIN msdb.dbo.backupmediafamily bmf
ON [bs].[media_set_id] = [bmf].[media_set_id]
WHERE (bs.database_name = @DBName
OR @DBName IS NULL)
AND bs.type = 'D'
ORDER BY bs.backup_start_date DESC;
untuk menampilkan backup penuh terakhir, Diff, Log untuk setiap basis data dengan mempertimbangkan menunjukkan nol jika tidak ada cadangan yang pernah diambil . menggunakan pivot (dimodifikasi dari sumber )
perhatikan bahwa tanpa bergabung ke master.sys.databases dan hanya mengandalkan msdb.dbo.backupset Anda tidak akan menemukan dbs yang tidak memiliki cadangan
SELECT name ,
recovery_model_desc ,
state_desc ,
d AS 'Last Full Backup' ,
i AS 'Last Differential Backup' ,
l AS 'Last log Backup'
FROM ( SELECT db.name ,
db.state_desc ,
db.recovery_model_desc ,
type ,
backup_finish_date
FROM master.sys.databases db
LEFT OUTER JOIN msdb.dbo.backupset a ON a.database_name = db.name
) AS Sourcetable
PIVOT
( MAX(backup_finish_date) FOR type IN ( D, I, L ) ) AS MostRecentBackup
Berdasarkan permintaan @SQLBoy kita dapat menulis kueri di bawah ini untuk menyertakan BackupSize dan BackupSet.Name dalam kueri ini. Saya menghilangkan data yang diputar dan membuatnya lebih sederhana
WITH backupsetSummary
AS ( SELECT bs.database_name ,
bs.type bstype ,
MAX(backup_finish_date) MAXbackup_finish_date
FROM msdb.dbo.backupset bs
GROUP BY bs.database_name ,
bs.type
),
MainBigSet
AS ( SELECT db.name ,
db.state_desc ,
db.recovery_model_desc ,
bs.type ,
bs.name AS BackupSetName ,
bs.backup_size ,
bs.backup_finish_date
FROM master.sys.databases db
LEFT OUTER JOIN backupsetSummary bss ON bss.database_name = db.name
LEFT OUTER JOIN msdb.dbo.backupset bs ON bs.database_name = db.name
AND bss.bstype = bs.type
AND bss.MAXbackup_finish_date = bs.backup_finish_date
)
SELECT *
FROM MainBigSet
Anda dapat menggunakan skrip berikut:
1) jika Anda ingin mendapatkan cadangan terbaru hanya gunakan perintah berikut:
referensi: http://blog.sqlauthority.com/2010/11/04/sql-server-finding-last-backup-time-for-all-database/
2) jika Anda ingin mendapatkan riwayat cadangan untuk semua database dalam tujuh hari terakhir:
referensi: http://www.mssqltips.com/sqlservertip/1601/script-to-retrieve-sql-server-database-backup-history-and-no-backups/
sumber
Tanggal cadangan terakhir untuk semua database. Sederhana.
sumber
Saya pikir di bawah ini adalah permintaan yang kita semua cari:
sumber