Ошибка поиска в каталоге для файла с ошибкой операционной системы 3 (система не может найти указанный путь.)

Я пытаюсь воссоздать базу данных (MyDB) с одного сервера SQL (источник) на другой (цель). Источник находится на моем локальном компьютере и представляет собой SQL Server 2014. Цель находится на удаленном компьютере, а это SQL Server 2012. Вот шаги, которые я предпринял:

  1. На своей локальной машине я захожу в SQL Server Management studio, щелкаю правой кнопкой мыши на MyDB и захожу в Задачи -> Создать сценарии.
    1. Там я выбираю "Сценарий всей базы данных и всех объектов базы данных".
    2. Я нажимаю "Далее" и на следующей странице в разделе "Дополнительно" выбираю "Схема и данные".
    3. Это создает файл SQL (scripts.sql), который содержит определение для MyDB.
    4. Затем я использую следующую команду osql для повторного создания базы данных в Target:

osql -S target -d master -E -i scripts.sql -o output.log

  1. После завершения выполнения я получаю эту ошибку в файле журнала "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'и тогда файловая система позволит ему работать.

Другие вопросы по тегам