Ошибка поиска в каталоге для файла с ошибкой операционной системы 3 (система не может найти указанный путь.)
Я пытаюсь воссоздать базу данных (MyDB) с одного сервера SQL (источник) на другой (цель). Источник находится на моем локальном компьютере и представляет собой SQL Server 2014. Цель находится на удаленном компьютере, а это SQL Server 2012. Вот шаги, которые я предпринял:
- На своей локальной машине я захожу в SQL Server Management studio, щелкаю правой кнопкой мыши на MyDB и захожу в Задачи -> Создать сценарии.
- Там я выбираю "Сценарий всей базы данных и всех объектов базы данных".
- Я нажимаю "Далее" и на следующей странице в разделе "Дополнительно" выбираю "Схема и данные".
- Это создает файл SQL (scripts.sql), который содержит определение для MyDB.
- Затем я использую следующую команду osql для повторного создания базы данных в Target:
osql -S target -d master -E -i scripts.sql -o output.log
- После завершения выполнения я получаю эту ошибку в файле журнала "output.log":
1> 2> 1> 2> 3> 4> 5> 6> 7> 8> Msg 5133, Уровень 16, Состояние 1, Цель сервера, Строка 2 Поиск в каталоге для файла "C:\Program Files\Microsoft SQL Server\" MSSQL12.MSSQLSERVER\MSSQL\DATA\MyDB.mdf"завершился ошибкой операционной системы 3(система не может найти указанный путь.). Сообщение 1802, Уровень 16, Состояние 1, Цель сервера, Строка 2 СОЗДАТЬ БАЗУ ДАННЫХ. Некоторые имена файлов не могут быть созданы. Проверьте связанные ошибки. 1> 2> Сообщение 5011, Уровень 14, Состояние 5, Цель сервера, Строка 1 У пользователя нет прав на изменение базы данных "MyDB", база данных не существует или база данных не находится в состоянии, которое позволяет проверять доступ. Сообщение 5069, Уровень 16, Состояние 1, Цель сервера, Строка 1 Оператор ALTER DATABASE не выполнен.
Вот первые несколько строк "scripts.sql":
USE [master]
GO
/****** Object: Database [MyDB] Script Date: 4/12/2016 4:30:20 PM ******/
CREATE DATABASE [MyDB]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'MyDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MyDB.mdf' , SIZE = 513024KB , MAXSIZE = UNLIMITED, FILEGROWTH = 262144KB )
LOG ON
( NAME = N'MyDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MyDB_log.ldf' , SIZE = 1317504KB , MAXSIZE = 2048GB , FILEGROWTH = 131072KB )
GO
ALTER DATABASE [MyDB] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [MyDB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [MyDB] SET ANSI_NULL_DEFAULT ON
У меня есть файл MyDB.mdf в месте, на которое он жалуется, на Source, но не на Target. В Target нет каталога "MSSQL12.MSSQLSERVER". Как я могу это исправить?
2 ответа
Для тех, кто заинтересован в решении этой проблемы, проблема заключалась в том, что в Target не было каталога "MSSQL12.MSSQLSERVER", так как он находился в другой версии SQL Server, а именно в 2012 году. Мне нужно было создать каталог вручную, и он запустился. работая после этого.
Если целевая БД находится на RDS
Если целевая БД — это сервер MS SQL, работающий на AWS RDS, вам необходимо изменить расположение файлов данных и файлов журнала. RDS по умолчанию сохраняет их на диске D:, который недоступен пользователю.D:\rdsdbdata\DATA
Так, например:
Вы создаете сценарий .sql из исходной базы данных, и сценарий имеет путь к файлуFILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\MyDB.mdf'
(Путь взят из вопроса) . Возьмите этот сценарий, и перед его запуском в экземпляре RDS вы должны изменить его наFILENAME = N'D:\rdsdbdata\DATA\MyDB.mdf'
и тогда файловая система позволит ему работать.