Отсоединить и присоединить базу данных в режиме ожидания
Проблема:
Сбой резервного копирования на одном из наших серверов с сообщением ниже: (резервные копии создаются через Netbackup)
Could not allocate space for object 'dbo.backupfile'.'PK__backupfi__57D1800AC4FFEEA3'
in database 'msdb' because the 'PRIMARY' filegroup is full. Create disk space by deleting
unneeded files, dropping objects in the filegroup, adding additional files to the
filegroup, or setting autogrowth on for existing files in the filegroup.>
DBMS MSG - SQL Message <3009><[Microsoft][ODBC SQL Server Driver][SQL Server]Could not
insert a backup or restore history/detail record in the msdb database. This may indicate a
problem with the msdb database.
При проверке я увидел, что диск для монтирования, на котором находится основной файл данных msdb, был заполнен (общий размер: 99 ГБ, свободное пространство: 0 байт). На диске не было никаких ненужных файлов, которые я мог бы удалить и получить немного свободного места на диске. Поэтому я осмотрел диск и нашел файл журнала базы данных размером 6 ГБ, из которых более 5,5 ГБ было свободно. Я думал, что сокращение его освободит достаточно места на диске и пока решит проблему. Но когда я попытался сжать файл журнала, я получил сообщение об ошибке "Он был помечен как ожидаемый при восстановлении". Опасаясь худшего, я обновил список баз данных в Object Explorer и Bingo..!! там он был отмечен как "Подозреваемый"
4 ответа
Решение:
Я проверил другие диски на сервере и нашел достаточно свободного места. Поэтому моя следующая попытка состояла в том, чтобы отсоединить базу данных (скажем, "XYZ"), переместить ее файл журнала на другой диск и затем подключить его. Это освободит достаточно места на диске, а также позволит БД восстановиться из режима подозрения. Поэтому я попытался отсоединить БД, но это не сработало.
Cannot detach a suspect database. It must be repaired or dropped. Cannot be opened as the DB is in Suspect mode
Поэтому я попытался перевести его в однопользовательский режим: выполнить скрипт, чтобы перевести БД в однопользовательский режим.
USE master;
GO
ALTER DATABASE [XYZ]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
Установите базу данных в автономный режим.
-- Take the Database Offline
ALTER DATABASE [XYZ] SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO
Теперь я смог успешно отсоединить базу данных. После отсоединения я скопировал файл журнала на другой диск, на котором было достаточно свободного места. Затем я попытался прикрепить БД обратно. Но при подключении, он дал следующее сообщение об ошибке:
Error: 5123 CREATE FILE encountered operating system error 5A(Access denied.)
Чтобы решить эту проблему, выполните следующие шаги:
- Щелкните правой кнопкой мыши на файле.mdf -> Свойства
- В разделе "Безопасность" нажмите "Продолжить".
- Нажмите "Добавить", чтобы включить вас в "Группы или имена пользователей"
- Укажите логин в появившемся всплывающем окне "Проверить имена" и "ОК".
- После добавления вашего логина нажмите на него, и в поле ниже (Права доступа для пользователя) установите флажок Разрешить "Полный доступ" для пользователя. Очень важно установить флажок "Полный доступ", поскольку по умолчанию у пользователя будут только разрешения "Чтение" и "Чтение и выполнение". И если вы попытаетесь подключиться только с этими разрешениями по умолчанию, вы снова получите ошибки "Отказано в доступе".
После этого я смог успешно подключить БД, и было установлено, что она имеет статус "Нормальный".
Надеюсь, это поможет кому-нибудь:)
EXEC sp_resetstatus your_db_name
ALTER DATABASE your_db_name SET EMERGENCY
DBCC checkdb (your_db_name)
ALTER database your_db_name SET SINGLE_USER with ROLLBACK IMMEDIATE
DBCC CHECKDB (your_db_name, REPAIR_ALLOW_DATA_LOSS)
Alter database your_db_name SET MULTI_USER
Как я уже упоминал здесь,
Вы также можете использовать это для выполнения инструмента восстановления SQL для восстановления базы данных SQL из подозрительного режима.
- Загрузите, установите и запустите программное обеспечение Stellar Repair для MS SQL.
- В окне «Выбор базы данных» выберите «Обзор» или «Поиск», чтобы выбрать файл базы данных SQL (.mdf) подозрительной базы данных.
- После выбора файла нажмите «Восстановить». Предварительно просмотрите восстановленный файл MDF на предмет восстанавливаемых объектов базы данных сервера SQL.
- Нажмите «Сохранить» в меню «Файл», чтобы сохранить исправленный файл.
- В окне «Сохранить базу данных» выполните операцию сохранения для доступа к базе данных.
Никогда не отключайте базу данных в этой ситуации. Я также предлагаю не запускать DBCC CHECKDB с опцией восстановления, разрешающей потерю данных, так как вы можете потерять важные данные. Вы можете проверить эту ссылку: https://community.spiceworks.com/topic/1078473-sql-server-database-in-suspect-mode