MS SQL восстановление базы данных в другую базу
Привет))
Такой вопрос. Есть боевая база данных 1С, в которой 1сники чёта там напортачили при обновлении, и меня попросили восстановить её бэкап в другую базу, чтобы босс мог посравнивать транзакции и чёта там ещё, что он хотел посравнивать.
Так вот, в sql management studio делаю восстановить базу, указываю источник - бэкап боевой, указываю цель - новая база с другим именем, жду, и что получаю - неработоспособную боевую базу, а все журналы транзакций переехали в новую базу!!
Ну кто его просил? Зачем он их вообще трогал, я же просил тупо восстановить из бэкапа, вообще не трогая боевую, чего мэнэджемент студио вообще стал лезть в журналы транзакций боевой?
Друзья, как мне снова сделать работоспособной боевую базу, в которой сегодня работали люди, бэкапа то её нету за сегодня, есть вчерашние!
Привет! Понимаю твою ситуацию, и это действительно может вызвать стресс. Восстановление базы данных в другую базу без нарушения боевой требует внимательного подхода. Вот несколько шагов, которые помогут разобраться с проблемой и минимизировать повреждения:
### 1. **Не трогай пока что боевую базу**
Прежде всего, убедись, что ты больше не делаешь операций на боевой базе до выяснения, что произошло. Сейчас важно предотвратить дальнейшее изменение данных.
### 2. **Восстановление боевой базы**
Вероятно, проблема возникла из-за того, что SQL Server "переехал" с транзакционными логами между базами, как ты заметил. Вот как можно восстановить базу:
- Проверь состояние боевой базы. Выполни в Management Studio запрос:
```sql
SELECT name, state_desc
FROM sys.databases
WHERE name = 'Название_боевой_базы';
```
Это покажет текущее состояние базы (например, "RECOVERY_PENDING" или "SUSPECT"). Если база находится в состоянии, отличном от "ONLINE", необходимо выполнить действия по её восстановлению.
- Если база находится в "RECOVERY_PENDING" или "SUSPECT", попробуй перевести её в режим восстановления:
```sql
ALTER DATABASE Название_боевой_базы SET EMERGENCY;
GO
DBCC CHECKDB (Название_боевой_базы);
GO
ALTER DATABASE Название_боевой_базы SET ONLINE;
```
Это позволит провести диагностику и попытку восстановления базы. Если ошибки будут найдены, их стоит исправить.
### 3. **Восстановление из бэкапа в новую базу корректно**
Чтобы избежать проблем с восстановлением бэкапа в новую базу (и не трогать транзакционные логи боевой базы), делай следующее:
- Перед восстановлением **укажи явно новые файлы данных и логов для новой базы**. Это нужно, чтобы файлы новой базы не пересекались с боевой. Делается это через вкладку "Файлы" при восстановлении базы в SQL Server Management Studio:
1. Выбираешь бэкап для восстановления.
2. Во вкладке "Files" (Файлы) меняешь путь и имена файлов `.mdf` и `.ldf` для новой базы, чтобы они не совпадали с боевой базой.
Если этого не сделать, SQL Server может "переехать" на файлы боевой базы, как это произошло у тебя.
### 4. **Проверь транзакционные логи**
Ситуация с логами могла возникнуть из-за неправильной настройки восстановления базы. Убедись, что логи транзакций не указывают на боевую базу, когда ты восстанавливаешь другую.
- Проверь файлы транзакционных логов и убедись, что они настроены корректно и указывают на правильные базы.
### 5. **Бэкап боевой базы на текущий момент**
На будущее рекомендуется настроить регулярное резервное копирование с частым сохранением журналов транзакций (например, каждые 15 минут), чтобы была возможность восстановить базу даже при ошибках в процессе работы.
В текущей ситуации, если боевую базу удалось вернуть в рабочее состояние, сделай её полный бэкап.
---
Если боевую базу вернуть не удалось с помощью этих шагов, можешь попробовать восстановить вчерашний бэкап и транзакционные логи (если они сохранились), чтобы вернуть базу к состоянию на текущий момент, но это крайний шаг, и может потребовать дополнительных операций по восстановлению логов вручную.
Всё произошло как ты и заказывал
Зачем проводить эксперементы с тем что не понимаешь
Посравнивать журналы транзакций это сильно
Ищи нормальную техподдержку на стороне за деньги, если не соображаешь..