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

Basis Data Sistem SQL Server – Pulihkan Basis Data Sistem

Dalam artikel sebelumnya dari seri Database Sistem SQL Server, kita telah mempelajari tujuan dari semua database Sistem SQL Server yang datang sebagai bagian dari instalasi SQL Server dan memahami praktik terbaik yang harus diterapkan untuk mereka. Kami juga telah memahami database Tempdb dan MSDB secara lebih rinci. Karena Pencadangan dan Pemulihan basis data Sistem sedikit berbeda dibandingkan dengan basis data Pengguna, kami akan membahas cara Mencadangkan basis data Sistem dan Memulihkan basis data sistem dari Cadangan secara mendetail dalam artikel ini.

Cadangkan Basis Data SQL

Istilah Cadangan mengacu pada penyalinan data di dalam database sebagai file cadangan yang dapat digunakan untuk memulihkan atau memulihkan data lebih lanjut.

Cadangan Penuh database akan berisi salinan data di seluruh File Data dan file Log untuk dipulihkan sebagai database atau melakukan pemulihan tepat waktu jika terjadi bencana atau kegagalan besar. Oleh karena itu, Pencadangan Penuh secara teratur pada sistem serta basis data Pengguna sangat penting.

Terlepas dari Full Backup, SQL Server mendukung beberapa opsi Backup lainnya seperti Differential Backup, Transactional Log backup, File backup, dll., tetapi kami tidak akan fokus pada mereka karena itu di luar cakupan artikel ini.

Pencadangan Basis Data Lengkap harus dijadwalkan untuk dijalankan secara berkala atau setelah perubahan konfigurasi tertentu. Meskipun SQL Server dapat menerima Cadangan Basis Data Lengkap dalam ekstensi file yang berbeda, disarankan untuk menyimpan cadangan tersebut sebagai file *.bak untuk klasifikasi dan pemeliharaan yang lebih mudah.

Sintaks basis data Cadangan memiliki banyak opsi yang tersedia, tetapi kami hanya akan fokus pada perintah dasar yang diperlukan untuk mengambil Cadangan Penuh dari basis data apa pun. Sintaks lengkapnya ada di artikel MSDN.

Sintaks DATABASE CADANGAN (minimal)

BACKUP DATABASE <Database_name> 
TO DISK = <File_Path>
GO

Cadangkan Basis Data Pengguna

Untuk mengambil cadangan penuh AdventureWorks database, ganti saja Nama Database dan Jalur File pada perintah CADANGAN DATABASE di atas dan jalankan:

BACKUP DATABASE [AdventureWorks] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak'
GO

Cadangkan Database Sistem

Dengan menggunakan perintah BACKUP DATABASE di atas, kita dapat mengambil Full Backup database sistem, seperti master, msdb, dan model:

BACKUP DATABASE master 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak'
GO
BACKUP DATABASE model 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak'
GO
BACKUP DATABASE msdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak'
GO

Kita dapat menavigasi ke jalur folder di atas, dan di sana kita melihat Cadangan Basis Data Lengkap berhasil dibuat untuk basis data pengguna dan basis data sistem:

Apakah Mungkin untuk Mencadangkan Database tempdb?

Mari kita coba mengambil Full Backup dari database sistem tempdb menggunakan sintaks BACKUP DATABASE yang sama:

BACKUP DATABASE tempdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\tempdb_Full.bak'
GO

Seperti yang telah kita bahas di artikel sebelumnya, tempdb adalah satu-satunya database yang Cadangan tidak dapat diambil . Database tempdb akan dibuat baru setiap kali layanan SQL Server dimulai. Oleh karena itu, jika ada masalah dengan tempdb, memulai ulang layanan SQL Server akan membantu menyelesaikannya.

Pulihkan Basis Data

Memulihkan database dari Full Backup(*.bak) mengembalikan database dengan data lengkap atau "memutar kembali" database ke titik waktu tertentu. Perintah RESTORE juga dapat digunakan untuk memulihkan File, Filegroups, atau Log Transaksi, tetapi itu bukan cakupan artikel saat ini.

Untuk memulihkan Cadangan Basis Data Lengkap , kita dapat menggunakan sintaks di bawah ini. Catatan:Mirip dengan perintah BACKUP, perintah RESTORE memiliki banyak opsi, tetapi kami akan menggunakan opsi dasar saja. Anda dapat menemukan informasi mendetail tentang opsi tersebut di artikel MSDN khusus.

KEMBALIKAN sintaks DATABASE

RESTORE DATABASE <Database_Name> 
FROM  DISK = <File Path>
WITH  REPLACE
GO

Pulihkan Basis Data Pengguna

Untuk memulihkan AdventureWorks database dari Full Backup yang kita ambil tadi, kita bisa menggunakan perintah RESTORE DATABASE, menggantikan Database Name dan Jalur File seperti yang ditunjukkan di bawah ini:

RESTORE DATABASE [AdventureWorks] 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak' 
WITH REPLACE
GO

Pulihkan Basis Data Model

Mari kita coba untuk memulihkan database sistem model menggunakan perintah RESTORE DATABASE:

RESTORE DATABASE model 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak' 
WITH REPLACE
GO

Cadangan basis data model dapat berhasil dipulihkan menggunakan perintah RESTORE DATABASE default.

Pulihkan Basis Data Master

Sekarang, mari kita coba memulihkan database master Sistem menggunakan perintah RESTORE DATABASE:

RESTORE DATABASE master 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak' 
WITH  REPLACE
GO

Itu melemparkan kesalahan yang menyatakan bahwa contoh SQL Server harus berjalan dalam mode pengguna tunggal untuk memulihkan database master. Seperti yang ditunjukkan oleh pesan kesalahan, kita perlu memulai instance SQL Server dalam mode pengguna tunggal dan kemudian mencoba memulihkan database master.

Untuk memulai instance SQL Server dalam mode single-user, kita dapat menerapkan salah satu metode berikut:

  • Prompt perintah
  • Parameter Startup SQL Server di Manajer Konfigurasi SQL Server.

Pendekatan Prompt Perintah

Untuk memulai instance SQL Server dalam mode single-user melalui command prompt, buka Command Prompt dengan Run as Administrator pilihan seperti yang ditunjukkan di bawah ini:

Setelah selesai, ketikkan perintah:

NET STOP <SQL_Server_Service_Name>

SQL_Server_Service_Name dapat diperoleh melalui Manajer Konfigurasi SQL Server atau services.msc

Pengelola Konfigurasi Server SQL

Layanan.msc

Karena Layanan SQL Server kami adalah instance default, kami dapat menggunakan nama MSSQLSERVER seperti yang disorot di atas. Setelah dimasukkan, ia akan meminta konfirmasi untuk menghentikan semua layanan yang bergantung. Kami juga dapat menghentikan Layanan Agen Server SQL dengan mengetikkan Y untuk Ya .

Ketika Layanan SQL Server dihentikan, kita dapat memulainya dalam mode pengguna tunggal. Jalankan perintah di bawah ini di mana /m berarti memulai Layanan SQL Server dalam mode pengguna tunggal.

NET START MSSQLSERVER /m

Ketika itu dilakukan, kita dapat mencoba untuk memulihkan database master. Jalankan perintah RESTORE CADANGAN seperti sebelumnya:

Dengan memulai SQL Server Instance dalam mode Single-User, kami dapat memulihkan database sistem master dengan sukses dari Cadangan Database Lengkap yang terakhir diketahui tanpa masalah. Jadi, kita telah mempelajari bahwa untuk memulihkan database master, instance SQL Server harus dalam mode Single-user.

Dengan instance SQL Server dalam mode Single-user, hanya satu pengguna yang dapat terhubung dan setelah aktivitas Restorasi kami selesai, kami perlu mengubahnya kembali ke mode Multi-user dengan Menghentikan instance SQL Server dan memulai instance SQL Server tanpa opsi /m seperti yang ditunjukkan di bawah ini:

NET STOP MSSQLSERVER
NET START MSSQLSERVER

Setelah dimulai dalam mode normal atau mode Multi-pengguna, semua pengguna dapat terhubung ke instance SQL Server dan melakukan aktivitas mereka. Kami juga dapat memverifikasi bahwa basis data master telah dipulihkan ke waktu Pencadangan Penuh dilakukan dan setiap perubahan konfigurasi yang dilakukan setelah itu perlu dilakukan lagi.

Beberapa hal yang perlu diperhatikan saat SQL Server Instance dalam Single-User Mode:

  • Saat instance SQL Server dalam mode single-user, hanya satu sesi pengguna yang dapat terhubung. Oleh karena itu, pastikan bahwa Layanan Agen Server SQL dan semua layanan terkait SQL Server lainnya berada di berhenti status. Jika tidak, koneksi tersebut dapat dibuat terlebih dahulu, dan jika itu terjadi, kami tidak dapat terhubung ke SQL Server untuk memulihkan database.
  • Saat menghubungkan melalui SSMS dalam mode single-user, putuskan Object Explorer dan hubungkan hanya melalui Query Window. Jika koneksi dibuat dari Object Explorer, koneksi tunggal dibuat. Karenanya, Anda tidak dapat terhubung dari Jendela Kueri. Lihat tangkapan layar di bawah ini – ini menunjukkan bagaimana menghubungkan hanya jendela Permintaan Baru tanpa menghubungkan melalui Object Explorer:

Parameter Startup SQL Server di Pengelola Konfigurasi

Mereka yang lebih nyaman dengan GUI daripada command prompt dapat menerapkan pendekatan di bawah ini.

1). Buka Pengelola Konfigurasi Server SQL dengan mengetik MSSQLManager13.msc ke dalam prompt perintah. Di sini, 13 merujuk ke SQL Server 2016, jadi gunakan nomor yang sesuai untuk versi SQL Server lainnya:

  • SQL Server 2012SQLServerManager11.msc
  • SQL Server 2014SQLServerManager12.msc
  • SQL Server 2016SQLServerManager13.msc
  • SQL Server 2017SQLServerManager14.msc
  • SQL Server 2019SQLServerManager15.msc

2). Perluas Layanan SQL Server :

3). Klik kanan pada SQL Server Service yang diidentifikasi sebagai SQL Server (MSSQLSERVER) > Properti .

4). Pilih Parameter Startup tab menu.

5). Klik -m di Tentukan parameter startup bidang, lalu klik Tambahkan untuk memulai Layanan SQL Server dalam mode Single-User.

6). Klik Oke dan restart SQL Server Service untuk memulai SQL Server Service dalam mode Single-user.

Untuk mengubah contoh SQL Server dari mode Single-User ke mode Multi-user atau mode normal setelah memulihkan database master, cukup Klik parameter -m dari Parameter yang Ada s , Klik Hapus dan mulai ulang layanan SQL Server.

Pulihkan Basis Data MSDB

Sekarang, mari kita coba memulihkan cadangan database sistem msdb menggunakan perintah RESTORE DATABASE default:

RESTORE DATABASE msdb 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak' 
WITH  REPLACE
GO

Upaya ini membawa kesalahan kepada kami yang menyatakan Akses eksklusif tidak dapat diperoleh karena database sedang digunakan . Pesan kesalahan ini menunjukkan bahwa beberapa proses lain menggunakan msdb . Jadi, kita perlu menerapkan salah satu pendekatan di bawah ini untuk memulihkan database msdb dengan benar:

  • Mulai Instance atau Layanan SQL Server dalam mode pengguna tunggal seperti yang kita lakukan sebelumnya untuk menghindari siapa pun menghubungkan dan mengakses msdb basis data.
  • Atau bawa msdb database ke mode pengguna tunggal tanpa ada pengguna yang menghubungkannya.

Karena kami tahu cara mengubah Instance atau Layanan SQL Server ke mode pengguna tunggal saat memulihkan basis data sistem master, kami akan mencoba opsi kedua dengan mengubah basis data msdb ke mode Pengguna tunggal untuk memulihkan cadangan basis data msdb.

Jalankan perintah di bawah ini:

USE [master]
GO
ALTER DATABASE [msdb] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

Penting :Eksekusi perintah di atas dapat gagal dalam kasus berikut:

  • Layanan Agen Server SQL aktif dan berjalan. Untuk memperbaiki kegagalan, hentikan Layanan Agen Server SQL dan coba lagi.
  • Setiap sesi Pengguna terhubung ke database msdb. Kita dapat mengetahui koneksi aktif ke msdb atau database lain dengan menggunakan query di bawah ini:
use master
GO
select spid
from sys.sysprocesses
where dbid = db_id('msdb')

Jika kueri ini membawa hasil apa pun, ini menunjukkan bahwa beberapa sesi pengguna terhubung ke database msdb. Dalam hal ini, kita harus mematikan sesi tersebut dengan perintah KILL dan mengganti spid diperoleh dari eksekusi query di atas:

KILL <spid>

Saat tidak ada sesi yang terhubung ke msdb database, kita akan berhasil membawa database msdb ke mode single-user. Setiap kali database dalam mode Single-user, kita akan dapat melihat kata (Single User) yang ditampilkan di dekat database seperti yang disorot di bawah ini untuk database msdb:

Mari kita coba memulihkan msdb database sekarang menggunakan perintah RESTORE DATABASE kami:

Dengan database msdb dalam mode pengguna tunggal, kami dapat memulihkan msdb database berhasil dari cadangan lengkap terakhir yang diketahui baik msdb basis data. Memulihkan database dari cadangan akan secara default membawanya ke mode multi-pengguna dan jika masih dalam mode Single-user karena alasan apa pun, kita dapat menjalankan perintah di bawah ini untuk mengembalikannya ke mode multi-pengguna:

USE [master]
GO
ALTER DATABASE [msdb] SET MULTI_USER
GO

Membangun Kembali Basis Data Sistem

Untuk Produksi yang ideal apa pun lingkungan, sangat penting untuk memiliki Cadangan Penuh database Sistem untuk memulihkan database sistem tanpa kehilangan data jika terjadi kesalahan yang tidak disengaja oleh pengguna atau Kerusakan Database atau Pemulihan Bencana.

Dalam skenario kasus terburuk, jika Layanan SQL Server tidak dapat dimulai maka pertama-tama kita harus mencoba memulihkan basis data sistem dari Cadangan Penuh yang terakhir diketahui dan jika kami tidak memiliki Cadangan Penuh yang tersedia dan tidak dapat memulai Layanan SQL Server, maka kami tersisa dengan hanya satu opsi terakhir yaitu, Membangun kembali basis data sistem. Catatan :Membangun kembali basis data sistem akan menghapus semua konfigurasi tingkat Server yang disimpan di semua basis data sistem dan kami mungkin kehilangan semua konfigurasi Tingkat Server/Instance seperti Login, konfigurasi Agen Server SQL, detail penting lainnya yang disimpan di seluruh basis data sistem yang telah kita lihat di artikel sebelumnya.

Mari kita lihat sekilas tentang cara membangun kembali database sistem (Seperti yang disebutkan di atas, proses ini harus dilakukan sebagai langkah terakhir untuk mengembalikan instance SQL Server tanpa adanya backup penuh database sistem).

Untuk membangun kembali database sistem, kita memerlukan media Instalasi SQL Server, baik dipasang atau disalin ke Server tempat Instance SQL Server kita diinstal. Setelah selesai, kita harus mengikuti langkah-langkah di bawah ini:

  1. Di Command Prompt, navigasikan ke jalur di mana file setup SQL Server (setup.exe) berada:

    C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\SQLServer2016
  2. Jalankan perintah di bawah ini, ganti semua parameter dengan nilai yang valid. Nilai TINDAKAN =REBUILDDATABASE menunjukkan bahwa semua database sistem akan dibangun kembali setelah menjalankan perintah tersebut.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]

Parameter yang akan diubah meliputi:

  • NamaInstance – Nama Instance SQL Server, dalam kasus kami adalah RRJ
  • Akun – nama akun sysadmin, dalam kasus kami adalah sa
  • Kata Sandi Kuat – kata sandi yang kuat untuk sa akun sysadmin.
  • NamaKolasi – Nama Collation database SQL Server jika perlu diubah.

Kesimpulan

Kami telah mempelajari cara Mencadangkan dan Memulihkan basis data Pengguna dan Sistem dan memahami langkah-langkah tambahan yang diperlukan untuk Memulihkan basis data Sistem seperti basis data sistem master dan msdb. Dalam kasus kehilangan Cadangan Penuh dari database Sistem, kami juga telah mempelajari cara Membangun kembali database Sistem dari media Instalasi SQL Server dan memahami konfigurasi terkait kehilangan data yang terlibat saat membangun kembali database sistem. Ringkasnya, kami secara tidak langsung memahami pentingnya menjadwalkan Pencadangan Penuh untuk database Sistem selain database Pengguna.

Terima kasih atas waktu Anda, dan kita akan segera bertemu lagi dengan artikel menarik lainnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa tahu jika SQLexception dilemparkan karena pelanggaran kunci asing?

  2. Bagaimana cara memeriksa hasil pekerjaan paket SSIS setelah menyelesaikan eksekusinya?

  3. Mengenal Beban Kerja SQL Server Anda

  4. Ekspresi Reguler MSSQL

  5. Apa Perbedaan antara CHAR dan VARCHAR di SQL Server - Tutorial SQL Server / T-SQL Bagian 31