Pulihkan Database menggunakan GUI - File salah untuk memulihkan

20

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.BKPadalah 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 

masukkan deskripsi gambar di sini

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:

1 masukkan deskripsi gambar di sini Wow Wow Wow TUNGGU MENIT !

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:

masukkan deskripsi gambar di sini

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:

masukkan deskripsi gambar di sini

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)

SQL pembalap
sumber
3
Bisakah Anda mencoba menggunakan SSMS GUI terbaru - 2014 ? Ada banyak perbaikan yang dimasukkan
Kin Shah
1
Sudahkah Anda menyiapkan jejak dan kemudian menjalankan melalui opsi GUI untuk menangkap bagaimana SSMS mendapatkan informasi? Mungkin lebih cepat ...
Steve Mangiameli
1
@ RafaelPiccinelli - Saya merasa sesuatu yang sederhana diabaikan, tetapi tidak yakin apa itu. Apakah Anda mengembalikan database msdb dari yang asli ke instance GDLIC2014? Mungkinkah ada sesuatu yang menggunakan string atau jalur koneksi yang salah? Tentu saja SQL Server tidak membuat data untuk cadangan dan mengembalikan. (Sebagai tambahan, menarik bahwa Anda memulihkan _2.mdf, _3.mdf, dan _4.mdf, tetapi bukan .mdf atau _1.mdf yang tidak bersufiks.)
RLF
Berhenti menggunakan GUI untuk memulihkan. Lihatlah disk atau pita cadangan untuk menentukan apa yang sebenarnya Anda miliki, dan mulailah dari itu.
Anti-kata sandi yang lemah
Halo @ kata sandi yang lemah. Tidak tidak. Saya tidak menggunakan GUI. Saya meminta urutan log, dan saya bekerja dengannya. Saya hanya ingin tahu tentang GUI, tetapi kemudian saya melihat masalah ini. saya mencoba menjauh dari GUI sebanyak yang saya bisa.
Pembalap SQL

Jawaban:

1

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.

John Eisbrener
sumber
Hey @john Terima kasih atas jawaban Anda .. Saya sudah melakukan declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@dataDan menghapus histori. Saya akan melakukan beberapa tes untuk melihat apakah itu berhasil. Terima kasih.
Pembalap SQL
Hai @ RafaelPiccinelli. Apakah ini berhasil untuk Anda?
Kefash
hey @Fefa. Saya pikir itu tidak berhasil. Saya tidak ingat sekarang. tetapi setiap kali saya mendapat jawaban, saya segera memilih dan memilih sebagai jawaban. Saya pikir itu tidak menyelesaikan masalah saya.
Pembalap SQL
@ John Aku sangat butuh perbaikan untuk ini. Apakah masalah Anda akhirnya terselesaikan?
Kefash
@ RafaelPiccinelli Saya harus memperbaiki ini seperti ketika saya harus mengembalikan ke titik untuk mengatakan menambahkan database ke HAG itu bisa mengganggu. Saya tahu ini bisa dilakukan tanpa GUI tetapi log transaksi diambil setiap 10 menit. Apa pendekatan Anda yang lain?
Kefash