Sql не видит файл bak
I have been reading a LOT of google posts and StackOverflow questions about how to restore a database in SQL Server from a .bak file.
But none of them states how to just READ the tables in the database-backup. (None that I could find anyway?)
I just want to check out some old information which now has been deleted, without actually restoring the full database. Is this possible?
EDIT:
I just wanted to post my T-SQL solution to the problem, so others may use it and I can go back and look it up ;)
First I created a new database called backup_lookup and took it offline. After this I could restore my old database mydb to the new one, without ever touching my original.
I hope this helps :)
4 Answers 4
You also have to enable permissions to the folder where the file is located. SSMS first needs to browse the folder, then to read the file.
In your case, SQL server tries to access the folder using NT Service\MSSQLSERVER account, so permissions should be granted to that account, no need to give more permissions (to everyone).
Also try below if above doesn't help:
- close/open SSMS
- move the file from root to some folder and grant permissions to that folder
- use TSQL script to restore the database instead of SSMS
I gave Read & execute , List folder contents , and Read permissions to
I had the same issue. I get to know that it was a a permissions issue.
Here are the following steps to solve this problem
Go to Control panel > Administrative Tools > Services double click on the services. copy the log on account name of sql service as shown in the picture.
Go to your backup folder and right click and select properties. Follow the steps as shown in picture. After clicking on edit you will get new window.
Paste here the Log on account name of sql service account which you had copied earlier. then Click on check name button.
Select MSSQLSERVER then click ok.
Now you will get your sql server account name in security tab.
Select sql server account name that and in permission box select Allow in all check boxes(I added Full Control) then click apply.
5 Answers 5
From SQL Server 2008 SSMS (SQL Server Management Studio), simply:
-
Connect to your database instance (for example, "localhost\sqlexpress")
- a) Select the database you want to restore to; or, alternatively
- b) Just create a new, empty database to restore to.
Right-click, Tasks, Restore, Database
PS: Again, I emphasize: you can easily do this on a "scratch database" - you do not need to overwrite your current database. But you do need to RESTORE.
PPS: You can also accomplish the same thing with T-SQL commands, if you wished to script it.
Ah, so I could just make a temporarily database and restore it into, and afterwards delete it without any effects on my original database? :)
The only workable solution is to restore the .bak file. The contents and the structure of those files are not documented and therefore, there's really no way (other than an awful hack) to get this to work - definitely not worth your time and the effort!
The only tool I'm aware of that can make sense of .bak files without restoring them is Red-Gate SQL Compare Professional (and the accompanying SQL Data Compare) which allow you to compare your database structure against the contents of a .bak file. Red-Gate tools are absolutely marvelous - highly recommended and well worth every penny they cost!
And I just checked their web site - it does seem that you can indeed restore a single table from out of a .bak file with SQL Compare Pro ! :-)
There is no standard way to do this. You need to use 3rd party tools such as ApexSQL Restore or SQL Virtual Restore. These tools don’t really read the backup file directly. They get SQL Server to “think” of backup files as if these were live databases.
Just to add my TSQL-scripted solution:
First of all; add a new database named backup_lookup . Then just run this script, inserting your own databases' root path and backup filepath
It doesn't seem possible with SQL Server 2008 alone. You're going to need a third-party tool's help.
It will help you make your .bak act like a live database:
I don't quite understand why Microsoft hasn't decided to make this kind of feature available.. It would be good for business if they did..
You're right about that. I guess I should just speak for the benefit of the consumers! Bundled power! * fist in the air! *
У меня есть файл .bak, созданный сегодня кем-то другим, вручную созданный через SSMS 2008 R2. Я пытаюсь вручную восстановить базу данных, к сожалению, файл не появляется, когда я просматриваю его.
Я могу написать сценарий процесса восстановления, но я видел эту проблему раньше, и я не уверен, что может привести к тому, что .bak не появится.
Я собираюсь написать скрипт для восстановления, я просто хочу знать, что его вызывает. Это определенно .bak, а не .bak.txt или что-то еще.
Так вы можете просмотреть папку, в которой вы знаете, что файл находится, а он не появляется? Или вы не можете перейти к папке?
Я могу просмотреть папку, но не вижу ни одного файла .bak. Я проверил разрешения пользователя, с которым я работаю в SSMS, он является локальным администратором, и файл не помечен как «скрытый» или что-то еще.
Можете ли вы опубликовать снимок экрана где-нибудь, показывающий вид Windows Explorer на папку и SSMS? Также объясните в вопросе процесс, который вы используете, чтобы добраться до этого шага.
(Также обратите внимание, что учетная запись службы SQL Server также должна иметь разрешения, а не только пользователя SSMS. Хотя это не должно препятствовать тому, чтобы файлы .bak отображались в списке, прежде чем что-то с ними делать.)
У нас была такая же проблема сегодня. Как выяснилось в некоторых других ответах, это была проблема с разрешениями. Разница в том, что аккаунт, который нам нужно было добавить, был NT SERVICE\MSSQLSERVER .
Я идентифицировал учетную запись, сравнив разрешения по умолчанию для разрешений папки SQL Backup с папкой, содержащей файл резервной копии.
Добавление учетной записи службы не так просто, как кажется. Вот что сработало для меня. (Server 2012 R2)
- Войдите на сервер. (Изменение должно быть сделано на реальном сервере, а не через общий сетевой ресурс.)
- Измените расположение на имя локального сервера.
- Введите в NT SERVICE\MSSQLSERVER поле для имени. (Не нажимайте Проверить имена)
- Нажмите ОК. После этого вы увидите список соответствующих учетных записей служб. Выберите MSSQLSERVER и нажмите OK, чтобы подтвердить выбор.
Вы должны увидеть учетную запись службы, указанную в настройках безопасности, и можете соответствующим образом настроить разрешения.
После добавления разрешений (я добавил полный доступ, чтобы соответствовать папке резервного копирования SQL по умолчанию) и перезапуска консоли управления SQL Server, я смог выбрать и восстановить файл резервной копии.
Учетная запись, которую я должен был добавить, была NT Service\MSSQL$SQLSERVER2014 , возможно, потому, что я назвал свой экземпляр SQLSERVER2014
Я получил это сегодня.
Я отключил общий доступ к файлам, индексацию и очистил все открытые сеансы (люди вошли в систему для копирования резервных копий), но проблема не исчезла.
Пошел в проводник Windows, скопировал резервные копии в другую папку и просмотрел ее в Management Studio, и я смог увидеть ее там.
Удалил исходную папку и воссоздал ее, снова скопировал содержимое и перешел к .bak файлам, и он вернулся к нормальной работе.
Надеюсь, это кому-нибудь поможет.
Я сталкивался с этой проблемой пару раз. Проблема не в SQL Server, а в разрешении папки Windows. Вы должны добавить соответствующие разрешения в папку, куда вы скопировали файл .bak (я думаю, что System Network роль).
Более простое решение - переместить файл в резервную папку по умолчанию в Program Files. Имеет все необходимые разрешения. Для SQL Server 2012 это
Это отличное решение, потому что никто не открывает потенциальные дыры в безопасности на своем компьютере, чтобы восстановить один файл.
Как я могу импортировать эту дату в базу данных в SQL Server?
Самый простой способ - третий ответ, щелчок правой кнопкой мыши по базам данных, импорт, устройство, выбор файла .bak, готово.
Может ли кто-нибудь расширить ответ для решения, дружественного к автоматизации? Проходить через пользовательский интерфейс и делать несколько кликов не очень эффективно.
В SQL Server Management Studio
- Щелкните правой кнопкой мыши Базы данных на левой панели (Обозреватель объектов)
- Нажмите Восстановить базу данных .
- Выберите устройство , нажмите . и добавьте .bak файл
- Нажмите OK , затем снова OK
Это работает как шарм. Это отличные упрощенные инструкции, и в сущности они являются теми же инструкциями из официальной ссылки Microsoft, которая указана в наиболее часто задаваемом ответе.
Это не работает для меня. Я указываю на правильную папку, и она даже не видит файлы. Я вставляю точное имя файла в диалоге, и он говорит, что файл не существует. Кроме того, диалог видит диск, который не существует на моем сервере. Запоминает ли база данных местоположение последней резервной копии и будет ли она восстанавливаться только с этой точки? Мне очень странно, что я не могу выбрать файл резервной копии для восстановления.
Мой файл .BAK находился в каталоге «Downloads», который существовал под моей учетной записью. Мне пришлось переместить файл .BAK в корень C: для того, чтобы этот инструмент мог его увидеть и позволить мне восстановить его. Файлы под моим пользователем просто не были видны по какой-то причине.
Файлы .bak являются резервными копиями базы данных. Вы можете восстановить резервную копию с помощью метода ниже:
Это не работает. В статье говорится: «. 2) Разверните базы данных. В зависимости от базы данных выберите базу данных пользователей или разверните« Системные базы данных », а затем выберите базу данных системы. 3) Щелкните правой кнопкой мыши базу данных , выберите« Задачи », а затем нажмите Восстановить." НЕ! Вы не можете щелкнуть правой кнопкой мыши по базе данных, которая не существует! В конце концов, вы пытаетесь восстановить или импортировать данную базу данных. Как вы можете щелкнуть правой кнопкой мыши базу данных, которая не загружена? Причудливый MSDN и ухудшение функциональности восстановления в SSMS заявлено, но не работает. Зачем? К счастью, команды SQL, которые здесь дают другие, работают.
У меня есть база данных в dev (SQL Server 2005 на Windows Server 2008), которую мне нужно перейти на prod (SQL Server 2000 на Windows Server 2003). Мой процесс выглядит следующим образом:
- Войдите в dev, откройте SQL Server Management Studio
- Щелкните правой кнопкой мыши на базе данных | Задачи | Резервный. Сохраните все параметры по умолчанию (полное резервное копирование и т. Д.)
- Переместите файл .bak локально в prod (без сетевого диска), войдите в prod, откройте SQL Server Enterprise Manager.
- Щелкните правой кнопкой мыши узел Базы данных | Все задачи | Восстановить базу данных.
- Измените Восстановить как базу данных, чтобы отобразить то же имя базы данных.
- Нажмите переключатель «С устройства». Нажмите «Выбрать устройства»
- Нажмите Восстановить из: Добавить . найдите файл .bak (маленький - всего 6 МБ)
Теперь я готов восстановить базу данных, поэтому я нажимаю ОК и получаю следующую ошибку:
«Семейство носителей на устройстве« E: . bak »сформировано неправильно. SQL Server не может обработать это семейство носителей. RESTORE DATABASE прерывается ненормально».
Эта ошибка немедленная.
Я пробовал несколько разных вариантов этого - восстановление машины db to dev с другим именем базы данных и именами файлов журналов (откуда она возникла), создание пустой базы данных с тем же физическим путем к файлам и попытка ее восстановления, сделать несколько разных .bak файлов и убедиться, что они проверены перед загрузкой в prod. Я точно знаю, что каталог для файлов .mdf и .ldf существует на prod, хотя сами файлы не существуют. Если, прежде чем я нажму OK для восстановления, перейдите на вкладку параметров вместо этого я получаю следующую ошибку:
Ошибка 3241: Семейство носителей на устройстве «E: . bak» сформировано неправильно. SQL Server не может обработать это семейство носителей. ВОССТАНОВЛЕНИЕ ФИЛИСТА завершается ненормально.
У кого-нибудь есть яркие идеи?
Я согласен, просто потратил день на это и потратил впустую мое время, это похоже на проблему обратной совместимости, от 2k8 R2 до 2k5 в моем случае.
Заголовки резервных копий в MSSQL2008 отличаются от заголовков в MSSQL2005, что, вероятно, является источником вашей проблемы. Попробуйте экспортировать БД вместо парадигмы резервного копирования и восстановления или настройте MSSQL2008 на своем сервере DEV.
Как говорит Майк Диммик - SQL 2000 не распознает резервные копии SQL 2005 (как Word 2000 не распознает файлы DOCX 2007 года). Поэтому вам придется переносить данные в формате с более низким общим знаменателем, таком как сценарии SQL. Попробуйте Мастер публикации баз данных, который является частью SQL Server Hosting Toolkit, который генерирует один файл SQL для схемы и данных.
Важно проверить, установлен ли у вас SqlExpress (возможно, он установлен, даже не подозревая, что он у вас есть). Очень легко по ошибке войти в SqlExpress, а затем запаниковать, потому что он не позволит вам восстановить базу данных 2008 года. Это, вероятно, очень распространенная причина получения этой ошибки.
Вы можете перемещать резервные копии вперед в семействе SQL Server, то есть с 2000 на 2005 или 2008, но не назад: вы не можете восстановить резервную копию SQL Server 2005 на SQL Server 2000.
Возможно, это проблема с правами доступа, которая препятствует созданию файла при попытке восстановления. Попробуйте создать новую базу данных с тем же именем, которое вы хотите, и затем восстановить поверх нее.
Кроме того, если вы пытаетесь восстановить резервную копию с внешнего жесткого диска или сетевого ресурса, попробуйте скопировать файл резервной копии на локальный компьютер перед попыткой восстановления.
По умолчанию в SQL Server 2005 есть два объекта исследования. Я полагаю, вы пытаетесь использовать объект server / sqlexpress. Попробуйте восстановить на другой.
(С облегчением вздохнул.) Аааа, вот в чем проблема.
У меня SQL Server 2008 SP1 работает на удаленном ПК. Я сделал резервную копию его базы данных, но не смог восстановить локальную копию SQL Server 2008 из файла .bak.
Как говорит [Yini], это было связано с тем, что моя копия SQL Server 2008 открывала мой экземпляр SQL Server 2005 на моем локальном ПК, а не мой экземпляр SQL Server 2008. Genius.
«Семейство носителей на устройстве« D: \ DatabaseBackup_21_02_2011.bak »сформировано неправильно. SQL Server не может обработать это семейство носителей».
Моя резервная копия не была сформирована неправильно. Его просто невозможно восстановить в экземпляр SQL Server 2005 , даже когда я использую SQL Server 2008 с пакетом обновления 1 (SP1).
I am trying to run a classic asp project on visual studio and therefore I am trying to restore a database. I cannot seem to find the .bak file when trying to restore it. It wasn't visible in the C-drive. I have looked it up and have seen that it has something to do with permissions. I have tried enabling permissions after properties>security of .bak file to 'Everyone', it did not work. I have also tried NT Service\MSSQLSERVER . Please see the following below.
just to be sure . have you tried selecting the "All files" option from the drop down above the OK Button ? Default is .bak,.trn. Pehaps the extension of the file is not .bak
All the security permission changes you are doing must be done on the parent directory instead which is containing the *.bak file and not the bak file itself. In your case, the bak file is present in root of C:` drive so you will have to make permission changes on the C:` drive which is containing your bak file. Changing permissions on `C:` drive root is not considered a good practice as it is usually the boot drive. So, a much safe approach would be to create a folder in C:\ drive, move your bak file to the new folder and change the security permissions of the new folder instead.
Читайте также: