Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Добрый день, такая ситуация: необходимо было удалить старые данные из базы, данные находились в одном файле, удалила таблицу, потом файл и файл-группу пыталась удалить скриптом:
USE [master]
GO
ALTER DATABASE [bd_name] REMOVE FILE [file_name]
GO
ALTER DATABASE [bd_name] REMOVE FILEGROUP [FILEGROUP_name]
GO
файл и группа не удалялись, была ошибка о том что файл не пустой. Решила сделать деатач бд и удалить файл вручную. После удаления файла, бд не подключается, пишет ошибку - Unable to open the physical file "R:\file_name.ndf". Operating system error 2: "2(failed to retrieve text for this error. Reason: 15105)" бэкапов нет, файл восстановить возможности нет, размер диска 1 тб, файл занимал почти весь диск и удалился мимо корзины. При подключении через managment studio та же ошибка плюс - error5120. Понимаю, что сделала глупость, но все же прошу помощи.
9 сен 15, 17:23    [18129506]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37075
Разве что обратиться в специализированную контору по восстановлению данных.
9 сен 15, 17:35    [18129554]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Julia_user,

Тихонечко собрать все вещи, выйти на улицу и убегать не отвечая на звонки:)

Если серьезно то, пробуйте создать такую же базу с такими же файлами и потом подсунуть от этой базы потерянный файл.
Ну а далее, если повезет, то все по сценарию, emergency и тд. и тп.
9 сен 15, 17:38    [18129569]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Контора по восстановлению пока подождет, но тоже вариант. Попробую создать такую же бд.
9 сен 15, 17:42    [18129594]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Julia_user, вот эту тему почитайте - https://www.sql.ru/forum/1113578/recovery-pending - там есть ссылка на инструкцию по вытаскиванию данных из базы с удаленным ndf-файлом.
9 сен 15, 18:07    [18129669]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Minamoto, почти получилось, но почти не считается. По вашей ссылке нашла это http://www.sqlnotes.info/2013/05/07/attach-database-with-missing-ndf-file/ получается примерно тоже что предложил WarAnt. На потерянный файл уже не ругается, но база не переходит в онлайн, при переводе базы в онлайн такие ошибки:
1) Unable to open the physical file "Z:\filename.2.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
Unable to open the physical file "Z:\filename.2.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
Unable to open the physical file "Y:\filename.3.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
Unable to open the physical file "Y:\filename.3.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
Unable to open the physical file "V:\filename.4.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
Unable to open the physical file "V:\filename.4.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
Unable to open the physical file "Z:\filename.1.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
Unable to open the physical file "Z:\filename.1.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
Причем на диске Z еще два файла лежат, с такими же правами, но про них такую ошибку не пишет. Если у кого то было подскажите пожалуйста как решали, пробовала запуск managment studio от имени администратора (run as administrator) и так же от sa, ошибки те же.
После этих ошибок идут следующие:
An unexpected file id was encountered. File id 4 was expected but 8 was read from "G:\filename5.ndf". Verify that files are mapped correctly in sys.master_files. ALTER DATABASE can be used to correct the mappings.
An unexpected file id was encountered. File id 6 was expected but 15 was read from "G:\filename6.ndf". Verify that files are mapped correctly in sys.master_files. ALTER DATABASE can be used to correct the mappings. Но это я так понимаю, последовательность создания файлов для БД, правильно я понимаю?
10 сен 15, 10:18    [18131351]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Operating system error 32: - это The process cannot access the file because it is being used by another process.
10 сен 15, 10:32    [18131426]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Glory, перезагружала, на сервере антивируса нет. После перезагрузки то же самое.
10 сен 15, 10:35    [18131439]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Julia_user
После перезагрузки то же самое.

Вы предлагаете удаленно силой мысли узнать, какие процессы у вас какие файлы открыли и удерживают ?
10 сен 15, 10:37    [18131449]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Glory, попробую process explorer
10 сен 15, 10:45    [18131509]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
process explorer говорит что к файлам обращается только sqlservr.exe, как к тем у которых Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)". Msg 5120, Level 16, State 101, Line 2, так и к другим без такой ошибки.
10 сен 15, 14:04    [18132786]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Julia_user
process explorer говорит что к файлам обращается только sqlservr.exe,

И это именно тот sqlservr, с которым вы работаете ?
10 сен 15, 14:05    [18132790]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Glory, да, других в процессах нет, проверяла в sql server configuration manager, там тоже 1 экземпляр.
10 сен 15, 14:12    [18132830]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Julia_user, вы базу то отсоединили, прежде чем пытаться присоединить ее заново с подложенными файлами?
10 сен 15, 14:25    [18132932]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Minamoto, да, я делаю по принципу этого скрипта, если верно поняла
use master
if db_id('TestDB') is not null
drop database TestDB
go
create database TestDB on PRIMARY ( name = 'TestDB', filename = 'C:\Temp\TestDB.mdf'),
filegroup FG1 ( name = 'TestDB_File1', filename = 'C:\Temp\TestDB_File1.ndf')
log on ( name = 'TestDB_log', filename = 'C:\Temp\TestDB_log.ldf')
Alter database TestDB modify file(name = 'TestDB_File1', offline)
go
alter database TestDB set offline
-- remove all database files
-- copy TestDB.mdf and TestDB_log.ldf back to C:\Temp
go
alter database TestDB set online

Т.е. создаю бд с тем же именем и все структурой (файловые группы, файлы, расположение), перевожу в оффлайн отсутствующий файл, потом в офлайн бд. удаляю новые созданные файлы, на их место подсовываю старые. потом в онайлн, при переводе в онлайн такие ошибки как выше писала.
10 сен 15, 14:43    [18133074]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
red88888
Member

Откуда:
Сообщений: 130
почему вы не попробуете восстановить файл утилитками какими-нибудь? например, recuva?
Проблема только в том, что не надо бы было на диск ничего писать, можно затереть. А так попробовать однозначно стоит, чем черт не шутит.
10 сен 15, 17:10    [18133977]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Julia_user,

а вы ново созданную пустую базу с которой брали файл, после этого удалили? а то ведь похоже на то что нет.
10 сен 15, 17:19    [18134011]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
red88888, это первое что сделала, recuva, easyrecovery, но все пустое, диск размером 0.99 тб, файл размером чуть меньше, улетел мимо корзины конечно, программы не видят кроме старых 2-4 года, мелких файлов.

WarAnt именно с такой подстановкой как вы предложили еще не пробовала. Сейчас пробую такой вариант, создала новую базу, фг и файлы в ней, оставила новый mdf, новые ndf удалила, подсунула старые. Пропала ошибка которая была на некоторых файлах Operating system error 32, осталась на всех "an unexpected file id was encountered. File id 4 was expected but 8 was read from". Надо менять file_id в sys.master_files.
Вот подумала, ваш же вариант самый простой был.
10 сен 15, 17:36    [18134124]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
WarAnt,
с вашим вариантом такая ошибка "One or more files do not match the primary file of the database. If you are attempting to attach a database, retry the operation with the correct files. If this is an existing database, the file may be corrupted and should be restored from a backup. (Microsoft SQL Server, Error: 5173)" т.е. не прокатило.
10 сен 15, 17:56    [18134248]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Julia_user, так вы в старой базе mdf удалили? Ну тогда, боюсь, вариантов восстановления у вас нет - все возможности говорят о восстановлении данных при удаленном ndf.
11 сен 15, 10:32    [18136315]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
+ ... странно, что у Julia_user не получилось с первого раза

:setvar DbPath "c:\temp\db"
go

create database db on
primary 
(name = 'db', filename = '$(DbPath)\db.mdf'),

filegroup fg1 
(name = 'db_fg1_f1', filename = '$(DbPath)\db_fg1_f1.ndf'),
(name = 'db_fg1_f2', filename = '$(DbPath)\db_fg1_f2.ndf'),
(name = 'db_fg1_f3', filename = '$(DbPath)\db_fg1_f3.ndf'),
filegroup fg2
(name = 'db_fg2_f1', filename = '$(DbPath)\db_fg2_f1.ndf'),
(name = 'db_fg2_f2', filename = '$(DbPath)\db_fg2_f2.ndf'),
(name = 'db_fg2_f3', filename = '$(DbPath)\db_fg2_f3.ndf'),
filegroup fg3
(name = 'db_fg3_f1', filename = '$(DbPath)\db_fg3_f1.ndf'),
(name = 'db_fg3_f2', filename = '$(DbPath)\db_fg3_f2.ndf'),
(name = 'db_fg3_f3', filename = '$(DbPath)\db_fg3_f3.ndf')

log on 
(name = 'db_log', filename = '$(DbPath)\db_log.ldf');
go

use db;
go

create table fg1_t1(id int, data varchar(100)) on fg1;
go
create table fg2_t2(id int, data varchar(100)) on fg2;
go
create table fg3_t3(id int, data varchar(100)) on fg3;
go

insert into fg1_t1(id, data)
select column_id, name from sys.all_columns;

insert into fg2_t2(id, data)
select column_id, name from sys.all_columns;

insert into fg3_t3(id, data)
select column_id, name from sys.all_columns;
go

use master;
go

alter database db set offline with rollback immediate;
go

exec xp_cmdshell 'del $(DbPath)\db_fg2_f2.ndf'
go

alter database db set online;
go

/*
Msg 5120, Level 16, State 5, Line 54
Unable to open the physical file "c:\temp\db\db_fg2_f2.ndf". Operating system error 2: "2(The system cannot find the file specified.)".
Msg 5181, Level 16, State 5, Line 54
Could not restart database "db". Reverting to the previous status.
Msg 5069, Level 16, State 1, Line 54
ALTER DATABASE statement failed.
*/

select name, state_desc from sys.databases where database_id = db_id(N'db');
go
/*
name	state_desc
db	RECOVERY_PENDING
*/

alter database db set offline with rollback immediate;
go
/*
Command(s) completed successfully.
*/

select name, state_desc from sys.databases where database_id = db_id(N'db');
go
/*
name	state_desc
db	OFFLINE
*/

alter database db modify file (name = 'db_fg2_f2', offline);
go

/*
Command(s) completed successfully.
*/

alter database db set online;
go
/*
Command(s) completed successfully.
*/

select name, state_desc from sys.databases where database_id = db_id(N'db');
go
/*
name	state_desc
db	ONLINE
*/

use db;
go

select top(1) * from [dbo].[fg1_t1];
go
/* (1 row(s) affected) */

select top(1) * from [dbo].[fg2_t2];
go
/* 
Msg 8653, Level 16, State 1, Line 113
The query processor is unable to produce a plan for the table or view 'fg2_t2' because the table resides in a filegroup which is not online.
*/

select top(1) * from [dbo].[fg3_t3];
go
/* (1 row(s) affected) */

11 сен 15, 10:42    [18136408]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Glory
Member

Откуда:
Сообщений: 104760
churupaha
exec xp_cmdshell 'del $(DbPath)\db_fg2_f2.ndf'

Только ТС удалили mdf, т.е. первичный файл со всеми системными таблицами
11 сен 15, 10:44    [18136421]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Glory
churupaha
exec xp_cmdshell 'del $(DbPath)\db_fg2_f2.ndf'

Только ТС удалили mdf, т.е. первичный файл со всеми системными таблицами
11 сен 15, 10:47    [18136448]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Minamoto, нет, удален файл *.ndf. DB.mdf целый.
churupaha, делала деатач бд и если бы знала тогда что файл можно перевести в режим оффлайн, и бд была бы оффлайн то наверное да, получилось бы.
11 сен 15, 10:54    [18136498]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Julia_user
Minamoto, нет, удален файл *.ndf. DB.mdf целый.

Julia_user
cоздала новую базу, фг и файлы в ней, оставила новый mdf, новые ndf удалила, подсунула старые.

Это тогда как понимать ?
11 сен 15, 10:55    [18136509]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
Glory, это один из вариантов восстановления, оригинальный *.mdf целый и скопирован для верности еще в самом начале перед всеми действиями по восстановлению бд.
11 сен 15, 11:16    [18136633]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
invm
Member

Откуда: Москва
Сообщений: 9425
Julia_user
churupaha, делала деатач бд и если бы знала тогда что файл можно перевести в режим оффлайн, и бд была бы оффлайн то наверное да, получилось бы.
В чем трудности?
+
use master;
go

if db_id('DBTestFG_001') is not null
 drop database DBTestFG_001;

if db_id('DBTestFG_002') is not null
 drop database DBTestFG_002;
go

exec xp_cmdshell 'if exist C:\Temp\DBTestFG_001_Data.mdf del C:\Temp\DBTestFG_001_Data.mdf', no_output;
exec xp_cmdshell 'if exist C:\Temp\DBTestFG_001_File1.ndf del C:\Temp\DBTestFG_001_File1.ndf', no_output;
exec xp_cmdshell 'if exist C:\Temp\DBTestFG_001_Log.ldf del C:\Temp\DBTestFG_001_Log.ldf', no_output;

exec xp_cmdshell 'if exist C:\Temp\DBTestFG_002_Data.mdf del C:\Temp\DBTestFG_002_Data.mdf', no_output;
exec xp_cmdshell 'if exist C:\Temp\DBTestFG_002_File1.ndf del C:\Temp\DBTestFG_002_File1.ndf', no_output;
exec xp_cmdshell 'if exist C:\Temp\DBTestFG_002_Log.ldf del C:\Temp\DBTestFG_002_Log.ldf', no_output;
go

create database DBTestFG_001 on (name = 'DBTestFG_001_Data', filename = 'C:\Temp\DBTestFG_001_Data.mdf') log on (name = 'DBTestFG_001_Log', filename = 'C:\Temp\DBTestFG_001_Log.ldf');
alter database DBTestFG_001 add filegroup FG1;
alter database DBTestFG_001 add file (name = 'DBTestFG_001_File1', filename = 'C:\Temp\DBTestFG_001_File1.ndf') to filegroup FG1;
go

use DBTestFG_001;
go

create table dbo.t1 (id int identity primary key, v int);
create table dbo.t2 (id int identity primary key on FG1, v int);

insert into dbo.t1 values (1);
insert into dbo.t2 values (1);
go

use master;
go

alter database DBTestFG_001 set offline with rollback immediate;
drop database DBTestFG_001;
go

create database DBTestFG_002 on (name = 'DBTestFG_002_Data', filename = 'C:\Temp\DBTestFG_002_Data.mdf') log on (name = 'DBTestFG_002_Log', filename = 'C:\Temp\DBTestFG_002_Log.ldf');
alter database DBTestFG_002 add filegroup FG1;
alter database DBTestFG_002 add file (name = 'DBTestFG_002_File1', filename = 'C:\Temp\DBTestFG_002_File1.ndf') to filegroup FG1;
go

alter database DBTestFG_002 set offline with rollback immediate;
go

exec xp_cmdshell 'if exist C:\Temp\DBTestFG_002_Data.mdf del C:\Temp\DBTestFG_002_Data.mdf', no_output;
exec xp_cmdshell 'if exist C:\Temp\DBTestFG_002_File1.ndf del C:\Temp\DBTestFG_002_File1.ndf', no_output;
exec xp_cmdshell 'if exist C:\Temp\DBTestFG_002_Log.ldf del C:\Temp\DBTestFG_002_Log.ldf', no_output;

exec xp_cmdshell 'if exist C:\Temp\DBTestFG_001_Data.mdf ren C:\Temp\DBTestFG_001_Data.mdf DBTestFG_002_Data.mdf', no_output;
exec xp_cmdshell 'if exist C:\Temp\DBTestFG_001_Log.ldf ren C:\Temp\DBTestFG_001_Log.ldf DBTestFG_002_Log.ldf', no_output;
go

alter database DBTestFG_002 set online;
go

select 'DBTestFG_002', databasepropertyex('DBTestFG_002', 'status');
go

alter database DBTestFG_002 set offline with rollback immediate;
go

alter database DBTestFG_002 modify file (name = 'DBTestFG_002_File1', offline);
go

alter database DBTestFG_002 set online;
go

select 'DBTestFG_002', databasepropertyex('DBTestFG_002', 'status');
go

select * from DBTestFG_002.dbo.t1;
go

select * from DBTestFG_002.dbo.t2;
go

drop database DBTestFG_002;
go
11 сен 15, 11:18    [18136648]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Julia_user
churupaha, делала деатач бд и если бы знала тогда что файл можно перевести в режим оффлайн, и бд была бы оффлайн то наверное да, получилось бы.


+ hack attach (P. Randal рекомендует)

:setvar DbPath "c:\temp\db"
go

create database db on
primary 
(name = 'db', filename = '$(DbPath)\db.mdf'),

filegroup fg1 
(name = 'db_fg1_f1', filename = '$(DbPath)\db_fg1_f1.ndf'),
(name = 'db_fg1_f2', filename = '$(DbPath)\db_fg1_f2.ndf'),
(name = 'db_fg1_f3', filename = '$(DbPath)\db_fg1_f3.ndf'),
filegroup fg2
(name = 'db_fg2_f1', filename = '$(DbPath)\db_fg2_f1.ndf'),
(name = 'db_fg2_f2', filename = '$(DbPath)\db_fg2_f2.ndf'),
(name = 'db_fg2_f3', filename = '$(DbPath)\db_fg2_f3.ndf'),
filegroup fg3
(name = 'db_fg3_f1', filename = '$(DbPath)\db_fg3_f1.ndf'),
(name = 'db_fg3_f2', filename = '$(DbPath)\db_fg3_f2.ndf'),
(name = 'db_fg3_f3', filename = '$(DbPath)\db_fg3_f3.ndf')

log on 
(name = 'db_log', filename = '$(DbPath)\db_log.ldf');
go

use db;
go

create table fg1_t1(id int, data varchar(100)) on fg1;
go
create table fg2_t2(id int, data varchar(100)) on fg2;
go
create table fg3_t3(id int, data varchar(100)) on fg3;
go

insert into fg1_t1(id, data)
select column_id, name from sys.all_columns;

insert into fg2_t2(id, data)
select column_id, name from sys.all_columns;

insert into fg3_t3(id, data)
select column_id, name from sys.all_columns;
go

use master;
go

alter database db set offline with rollback immediate;
go

exec xp_cmdshell 'del $(DbPath)\db_fg2_f2.ndf'
go

alter database db set online;
go

/*
Msg 5120, Level 16, State 5, Line 54
Unable to open the physical file "c:\temp\db\db_fg2_f2.ndf". Operating system error 2: "2(The system cannot find the file specified.)".
Msg 5181, Level 16, State 5, Line 54
Could not restart database "db". Reverting to the previous status.
Msg 5069, Level 16, State 1, Line 54
ALTER DATABASE statement failed.
*/

select name, state_desc from sys.databases where database_id = db_id(N'db');
go
/*
name	state_desc
db	RECOVERY_PENDING
*/

alter database db set offline with rollback immediate;
go
/*
Command(s) completed successfully.
*/

select name, state_desc from sys.databases where database_id = db_id(N'db');
go
/*
name	state_desc
db	OFFLINE
*/

exec sp_detach_db 'db';
go

/*
Command(s) completed successfully.
*/

use [master]
go

create database [db] on 
(filename = N'$(DbPath)\db.mdf'),
(filename = N'$(DbPath)\db_log.ldf'),
(filename = N'$(DbPath)\db_fg1_f1.ndf'),
(filename = N'$(DbPath)\db_fg1_f2.ndf'),
(filename = N'$(DbPath)\db_fg1_f3.ndf'),
(filename = N'$(DbPath)\db_fg2_f1.ndf'),
(filename = N'$(DbPath)\db_fg2_f2.ndf'),
(filename = N'$(DbPath)\db_fg2_f3.ndf'),
(filename = N'$(DbPath)\db_fg3_f1.ndf'),
(filename = N'$(DbPath)\db_fg3_f2.ndf'),
(filename = N'$(DbPath)\db_fg3_f3.ndf')
for attach
go
/*
Msg 5120, Level 16, State 101, Line 96
Unable to open the physical file "c:\temp\db\db_fg2_f2.ndf". Operating system error 2: "2(The system cannot find the file specified.)".
*/

exec xp_cmdshell 'mkdir $(DbPath)\copy'
go
exec xp_cmdshell 'move $(DbPath)\*.* $(DbPath)\copy\'
go

-- Создаем базу той же структуры с тем же порядком файлов
create database db on
primary 
(name = 'db', filename = '$(DbPath)\db.mdf'),

filegroup fg1 
(name = 'db_fg1_f1', filename = '$(DbPath)\db_fg1_f1.ndf'),
(name = 'db_fg1_f2', filename = '$(DbPath)\db_fg1_f2.ndf'),
(name = 'db_fg1_f3', filename = '$(DbPath)\db_fg1_f3.ndf'),
filegroup fg2
(name = 'db_fg2_f1', filename = '$(DbPath)\db_fg2_f1.ndf'),
(name = 'db_fg2_f2', filename = '$(DbPath)\db_fg2_f2.ndf'),
(name = 'db_fg2_f3', filename = '$(DbPath)\db_fg2_f3.ndf'),
filegroup fg3
(name = 'db_fg3_f1', filename = '$(DbPath)\db_fg3_f1.ndf'),
(name = 'db_fg3_f2', filename = '$(DbPath)\db_fg3_f2.ndf'),
(name = 'db_fg3_f3', filename = '$(DbPath)\db_fg3_f3.ndf')

log on 
(name = 'db_log', filename = '$(DbPath)\db_log.ldf');
go
/*
Command(s) completed successfully.
*/

alter database db set offline with rollback immediate;
go
/*
Command(s) completed successfully.
*/

-- затираем файлы созданной базы старыми файлами
exec xp_cmdshell 'copy /Y $(DbPath)\copy\*.* $(DbPath)\'
go

alter database db set online;
go
/*
Msg 5173, Level 16, State 1, Line 155
One or more files do not match the primary file of the database. If you are attempting to attach a database, retry the operation with the correct files.  If this is an existing database, the file may be corrupted and should be restored from a backup.
Msg 5181, Level 16, State 5, Line 155
Could not restart database "db". Reverting to the previous status.
Msg 5069, Level 16, State 1, Line 155
ALTER DATABASE statement failed.
*/
select name, state_desc from sys.databases where database_id = db_id(N'db');
go
/*
name	state_desc
db	RECOVERY_PENDING
*/

alter database db set offline with rollback immediate;
go
/*
Command(s) completed successfully.
*/
select name, state_desc from sys.databases where database_id = db_id(N'db');
go
/*
name	state_desc
db	OFFLINE
*/

alter database db modify file (name = 'db_fg2_f2', offline);
go

/*
Command(s) completed successfully.
*/

alter database db set online;
go
/*
Command(s) completed successfully.
The Service Broker in database "db" will be disabled because the Service Broker GUID in the database (24040226-6050-4227-9CAA-F58E26A01A66) does not match the one in sys.databases (2C8C05CF-66AD-4A4A-96A1-EE513D208535).
*/

alter database db set new_broker;
go
/*
Command(s) completed successfully.
*/

select name, state_desc from sys.databases where database_id = db_id(N'db');
go
/*
name	state_desc
db	ONLINE
*/

use db;
go

select top(1) * from [dbo].[fg1_t1];
go
/* (1 row(s) affected) */

select top(1) * from [dbo].[fg2_t2];
go
/* 
Msg 8653, Level 16, State 1, Line 113
The query processor is unable to produce a plan for the table or view 'fg2_t2' because the table resides in a filegroup which is not online.
*/

select top(1) * from [dbo].[fg3_t3];
go
/* (1 row(s) affected) */

11 сен 15, 11:19    [18136661]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
churupaha, не получается, на несколько файлов ошибка unable to open the physical file "Z:\filename.2.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".
на остальные An unexpected file id was encountered. File id 4 was expected but 8 was read from "G:\filename5.ndf". Verify that files are mapped correctly in sys.master_files. ALTER DATABASE can be used to correct the mappings.

Пробовала менять в sys.master_files file_id пишет Ad hoc updates to system catalogs are not allowed.
11 сен 15, 13:31    [18137742]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
По поводу sys.master_files, в монопольном режиме через sqlcmd запускала

sp_configure 'allow updates', 1
GO
reconfigure with override
GO

тоже не работает. нашла что с sql2008 и выше уже не работает sp_configure 'allow updates'. получается никак таблицу в базе master не поменять?
11 сен 15, 13:35    [18137767]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1490
Julia_user,

+ непроверенный результат

http://yrushka.com/index.php/sql-server/sql-errors-and-fixes/how-to-update-system-tables-sql-2008-r2-fix-ad-hoc-updates-to-system-catalogs-are-not-allowed/

ни разу не пробовал изменять системные таблицы начиная с 2005 так что, работает или нет хз. можете попробовать
11 сен 15, 14:02    [18137951]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Julia_user
churupaha, не получается, на несколько файлов ошибка unable to open the physical file "Z:\filename.2.ndf". Operating system error 32: "32(failed to retrieve text for this error. Reason: 15105)".


handle.exe посмотрите кто держит файлы.

Julia_user
на остальные An unexpected file id was encountered. File id 4 was expected but 8 was read from "G:\filename5.ndf". Verify that files are mapped correctly in sys.master_files. ALTER DATABASE can be used to correct the mappings.


нужно создать новую базу таким образом, чтобы нофые файлы имели теже file_id что и старые. подбирайте порядок (посмотрите в скриптах выше делается именно так)

Julia_user
Пробовала менять в sys.master_files file_id пишет Ad hoc updates to system catalogs are not allowed.


не надо там лазить
11 сен 15, 14:32    [18138131]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
churupaha
чтобы нофвые файлы
11 сен 15, 14:47    [18138230]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
felix_ff, да это видела, sp_configure 'allow updates', 1 GO reconfigure with override изменяет значение, но в таблице все равно не меняет.
churupaha порядок менять пробовала, результат тот же.
11 сен 15, 15:02    [18138322]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Julia_user
churupaha порядок менять пробовала, результат тот же.


плохо пробовала.
11 сен 15, 15:09    [18138374]     Ответить | Цитировать Сообщить модератору
 Re: Не присоединяется БД после удаления файла.  [new]
Julia_user
Member

Откуда:
Сообщений: 16
churupaha, да действительно плохо пробовала. В итоге создала новую бд, потом файловые группы, потом сами файлы, файл который удалила перевела в оффлайн. БД поднялась сразу в нормальном состоянии.
Всем спасибо за помощь!
14 сен 15, 10:03    [18145357]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить