Thu gọn Log, Data (Bài trước)
(Bài tiếp) Stored Procedure

Sao lưu đầy đủ một database - full backup

Thực hiện sao lưu đầy đủ (dữ liệu, log) của một Database vào một file backup để có thể phục hồi lại chỉ cần sử dụng một file này. Giả sử database cần sao lưu (backup) có tên shopdata, thì thực hiện lệnh T-SQL sau:

USE shopdata
BACKUP DATABASE shopdata TO DISK = '/var/opt/mssql/backup/shopdata.bak'

Bạn có thể thay đổi shopdata sang tên database của bạn, đường dẫn lưu trữ chỉ rõ, như trên là /var/opt/mssql/backup/shopdata.bak là đường dẫn trên linux - máy đang chạy SQL Server, bạn có thể thay bằng đường dẫn theo máy chạy SQL Server của bạn.

Trước khi backup bạn có thể tối ưu dung lượng các file của CSDL, thực hiện theo: thu gọn data và log của database trong SQL Server

Sau khi có file sao lưu (.bak) bạn cũng có thể nén lại để giảm dung lượng truyền tải. Như trong Linux có thể dùng tag, gzip - xem tại Lệnh nén, giải nén Linux

Phục hồi database từ full backup

Tạo Database mới từ file backup

Trường hợp tạo mới Database từ bản fullbackup, ví dụ đang không có shopdata, phục hồi lại nó từ shopdata.bak, thì thực hiện

RESTORE DATABASE shopdata FROM DISK = '/var/opt/mssql/backup/shopdata.bak'

Lệnh trên tạo DB mới có tên shopdata từ shopdata.bak, bạn có thể đổi shopdata thành tên mới bất kỳ.

Phục hồi dữ liệu, ghi đè dữ liệu

Nếu shopdata đang có, bạn cần ghi đè từ một file backup thì thực thiện

RESTORE DATABASE shopdata FROM DISK = '/var/opt/mssql/backup/shopdata.bak' WITH REPLACE

Nhớ rằng cấu trúc file data, log trong CSDL đang có và trong file .bak giống nhau. Có nghĩa là file .bak là bản lưu trước đây của chính CSDL đang tồn tại.

Để kiểm tra database shopdata đang tồn tại có tên file data, log thế nào, lưu ở đâu có thể dùng đoạn T-SQL (xem thêm kiểm tra file data, log)

select database_id as db_id,
    name as [FileName],
    physical_name as [File Path]
from sys.master_files
where  DB_NAME(database_id) = 'shopdata'
order by database_id
Kết quả kiểm tra file data, log của database

Còn kiểm tra trong file .bak có file data, log như thế nào thì dùng lệnh:

RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/shopdata.bak'
Kết quả kiểm tra file data, log trong một file .bak

Nếu đang có cơ sở dữ liệu shopdata với file data, file log như trên thì dùng shopdata.bak để tạo một CSDL khác, ví dụ shopdata1 thì sẽ lỗi, vì dường dẫn file data, file log đã dùng cho shopdata. Trường hợp này bạn có thể chỉ rõ đường dẫn file data, file log khi phục hồi, ví dụ:

RESTORE DATABASE shopdata1 FROM DISK = '/var/opt/mssql/backup/xtlab.bak'
WITH  REPLACE,
MOVE 'shopdata' TO '/var/opt/mssql/data/shopdata01.mdf',
MOVE 'shopdata_log' TO '/var/opt/mssql/data/shopdata01_log.mdf'

Nếu muốn đổi tên logic trong database (Logical Name) thì thực hiện

ALTER DATABASE [shopdata] MODIFY FILE (NAME=N'shopdata', NEWNAME=N'data');
ALTER DATABASE [shopdata] MODIFY FILE (NAME=N'shopdata_log', NEWNAME=N'log');
Thu gọn Log, Data (Bài trước)
(Bài tiếp) Stored Procedure