Hướng dẫn Backup dữ liệu trong SQL Server
Trong quá trình quản lý cơ sở dữ liệu, việc sao lưu (backup) dữ liệu trong SQL Server là một bước quan trọng để bảo vệ thông tin và đảm bảo tính liên tục của hệ thống. Dữ liệu có thể bị mất do lỗi phần cứng, tấn công mạng hoặc thao tác sai từ người dùng, vì vậy việc thiết lập cơ chế backup phù hợp là điều cần thiết.
Bài viết này helpdesk.inet.vn sẽ hướng dẫn chi tiết cách sao lưu dữ liệu trong SQL Server, giúp bạn đảm bảo an toàn cho hệ thống và dễ dàng khôi phục khi cần thiết.
1. Cách Backup dữ liệu trong SQL Server
* Yêu cầu chuẩn bị trước khi Backup dữ liệu trong SQL Server:
- Quyền truy cập: Đảm bảo tài khoản có quyền Sysadmin hoặc db_backupoperator.
- Dung lượng lưu trữ: Kiểm tra không gian đủ để chứa file backup.
- Loại backup: Chọn Full, Differential, hoặc Transaction Log.
- Công cụ thực hiện: Dùng SSMS, T-SQL, hoặc SQL Server Agent.
Công cụ quản trị SQL Server chính là SQL Server Management Studio (SSMS) chúng ta có thể tạo một bản sao lưu bằng cách như sau:
- Nhấp chuột phải vào Database, sau đó đi tới Tasks >> Back Up…

Trong cửa sổ tiếp theo, chọn thư mục mà bạn muốn lưu bản sao lưu. Nhấp vào nút Remove để xóa đường dẫn mặc định đến tệp sao lưu, sau đó nhấp vào Add và chọn một thư mục.

Cách 2: Backup bằng câu lệnh:
- Backup bằng PowerShell:
Invoke-Sqlcmd -Query "BACKUP DATABASE TenDatabase TO DISK = 'D:\Backup\TenDatabase.bak'"- Hoặc:
BACKUP DATABASE TenDatabase
TO DISK = 'D:\Backup\TenDatabase_FULL.bak'
WITH FORMAT, INIT, NAME = 'Full Backup of TenDatabase';Trong đó:
- TenDatabase là tên database cần backup.
- D:\Backup\TenDatabase_FULL.bak là đường dẫn lưu file backup.
- WITH FORMAT, INIT giúp ghi đè backup cũ nếu có.
Cách 3: Ngoài ra để Sao lưu tự động hàng ngày SQL Server chúng ta có thể làm như sau:
Bước 1: Mở SQL Server và kết nối máy chủ. Vào Management và mở rộng Management.

Bước 2. Nhấp chuột phải vào Maintenance Plans và chọn New Maintenance.

Bước 3: Nhập tên Kế hoạch bảo trì vào cửa sổ và nhấp vào OK.

Bước 4: Vào Toolbox và nhấp vào “Back Up Database Task” trong General.

Nhấp đúp vào hộp “Back Up Database Task” trong wizard. Cửa sổ Back Up Database Task sẽ mở ra.

Bước 5: Chọn loại sao lưu là “Full” và Chọn Database(s) mà chúng ta cần thiết lập sao lưu tự động hàng ngày.

Bước 6: Chọn một đường dẫn trong cửa sổ “Back Up Database Task” nơi nhu cầu lưu trữ bản sao lưu cơ sở dữ liệu trên máy chủ >> Sau đó nhấp vào nút OK.

Bước 7: Nhấp vào Job Schedule Properties và chọn những ngày và giờ bạn cần sao lưu. Chúng ta có thể chọn một số tùy chọn trông giống như ảnh chụp màn hình bên dưới, sau đó nhấp vào nút OK

Bước 8: Khi đóng cửa sổ Back-Up Database Task sẽ được hỏi “Save changes to the following items”. Nhấp vào nút Yes.

Bước 9: Kiểm tra xem SQL Server Agent đang chạy, đã bắt đầu hay đã dừng

Bước 10: Sau khi chạy, chúng ta có thể thấy tệp sao lưu cơ sở dữ liệu của mình trong đường dẫn đã chỉ định mà chúng ta đã chọn. Chúng ta có thể thấy bản sao lưu ở định dạng “.bak”.

Cách 4: Sử dụng Script Custom
Cách này sẽ đảm bảo cho chúng ta không xung đột với bản sao lưu gốc, Dọn dẹp log, và Xóa file cũ sẽ gây đầy theo thời gian.
Chúng ta sẽ tạo file .bat với tên là AutoBackup.bat
@ECHO OFF
SETLOCAL
:: ==========================================
:: 1. CẤU HÌNH (SỬA LẠI THÔNG TIN CỦA BẠN Ở ĐÂY)
:: ==========================================
SET SERVER_NAME=LOCALHOST
SET DB_NAME=Ten_Database_Cua_Ban
SET BACKUP_FOLDER=D:\Backups
SET DAYS_TO_KEEP=7
:: Tên file SQL tạm
SET TEMP_SQL="%BACKUP_FOLDER%\temp_backup.sql"
:: ==========================================
:: 2. KIỂM TRA VÀ TẠO THƯ MỤC (AN TOÀN)
:: ==========================================
IF NOT EXIST "%BACKUP_FOLDER%" (
ECHO [Thong bao] Thu muc khong ton tai. Dang tao moi: %BACKUP_FOLDER%
MKDIR "%BACKUP_FOLDER%"
)
:: ==========================================
:: 3. TẠO FILE SQL (PHƯƠNG PHÁP GHI TỪNG DÒNG - CHỐNG LỖI)
:: ==========================================
ECHO Dang tao kich ban SQL...
:: Xóa file tạm cũ nếu tồn tại
IF EXIST %TEMP_SQL% DEL %TEMP_SQL%
:: Ghi nội dung vào file (Dùng >> để nối tiếp)
ECHO DECLARE @path VARCHAR(256) = '%BACKUP_FOLDER%\'; > %TEMP_SQL%
ECHO DECLARE @dbName VARCHAR(50) = '%DB_NAME%'; >> %TEMP_SQL%
ECHO DECLARE @fileDate VARCHAR(20); >> %TEMP_SQL%
ECHO SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) + '_' + REPLACE(CONVERT(VARCHAR(5),GETDATE(),108),':',''); >> %TEMP_SQL%
ECHO. >> %TEMP_SQL%
ECHO -- BACKUP DATA >> %TEMP_SQL%
ECHO DECLARE @fileNameFull VARCHAR(256) = @path + @dbName + '_FULL_' + @fileDate + '.bak'; >> %TEMP_SQL%
ECHO BACKUP DATABASE @dbName TO DISK = @fileNameFull WITH COPY_ONLY, COMPRESSION, INIT, NAME = 'Copy Only Backup'; >> %TEMP_SQL%
ECHO. >> %TEMP_SQL%
ECHO -- BACKUP LOG >> %TEMP_SQL%
ECHO DECLARE @fileNameLog VARCHAR(256) = @path + @dbName + '_LOG_' + @fileDate + '.trn'; >> %TEMP_SQL%
ECHO BACKUP LOG @dbName TO DISK = @fileNameLog WITH COMPRESSION, NAME = 'Log Backup'; >> %TEMP_SQL%
:: ==========================================
:: 4. CHẠY LỆNH VỚI SQL SERVER
:: ==========================================
ECHO.
ECHO [1/2] Dang gui lenh Backup vao SQL Server...
sqlcmd -S "%SERVER_NAME%" -E -i %TEMP_SQL%
IF %ERRORLEVEL% NEQ 0 (
ECHO.
ECHO [!!! LOI !!!] Co loi xay ra khi Backup.
ECHO 1. Kiem tra xem ten Database co dung khong?
ECHO 2. Kiem tra xem User Windows cua ban co quyen truy cap SQL Server khong?
PAUSE
GOTO END
)
:: Xóa file SQL tạm sau khi chạy xong
IF EXIST %TEMP_SQL% DEL %TEMP_SQL%
:: ==========================================
:: 5. DỌN DẸP FILE CŨ
:: ==========================================
ECHO.
ECHO [2/2] Dang don dep file cu hon %DAYS_TO_KEEP% ngay...
:: Dùng pushd để xử lý đường dẫn có khoảng trắng tốt hơn
PUSHD "%BACKUP_FOLDER%"
forfiles /m *.bak /d -%DAYS_TO_KEEP% /c "cmd /c del @path"
forfiles /m *.trn /d -%DAYS_TO_KEEP% /c "cmd /c del @path"
POPD
ECHO.
ECHO ---------------------------------------
ECHO HOAN TAT THANH CONG!
ECHO ---------------------------------------
:END
PAUSE
Lưu ý:
- Đoạn Code trên có lệnh BACKUP LOG: Lệnh này chỉ chạy được nếu Database của bạn đang ở chế độ Full Recovery.
Nếu Database của bạn ở chế độ Simple Recovery: Nó sẽ báo lỗi "Statement BACKUP LOG is not allowed...".
Cách sửa: Nếu bạn dùng Simple, hãy xóa 2 dòng ECHO ... BACKUP LOG ... trong file .bat đi.
- Quyền hạn (Permission) của SQL Server: Bạn chạy file .bat bằng tài khoản Windows của bạn (User A), nhưng SQL Server lại chạy bằng tài khoản dịch vụ (thường là NT Service\MSSQLSERVER).
- Nếu thư mục D:\Backups cấm tài khoản dịch vụ này ghi dữ liệu, SQL sẽ báo lỗi Access Denied.
Cách sửa: Chuột phải thư mục Backup > Properties > Security > Edit > Add > Gõ "Everyone" (hoặc user MSSQL) > Cho quyền Full Control.
- Tên Server: Mặc định code đang để là LOCALHOST. Nếu bạn dùng SQL Express, bạn phải sửa thành .\SQLEXPRESS hoặc LOCALHOST\SQLEXPRESS.
3. Cuối cùng:
Trên đây là bài viết của mình về "Hướng dẫn Backup dữ liệu trong SQL Server" - Nếu có chỗ nào làm không được các bạn có thể cmt xuống phía dưới để mình hỗ trợ nhé. Tks