Đề tài Chức năng Backup Restore trong SQL Server 2005
Trong suốt chu kỳ sống của một database (cơ sở dữ liệu), việc xảy ra sự cố làm hư hỏng mất mát dữ liệu là chuyện khó tránh khỏi.
Các dạng biến cố hay tai họa có thể xảy ra như:
- Ðĩa chứa data file hay Transaction Log File hay system file bị mất, bị hư hỏng
- Những thảm họa tự nhiên như bão lụt, động đất, hỏa hoạn
- Toàn bộ server bị đánh cắp hoặc phá hủy
- Các thiết bị dùng để backup - restore bị đánh cắp hay hư hỏng
- Những lỗi do vô ý của user như lỡ tay xóa, thao tác sai làm hư cơ sở dữ liệu
- Những hành vi mang tính phá hoại của nhân viên như cố ý đưa vào những thông tin sai lạc.
- Bị hack (nếu server có kết nối với internet).
Vì vậy chúng ta phải luôn có biện pháp bảo vệ cơ sở dữ liệu một cách an toàn nhất, bên cạnh đó chúng ta cũng phải tự hỏi khi các vấn đề trên xảy ra thì phải làm sao để khôi phục lại dữ liệu đã hư, mất và phục hồi một cách nhanh nhất để đưa server trở lại hoạt động một cách bình thường.
Để tránh và hoặc ít nhất là hạn chế tối đa mất mát dữ liệu do các sự cố nêu trên, là một người quản lý hệ thống cơ sở dữ liệu bạn cần phải bảo quản cơ sở dữ liệu của mình một cách hợp lý nhất, giảm tối đa số lần phải phục hồi dữ liệu, luôn theo dõi, kiểm tra thường xuyên để phát hiện các trục trặc trước khi nó xảy ra. Và để có thể phục hồi dữ liệu khi gặp các biến cố trên bạn phải biết cách backup (sao lưu) và restore (khôi phục) dữ liệu và sắp xếp lịch trình backup dữ liệu một cách hợp lý để bảo quản cơ sở dữ liệu của mình một cách an toàn nhất. Đối với một thư mục hay những tập tin bình thường thì việc sao lưu và copy ngược trở lại là vô cùng đơn giản là chỉ cần copy vào một thiết bị lưu trữ khác, để phòng khi gặp sự cố gây mất mát dữ liệu thì có thể copy ngược trở lại. Còn đối với database trong SQL thì việc backup diễn ra có khác hơn, khi hệ thống đang vận hành thì bạn không thể đơn giản copy các data file và log file vì chúng bị khóa hoàn toàn. Bạn phải dựa vào cơ chế backup của hệ QTCSDL. Sau đây chúng tôi xin nói sơ lược về Back up/Restore trong SQL Server và hướng dẫn các bạn các thao tác trong hai chức năng này.
abase operational. No additional transaction logs can be restored " trong Enterprise Manager) thì các incomplete transaction sẽ được roll back và database ở trạng thái consistent nhưng ta không thể nào restore các transaction log backup được nữa.Bước 3. Khôi phục từ bản differential backup gần với thời điểm có sự cố nhất (bản differential backup lúc 5h PM của ngày thứ 5).Bước 4. Khôi transaction log tại thời điểm 12h PM, và cuối cùng bản lúc 3h PM ("Cái Ðuôi" mà bạn vừa thực hiện ở bước 1). Quá trình này gọi là Database Recovery.Chú ý: Sự khác nhau giữa Database Restoration và Database Recovery trong SQL Server khác nhau ở chỗ Database Restoration là restore database từ một file backup nghĩa là chỉ đơn giản tái tạo lại database từ những file backup và thực thi lại những transaction đã được commit nhưng database có thể ở trong trạng thái inconsistent và không sử dụng được. Nhưng khi nói đến recover nghĩa là ta không chỉ phục hồi lại data mà còn bảo đảm cho nó ở trạng thái consistent (ổn định) và sử dụng được (usable).Cho nên việc backup Transaction Log File sẽ giúp cho việc recovery data tới bất kỳ thời điểm nào trong quá khứ. Ðối với Simple Recovery Model ta chỉ có thể recover tới lần backup gần nhất mà thôi. Như vậy khi restore database ta có thể chọn WITH RECOVERY để roll back các transaction chưa được commited và database có thể hoạt động bình thường nhưng ta không thể restore thêm backup file nào nữa, thường lựa chọn này được chọn khi restore file backup cuối cùng trong chuỗi backup. Nếu chọn WITH NORECOVERY các transaction chưa được commited sẽ không được roll back do đó SQL Server sẽ không cho phép ta sử dụng database nhưng ta có thể tiếp tục restore các file backup kế tiếp, thường option này được chọn khi sau đó ta còn phải restore các file backup khác. Bạn cũng có thể chọn một lựa chọn trung lập hơn là WITH STANDBY (tức là lựa chọn thứ 3 "Leave database read-only and able to restore additional transaction logs" trong Enterprise Manager). Với lựa chọn này bạn sẽ có luôn đặc tính của hai lựa chọn trên : các incomplete transaction sẽ được roll back để đảm bảo database consistent và có thể sử dụng được nhưng chỉ dưới dạng Read-only mà thôi, đồng thời sau đó bạn có thể tiếp tục restore các file backup còn lại (SQL Server sẽ log các transaction được roll back trong undo log file và khi ta restore backup file kế tiếp SQL Server sẽ trả lại trạng thái no recovery từ những gì ghi trên undo file). Người ta chọn lựa chọn này khi muốn restore database trở lại một thời điểm nào đó (a point in time) nhưng không rõ là đó có phải là thời điểm mà họ muốn không, cho nên họ sẽ restore từng backup file ở dạng Standby và kiểm chứng một số data xem đó có phải là thời điểm mà họ muốn restore hay không (chẳng hạn như trước khi bị xóa hay trước khi một transaction nào đó được thực thi) trước khi chuyển sang lựa chọn Recovery. Tóm lại: Trước khi thực hiện restore database chúng ta phải xác định được thứ tự file cần restore. Các thông tin này được SQL Servicer chứa trong msdb database và sẽ cho ta biết backup device nào, ai backup vào thời điểm nào và cần restore để có được dữ liệu như thế nào. Sau đó mới tiến hành restore. 2> Hướng dẫn các bước thực hiện restore (khôi phục) một cơ sở dữ liệu trong SQL Server. Ðể thực hiện restore trước hết bạn hãy khởi động chương trình SQL Server lên sau đó nhấn phải chuột vào Databases->chọn Restore Database... (Bạn cũng có thể nhấn phải chuột vào một database khác để nhấn phải chuột và chọn Restore Database). Tại to Database chọn tên databse đang tồn tại hoặc gõ tên một database mới mà bạn cần gán giữ liệu restore vào nó. Chú ý: Tại to Database. Nếu bạn chọn một cơ sở dữ liệu hiện có, thì cơ sở dữ liệu hiện có của bạn sẽ bị thay thế bởi các dữ liệu từ bản sao lưu. Nếu bạn gõ một tên cơ sở dữ liệu hiện tại không tồn tại trong việc cài đặt SQL Server của bạn, nó sẽ được tạo ra. Sau đó nhấp vào nút ‘From device’ phía dưới mục ‘Source for restore’, và nhấn vào dấu ba chấm “…” phía sau nó (như hình dưới đây). Đặt 'File' là phương tiện sao lưu và sau đó nhấp vào ‘Add’. Bạn nhấn chọn file SQL đã backup từ trước, nó có đuôi là “*.BAK” tập tin mà bạn đang muốn khôi phục (Ví dụ file cần restore của tôi là Hoadon.bak như hình bên dưới). Sau đó nhấn OK để sang bước tiếp theo. Nhấn OK tiếp Tiếp theo, bạn hãy chọn thời điểm và lọai kiểu datafile (Full,Different hoặc Transaction) mà bạn muốn Restore (khôi phục). Từ một tập tin sao lưu SQL có thể giữ nhiều bản sao lưu bạn có thể thấy nhiều hơn một điểm khôi phục được liệt kê. Tại thời điểm này, đủ thông tin đã được nhập vào cho cơ sở dữ liệu được phục hồi. Tuy nhiên, SQL tập tin sao lưu lưu trữ thông tin về nơi tập tin dữ liệu được sao chép vì vậy nếu có bất kỳ tập tin vấn đề hệ thống như một thư mục đích không tồn tại hoặc tập tin dữ liệu tên xung đột sẽ xảy ra lỗi. Những vấn đề này là phổ biến khi khôi phục lại một sao lưu tạo ra trên một cài đặt SQL Server khác nhau. Để xem lại và thay đổi các thiết lập hệ thống tập tin, nhấp vào “Options” ở bên trái trong hộp thoại Restore Database. Trên trang tùy chọn, bạn sẽ muốn chắc chắn rằng các 'Restore Khi' điểm cột vị trí thư mục hợp lệ (bạn có thể thay đổi chúng khi cần thiết). Các tập tin của tôi không có để tồn tại, tuy nhiên đường dẫn thư mục phải tồn tại. Nếu các tập tin tương ứng có tồn tại, SQL Server sau một bộ quy tắc đơn giản: Nếu “To database” (từ trang Tổng) phù hợp với bản khôi phục lại bản sao lưu cơ sở dữ liệu (tức là khôi phục lại cơ sở dữ liệu phù hợp), các tập tin tương ứng sẽ được ghi đè như một phần của việc khôi phục lại. Nếu “To database” không phù hợp với sao lưu cơ sở dữ liệu phục hồi (tức là khôi phục lại một cơ sở dữ liệu khác nhau), thì cơ sở dữ liệu bị ghi đè lên hiện tại sẽ cần phải được kiểm tra cho quá trình khôi phục hoàn thành. Sử dụng chức năng này cẩn thận vì bạn có khả năng có thể khôi phục lại cơ sở dữ liệu thông tin sao lưu trên đầu trang của tập tin dữ liệu từ một cơ sở dữ liệu hoàn toàn khác nhau. Nói chung, bạn có thể cho biết các cơ sở dữ liệu khác nhau dựa trên các 'Tên gốc File' mà là tên nội bộ SQL Server sử dụng để tham khảo các tập tin tương ứng. Sau khi đã lựa chọn các tùy chọn trong các bước của việc khôi phục, nhấn OK. Sau đó bạn sẽ thấy hôp thoại thông báo quá trình restore thành công như dưới đây. Khôi phục dữ liệu (Restore Database) sử dụng bằng câu lệnh (TSQL) Cũng tương tự như Backup một cơ sở dữ liệu, chúng ta cũng có thể dùng bằng câu lệnh cho việc Restore. Để thực thi restore bằng TSQL, bạn hãy mở một Query Window mới (Để mở Query Window, từ Management Studio, bạn kích nút New Query ở góc trên bên phải). Phục hồi dữ liệu sử dụng thủ tục sau: RESTORE DATABASE { database_name | @database_name_var } [ FROM [ ,...n ] ] [ WITH [ DBO_ONLY] [[,] FILE =file number] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] [ ,...n ] [ [ , ] { NORECOVERY | RECOVERY | STANDBY = {undo_file_name} ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] REPLACE ] [ [ , ] RESTART ] [ [ , ] STATS [ =percentage ] ]]Để phục hồi giữ liệu vào một tập tin chỉ định, bạn có thể sử dụng thủ tục hệ thống có tên restore databse như cú pháp sau.RESTORE DATABASE { database_name | @database_name_var } [ ,...n ] [ FROM [ ,...n ] ] [ WITH [ DBO_ONLY] [[,] FILE =file number] [ [ , ] FILE = { file_number | @file_number } ] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] NORECOVERY ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] REPLACE ] [ [ , ] RESTART ] [ [ , ] STATS [ =percentage ] ] ]Để phục hồi tập tin log, bạn có thể sử dụng thủ tục hệ thống có tên restore log như cú pháp sau . RESTORE LOG { database_name | @database_name_var } [ FROM [ ,...n ] ] [ WITH [ DBO_ONLY] [[,] FILE =file number] [ [ , ] FILE = file_number ] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] { NORECOVERY | RECOVERY | STANDBY = undo_file_name} ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] RESTART ] [ [ , ] STATS [=percentage ] ] [ [ , ] STOPAT = { date_time | @date_time_var }] ] ::= { { 'backup_device_name' | @ backup_device_name_var } | { DISK | TAPE | PIPE} = { 'temp_backup_device' | @temp_backup_device _var } } ::= { FILE = { logical_file_name | @logical_file_name_var } | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }Diễn giải một số tham số trên: DBO_ONLY: Khi cơ sở dữ liệu phục hồi thành công, cơ sở dữ liệu sễ thiết lập chế độ dbo_only. FILE: Cho phép chọn restore gần nhất trong một file chứa nhiều lần backup. MOVE: Cho phép phục hồi cơ sở dữ liệu backup khác với cơ sở dữ liệu đang sử dụng. REPLACE: Cho phép phục hồi và ghi đè lên cơ sở dữ liệu đang sử dụng. Dưới đây chúng tôi xin lấy một ví dụ ngắn gọn về restore bằng câu lệnh. VD: /*Restore database*/RESTORE DATABASE Hoadon FROM DISK = ‘G:\Hoadonbackup.bak’ WITH DOB_ONLY, NORECOVERY, STATSGOVD:/*Restore log*/RESTORE LOG Hoadon FROM DISK = ‘G:\Hoadonbackup’ WITH DOB_ONLY, NORECOVERY, STATSGO Sau khi các bạn chạy câu lệnh restore các bạn sẽ thấy mấy dòng thông báo quá trình restore thành công tương tự như chỗ tôi khoanh màu đỏ trong hình. Kết luận Việc bảo vệ các cơ sở dữ liệu tránh hư hỏng, mất mát thông tin là vấn đề tối quan trọng đối với những cá nhân doanh nghiệp có sử dụng hệ thống lưu trữ quản lý cơ sở dữ liệu, đặc biệt là đối với những người quản trị hệ thống (Database Administrator). Vì vậy việc bảo quản tốt cơ sở dữ liệu, biết cách sắp xếp lịch trình backup dữ liệu và có thể thực hiện restore dữ liệu thành công bất kể lúc nào cần là một mục tiêu quan trọng nhất. Hi vọng với sự hướng dẫn sơ lược của chúng tôi trên đây cùng với sự tìm tòi học hỏi và tự thực hành của bạn sẽ giúp cho cơ sở dữ liệu của bạn luôn được an toàn trong mọi tình huống. Chúc bạn thành công!
File đính kèm:
- Đề tài Chức năng Backup Restore trong SQL Server 2005.doc