Bagikan melalui


Pulihkan Halaman (SQL Server)

Berlaku untuk:SQL Server

Topik ini menjelaskan cara memulihkan halaman di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Tujuan pemulihan halaman adalah untuk memulihkan satu atau beberapa halaman yang rusak tanpa memulihkan seluruh database. Biasanya, halaman yang merupakan kandidat untuk pemulihan telah ditandai sebagai "tersangka" karena kesalahan yang ditemui saat mengakses halaman. Halaman yang dicurigai diidentifikasi dalam tabel suspect_pages di database msdb.

Dalam Topik Ini

Sebelum Anda mulai

Kapan Pemulihan Halaman Berguna?

Pemulihan halaman ditujukan untuk memperbaiki halaman yang rusak secara terisolasi. Memulihkan dan mengembalikan beberapa halaman individu mungkin lebih cepat daripada memulihkan seluruh file, sehingga mengurangi jumlah data yang tidak tersedia selama operasi pemulihan. Namun, jika Anda harus memulihkan lebih dari beberapa halaman dalam file, umumnya lebih efisien untuk memulihkan seluruh file. Misalnya, jika banyak halaman pada perangkat menunjukkan kegagalan perangkat yang tertunda, pertimbangkan untuk memulihkan file, mungkin ke lokasi lain, dan memperbaiki perangkat.

Selain itu, tidak semua kesalahan halaman memerlukan pemulihan. Masalah dapat terjadi dalam data yang di-cache, seperti indeks sekunder, yang dapat diselesaikan dengan menghitung ulang data. Misalnya, jika administrator database menghilangkan indeks sekunder dan membangunnya kembali, data yang rusak, meskipun diperbaiki, tidak ditunjukkan seperti itu dalam tabel suspect_pages .

Batasan dan Pembatasan

  • Pemulihan halaman berlaku untuk database SQL Server yang menggunakan model pemulihan penuh atau dicatat secara massal. Pemulihan halaman hanya didukung untuk grup file baca/tulis.

  • Hanya halaman database yang dapat dipulihkan. Pemulihan halaman tidak dapat digunakan untuk memulihkan hal berikut:

    • Log transaksi

    • Halaman alokasi: Halaman Peta Alokasi Global (GAM), Halaman Peta Alokasi Global Bersama (SGAM), dan Halaman Ruang Bebas (PFS).

    • Halaman 0 dari semua file data (halaman boot dari file)

    • Halaman 1:9 (halaman inisialisasi database)

    • Katalog teks lengkap

  • Untuk database yang menggunakan model pemulihan yang dicatat secara massal, pemulihan halaman memiliki kondisi tambahan berikut:

    • Mencadangkan ketika grup berkas atau data halaman tidak aktif menjadi bermasalah bagi data yang dicatat dalam jumlah besar, karena data yang tidak aktif tidak dicatat dalam log. Setiap halaman offline dapat mencegah pencadangan log. Dalam kasus ini, pertimbangkan untuk menggunakan DBCC REPAIR, karena ini dapat menyebabkan lebih sedikit kehilangan data daripada memulihkan ke cadangan terbaru.

    • Jika cadangan log dari database yang dicatat secara massal mengalami halaman rusak, cadangan log tersebut akan gagal kecuali dengan opsi WITH CONTINUE_AFTER_ERROR ditentukan.

    • Pemulihan halaman umumnya tidak berfungsi dengan metode pencatatan pemulihan secara massal.

      Praktik terbaik untuk melakukan pemulihan halaman adalah mengatur database ke model pemulihan penuh, dan mencoba pencadangan log. Jika pencadangan log berfungsi, Anda dapat melanjutkan pemulihan halaman. Jika pencadangan log gagal, Anda harus kehilangan data sejak pencadangan log sebelumnya atau Anda harus menjalankan DBCC dengan opsi REPAIR_ALLOW_DATA_LOSS.

Rekomendasi

  • Skenario pemulihan halaman:

    Pemulihan halaman offline
    Semua edisi SQL Server mendukung pemulihan halaman saat database offline. Dalam pemulihan halaman secara offline, database akan offline ketika halaman yang rusak dipulihkan. Pada akhir dari urutan pemulihan, database menjadi online.

    Pemulihan halaman online
    Edisi SQL Server Enterprise mendukung pemulihan halaman online, meskipun mereka menggunakan pemulihan offline jika database saat ini offline. Dalam kebanyakan kasus, halaman yang rusak dapat dipulihkan saat database tetap online, termasuk grup file tempat halaman sedang dipulihkan. Ketika grup file utama online, bahkan jika satu atau beberapa grup file sekundernya offline, pemulihan halaman biasanya dilakukan secara online. Namun, terkadang, halaman yang rusak dapat memerlukan pemulihan offline. Misalnya, kerusakan pada halaman penting tertentu mungkin mencegah database dimulai.

    Peringatan

    Jika halaman yang rusak menyimpan metadata database penting, pembaruan metadata yang diperlukan mungkin gagal selama upaya pemulihan halaman online. Dalam hal ini, Anda dapat melakukan pemulihan halaman secara offline, tetapi pertama-tama Anda harus membuat cadangan log ekor (dengan mencadangkan log transaksi menggunakan perintah RESTORE WITH NORECOVERY).

  • Pemulihan halaman memanfaatkan peningkatan pelaporan kesalahan di tingkat halaman (termasuk checksum halaman) dan pelacakan. Halaman yang terdeteksi rusak karena check-summing atau penulisan yang terpotong, halaman rusak, dapat dipulihkan melalui operasi pemulihan halaman. Hanya halaman yang ditentukan secara eksplisit yang dipulihkan. Setiap halaman yang ditentukan digantikan oleh salinan halaman tersebut dari cadangan data yang ditentukan.

    Saat Anda memulihkan cadangan log berikutnya, cadangan tersebut hanya diterapkan ke file database yang berisi setidaknya satu halaman yang sedang dipulihkan. Rantai cadangan log yang tidak diputus harus diterapkan pada pemulihan penuh atau diferensial terakhir untuk memperbarui grup file yang berisi halaman ke file log saat ini. Seperti dalam pemulihan file, set maju gulir dimajukan dengan satu putaran ulang log. Agar pemulihan halaman berhasil, halaman yang dipulihkan harus dipulihkan ke status yang konsisten dengan database.

Keamanan

Izin

Jika database yang dipulihkan tidak ada, pengguna harus memiliki izin CREATE DATABASE untuk dapat menjalankan RESTORE. Jika database ada, izin RESTORE secara default diberikan kepada anggota peran server tetap sysadmin dan dbcreator, serta pemilik (dbo) database (untuk opsi FROM DATABASE_SNAPSHOT, database selalu ada).

Izin RESTORE diberikan kepada peran di mana informasi keanggotaan selalu tersedia untuk server. Karena keanggotaan peran database tetap hanya dapat diperiksa ketika database dapat diakses dan tidak rusak, yang tidak selalu terjadi ketika RESTORE dijalankan, anggota peran database tetap db_owner tidak memiliki izin RESTORE.

Menggunakan SQL Server Management Studio

Mulai dari SQL Server 2016 (13.x), SQL Server Management Studio mendukung pemulihan halaman.

Untuk memulihkan halaman

  1. Sambungkan ke instans mesin database SQL Server yang sesuai, di Object Explorer, klik nama server untuk memperluas pohon server.

  2. Perluas Basis Data. Bergantung pada database, pilih database pengguna atau perluas Database Sistem, lalu pilih database sistem.

  3. Klik kanan database, arahkan ke Tugas, arahkan ke Pulihkan, lalu klik Halaman, yang membuka kotak dialog Pulihkan Halaman .

    Pulihkan
    Bagian ini melakukan fungsi yang sama dengan Pulihkan ke pada Pulihkan Database (Halaman Umum).

    Database
    Menentukan database yang akan dipulihkan. Anda bisa memasukkan database baru atau memilih database yang sudah ada dari daftar drop-down. Daftar ini mencakup semua database di server, kecuali database sistem master dan tempdb.

    Peringatan

    Untuk memulihkan cadangan yang dilindungi kata sandi, Anda harus menggunakan pernyataan RESTORE .

    Pencadangan Tail-Log
    Masukkan atau pilih nama file di Perangkat Cadangan tempat pencadangan log akhir akan disimpan untuk database.

    Set Cadangan
    Bagian ini menampilkan kumpulan cadangan yang terlibat dalam pemulihan.

    Header Nilai
    Nama Nama kumpulan cadangan.
    Komponen Komponen yang dibackup: Database, File, atau <kosong> (untuk log transaksi).
    Jenis Jenis pencadangan yang dilakukan: Pencadangan Penuh, Diferensial, atau Log Transaksi.
    Server Nama instans Mesin Database yang melakukan operasi pencadangan.
    Database Nama database yang terlibat dalam operasi pencadangan.
    Posisi Posisi set cadangan dalam volume.
    LSN Pertama Nomor urutan log (LSN) dari transaksi pertama dalam kumpulan cadangan. Ruang kosong untuk pencadangan file.
    LSN Terakhir Nomor urutan log (LSN) dari transaksi terakhir dalam kumpulan cadangan. Kosong untuk pencadangan file.
    Checkpoint LSN Nomor urutan log (LSN) dari titik pemeriksaan terbaru pada saat cadangan dibuat.
    LSN Penuh Nomor urutan log (LSN) dari cadangan database lengkap terbaru.
    Tanggal Mulai Tanggal dan waktu ketika operasi pencadangan dimulai, ditampilkan dalam pengaturan regional klien.
    Tanggal Selesai Tanggal dan waktu ketika operasi pencadangan selesai, disajikan dalam pengaturan regional klien.
    Ukuran Ukuran cadangan yang diatur dalam byte.
    Nama Pengguna Nama pengguna yang melakukan operasi pencadangan.
    Kedaluwarsa Tanggal dan waktu kedaluwarsa set cadangan.

    Klik Verifikasi untuk memeriksa integritas file cadangan yang diperlukan untuk melakukan operasi pemulihan halaman.

  4. Untuk mengidentifikasi halaman yang rusak, dengan database yang benar dipilih dalam kotak Database, klik Periksa Halaman Database. Ini adalah operasi jangka panjang.

    Peringatan

    Untuk memulihkan halaman tertentu yang tidak rusak, klik Tambahkan dan masukkan ID File dan ID Halaman halaman yang akan dipulihkan.

  5. Kisi halaman digunakan untuk mengidentifikasi halaman yang akan dipulihkan. Awalnya, kisi ini diisi dari tabel sistem suspect_pages . Untuk menambahkan atau menghapus halaman dari kisi, klik Tambahkan atau Hapus. Untuk informasi selengkapnya, lihat Mengelola Tabel suspect_pages (SQL Server).

  6. Tabel kumpulan Cadangan mencantumkan kumpulan cadangan dalam rencana pemulihan default. Secara opsional, klik Verifikasi untuk memverifikasi bahwa cadangan dapat dibaca dan bahwa set cadangan selesai, tanpa memulihkannya. Untuk informasi selengkapnya, lihat RESTORE VERIFYONLY (Transact-SQL).

    Halaman

  7. Untuk memulihkan halaman yang tercantum dalam kisi halaman, klik OK.

Menggunakan T-SQL

Untuk menentukan halaman dalam pernyataan RESTORE DATABASE, Anda memerlukan ID file file yang berisi halaman dan ID halaman halaman. Sintaks yang diperlukan adalah sebagai berikut:

 RESTORE DATABASE <database_name>  
  
 PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
  
 FROM <backup_device> [ ,... n ]
  
 WITH NORECOVERY

Untuk informasi selengkapnya tentang parameter opsi HALAMAN, lihat RESTORE Arguments (Transact-SQL). Untuk informasi selengkapnya tentang sintaks RESTORE DATABASE, lihat RESTORE (Transact-SQL).

Untuk memulihkan halaman

  1. Dapatkan ID halaman rusak yang akan dipulihkan. Kesalahan penulisan checksum atau torn mengembalikan ID halaman, memberikan informasi yang diperlukan untuk menentukan halaman. Untuk mencari ID halaman halaman yang rusak, gunakan salah satu sumber berikut.

    ID sumber halaman Topik
    msdb..suspect_pages Mengelola Tabel suspect_pages (SQL Server)
    Log galat Menampilkan Log Kesalahan SQL Server (SQL Server Management Studio)
    Jejak peristiwa Memantau dan Merespons Peristiwa
    DBCC DBCC (T-SQL)
    Penyedia WMI Penyedia WMI untuk Konsep Peristiwa Server
  2. Mulai pemulihan halaman dengan database lengkap, file, atau cadangan grup file yang berisi halaman. Dalam pernyataan RESTORE DATABASE, gunakan klausa HALAMAN untuk mencantumkan ID halaman dari semua halaman yang akan dipulihkan.

  3. Terapkan diferensial terbaru .

  4. Terapkan cadangan log berikutnya.

  5. Buat cadangan log baru database yang menyertakan LSN akhir halaman yang dipulihkan, yaitu, titik di mana halaman terakhir yang dipulihkan diambil secara offline. LSN akhir, yang ditetapkan sebagai bagian dari pemulihan pertama dalam urutan, adalah LSN target pengulangan. Roll forward file secara online yang berisi halaman dapat berhenti pada LSN target redo. Untuk mempelajari target LSN pengulangan dari berkas saat ini, lihat kolom redo_target_lsn dari sys.master_files. Untuk informasi selengkapnya, lihat sys.master_files (Transact-SQL).

  6. Pulihkan cadangan log baru. Setelah pencadangan log baru ini diterapkan, pemulihan halaman selesai dan halaman sekarang dapat digunakan.

    Catatan

    Urutan ini dianalogikan dengan urutan pemulihan file. Bahkan, pemulihan halaman dan pemulihan file keduanya dapat dilakukan sebagai bagian dari urutan yang sama.

Contoh (Transact-SQL)

Contoh berikut memulihkan empat halaman file B yang rusak dengan NORECOVERY. Selanjutnya, dua cadangan log diterapkan dengan NORECOVERY, diikuti dengan cadangan log akhir, yang dipulihkan menggunakan RECOVERY. Contoh ini melakukan pemulihan online. Dalam contoh, ID file file B adalah , dan ID halaman halaman yang rusak adalah 1, , 57202, dan 9161016.

RESTORE DATABASE [<database>] PAGE='1:57, 1:202, 1:916, 1:1016'  
   FROM DISK = '<file_backup_of_file_B>'
   WITH NORECOVERY;  
RESTORE LOG [<database>] FROM [<log_backup>]
   WITH NORECOVERY;  
RESTORE LOG [<database>] FROM [<log_backup>]
   WITH NORECOVERY;   
BACKUP LOG [<database>] TO [<new_log_backup>];
RESTORE LOG [<database>] FROM [<new_log_backup>] WITH RECOVERY;  
GO

Lihat Juga

RESTORE (Transact-SQL)
Menerapkan Pencadangan Log Transaksi (SQL Server)
Mengelola Tabel suspect_pages (SQL Server)
Mencadangkan dan Memulihkan Database SQL Server