Saya hanya bermain-main dengan antarmuka grafis SSMS dan mempelajari opsi-opsi tugas "restore".
Satu hal yang saya perhatikan adalah ketika saya mengklik "menghasilkan skrip", baris pertama dari kueri adalah:
RESTORE DATABASE [MyDatabase] FROM DISK = N'Server_Patch\Database_name_LOGSHIPPING.BKP' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5 ( and a lot of log backups for point in time )
Ok, tidak masalah, tapi, saya melakukan backup harian dari database ini. ini Database_name_LOGSHIPPING.BKP
adalah nama file yang saya buat untuk pengiriman log sebulan yang lalu.
Mengapa ketika saya mencoba menggunakan antarmuka grafis SSMS untuk memulihkan cadangan, ini menunjuk ke file cadangan ini? Saya bahkan tidak punya file ini lagi.
Dengan kueri ini dari MSSQLTIPS, saya bisa melihat semua cadangan dari database ini:
SELECT
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
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 'Database'
WHEN 'L' THEN 'Log'
END AS backup_type,
msdb.dbo.backupset.backup_size,
msdb.dbo.backupmediafamily.logical_device_name,
msdb.dbo.backupmediafamily.physical_device_name,
msdb.dbo.backupset.name AS backupset_name,
msdb.dbo.backupset.description
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
WHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7) and msdb..backupset.type ='D'
ORDER BY
msdb.dbo.backupset.database_name,
msdb.dbo.backupset.backup_finish_date
Apa yang salah di sini? Saya tidak menggunakan COPY ONLY.
EDIT2:
Saya membuat cadangan manual harian untuk diuji, dan bahkan dengan cara ini, SQL Server memilih cadangan lama yang tidak ada lagi. Ketika menjalankannya RESTORE HEADERONLY...
dikatakan (jelas) file tidak ada.
EDIT 3:
Ini cetak GUI:
Database ini adalah pemulihan dari server lain (server yang sama, instance berbeda). Huuum ... Saya pikir masalahnya ada di sini.
Bisakah kalian lihat di "server" di gambar kedua? ini memiliki 2 server. Saya menggunakan yang dengan nama instance GDLIC2014.
naskah:
Skrip cadangan:
DECLARE @Patch varchar(1000)
SELECT @Patch = (SELECT 'PATCH\FULL\DATABASE_ ' + convert(varchar(500),GetDate(),112) + '.bkp')
BACKUP DATABASE DATABASE TO DISK=@Patch with compression
Dengan permintaan yang sama dari MSSQLTIPS, saya dapat menemukan hasil ini, menggunakannya tanpa rentang tanggal:
Kotak merah adalah cadangan yang salah dari contoh yang lebih lama, kotak biru adalah cadangan terakhir yang diambil (GUI harus menggunakannya)
EDIT 4:
Nah, Dengan kueri ini untuk mencantumkan Riwayat Cadangan, saya melihat bahwa setiap log dan penuh tercantum dengan benar:
SELECT TOP 100
s.database_name,
m.physical_device_name,
CAST(CAST(s.backup_size / 1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS bkSize,
CAST(DATEDIFF(second, s.backup_start_date,
s.backup_finish_date) AS VARCHAR(4)) + ' ' + 'Seconds' TimeTaken,
s.backup_start_date,
CAST(s.first_lsn AS VARCHAR(50)) AS first_lsn,
CAST(s.last_lsn AS VARCHAR(50)) AS last_lsn,
CASE s.[type]
WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Differential'
WHEN 'L' THEN 'Transaction Log'
END AS BackupType,
s.server_name,
s.recovery_model
FROM msdb.dbo.backupset s
INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
WHERE s.database_name = DB_NAME() -- Remove this line for all the database
ORDER BY backup_start_date DESC, backup_finish_date
GO
EDIT5:
Apakah ada sesuatu untuk me-restart header database
(Aku kehabisan ide)
sumber
Jawaban:
Peluang adalah sesuatu di tabel riwayat cadangan yang tidak disinkronkan dan UI akan membuat cadangan lengkap "konsisten" terakhir. Jika Anda benar-benar tertarik pada mengapa melakukan apa yang dilakukannya, mulailah melacak profiler terbatas pada akun Anda, berjalanlah melalui langkah-langkah pemulihan di GUI, dan tinjau perintah yang diambil dalam jejak yang menunjukkan apa yang dilakukan UI di balik layar . Ini akan memberi Anda jawaban pasti yang Anda cari.
Jika Anda lebih suka hanya melewati ini, Anda dapat menghapus riwayat cadangan Anda melalui
EXEC [msdb].[dbo].[sp_delete_backuphistory] @oldest_date=getdate()
(tergantung pada terakhir kali Anda menjalankan ini, Anda mungkin ingin menghapusnya sebulan sekali) dan kemudian mengambil penuh baru, dll. Saya akan menduga ini akan mengatur ulang GUI untuk menggunakan cadangan yang tepat ke depan.Akhirnya, opsi lain adalah menjalankan skrip ini yang ditulis oleh Wayne Sheffield . Ini dapat memberikan beberapa informasi lebih lanjut tentang masalah apa pun dengan rantai cadangan. Saya tidak menemukan ini sampai setelah saya memposting jawaban ini pada awalnya, tetapi mudah-mudahan ini membantu orang lain di masa depan.
sumber
declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@data
Dan menghapus histori. Saya akan melakukan beberapa tes untuk melihat apakah itu berhasil. Terima kasih.