Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memulihkan Database SQL Server (T-SQL)

Jika Anda menggunakan SQL Server Management Studio (SSMS) atau GUI lain untuk mengelola basis data, Anda mungkin terbiasa mencadangkan dan memulihkan basis data menggunakan "arahkan dan klik".

Biasanya ini melibatkan klik kanan pada database dan memilih Pulihkan atau serupa, lalu ikuti petunjuknya (misalnya, saat memulihkan database di Azure Data Studio).

Tetapi jika Anda perlu melakukannya dengan T-SQL, Anda dapat menggunakan RESTORE DATABASE pernyataan.

Contoh

Berikut ini contoh dasarnya:

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

Ini hampir sesederhana yang bisa didapat. RESTORE DATABASE pernyataan memiliki sintaks yang cukup kompleks (seperti kebanyakan hal T-SQL), tetapi pernyataan ini cukup untuk operasi pemulihan standar dasar.

Dalam hal ini, saya memulihkan database bernama Dunia dari file .bak. Saya menggunakan FROM DISK untuk menentukan bahwa itu berasal dari file .bak, dan saya memberikan path lengkap ke file itu. Pilihan lain di sini termasuk FROM TAPE dan FROM URL .

Saya juga menyertakan WITH FILE = 1 di sini tapi itu nilai defaultnya. Klausa ini menentukan nomor file set cadangan yang akan digunakan. Yaitu, set cadangan mana yang akan digunakan dalam file (sebuah file dapat memiliki beberapa set cadangan).

Dapatkan Daftar Kumpulan Cadangan

Anda dapat menggunakan RESTORE HEADERONLY untuk mendapatkan daftar set cadangan dalam file. Lebih khusus lagi, ini mengembalikan kumpulan hasil informasi header cadangan untuk semua kumpulan cadangan.

Contoh:

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

Ini mengembalikan banyak kolom jadi saya tidak akan menampilkan semuanya di sini.

Salah satu kolom disebut Posisi . Ini akan digunakan dengan FILE = pilihan saat memulihkan database.

Contoh dengan Opsi Lainnya

Berikut ini contoh dengan lebih banyak opsi:

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;

Ini sebenarnya skrip yang dibuat Azure Data Studio untuk saya ketika saya menggunakan antarmuka GUI untuk memulai operasi pemulihan. Saat Anda melakukannya, Azure Data Studio memberi Anda opsi untuk segera menjalankan pemulihan, atau membuat skrip dengan kode T-SQL yang dapat Anda jalankan nanti.

Dalam hal ini, skrip menggunakan MOVE argumen untuk memindahkan setiap nama file logis dalam file cadangan, ke lokasi file fisik yang ditentukan pada sistem operasi. Dalam hal ini, file .bak menggunakan lokasi file fisik yang berbeda (dan menggunakan jalur file Windows) sehingga ini harus diubah agar sesuai dengan sistem saya. Lihat di bawah untuk penjelasan tentang cara mendapatkan info ini.

NOUNLOAD sebenarnya adalah pilihan kaset. Ini memastikan bahwa kaset tidak diturunkan dari drive setelah pemulihan selesai. Mengingat saya tidak memulihkan dari kaset, opsi ini diabaikan.

STATS argumen memungkinkan Anda untuk mengukur kemajuan operasi pemulihan. Ini menentukan bahwa pesan akan ditampilkan setiap kali persentase lain selesai. Jika Anda tidak menyertakan nilai persentase di sini, SQL Server akan menampilkan pesan setelah setiap 10% selesai.

KEMBALIKAN DAFTAR FILE HANYA

Jika Anda ingin membuat pernyataan seperti sebelumnya, yang menggunakan MOVE argumen untuk memindahkan setiap nama file logis dalam file cadangan, ke lokasi file fisik yang ditentukan pada sistem operasi, Anda dapat menggunakan RESTORE FILELISTONLY untuk mengembalikan nama file logis (dan banyak lagi).

RESTORE FILELISTONLY mengembalikan kumpulan hasil yang berisi daftar database dan file log yang terdapat dalam kumpulan cadangan.

Berikut ini contoh menggunakan file .bak WideWorldImporters yang sama dari contoh sebelumnya:

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

Hasil (menggunakan keluaran vertikal):

-[ 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

Jadi kita dapat melihat bahwa lokasi fisik file ini menggunakan jalur file Windows. Misalnya, yang pertama (dengan nama logis WWI_Primary ) memiliki lokasi fisik D:\Data\WideWorldImporters.mdf .

Dalam kasus saya, saya memulihkan database ke SQL Server untuk Linux (berjalan dalam wadah Docker di Mac saya), jadi ketika saya memulihkan file .bak ini ke sistem saya, saya harus mengubah jalur fisik agar sesuai dengan sistem saya.

Tentu saja, Anda juga dapat mengubah jalur file saat memulihkannya ke mesin Windows jika diperlukan.

Sintaks Lengkap

Mencadangkan dan memulihkan basis data bisa sangat rumit, tergantung pada kebutuhan Anda. RESTORE pernyataan dirancang untuk mencakup banyak skenario yang berbeda. Secara khusus, ini mencakup skenario pemulihan berikut:

  • Memulihkan seluruh basis data dari cadangan basis data lengkap (pemulihan lengkap).
  • Pulihkan sebagian database (pemulihan sebagian).
  • Memulihkan file atau grup file tertentu ke database (pemulihan file).
  • Memulihkan halaman tertentu ke database (pemulihan halaman).
  • Memulihkan log transaksi ke database (pemulihan log transaksi).
  • Mengembalikan database ke titik waktu yang diambil oleh snapshot database.

Sintaks lengkap berisi banyak opsi, jadi jika persyaratan Anda melebihi cakupan artikel ini, lihat dokumentasi Microsoft untuk RESTORE resmi sintaks dan penjelasan.

Baca juga Tinjauan Pemulihan dan Pemulihan Microsoft untuk ikhtisar tentang berbagai pertimbangan dan pendekatan untuk memulihkan basis data.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ROLLBACK TRUNCATE di SQL Server

  2. Cara Mengganti Semua Kemunculan String dengan String lain di SQL Server – REPLACE ()

  3. Haruskah saya mendesain tabel dengan kunci utama varchar atau int?

  4. Studi Kasus Peningkatan Perangkat Keras Server Database SQL Server

  5. Cara Menemukan Pekerjaan Agen SQL Server di Azure Data Studio