Відновлення бази даних SQL Server 2012 у високій доступності


13

У мене є база даних, яка перебуває у режимі постійної доступності, синхронізованому з іншою базою даних в іншому екземплярі. Як я можу відновити з .bakфайлу в основну базу даних за допомогою T-SQL?

Я новачок у високій доступності, і мені порадили, що мені потрібно вийняти базу даних із високою доступністю, перш ніж я можу відновити, а потім знову поставити її у високу доступність, але я не впевнений.

Я сподіваюся, що я можу просто відновити прямо в основний, поки AlwaysOnфункція все ще включена, і вона автоматично синхронізується із вторинною.

Відповіді:


15

Слухайте свого радника. Відновлюючи резервну копію, ви по суті замінюєте схему та дані бази даних. Вам потрібно буде вимкнути синхронізацію, видалити БД з HA та виконати відновлення на первинному та репліку, залишивши версію репліку у відновлюваному стані, використовуючи З NORECOVERY. Після того, як ваша резервна копія встановлена, поверніть БД назад в HA і знову почніть синхронізацію.

HA дуже схожий на дзеркальне відображення і використовує подібну технологію, майже не настільки вибагливий. Ви також захочете поводитись із вашими БД баз аналогічно.

Код буде подібний до наступного:

--основна

ALTER AVAILABILITY GROUP MyAG REMOVE DATABASE AdventureWorks2012;

--основна

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;

- другорядний

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;

--основна

ALTER AVAILABILITY GROUP MyAG ADD DATABASE AdventureWorks2012;

- другорядний

ALTER DATABASE AdventureWorks2012 SET HADR AVAILABILITY GROUP = MyAG;

Питання щодо відповіді, наведеної вище ... У наданому коді PRIMARY було відновлено за допомогою NoRecovery. Моя думка була, що тільки Репліка буде зроблена з NoRecovery.
Трует

Правильно, але читайте. Відновлення журналу були закодовані, а потім, нарешті, З ВІДНОСНЕННЯМ, щоб зробити його доступним для використання.
Стів Манґямелі

Якщо хтось не в змозі знову приєднатися до групи доступності для вторинного, можливо, знадобиться відновити журнал транзакцій. Це джерело допомогло вирішити таку помилку: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.
Ганс Вонн

Отже, журнал відновлюється. Дивіться коментар вище.
Стів Манґямелі

@SteveMangiameli дякую вам за це. Це стане в нагоді. Я розумію, що зараз ви відновлюєтесь із логічного резервного пристрою, а не з файлу. Під час відновлення з файлу я використовую окремі файли .bak та .trn.
Ганс Вонн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.