Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khôi phục cơ sở dữ liệu máy chủ SQL (T-SQL)

Nếu bạn sử dụng SQL Server Management Studio (SSMS) hoặc một số GUI khác để quản lý cơ sở dữ liệu của mình, bạn có thể quen với việc sao lưu và khôi phục cơ sở dữ liệu bằng cách sử dụng “trỏ và nhấp”.

Thông thường, điều này liên quan đến việc nhấp chuột phải vào cơ sở dữ liệu và chọn Khôi phục hoặc tương tự, sau đó làm theo lời nhắc (ví dụ:khi khôi phục cơ sở dữ liệu trong Azure Data Studio).

Nhưng nếu bạn cần làm điều đó với T-SQL, bạn có thể sử dụng RESTORE DATABASE tuyên bố.

Ví dụ

Đây là một ví dụ cơ bản:

RESTORE DATABASE World
  FROM DISK = N'/var/opt/mssql/Bak/World.bak' 
  WITH FILE = 1;

Điều này gần như đơn giản nhất có thể. RESTORE DATABASE câu lệnh có cú pháp khá phức tạp (như với hầu hết mọi thứ T-SQL), nhưng câu lệnh này là đủ cho một hoạt động khôi phục mặc định, cơ bản.

Trong trường hợp này, tôi đã khôi phục cơ sở dữ liệu có tên Thế giới từ tệp .bak. Tôi đã sử dụng FROM DISK để xác định rằng đó là từ tệp .bak và tôi đã cung cấp đường dẫn đầy đủ đến tệp đó. Các tùy chọn khác ở đây bao gồm FROM TAPEFROM URL .

Tôi cũng đã bao gồm WITH FILE = 1 ở đây nhưng dù sao đó cũng là giá trị mặc định. Mệnh đề này chỉ định số tệp bộ sao lưu sẽ sử dụng. Tức là sẽ sử dụng bộ sao lưu nào trong tệp (một tệp có thể có nhiều bộ sao lưu).

Nhận danh sách các bộ dự phòng

Bạn có thể sử dụng RESTORE HEADERONLY để lấy danh sách các bộ sao lưu trong tệp. Cụ thể hơn, nó trả về một tập hợp kết quả của thông tin tiêu đề sao lưu cho tất cả các tập hợp sao lưu.

Ví dụ:

RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';

Điều này trả về rất nhiều cột vì vậy tôi sẽ không trình bày tất cả chúng ở đây.

Một trong các cột được gọi là Vị trí . Điều này sẽ được sử dụng với FILE = khi khôi phục cơ sở dữ liệu.

Ví dụ với các tùy chọn khác

Dưới đây là một ví dụ với nhiều tùy chọn hơn:

RESTORE DATABASE [WideWorldImporters] 
  FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak' 
  WITH FILE = 1,  
  MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf',  
  MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf',  
  MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf',  
  MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',  
  NOUNLOAD,  
  STATS = 5;

Đây thực sự là tập lệnh mà Azure Data Studio đã tạo cho tôi khi tôi sử dụng giao diện GUI để bắt đầu hoạt động khôi phục. Khi bạn làm điều đó, Azure Data Studio cung cấp cho bạn tùy chọn chạy khôi phục ngay lập tức hoặc tạo tập lệnh với mã T-SQL mà bạn có thể chạy sau.

Trong trường hợp này, tập lệnh sử dụng MOVE để di chuyển từng tên tệp logic trong tệp sao lưu, đến vị trí tệp vật lý được chỉ định trên hệ điều hành. Trong trường hợp này, tệp .bak đã sử dụng một vị trí tệp vật lý khác (và sử dụng đường dẫn tệp Windows) và do đó, điều này phải thay đổi để phù hợp với hệ thống của tôi. Xem bên dưới để biết giải thích về cách lấy thông tin này.

NOUNLOAD thực sự là một tùy chọn băng. Nó đảm bảo rằng băng không bị dỡ ra khỏi ổ đĩa sau khi quá trình khôi phục hoàn tất. Do tôi không khôi phục từ băng, nên tùy chọn này đã bị bỏ qua.

STATS đối số cho phép bạn đánh giá tiến trình của hoạt động khôi phục. Nó chỉ định rằng một thông báo sẽ được hiển thị mỗi khi một tỷ lệ phần trăm khác hoàn thành. Nếu bạn không bao gồm giá trị phần trăm ở đây, SQL Server sẽ hiển thị thông báo sau khi hoàn thành mỗi 10%.

KHÔI PHỤC LỌC LỌC

Nếu bạn muốn tạo một câu lệnh giống như câu trước đó, sử dụng MOVE đối số để di chuyển từng tên tệp logic trong tệp sao lưu, đến vị trí tệp vật lý được chỉ định trên hệ điều hành, bạn có thể sử dụng RESTORE FILELISTONLY để trả về tên tệp logic (và hơn thế nữa).

RESTORE FILELISTONLY trả về tập kết quả chứa danh sách cơ sở dữ liệu và tệp nhật ký có trong tập sao lưu.

Dưới đây là một ví dụ sử dụng cùng một tệp WideWorldImporters .bak từ ví dụ trước đó:

RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';

Kết quả (sử dụng đầu ra dọc):

-[ RECORD 1 ]-------------------------
LogicalName          | WWI_Primary
PhysicalName         | D:\Data\WideWorldImporters.mdf
Type                 | D
FileGroupName        | PRIMARY
Size                 | 1073741824
MaxSize              | 35184372080640
FileId               | 1
CreateLSN            | 0
DropLSN              | 0
UniqueId             | 8d30f4f9-a463-404f-805a-9bd1c634b66b
ReadOnlyLSN          | 0
ReadWriteLSN         | 0
BackupSizeInBytes    | 11993088
SourceBlockSize      | 512
FileGroupId          | 1
LogGroupGUID         | NULL
DifferentialBaseLSN  | 626000002440500037
DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065
IsReadOnly           | 0
IsPresent            | 1
TDEThumbprint        | NULL
SnapshotUrl          | NULL
-[ RECORD 2 ]-------------------------
LogicalName          | WWI_UserData
PhysicalName         | D:\Data\WideWorldImporters_UserData.ndf
Type                 | D
FileGroupName        | USERDATA
Size                 | 2147483648
MaxSize              | 35184372080640
FileId               | 3
CreateLSN            | 37000000095200001
DropLSN              | 0
UniqueId             | 28d406e0-78ff-4400-9a4b-3a05d136b1f3
ReadOnlyLSN          | 0
ReadWriteLSN         | 0
BackupSizeInBytes    | 434962432
SourceBlockSize      | 512
FileGroupId          | 2
LogGroupGUID         | NULL
DifferentialBaseLSN  | 626000002440500037
DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065
IsReadOnly           | 0
IsPresent            | 1
TDEThumbprint        | NULL
SnapshotUrl          | NULL
-[ RECORD 3 ]-------------------------
LogicalName          | WWI_Log
PhysicalName         | E:\Log\WideWorldImporters.ldf
Type                 | L
FileGroupName        | NULL
Size                 | 104857600
MaxSize              | 2199023255552
FileId               | 2
CreateLSN            | 0
DropLSN              | 0
UniqueId             | 6ac6807e-8774-415b-8efc-e8c569b0855e
ReadOnlyLSN          | 0
ReadWriteLSN         | 0
BackupSizeInBytes    | 0
SourceBlockSize      | 512
FileGroupId          | 0
LogGroupGUID         | NULL
DifferentialBaseLSN  | 0
DifferentialBaseGUID | 00000000-0000-0000-0000-000000000000
IsReadOnly           | 0
IsPresent            | 1
TDEThumbprint        | NULL
SnapshotUrl          | NULL
-[ RECORD 4 ]-------------------------
LogicalName          | WWI_InMemory_Data_1
PhysicalName         | D:\Data\WideWorldImporters_InMemory_Data_1
Type                 | S
FileGroupName        | WWI_InMemory_Data
Size                 | 0
MaxSize              | 0
FileId               | 65537
CreateLSN            | 624000000336200003
DropLSN              | 0
UniqueId             | f65663c8-a250-433e-bbe6-e13a5599a607
ReadOnlyLSN          | 0
ReadWriteLSN         | 0
BackupSizeInBytes    | 980090880
SourceBlockSize      | 512
FileGroupId          | 3
LogGroupGUID         | NULL
DifferentialBaseLSN  | 626000002440500037
DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065
IsReadOnly           | 0
IsPresent            | 1
TDEThumbprint        | NULL
SnapshotUrl          | NULL

Vì vậy, chúng ta có thể thấy rằng các vị trí thực của tệp này sử dụng đường dẫn tệp Windows. Ví dụ:cái đầu tiên (có tên logic là WWI_Primary ) có vị trí thực là D:\ Data \ WideWorldImporters.mdf .

Trong trường hợp của tôi, tôi đã khôi phục cơ sở dữ liệu vào SQL Server cho Linux (chạy trong vùng chứa Docker trên máy Mac của tôi), vì vậy khi khôi phục tệp .bak này vào hệ thống của mình, tôi phải thay đổi đường dẫn vật lý cho phù hợp với hệ thống của mình.

Tất nhiên, bạn cũng có thể thay đổi đường dẫn tệp khi khôi phục tệp vào máy Windows nếu được yêu cầu.

Cú pháp đầy đủ

Việc sao lưu và khôi phục cơ sở dữ liệu có thể khá liên quan, tùy thuộc vào yêu cầu của bạn. RESTORE câu lệnh được thiết kế để bao gồm nhiều tình huống khác nhau. Đặc biệt, nó bao gồm các tình huống khôi phục sau:

  • Khôi phục toàn bộ cơ sở dữ liệu từ bản sao lưu toàn bộ cơ sở dữ liệu (khôi phục hoàn toàn).
  • Khôi phục một phần cơ sở dữ liệu (khôi phục một phần).
  • Khôi phục các tệp hoặc nhóm tệp cụ thể vào cơ sở dữ liệu (khôi phục tệp).
  • Khôi phục các trang cụ thể vào cơ sở dữ liệu (khôi phục trang).
  • Khôi phục nhật ký giao dịch vào cơ sở dữ liệu (khôi phục nhật ký giao dịch).
  • Hoàn nguyên cơ sở dữ liệu về thời điểm được chụp nhanh cơ sở dữ liệu.

Cú pháp đầy đủ chứa nhiều tùy chọn, vì vậy nếu yêu cầu của bạn vượt quá phạm vi của bài viết này, hãy xem tài liệu của Microsoft cho RESTORE chính thức cú pháp và giải thích.

Ngoài ra, hãy đọc Tổng quan về Khôi phục và Phục hồi của Microsoft để biết tổng quan về các cân nhắc và cách tiếp cận khác nhau để khôi phục cơ sở dữ liệu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khái niệm cơ bản về tham gia bên trong máy chủ SQL với các ví dụ

  2. Các loại ràng buộc khác nhau có sẵn trong SQL Server là gì - Hướng dẫn sử dụng SQL Server / T-SQL Phần 50

  3. Xóa dữ liệu thông qua một hàm có giá trị bảng trong SQL Server

  4. Cách xuất kết quả truy vấn sang .csv hoặc Tệp được phân cách bằng tab trong SQL Server Management Studio (SSMS) - Hướng dẫn SQL Server / TSQL Phần 23

  5. SQL Server:Đặt tất cả các trường hợp UPPER thành trường hợp / trường hợp tiêu đề thích hợp