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 tersangka diidentifikasi dalam tabel suspect_pages dalam database msdb .

Dalam Topik Ini

Sebelum Anda mulai

Kapan Pemulihan Halaman Berguna?

Pemulihan halaman ditujukan untuk memperbaiki halaman yang rusak terisolasi. Memulihkan dan memulihkan beberapa halaman individual mungkin lebih cepat daripada pemulihan file, mengurangi jumlah data yang offline 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 Halaman (PFS).

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

    • Halaman 1:9 (halaman boot database)

    • Katalog teks lengkap

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

    • Mencadangkan saat grup file atau data halaman offline bermasalah untuk data yang dicatat secara massal, karena data offline tidak dicatat dalam log. Halaman offline apa pun 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 database yang dicatat secara massal mengalami halaman yang buruk, itu gagal kecuali WITH CONTINUE_AFTER_ERROR ditentukan.

    • Pemulihan halaman umumnya tidak berfungsi dengan pemulihan yang dicatat 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 pekerjaan sejak pencadangan log sebelumnya atau Anda harus mencoba menjalankan DBCC harus dijalankan 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 offline, database offline saat halaman yang rusak dipulihkan. Di akhir urutan pemulihan, database 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 offline, tetapi pertama-tama Anda harus membuat cadangan log ekor (dengan mencadangkan log transaksi menggunakan RESTORE WITH NORECOVERY).

  • Pemulihan halaman memanfaatkan pelaporan kesalahan tingkat halaman yang ditingkatkan (termasuk checksum halaman) dan pelacakan. Halaman yang terdeteksi rusak karena check-summing atau tulis robek, halaman rusak, dapat dipulihkan oleh 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 dibroken harus diterapkan ke pemulihan penuh atau diferensial terakhir untuk membawa grup file yang berisi halaman diteruskan ke file log saat ini. Seperti dalam pemulihan file, set penerusan gulir dimajukan dengan satu pass pengulangan 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 default ke anggota peran server tetap sysadmin dan dbcreator dan 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. Luaskan Database. 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 master database sistem 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 cadangan log ekor akan disimpan untuk database.

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

    Header Values
    Nama Nama kumpulan cadangan.
    Komponen Komponen yang dicadangkan: Database, File, atau <kosong> (untuk log transaksi).
    Jenis Jenis pencadangan yang dilakukan: Log Penuh, Diferensial, atau 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. Kosong untuk pencadangan file.
    LSN Terakhir Nomor urutan log (LSN) dari transaksi terakhir dalam kumpulan cadangan. Kosong untuk pencadangan file.
    Titik Pemeriksaan 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, disajikan 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 set cadangan kedaluwarsa.

    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 Centang 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. Kisi 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 MEMULIHKAN 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 halaman yang rusak untuk 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 online file yang berisi halaman dapat berhenti di LSN target pengulangan. Untuk mempelajari LSN target pengulangan file saat ini, lihat kolom redo_target_lsn 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 ekor, yang dipulihkan dengan RECOVERY. Contoh ini melakukan pemulihan online. Dalam contoh, ID file file B adalah , dan ID halaman halaman yang rusak adalah 57, , 202916, dan 10161.

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