Memulihkan database SQL Server 2012 dalam ketersediaan tinggi

13

Saya memiliki database yang selalu dalam mode ketersediaan tinggi yang disinkronkan dengan database lain pada contoh yang berbeda. Bagaimana cara memulihkan dari .bakfile ke dalam basis data primer T-SQL?

Saya baru untuk ketersediaan tinggi dan saya telah disarankan bahwa saya harus mengambil database dari ketersediaan tinggi sebelum saya bisa melakukan pemulihan dan kemudian memasukkannya kembali ke ketersediaan tinggi lagi tetapi saya tidak yakin.

Saya berharap saya bisa langsung mengembalikan ke primer sementara AlwaysOnmasih diaktifkan dan itu akan otomatis disinkronkan dengan sekunder.

rebus
sumber

Jawaban:

15

Dengarkan penasihat Anda. Dengan mengembalikan cadangan, Anda pada dasarnya mengganti skema dan data basis data. Anda perlu mematikan sinkronisasi, menghapus DB dari HA dan melakukan pengembalian pada primer dan replika, meninggalkan versi replika dalam keadaan memulihkan dengan menggunakan DENGAN NORECOVERY. Setelah cadangan tersedia, masukkan kembali DB ke HA dan mulai sinkronisasi lagi.

HA sangat mirip dengan mirroring dan menggunakan teknologi yang sama, hanya saja tidak hampir rewel. Anda juga ingin memperlakukan HA DB Anda dengan cara yang sama.

Kode akan serupa dengan yang berikut:

--pada primer

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

--pada primer

RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2012_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks2012_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\NewAdvWorks.

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH RECOVERY;

--Di sekunder

RESTORE DATABASE AdventureWorks2012
   FROM AdventureWorksBackups
   WITH NORECOVERY, 
      MOVE 'AdventureWorks2012_Data' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\NewAdvWorks.mdf', 
      MOVE 'AdventureWorks2012_Log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\NewAdvWorks.ldf';

RESTORE LOG AdventureWorks2012
   FROM AdventureWorksBackups
   WITH NORECOVERY;

--pada primer

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

--Di sekunder

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;
Steve Mangiameli
sumber
Pertanyaan mengenai jawaban di atas ... Dalam kode yang disediakan, PRIMARY dipulihkan dengan NoRecovery. Itu adalah pikiran saya bahwa hanya Replika yang akan dilakukan dengan NoRecovery.
Truett
Benar, tetapi teruslah membaca. Pemulihan log diberi kode dan akhirnya DENGAN PEMULIHAN untuk membuatnya tersedia untuk digunakan.
Steve Mangiameli
Jika seseorang tidak dapat bergabung kembali dengan grup ketersediaan pada sekunder, maka memulihkan log transaksi mungkin diperlukan. Sumber ini membantu menyelesaikan kesalahan berikut:The mirror database, "dbname", has insufficient transaction log data to preserve the log backup chain of the principal database. This may happen if a log backup from the principal database has not been taken or has not been restored on the mirror database.
Hans Vonn
Karenanya log mengembalikan. Lihat komentar di atas.
Steve Mangiameli
@SteveMangiameli terima kasih telah menyiapkan ini. Ini sangat berguna. Saya mengerti sekarang Anda sedang memulihkan dari perangkat cadangan logis, bukan dari file. Ketika saya memulihkan dari file saya menggunakan file .bak dan .trn terpisah.
Hans Vonn