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.