Tạo SQL Job Dùng Để Backup Database Hàng Ngày

Vũ Huy Tâm

Backup là công việc tối quan trọng cho mỗi DBA để đảm bảo an toàn dữ liệu. Khi có sự cố xảy ra, backup file là nguồn duy nhất giúp bạn khôi phục dữ liệu trở lại. Trong thời đại dữ liệu trở thành trung tâm của các hoạt động doanh nghiệp, mất mát dữ liệu làm ảnh hưởng nghiêm trọng, thậm chí làm tê liệt hoạt động của công ty. Vì thế không có gì ngạc nhiên khi trong các yêu cầu trách nhiệm của DBA, backup database luôn được liệt kê ở phần đầu.
Chưa nói đến các phương án sao lưu/khôi phục dữ liệu phức tạp, như backup/restore transaction log… ở mức độ tối thiểu bạn cần backup database hàng ngày để khi có sự cố, ít nhất bạn cũng có bản backup từ ngày hôm trước để khôi phục. Việc làm này có thể được tự động hóa một cách dễ dàng thông qua SQL Server Agent. Đây là module trong SQL Server dùng để tự động thực hiện các tác vụ, tương tự như Scheduled Task của Windows.
Trong Management Studio, bạn mở rộng nút “SQL Server Agent”, sau đó click phím phải vào nút “Jobs”, rồi chọn “New Job…”:

Một cửa sổ mới sẽ hiện ra cho bạn nhập thông tin về job cần tạo. Ở ô Name, bạn nhập “Backup – Daily”, và ở Owner bạn nhập “sa”:


Sau đó ở hàng menu bên trái, click chuột vào dòng “Steps”, rồi bấm vào nút “New…”:

Ở cửa sổ mới này, ở ô “Step name” bạn nhập “Backup”, để nguyên các ô còn lại, và ở phần soạn thảo “Command” hãy nhập đoạn code sau:

BACKUP DATABASE CongTyDB TO DISK = 'D:\Backup\CongTyDB.bak' WITH INIT

Bạn cần đổi tên database và đường dẫn tương ứng với môi trường của bạn. Ở cuối câu lệnh là mệnh đề “WITH INIT” để đảm bảo hàng ngày chạy nó sẽ ghi đè lên file hiện tại. Nếu không có mệnh đề này, các bản backup sẽ được ghi nối tiếp nhau trong cùng một file và file backup sẽ tăng kích thước lên nhanh chóng.
Sau khi nhập xong, bạn click OK và trở lại màn hình ban đầu. Giờ ở hàng menu bên trái, bạn chọn “Schedules” và click vào “New…” để tạo một lịch làm việc cho Job:

Ở ô “Name” bạn nhập vào “Backup – Daily”; ở ô “Occurs” bạn chọn “Daily” và “Occurs once at:” bạn chọn “1:00:00 AM”; các phần khác giữ nguyên. Như vậy backup job sẽ chạy hàng ngày vào lúc 1h sáng. Lý do của việc chọn giờ như vậy là vì thường ban đêm database có ít hoạt động và do đó không ảnh hưởng nhiều đến user. Bạn có thể chọn giờ thích hợp cho mình.
Sau đó bạn click “OK” để trở về màn hình trước và click “OK” lần nữa để quay trở lại Management Studio. Việc setup như vậy là đã xong, bạn đã tạo được một job có tên “Backup – Daily” để backup database và sẽ được chạy hàng ngày vào lúc 1h sáng.




Tags: , ,

25 Comments
Posted on 27/2/2011 | Categories: Database Administration

Các bài viết tương tự

Comments
  • Nguyen Hai (21/04/2011 11:15 am)

    Website không có phần đặt câu hỏi và thảo luận chán thật post đại câu hỏi vào đây vậy ^^

    các bạn chạy code rưới đây sẽ thấy 2 table có 1 table index tên là NULL

    nếu table có khóa trính thì sql tự tạo index còn không có thì sql tạo NULL

    Mình muốn hỏi các bạn là có cách nào tạo table mà nó không cho sql tụ sinh index tên là null không vậy

    USE master

    GO

    IF DB_ID('test_db_009') IS NOT NULL DROP DATABASE test_db_009

    GO

    CREATE DATABASE test_db_009

    go

    USE test_db_009

    go

    SELECT * FROM sys.indexes

    go

    CREATE TABLE test(

    id int PRIMARY KEY,

    noidung nvarchar(50)

    )

    CREATE TABLE test2(

    id int,

    noidung nvarchar(50)

    )

    SELECT * FROM sys.indexes

  • Nguyen Thuy (25/10/2011 6:09 am)

    BACKUP DATABASE CongTyDB TO DISK = ‘D:\Backup\CongTyDB.bak’ WITH INIT
    Bạn ơi mình hỏi tý.
    Đoạn lệnh trên có phải là sao lưa cơ sở dữ liệu (congtyDB) đến một thư mục Backup trong ổ D đúng không bạn?
    Vậy còn CongtyDB.bak sau backup đó là tên thư mục hay là cơ sở dữ liệu vậy bạn?
    thanks bạn!

  • Vũ Huy Tâm (25/10/2011 7:40 am)

    “CongtyDB.bak” là tên file backup bạn có thể restore về sau, hoặc restore sang server khác với điều kiện SQL Server phải cùng version hoặc mới hơn.

  • Nguyen Thuy (25/10/2011 10:09 am)

    D:\Backup\CongTyDB.bak
    chỉ là đường dẫn mình tạo để lưu file CongTyDB.bak thôi đúng ko bạn?

    • Path file database ? (19/02/2013 5:23 am)

      Bạn cho mình hỏi ‘D:\Backup\CongTyDB.bak’ có thể thay thế bằng địa chỉ IP được không và nếu thay được thì mình sẽ cần phải có username và pass vào máy đó thì mình phải ghi làm sao.
      Thanks

      • reply (13/04/2016 3:20 am)

        địa chỉ IP đâu liên quan gì đến database đâu mà bạn nói sử dụng IP chứ, cái này nó cần vị trí của ổ đĩa thôi,

        • auzeze (22/04/2016 3:24 am)

          cái bạn ý hỏi là backup qua mạng lan ( kiểu như backup qua 1 con file server ak)

    • reply (13/04/2016 3:17 am)

      D:\Backup là đường dẫn về ổ cần lưu
      còn CongTyDB.bak là datbase name của bạn đó, trước khi bạn backup là bạn đã có tên database này rồi

  • Nguyen Thuy (25/10/2011 10:10 am)

    mình đang phải làm đề tài tìm hiểu về Sql Server Agent 2008 nên mình chưa biết j về nó cả, đang tự tìm, học hỏi thôi nên có nhiều cái muốn hỏi các bạn.thanks các bạn nhiều nha!

  • dao truong (04/04/2012 12:58 pm)

    cac ban oi cho mjnh ho itu dong hoa trong SQl la gi way

  • Đỗ Văn Ngà (06/04/2012 10:49 pm)

    Bài viết bạn của bạn rất hay
    Mình xin giới thiệu thêm 1 cách nữa để backup database sử dụng Jobs và có gửi email thông báo khi backup thành công hay có lỗi
    Mình xin chụp các bước và hướng dẫn trong ảnh luôn

    Bước 1: Cấu hình email sender Trên database Email

    Nhấn phải chuột vào ‘Management/Database Mail’ chọn ‘Configure Database Mail’

    Nhấn Next

    Bước 2: Tạo Sto thực thi công việc send email

    Bước 3: Tạo Jobs backup tự động

    Cuối cùng nhấn OK là xong.

  • Nga (16/08/2012 4:43 am)

    Hi, SQL Việt blog

    Làm cách nào để từ file .bak restore lại dữ liệu nhưng các user đã được phân quyền vẫn giữ như cũ mình không phải làm phân quyền lại cho các user đó và các job vẫn chạy bình thường. Trong trường hợp chuyển sever khác.

    Thanks

    • Vũ Huy Tâm (17/08/2012 10:46 am)

      khi restore sang server thì các user thường hay trở nên “mồ côi” (orphaned) vì chúng link với login ID vốn có thể không tồn tại trên server mới. Không có cách nào khác, nhưng bạn có thể viết script xóa và tạo lại user (để nó link lại) hoặc map lại user và chạy script này sau khi restore

      • Nga (17/08/2012 11:53 am)

        Hi Tâm,

        Vì đâu thể nhớ hết store, table đã phân quyền cho ai và được những quyền gì nên khó mà tạo thủ công lại. Bạn có thể cung cấp script để restore lại user theo đúng như ban đầu không?

        Thanks

  • Nguyen (04/09/2012 3:15 am)

    Hi Tâm, nếu muốn mỗi lần tự động back up cần thêm một số yêu cầu như
    1. giữ file backup cũ ,file mới không ghi đè
    2. file backup có tên định dạng __.bak
    3. Các file sau khi backup thành công tự động nén lại thành .zip và file .bak tự động xóa

  • Nguyen (04/09/2012 3:17 am)

    Sorry phần 2. vì lỗi không đọc được dấu ngoặc nên xin được đính chính lại như sau
    2. file backup có tên định dạng “ten mac dinh”_”ngay”_”gio”.bak

  • Loi (21/11/2012 9:34 am)

    Có thể cho mình xin ví dụ phục hồi tại một thời điểm mình muốn phục hồi, đã backup bằng SQL Job được không. Ví dụ nó gặp sự cố tại một thời điểm nào đó.

  • Lê Hùng (04/01/2014 7:41 pm)

    Cho mình hỏi là :
    mình tạo Job backup data như trên mỗi ngày nó back up 1 lần nhưng làm thế nào để mỗi ngày nó back up ra 1 file backup mới .

    • lam (05/01/2015 4:29 am)

      bạn có thể lấy ngày hiện tại + đằng sau tên của file backup

      • Châu (20/05/2016 10:54 pm)

        bạn giúp mình câu lệnh này được không ??
        ‘D:\Backup\CongTyDB.bak’ WITH INIT thì thêm vào đâu ?? và ntn ??
        Cám ơn bạn

  • huyen (18/10/2015 12:26 pm)

    em đang làm bài tập về sql server agent
    Yêu cầu là tính điểmt rung bình định kỳ hằng năm vào tháng 6 và tháng 12 cho sinh viên, biết DiemTb=DiemCC*0.1+ DiemHP*0.3+ Diemthi*0.6
    Help me!!!
    Thank ạ….

  • Yume (14/02/2016 8:34 am)

    Có thể dùng code sql để tự động backup không? giả sử khi mình cài phần mềm thì nó sẽ tự động cài đặt cho minh không?

  • Trung (12/09/2016 11:44 pm)

    Các bạn cho mình hỏi ?
    Minh có 2 database A,B giống nhau về cấu trúc. mình đã insert dư liệu từ database A về database B. Có cách nào đẻ đồng bộ dữ liệu từ A về B không.
    Ví dụ : Tại Table NV của A khi insert hoặc update hoặc delete dữ liệu thì bên Table NV của B củng cập nhật luôn.
    Mình đã thử dùng trigger nhưng Bảng inserted và deleted không cho tham chiếu kiểu dữ liệu image, text, ntext ”
    Hoặc bạn nào biết cách để tham chiếu kiểu dữ liệu image, text, ntext trên bảng inserted và deleted chỉ mình với .

    • Thanh Pham duy (24/09/2016 4:40 am)

      Bạn thử nghiên cứu cơ chế Replicate xem nhé.

Leave a Reply

Hướng dẫn: Để nhập mã T-SQL bạn dùng thẻ <pre lang="tsql"> và </pre>.
Ví dụ: <pre lang="tsql">SELECT * FROM MyTable</pre>