Khôi phục cơ sở dữ liệu bằng GUI - Sai tệp để khôi phục


20

Tôi chỉ loay hoay với giao diện đồ họa SSMS và nghiên cứu các tùy chọn của tác vụ "khôi phục".

Một điều mà tôi nhận thấy là khi tôi nhấp vào "tạo tập lệnh", dòng đầu tiên của truy vấn là:

 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, không có vấn đề gì, nhưng, tôi đang thực hiện sao lưu hàng ngày cơ sở dữ liệu này. đây Database_name_LOGSHIPPING.BKPlà tên của tệp mà tôi đã tạo để đăng nhập vận chuyển một tháng trước.

Tại sao khi tôi cố gắng sử dụng giao diện đồ họa SSMS để khôi phục bản sao lưu, nó sẽ trỏ đến tệp sao lưu này? Tôi thậm chí không có tập tin này nữa.


Với truy vấn này từ MSSQLTIPS, tôi có thể thấy tất cả các bản sao lưu từ cơ sở dữ liệu này:

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 

nhập mô tả hình ảnh ở đây

Điều gì có thể sai ở đây? Tôi không sử dụng CHỈ SAO CHÉP.


EDIT2:

Tôi đang thực hiện sao lưu thủ công hàng ngày để kiểm tra và thậm chí theo cách này, SQL Server chọn bản sao lưu cũ không còn tồn tại nữa. Khi chạy RESTORE HEADERONLY...nó nói (rõ ràng) tập tin không tồn tại.


EDIT 3:

Đây là bản in GUI:

1 nhập mô tả hình ảnh ở đây Wow Wow Wow ĐỢI MỘT PHÚT !

Cơ sở dữ liệu này là một khôi phục từ một máy chủ khác (cùng một máy chủ, các trường hợp khác nhau). Huuum ... Tôi nghĩ vấn đề là ở đây.

Các bạn có thể thấy trên "máy chủ" trong bức ảnh thứ hai không? Nó có 2 máy chủ. Tôi đang sử dụng một ví dụ có tên GDLIC2014.

kịch bản:

nhập mô tả hình ảnh ở đây

Kịch bản sao lưu:

DECLARE @Patch varchar(1000)

SELECT @Patch = (SELECT 'PATCH\FULL\DATABASE_ ' + convert(varchar(500),GetDate(),112) + '.bkp') 

BACKUP DATABASE DATABASE TO DISK=@Patch with compression

Với cùng một truy vấn từ MSSQLTIPS, tôi có thể tìm thấy các kết quả này, sử dụng nó không có phạm vi ngày:

nhập mô tả hình ảnh ở đây

Hình vuông màu đỏ là bản sao lưu sai từ ví dụ cũ, hình vuông màu xanh là bản sao lưu cuối cùng được thực hiện (GUI nên sử dụng nó)

EDIT 4:

Chà, với truy vấn này để liệt kê Lịch sử sao lưu, tôi thấy rằng mọi nhật ký và đầy đủ đều được liệt kê chính xác:

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:

Có cái gì để khởi động lại tiêu đề của cơ sở dữ liệu

(Tôi không có ý tưởng)



1
Bạn đã thiết lập một dấu vết và sau đó chạy qua các tùy chọn GUI để nắm bắt cách SSMS lấy thông tin? Có thể nhanh hơn ...
Steve Mangiameli

1
@RafaelPiccinelli - Tôi cảm thấy rằng một cái gì đó đơn giản đang bị bỏ qua, nhưng không chắc nó là gì. Bạn đã khôi phục cơ sở dữ liệu msdb từ bản gốc sang phiên bản GDLIC2014 chưa? Có thể một cái gì đó đang sử dụng chuỗi kết nối hoặc đường dẫn sai? Chắc chắn SQL Server không tạo dữ liệu cho các bản sao lưu và khôi phục. (Là một sang một bên, nó là thú vị mà bạn đang khôi phục _2.mdf, _3.mdf, và _4.mdf, nhưng không phải là một MDF phi hậu tố hoặc một _1.mdf.)
RLF

Thoát khỏi sử dụng GUI để khôi phục. Nhìn vào đĩa sao lưu hoặc băng để xác định những gì bạn thực sự có, và bắt đầu từ những cái đó.
Mật khẩu chống yếu vào

Xin chào @ Anti-yếu mật khẩu. Không không. Tôi không sử dụng GUI. Tôi truy vấn trình tự nhật ký, và tôi làm việc với nó. Tôi chỉ tò mò về GUI, nhưng sau đó tôi thấy vấn đề này. tôi cố gắng tránh xa GUI nhiều nhất có thể.
Racer SQL

Câu trả lời:


1

Rất có thể là một cái gì đó trong các bảng lịch sử sao lưu không đồng bộ và giao diện người dùng sẽ đến bản sao lưu đầy đủ "nhất quán" cuối cùng. Nếu bạn thực sự quan tâm đến lý do tại sao nó làm những gì nó đang làm, hãy bắt đầu theo dõi hồ sơ giới hạn trong tài khoản của bạn, xem qua các bước khôi phục trong GUI và xem lại các lệnh được ghi trong dấu vết cho thấy UI đang làm gì phía sau hậu trường . Điều này sẽ giúp bạn có câu trả lời dứt khoát mà bạn đang tìm kiếm.

Nếu bạn chỉ muốn di chuyển qua đây, bạn có thể xóa lịch sử sao lưu của mình thông qua EXEC [msdb].[dbo].[sp_delete_backuphistory] @oldest_date=getdate()(tùy thuộc vào lần cuối bạn chạy cái này, bạn có thể muốn xóa nó một tháng một lần) và sau đó lấy một bản đầy đủ mới, v.v. sẽ nghi ngờ điều này sẽ thiết lập lại GUI để sử dụng các bản sao lưu thích hợp trong tương lai.

Cuối cùng, một lựa chọn khác là chạy kịch bản này do Wayne Sheffield tác giả . Nó có thể cung cấp thêm một số thông tin liên quan đến bất kỳ vấn đề nào với chuỗi dự phòng. Tôi đã không bắt gặp điều này cho đến khi tôi đăng câu trả lời này ban đầu, nhưng hy vọng nó sẽ giúp người khác trong tương lai.


Xin chào @john Cảm ơn bạn đã trả lời .. Tôi đã làm declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@datavà xóa lịch sử. Tôi sẽ thực hiện một số thử nghiệm để xem nếu nó hoạt động. Cảm ơn bạn.
Racer SQL

Xin chào @RafaelPiccinelli. Điều này có làm việc cho bạn?
Kefash

này @Kefash. Tôi nghĩ rằng nó đã không làm việc. Tôi không thể nhớ ngay bây giờ. nhưng mỗi khi tôi nhận được câu trả lời, tôi lập tức upvote và chọn làm câu trả lời. Tôi nghĩ nó không giải quyết được vấn đề của tôi.
Racer SQL

@john Tôi cần một bản sửa lỗi cho cái này thật tệ. vấn đề của bạn cuối cùng đã được giải quyết?
Kefash

@RafaelPiccinelli Tôi cần sửa lỗi này vì khi tôi cần khôi phục đến một điểm để nói thêm cơ sở dữ liệu vào HAG thì có thể gây phiền nhiễu. Tôi biết điều này có thể được thực hiện mà không cần GUI nhưng nhật ký giao dịch được thực hiện cứ sau 10 phút. Cách tiếp cận khác của bạn là gì?
Kefash
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.