Подтвердить что ты не робот

Как подключить MDF без файла журнала?

Я пытаюсь подключить Yafnet.mdf в SQL Server Management Studio, у которого нет файла журнала.

Я получаю ошибку ниже. Любые идеи, как это можно сделать?

Исключение произошло при выполнении инструкции Transact-SQL или партии. (Microsoft.SqlServer.ConnectionInfo)

Невозможно открыть физический файл "C:\sql_logs\YAFnet_log.ldf". Операционная система ошибка 2: "2 (система не может найти указанный файл.)". (Microsoft SQL Server, ошибка: 5120)

4b9b3361

Ответ 1

Для вашей начальной ситуации кажется, что вы пробовали что-то вроде этого (или независимо от того, что GUI готовит для вас, когда вы проходите через диалоги):

CREATE DATABASE YAFnet ON (FILENAME = N'C:\sql_data\YAFnet.mdf')
FOR ATTACH;

Однако этот метод требует как файла mdf, так и файла ldf. В противном случае вы получите сообщение об ошибке, подобное:

Msg 5120, уровень 16, состояние 101, строка 1
Не удалось открыть физический файл "C:\sql_logs\YAFnet_log.ldf". Ошибка операционной системы 2: "2 (система не может найти указанный файл.)".

Теперь можно продолжить, даже если у вас есть только файл mdf. Предполагая, что у вас есть файл mdf, который был должным образом отделен от SQL Server, вы должны иметь возможность прикреплять файл mdf без файла журнала, используя следующий синтаксис:

CREATE DATABASE YAFnet ON (FILENAME = N'C:\sql_data\YAFnet.mdf')
FOR ATTACH_REBUILD_LOG;

Однако, похоже, что в вашем случае файл не был должным образом отделен от SQL Server:

Msg 1813, уровень 16, состояние 2, строка 1
Физическое имя файла "C:\sql_logs\YAFnet_log.ldf" может быть неверным. Журнал не может быть перестроен, поскольку открытые транзакции/пользователи были открыты, когда база данных была отключена, контрольная точка не была создана в базе данных или база данных была доступна только для чтения. Эта ошибка может возникнуть, если файл журнала транзакций был удален или потерян вручную из-за сбоя оборудования или среды.

Существует несколько возможных объяснений, в том числе упомянутых в сообщении об ошибке. Возможно, он был извлечен из некоторой недействительной тени SAN или отключен во время чтения или восстановлен после сбоя SQL Server или базовой системы или поврежден во время копирования/загрузки или кто знает, что еще.

Вам нужно будет вернуться к поддержке Yaf или к поддержке своего поставщика услуг, чтобы узнать, имеются ли надлежащие резервные копии или, если это не так, альтернативные копии файла mdf. Также имейте в виду, что никто из нас не знает, что такое Яф, или имеет какой-либо способ проверить, о каком Яфе вы говорите.

В противном случае вам кажется, что вам не повезло, поскольку этот конкретный файл mdf недействителен и, следовательно, не будет очень далеко.

Именно поэтому подходы к копированию файлов уровня detach/attach и/или O/S являются не очень полезными методами резервного копирования (или миграции, если на то пошло) для SQL Server. Вам нужен правильный план резервного копирования/восстановления, что означает наличие правильных резервных копий /diff/log, подходящих для вашего допуска к потере данных. И отключение базы данных почти всегда уступает идее - когда что-то происходит с файлом mdf во время или после отсоединения, теперь у вас есть ZERO копии вашей базы данных.

Ответ 2

Есть несколько вещей, которые вы можете попробовать. Во-первых:

CREATE DATABASE Yafnet ON (NAME = 'Yafnet', FILENAME='*filepath*\Yafnet.mdf') FOR ATTACH;

Если это не сработает, попробуйте следующее:

Щелкните правой кнопкой мыши SSMS и запустите как администратор. Затем попробуйте снова подключиться. Это должно решить проблему.