Создание копии сайта ASP.NET MVC на той же машине - катастрофа? - PullRequest
0 голосов
/ 20 января 2011

Я хотел запустить (используя Cassini) две копии моего веб-приложения с одного и того же компьютера - вполне разумно (или я так думал!).Один с использованием порта 80, другой с использованием порта 81. Поэтому я сделал следующее:

  1. Остановлено Cassini и SQL Express
  2. Скопируйте и вставьте корневую папку сайта (и переименовали ее)
  3. Открыл Cassini explorer и настроил новый сайт на порту 81 и указал его на скопированную папку
  4. Изменил web.config скопированного сайта, чтобы строка подключения использовала «Database = NewAlias»потому что SQL Express не может присоединить две базы данных с одинаковым псевдонимом.
  5. Запустил Cassini и SQL Express снова

Когда я перешел на сайт NEW , первоепоявляется:

Невозможно открыть физический файл "C: \ site1 \ App_Data \ db_log.ldf".Ошибка операционной системы 32: «32 (процесс не может получить доступ к файлу, поскольку он используется другим процессом.)».Невозможно создать файл «C: \ site2 \ App_Data \ db_log.LDF», поскольку он уже существует.Измените путь к файлу или имя файла и повторите операцию.Не удается открыть базу данных "NewAlias", запрошенную при входе в систему.Ошибка входаОшибка входа для пользователя 'NT AUTHORITY \ SYSTEM'.Ошибка активации файла.Физическое имя файла «C: \ site1 \ App_Data \ db_log.ldf» может быть неправильным.

Попытка открыть mdf из местоположения OLD (даже если в Интернете.config указывает точный путь MDB к новому местоположению), но пытается создать журнал в расположении NEW .Затем, в довершение всего, отбрасывает намек на то, что он не может получить доступ к ldf из местоположения OLD , или, может быть, не может войти в него.

Хорошо сделано, Microsoft и ваша команда еще раз для некоторыхдействительно интуитивные ошибки!Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2011

Другая большая проблема, которая иногда возникает при выполнении такого рода действий (и в сценарии выше, о котором смутно скрывается сообщением об ошибке), заключается в том, что, хотя используется скопированный файл MDF, он все еще связан с исходным LDF(журнальный файл).Вы можете запустить эту команду, чтобы получить список файлов, которые используются для подключенного экземпляра:

sp_helpfile

Что даст вам что-то вроде этого в ответ:

name    fileid  filename    filegroup   size    maxsize growth  usage   
=========================================================
db  1   C:\site2\App_Data\db.mdf    PRIMARY 24192 KB    Unlimited   1024 KB data only   
db_log  2   C:\site1\App_Data\db_log.ldf        78080 KB    2147483648 KB   10% log only    

Выпо выводу видно, что файл журнала используется совместно со старой базой данных, что, очевидно, вызовет проблемы, поэтому вы можете изменить его так, чтобы он указывал на скопированный файл журнала следующим образом:

ALTER DATABASE NewAlias MODIFY FILE (NAME = db_log, FILENAME='c:\site2\App_Data\db_log.ldf')
0 голосов
/ 05 февраля 2011

Я не думаю, что вы можете просто скопировать действующую базу данных через файлы.Если вы сначала отсоедините его, а затем скопируете, вы можете затем присоединить его (с помощью sp_detach_db ), подключив файлы в качестве новой базы данных.

sp_detach_db OldDb

Затем скопируйте папку и снова подключите(с sp_attach_db ) файлы БД в качестве новой базы данных.

sp_attach_db NewDb, "C:\copy of site\App_Data\db_data.mdf", "C:\site1\App_Data\db_log.ldf"
...