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

Откуда:
Сообщений: 24
Есть база в которой есть ReadOnly файловая группа.

Регулярно делается бекап основных файловых групп, кроме readonly.
Бекапа readonly группы нет вообще.

Базу подняли из бекапа но readonly группа не восстановлена, ее mdf-файл остался не поврежденным.

ручная правка статусов в системных таблицах не привела к нужному результату:
master.sys.sysbrickfiles
testdb2.sys.sysprufiles

Наоборот база становится не доступной.

Можно ли его "привязать" к базе чтобы она с ним работала как со своим.
9 авг 15, 18:03    [17995590]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Boshmax
Member

Откуда:
Сообщений: 24
тестовый пример ситуации

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'TestDB')
	DROP DATABASE TestDB;
GO
CREATE DATABASE TestDB
ON PRIMARY
(NAME='TestDB_Part1', FILENAME='D:\data\TestDB_Part1.mdf',
SIZE=3, MAXSIZE=100, FILEGROWTH=1 ),
FILEGROUP TestDB_Part2
(NAME = 'TestDB_Part2', FILENAME ='D:\data\TestDB_Part2.ndf',
SIZE = 2, MAXSIZE=100, FILEGROWTH=1 ),
FILEGROUP TestDB_Part3
(NAME = 'TestDB_Part3', FILENAME ='D:\data\TestDB_Part3.ndf',
SIZE = 2, MAXSIZE=100, FILEGROWTH=1 ),
FILEGROUP TestDB_Part4
(NAME = 'TestDB_Part4', FILENAME ='D:\data\TestDB_Part4.ndf',
SIZE = 2, MAXSIZE=100, FILEGROWTH=1 ),
FILEGROUP TestDB_Part5
(NAME = 'TestDB_Part5', FILENAME ='D:\data\TestDB_Part5.ndf',
SIZE = 2, MAXSIZE=100, FILEGROWTH=1 );
GO
USE TestDB;
GO

CREATE PARTITION FUNCTION TestDB_PartitionRange (INT)
AS RANGE LEFT FOR
VALUES (10,20,30,40);
GO



USE TestDB;
GO
--- Step 3 : Attach Partition Scheme to FileGroups
CREATE PARTITION SCHEME TestDB_PartitionScheme
AS PARTITION TestDB_PartitionRange
TO ([PRIMARY], TestDB_Part2, TestDB_Part3, TestDB_Part4, TestDB_Part5);
GO

--- Step 4 : Create Table with Partition Key and Partition Scheme
CREATE TABLE TestTable
(ID INT NOT NULL,
Date DATETIME)
ON TestDB_PartitionScheme (ID);
GO

--- Step 5 : (Optional/Recommended) Create Index on Partitioned Table
CREATE UNIQUE CLUSTERED INDEX IX_TestTable
ON TestTable(ID)
ON TestDB_PartitionScheme (ID);
GO

--- Step 6 : Insert Data in Partitioned Table
INSERT INTO TestTable (ID, Date) -- Inserted in Partition 1
VALUES (1,GETDATE());
INSERT INTO TestTable (ID, Date) -- Inserted in Partition 2
VALUES (11,GETDATE());
INSERT INTO TestTable (ID, Date) -- Inserted in Partition 2
VALUES (12,GETDATE());
INSERT INTO TestTable (ID, Date) -- Inserted in Partition 4
VALUES (32,GETDATE());
INSERT INTO TestTable (ID, Date) -- Inserted in Partition 5
VALUES (42,GETDATE());
INSERT INTO TestTable (ID, Date) -- Inserted in Partition 5
VALUES (52,GETDATE());
INSERT INTO TestTable (ID, Date) -- Inserted in Partition 3
VALUES (22,GETDATE());
GO

--- Step 7 : Test Data from TestTable
SELECT * FROM TestTable;
GO

--- Step 8 : Verify Rows Inserted in Partitions
SELECT *
FROM sys.partitions
WHERE OBJECT_NAME(OBJECT_ID)='TestTable';
GO

ALTER DATABASE [TestDB] MODIFY FILEGROUP [TestDB_Part2] READONLY
GO


-- Backup rw and ro separately
BACKUP DATABASE [TestDB]
READ_WRITE_FILEGROUPS
TO  DISK = N'D:\data\TestDB_RW.bak'
WITH NOFORMAT, INIT, 
SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

-- list backup files
RESTORE FILELISTONLY from disk =  N'D:\data\TestDB_RW.bak'


RESTORE DATABASE [TestDB2]
read_write_filegroups
  FROM  DISK = N'D:\data\TestDB_RW.bak'  WITH  FILE = 1, 
      MOVE N'TestDB_Part1' TO N'D:\data\TestDB2_Part1.mdf', 
      MOVE N'TestDB_Part2' TO N'D:\data\TestDB2_Part2.mdf', 
      MOVE N'TestDB_Part3' TO N'D:\data\TestDB2_Part3.mdf', 
      MOVE N'TestDB_Part4' TO N'D:\data\TestDB2_Part4.mdf', 
      MOVE N'TestDB_Part5' TO N'D:\data\TestDB2_Part5.mdf', 
      MOVE N'TestDB_log' TO N'D:\data\TestDB2_log.ldf',
  REPLACE, NOUNLOAD,  STATS = 10
GO
9 авг 15, 18:05    [17995599]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Boshmax
Member

Откуда:
Сообщений: 24
файл D:\data\TestDB_Part2.ndf копируем и переименовываем в TestDB2_Part2.mdf

вот его нужно прикрепить
9 авг 15, 18:22    [17995652]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Gviber
Member

Откуда:
Сообщений: 124
Сомневаюсь, что это можно решить стандартными средствами.

По сути это тоже самое если бы мы на БД сделали:
ALTER DATABASE [TestDB2] MODIFY FILE ( NAME = TestDB_Part2, OFFLINE )

Я знаю только один способ сделать ONLINE в этом случае - это восстановить этот файл из бэкапа.
9 авг 15, 21:17    [17996104]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Gviber
Member

Откуда:
Сообщений: 124
Хотят нет ошибся, это не тоже самое

select * from sys.database_files

Статус RECOVERY_PENDING, у тех что были OFFLINE статус = OFFLINE
9 авг 15, 21:31    [17996131]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Boshmax
Member

Откуда:
Сообщений: 24
Если бы был бекап, то не было бы никаких проблем.

О стандартных методах вопрос не стоит. Интересуют нестандартные.

Нужно сделать так как будто бы он(server) поднял его из бекапа.
Все хранится в системных таблицах, значит если знать какие таблицы при восстановлении обновляются, то это можно сделать самому.
так как эта файловая группа ReadOnly, то Log не нужен.
9 авг 15, 22:38    [17996378]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Gviber
Member

Откуда:
Сообщений: 124
Попытался тоже поменять метаданные в указанных таблицах.

Результат аналогичный - Recovery Pending.

Притом даже если выполнить ALTER DATABASE [TestDB2] SET EMERGENCY GO
То БД все равно не доступна.

По этой ссылке делали файл из offline в online. Притом меняли только master.sys.sysbrickfiles. Но для RECOVERY_PENDING похоже это не срабатывает.
9 авг 15, 23:37    [17996569]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Gviber
Member

Откуда:
Сообщений: 124
вернее только sys.master_files
9 авг 15, 23:52    [17996609]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Gviber
Member

Откуда:
Сообщений: 124
Файл из offline в online перевести возможно, только что сам проверил. Поэтому должно быть возможно и из RECOVERY_PENDING в online. Я думаю есть еще системные таблицы в которые нужно внести изменения. Можно попробовать пройтись по всем системным таблицам и посмотреть различия баз TestDB и TestDB2.
10 авг 15, 00:08    [17996639]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Gviber
Member

Откуда:
Сообщений: 124
Еще вариант
Можно сохранить базу master + PRIMARY testdb2. Дальше выполнить восстановление из бэкапа этого файла. После чего через сравнение HEX нужно сравнить базу master до и после, и базу testdb2 до и после. Будет примерно понятно, что и где изменилось.
10 авг 15, 00:17    [17996660]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Gviber
Member

Откуда:
Сообщений: 124
Я вот еще чего обнаружил. Если сделать detach базы и потом попытаться сделать attach то будет ошибка пока из атача не убрать проблемный файл. А это означает, что информация которая мешает подключению файла хранится в метаданных самой БД test2. Для решения достаточно найти различия метаданных test и test2. После изменений метаданных сделать detach и attach.
10 авг 15, 14:39    [17999079]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Gviber,

А в исходной поломанной базе есть возможность сделать бекап этой файловой группе?
10 авг 15, 16:05    [17999740]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Boshmax
Member

Откуда:
Сообщений: 24
Паралельный вопрос, можно ли какими либо сторонними средствами получить данные из этого файла ndf?
10 авг 15, 16:21    [17999848]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Boshmax
Паралельный вопрос, можно ли какими либо сторонними средствами получить данные из этого файла ndf?


Попробуйте http://stackoverflow.com/questions/9127359/how-to-add-sql-server-database-file-mdf-in-visual-studio-without-installing-s

I know this post is a bit old but i encountered the same problem and i actually found a solution, so i would like to share it.

Install sql express 2008 r2
In visual studio 2010 go to Tools -> Options
Select Database Tools -> Data Connections and update the Sql Server Instance Name (blank for default) with the instance name of your database.
Then go to services by pressing ⊞Win + R and services.msc
Select the SQL Server (<instance name of express edition>), right click and select Properties
Then in the properties window of the service go to Log On tab and select Local System account
After these steps i was able to add a .mdf file into visual studio 2010.

Also maybe is possible to be able to do it without installing Sql server express, just starting from the second step, but i did not try it.

shareimprove this answer
10 авг 15, 16:26    [17999878]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
Boshmax
Member

Откуда:
Сообщений: 24
Боюсь что это не сработает, так как это не PRIMARY группа.
10 авг 15, 17:17    [18000224]     Ответить | Цитировать Сообщить модератору
 Re: Востановление фаловой группы readOnly без ее бекапа  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Boshmax
Боюсь что это не сработает, так как это не PRIMARY группа.


а вы не бойтесь, а пробуйте
10 авг 15, 17:27    [18000288]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить