Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Восстановление БД с потерянной файловой группой / 25 сообщений из 35, страница 1 из 2
11.01.2018, 20:44
    #39582814
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
Переносил базу с одного сервера на другой при помощи Detach-> перенос файлов БД на другой сервер-> Attach, но во время перемещения файлов произошел сбой и один из файлов в файловой группе испортился и теперь при Attach SSMS пишет что не может присоединить БД так как отсутствует файл.

Если это важно то в БД использовалось секционирование и каждой секции соответствует файловая группа и 1 файл, вот одного из таких файлов и не хватает. Возможно ли присоединить базу с отсутствующим файлом?
...
Рейтинг: 0 / 0
12.01.2018, 00:33
    #39582919
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
Нет, не возможно. Бэкап вам в помощь.
...
Рейтинг: 0 / 0
21.01.2018, 18:08
    #39587879
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
Гавриленко Сергей Алексеевич,

И вообще нет никаких вариантов, хотя бы частично восстановить данные. Бэкапа нет, а данных очень много.
...
Рейтинг: 0 / 0
21.01.2018, 19:09
    #39587895
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452Гавриленко Сергей Алексеевич,

И вообще нет никаких вариантов, хотя бы частично восстановить данные. Бэкапа нет, а данных очень много.Нет.

Только если пытаться читать данные напрямую из файлов БД какими то сторонними тулзами, типа SQL Server Repair Toolbox
...
Рейтинг: 0 / 0
22.01.2018, 10:09
    #39588116
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452Гавриленко Сергей Алексеевич,

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

http://www.sql.ru/forum/1174641-2/ne-prisoedinyaetsya-bd-posle-udaleniya-fayla
...
Рейтинг: 0 / 0
22.01.2018, 10:10
    #39588119
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
MinamotoПоделюсь с вами секретной ссылкой, только имейте в виду, что это не способ восстановления базы в работоспособное состояние, а способ получить хоть какие-то данные из имеющегося набора файлов:

http://www.sql.ru/forum/1174641-2/ne-prisoedinyaetsya-bd-posle-udaleniya-fayla
Случайно линк на вторую страницу дал, читайте с первой.
...
Рейтинг: 0 / 0
22.01.2018, 11:47
    #39588180
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452,

начать играться с базой и не сделать бэкапа??? "королева в всохищении!" (С)
...
Рейтинг: 0 / 0
15.02.2018, 13:47
    #39602323
Vpsem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
Если еще актуально, то всё возможно: http://www.sqlnotes.info/2013/05/07/attach-database-with-missing-ndf-file/
Проверял, работает, только есть не описанный в статье нюанс: если база имеет больше двух файлов (а у вас явно больше), то файлы пустышки нужно делать с теми же file_id как и в оригинале.
...
Рейтинг: 0 / 0
15.02.2018, 20:10
    #39602649
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
Vpsem,

Спасибо, я натыкался на эту ссылку, только вот как мне узнать какие File_id были у потерянных файлов. Я пробовал подобным способом, но сервер все равно ругается и не видит файлов, но нужно еще раз попробовать и потестить с разными File_id
...
Рейтинг: 0 / 0
19.02.2018, 12:48
    #39604102
Vpsem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
как мне узнать какие File_id были у потерянных файлов
об этом помнит старый master, он ведь бекапился:)?
...
Рейтинг: 0 / 0
19.02.2018, 21:59
    #39604463
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
Vpsem,

Даже если бы и бэкапился то уже перезатерся(( Других вариантов нет?
...
Рейтинг: 0 / 0
20.02.2018, 10:01
    #39604588
sfyj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
Код: sql
1.
DBCC CheckPrimaryFile(N'C:\Users\My\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\v11.0\mydb.mdf',3)
...
Рейтинг: 0 / 0
21.02.2018, 21:28
    #39605822
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
sfyj,

Check primary file помогло определить fileid. По при попытке сделать онлайн пишет: one or more files not match the primary file of the database. Как я понимаю указывает что есть еще битые файлы, но не пишет какие((( буду пробовать делать все их оффлайн, а потом по одному добавлять. Но файлов больше 100 (
...
Рейтинг: 0 / 0
22.02.2018, 09:40
    #39605967
sfyj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452,

так база прицепилась хоть в каком-нибудь виде ? Например, SUSPECT

Можете выполнить ?
Код: sql
1.
2.
ALTER DATABASE [dbName] SET EMERGENCY;
GO
...
Рейтинг: 0 / 0
22.02.2018, 09:51
    #39605968
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
sfyj,

Прицепилась как recovery pendind, в emergency не дает уйти
...
Рейтинг: 0 / 0
22.02.2018, 10:02
    #39605973
sfyj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452,

можно попробовать отцепить базу, убрать куда-нибудь ldf, и попробовать прицепить с FOR ATTACH_REBUILD_LOG.

Возможно, после этого получится перейти в EMERGENCY.

Тогда можно будет для потерянного файла выполнить
Код: sql
1.
ALTER DATABASE [dbName] MODIFY FILE (NAME = 'dbName_dat13' , OFFLINE)


И затем перевести базу в ONLINE
Код: sql
1.
ALTER DATABASE [dbName] SET ONLINE;
...
Рейтинг: 0 / 0
22.02.2018, 10:10
    #39605977
sfyj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452,

а как вы увидели, что база не перевелась в EMERGENCY ?

То, что команда
Код: sql
1.
ALTER DATABASE [dbName] SET EMERGENCY;

выдаёт ошибку "Unable to open the physical file" ещё ни о чём не говорит.
...
Рейтинг: 0 / 0
22.02.2018, 10:32
    #39605991
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452sfyj,

Прицепилась как recovery pendind, в emergency не дает уйти
пойдите в еррорлог и прочтите, почему это recovery pending.
...
Рейтинг: 0 / 0
22.02.2018, 10:38
    #39605994
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
sfyjможно попробовать отцепить базу, убрать куда-нибудь ldf, и попробовать прицепить с FOR ATTACH_REBUILD_LOG.

а вы знаете, что есть recovery pending?
это значит, что база не была cleanly shutdown.
т.е. надо делать redo и undo, из лога.
и если даже вы будете цеплять базу без лога,
она(база) все равно знает, что имеются незавершенные транзакции,
так что никакой лог она ребилдить не будет.

кстати, FOR ATTACH_REBUILD_LOG не нужен, если файл лога один,
это надо для нескольких файлов лога.
при наличии всего одного лога + database was cleanly shutdown
FOR ATTACH без лога уже лог пересоздаст
...
Рейтинг: 0 / 0
22.02.2018, 11:06
    #39606005
sfyj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
Yasha123,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
set nocount on;

use [master]
go
if exists (select 1 from sys.databases where name = 'test')
	DROP DATABASE [test];
GO

CREATE DATABASE [test]
ON  PRIMARY
	( NAME = N'test'	, FILENAME = N'C:\TEMP\test.mdf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB ),
FILEGROUP [SECONDARY] DEFAULT
	( NAME = N'test_dat'	, FILENAME = N'C:\TEMP\test_dat.ndf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB )
LOG ON
	( NAME = N'test_log'	, FILENAME = N'C:\TEMP\test_log.ldf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB )
GO

use [test]
GO
CREATE PARTITION FUNCTION [PF](int) AS RANGE RIGHT FOR VALUES ( 100 )
GO
CREATE PARTITION SCHEME [PS] AS PARTITION [PF] TO ([PRIMARY], [SECONDARY])
GO
CREATE TABLE [dbo].[PT] ( [ID] [INT] NOT NULL ) ON [PS]([ID])
GO
CREATE UNIQUE CLUSTERED INDEX [IDC_PT] ON [dbo].[PT] ( [ID] ) ON [PS]([ID])
GO
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (1);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (2);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (3);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (99);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (100);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (101);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (102);
GO
SELECT * FROM [test].[dbo].[PT]
GO

use [master]
GO
ALTER DATABASE [test] SET OFFLINE;
GO

exec xp_cmdshell 'del "C:\TEMP\test_dat.ndf"', no_output
GO

begin try
	ALTER DATABASE [test] SET ONLINE;
end try
begin catch
	select [name], [state_desc] from sys.databases where [name] = N'test';
end catch
GO

begin try
	ALTER DATABASE [test] SET EMERGENCY;
end try
begin catch
end catch
GO
select [name], [state_desc] from sys.databases where [name] = N'test';
GO

ALTER DATABASE [test] MODIFY FILE (NAME = 'test_dat' , OFFLINE)
GO

ALTER DATABASE [test] SET ONLINE;
GO

begin try
	SELECT * FROM [test].[dbo].[PT]
end try
begin catch
	SELECT 'This may limit the query result.'
end catch
GO
...
Рейтинг: 0 / 0
22.02.2018, 11:38
    #39606033
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
sfyj,
у него в recovery pending не когда не хватает одного файла данных,
а когда он файлы подменил и тот, от которого нет оригинала,
в офлайн отправил.
так что репро не катит, ибо в вашем репро он лезет в недостающий файл,
а в случае ТС тот файл в офлайне и recovery pending не из-за него
...
Рейтинг: 0 / 0
22.02.2018, 11:41
    #39606035
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452,
еще раз, откройте еррорлог и прочтите, чего ему для recovery не хватает.
в репро sfyj, например, пишут:
авторFileMgr::StartSecondaryDataFiles: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file 'C:\TEMP\test_dat.ndf' . Diagnose and correct the operating system error, and retry the operation.

т.е. конкретно пишет, что нужен ему C:\TEMP\test_dat.ndf, и что The system cannot find the file specified
...
Рейтинг: 0 / 0
22.02.2018, 12:41
    #39606080
sfyj
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452,

EMERGENCY не нужен

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
set nocount on;

use [master]
go
if exists (select 1 from sys.databases where name = 'test')
	DROP DATABASE [test];
GO

exec xp_cmdshell 'del "C:\TEMP\test_pri.mdf"', no_output
exec xp_cmdshell 'del "C:\TEMP\test_pri.mdf.safe"', no_output
exec xp_cmdshell 'del "C:\TEMP\test_sec.ndf"', no_output
exec xp_cmdshell 'del "C:\TEMP\test_log.ldf"', no_output
exec xp_cmdshell 'del "C:\TEMP\test_log.ldf.safe"', no_output
GO

CREATE DATABASE [test]
ON  PRIMARY
	( NAME = N'test_pri'	, FILENAME = N'C:\TEMP\test_pri.mdf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB ),
FILEGROUP [SECONDARY] DEFAULT
	( NAME = N'test_sec'	, FILENAME = N'C:\TEMP\test_sec.ndf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB )
LOG ON
	( NAME = N'test_log'	, FILENAME = N'C:\TEMP\test_log.ldf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB )
GO

use [test]
GO
CREATE PARTITION FUNCTION [PF](int) AS RANGE RIGHT FOR VALUES ( 100 )
GO
CREATE PARTITION SCHEME [PS] AS PARTITION [PF] TO ([PRIMARY], [SECONDARY])
GO
CREATE TABLE [dbo].[PT]( [ID] [INT] NOT NULL ) ON [PS]([ID])
GO
CREATE UNIQUE CLUSTERED INDEX [IDC_PT] ON [dbo].[PT] ( [ID] ) ON [PS]([ID])
GO
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (1);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (2);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (3);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (99);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (100);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (101);
INSERT INTO [dbo].[PT] ( [ID] ) VALUES (102);
GO
SELECT * FROM [test].[dbo].[PT]
GO


use [master];
GO
ALTER DATABASE [test] SET OFFLINE WITH ROLLBACK IMMEDIATE;
GO
exec xp_cmdshell 'del "C:\TEMP\test_sec.ndf"', no_output
GO
DBCC CheckPrimaryFile ( N'C:\TEMP\test_pri.mdf' , 3 )
GO
-- Это будет база с потерянным NDF
exec xp_cmdshell 'rename "C:\TEMP\test_pri.mdf" "test_pri.mdf.safe"', no_output
exec xp_cmdshell 'rename "C:\TEMP\test_log.ldf" "test_log.ldf.safe"', no_output
GO
DROP DATABASE [test];
GO


CREATE DATABASE [test]
ON  PRIMARY
	( NAME = N'test_pri'	, FILENAME = N'C:\TEMP\test_pri.mdf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB ),
FILEGROUP [SECONDARY] DEFAULT
	( NAME = N'test_sec'	, FILENAME = N'C:\TEMP\test_sec.ndf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB )
LOG ON
	( NAME = N'test_log'	, FILENAME = N'C:\TEMP\test_log.ldf'	, SIZE = 64MB , MAXSIZE = UNLIMITED, FILEGROWTH = 5MB )
GO

-- Это потерянный файл NDF
ALTER DATABASE [test] MODIFY FILE ( NAME = 'test_sec' , OFFLINE );
GO
ALTER DATABASE [test] SET OFFLINE WITH ROLLBACK IMMEDIATE;
GO
exec xp_cmdshell 'del "C:\TEMP\test_pri.mdf"', no_output
exec xp_cmdshell 'del "C:\TEMP\test_log.ldf"', no_output
exec xp_cmdshell 'rename "C:\TEMP\test_pri.mdf.safe" test_pri.mdf', no_output
exec xp_cmdshell 'rename "C:\TEMP\test_log.ldf.safe" test_log.ldf', no_output
GO

ALTER DATABASE [test] SET ONLINE;
GO

--ALTER DATABASE [test] SET NEW_BROKER;
GO

select name ,user_access_desc ,state_desc ,service_broker_guid ,is_broker_enabled
from sys.databases where name = N'test'

begin try
	SELECT * FROM [test].[dbo].[PT];
end try
begin catch
	select 'This may limit the query result.'
end catch
GO
...
Рейтинг: 0 / 0
22.02.2018, 14:45
    #39606166
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
sfyj,

В принципе по данному алгоритму я и проводим манипуляции, но на этапе
Код: plsql
1.
ALTER DATABASE [test] SET ONLINE;


База уходит в RECOVERY PENDING, и не на какие манипуляции больше не отвечает
...
Рейтинг: 0 / 0
22.02.2018, 15:28
    #39606206
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление БД с потерянной файловой группой
lex452sfyj,

В принципе по данному алгоритму я и проводим манипуляции, но на этапе
Код: plsql
1.
ALTER DATABASE [test] SET ONLINE;


База уходит в RECOVERY PENDING, и не на какие манипуляции больше не отвечает
почему не посмотреть в еррорлоге, какого файла ему не хватает?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Восстановление БД с потерянной файловой группой / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]