Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Восстановление базы БЕЗ лога транзакций / 25 сообщений из 28, страница 1 из 2
08.09.2009, 17:42
    #36184707
alex_bik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
Доброе время суток, очень нужен совет.

Задача примерно такая: есть слабенький сервер с маленьким винтом (50 ГБ), на другом сервере есть база на 100 ГБ, из которых 70 ГБ занимает лог транзакций. База примерно такая:

Код: plaintext
1.
2.
3.
4.
5.
CREATE DATABASE [MyDB] ON PRIMARY 
( NAME = N'DataFile_dat', FILENAME = N'F:\MSSQL\Data\DataFile.MDF'), 
 FILEGROUP [IndexFileGroup] 
( NAME = N'Indexes', FILENAME = N'F:\MSSQL\Data\Indexes.MDF')
 LOG ON
( NAME = N'LogFile_log', FILENAME = N'F:\MSSQL\Data\LogFile.LDF')

Эта база ежедневно бэкапится (full backup) на втором сервере - и должна ресториться на первом сервере. Соль в том, что лог транзакций на 1м сервере не нужен, но отсечь его перед бэкапом на 2м сервере нельзя.

Я делаю на 1м сервере примерно следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
RESTORE DATABASE MyDB
 FILE = 'DataFile_dat',
 FILE = 'Indexes'
FROM DISK = '\\Some_URL\F$\BackupFolder\MyDB_Backup.BAK'
 WITH REPLACE, RECOVERY,
MOVE 'DataFile_dat' TO 'D:\MSSQL\Data\DataFile.MDF',
MOVE 'Indexes' TO 'D:\MSSQL\Data\Indexes.MDF'

И получаю такой результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
Msg  3257 , Level  16 , State  1 , Procedure RestoreMyDB, Line  20 
There is insufficient free space on disk volume 'D:\' to create the database.
The database requires XXXXXXXX additional free bytes, while only YYYYYYYY bytes are available.
Msg  3119 , Level  16 , State  4 , Procedure RestoreMyDB, Line  20 
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg  3013 , Level  16 , State  1 , Procedure RestoreMyDB, Line  20 
RESTORE DATABASE is terminating abnormally.

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

Собственно, вопрос такой: так ли это и можно ли это как-то обойти? Если нет, то можно ли решить эту задачу как-то иначе? Любые советы и предложения приветствуются.

select @@version
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
...
Рейтинг: 0 / 0
08.09.2009, 17:47
    #36184723
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
alex_bik

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

Это вы только думаете, что указываете восстанавливать часть базы
Но ваша команда не содержит указания восстанавливать только часть базы
...
Рейтинг: 0 / 0
08.09.2009, 17:52
    #36184744
ТАРАКАН
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
alex_bik
Соль в том, что лог транзакций на 1м сервере не нужен, но отсечь его перед бэкапом на 2м сервере нельзя.

почему нельзя?
...
Рейтинг: 0 / 0
08.09.2009, 17:56
    #36184759
Ozerov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
Собственно то же интересно почему нельзя ? Да и есть функционал поднимать базу только из mdf....
...
Рейтинг: 0 / 0
08.09.2009, 17:57
    #36184763
ТАРАКАН
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
OzerovСобственно то же интересно почему нельзя ? Да и есть функционал поднимать базу только из mdf....
да но поднятие из файла .mdf придеться останавливать сиквел.
...
Рейтинг: 0 / 0
08.09.2009, 17:58
    #36184768
Ozerov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
ТАРАКАНOzerovСобственно то же интересно почему нельзя ? Да и есть функционал поднимать базу только из mdf....
да но поднятие из файла .mdf придеться останавливать сиквел.
Это понятно, но, еще раз перечитав, не нашел условия "без остановки сервиса"
...
Рейтинг: 0 / 0
08.09.2009, 18:34
    #36184850
alex_bik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
GloryЭто вы только думаете, что указываете восстанавливать часть базы
Но ваша команда не содержит указания восстанавливать только часть базы
Разве это не оно:
Код: plaintext
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.
--To Restore Specific Files, Filegroups, or Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
     <file_or_filegroup_or_pages> [ ,...f ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { CONTINUE_AFTER_ERROR | STOP_ON_ERROR } ]
   [ [ , ] FILE = { file_number | @file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ]
   [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] STATS [ =percentage ] ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name | @logical_file_name_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
   | PAGE = 'file:page [ ,...p ]'  
} 

ТАРАКАНпочему нельзя?
OzerovСобственно то же интересно почему нельзя ?
Потому что второй сервер - не наша вотчина, и тамошние админы обидятся, если мы для своих мутных целей вдруг отрежем от их базы лог транзакций, который они заботливо бэкапят каждый час и складывают в "копилку".

OzerovТАРАКАНOzerovДа и есть функционал поднимать базу только из mdf....
да но поднятие из файла .mdf придеться останавливать сиквел.
Это понятно, но, еще раз перечитав, не нашел условия "без остановки сервиса"
Хотелось обойтись без этого.
...
Рейтинг: 0 / 0
08.09.2009, 18:40
    #36184869
ТАРАКАН
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
alex_bik
Потому что второй сервер - не наша вотчина, и тамошние админы обидятся, если мы для своих мутных целей вдруг отрежем от их базы лог транзакций, который они заботливо бэкапят каждый час и складывают в "копилку".

ну и в чем проблема подрезания лог файла после бэкапа лог файла?
...
Рейтинг: 0 / 0
08.09.2009, 18:42
    #36184874
Ozerov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
alex_bik[quot Glory]
Потому что второй сервер - не наша вотчина, и тамошние админы обидятся, если мы для своих мутных целей вдруг отрежем от их базы лог транзакций, который они заботливо бэкапят каждый час и складывают в "копилку".

А Вы договоритесь после бэкапа лога шринкануть файл лога, сделать бэкап, и увеличить объем файла лога, если он такой им нужен, дабы они потом не грешили на затраты по приросту файла лога.
...
Рейтинг: 0 / 0
08.09.2009, 19:59
    #36184999
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
alex_bikGloryЭто вы только думаете, что указываете восстанавливать часть базы
Но ваша команда не содержит указания восстанавливать только часть базы
Разве это не оно:
Код: plaintext
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.
--To Restore Specific Files, Filegroups, or Pages: 
RESTORE DATABASE { database_name | @database_name_var } 
     <file_or_filegroup_or_pages> [ ,...f ]
[ FROM <backup_device> [ ,...n ] ] 
[ WITH 
   [ { CHECKSUM | NO_CHECKSUM } ]
   [ [ , ] { CONTINUE_AFTER_ERROR | STOP_ON_ERROR } ]
   [ [ , ] FILE = { file_number | @file_number } ] 
   [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] 
   [ [ , ] MEDIAPASSWORD = { mediapassword |
                      @mediapassword_variable } ]
   [ [ , ] MOVE 'logical_file_name' TO 'operating_system_file_name' ] 
                [ ,...n ] 
   [ [ , ] PASSWORD = { password | @password_variable } ] 
   [ [ , ] NORECOVERY ] 
   [ [ , ] REPLACE ] 
   [ [ , ] RESTART ] 
   [ [ , ] RESTRICTED_USER ]
   [ [ , ] { REWIND | NOREWIND } ] 
   [ [ , ] STATS [ =percentage ] ] 
   [ [ , ] { UNLOAD | NOUNLOAD } ] 
]
[;]

<backup_device> ::=
{ 
   { logical_backup_device_name |
            @logical_backup_device_name_var }
   | { DISK | TAPE } = { 'physical_backup_device_name' |
              @physical_backup_device_name_var } 
} 

<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name | @logical_file_name_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
   | PAGE = 'file:page [ ,...p ]'  
} 

Это вы привели полный синтаксис команды RESTORE
А вы укажите, где в вашем примере вы "указываете восстановить лишь часть базы"
...
Рейтинг: 0 / 0
09.09.2009, 11:35
    #36185822
alex_bik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
Если я правильно понял пример в BOL, вот эта конструкция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<file_or_filegroup_or_pages> [ ,...f ]
...
<file_or_filegroup_or_pages> ::=
{ 
   FILE = { logical_file_name | @logical_file_name_var }
   | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } }
   | PAGE = 'file:page [ ,...p ]'  
}
указывает серверу, что необходимо сделать не полный рестор, а восстановить лишь определенные файлы/группы файлов. В моем примере это
Код: plaintext
1.
 FILE = 'DataFile_dat',
 FILE = 'Indexes'
...
Рейтинг: 0 / 0
09.09.2009, 11:50
    #36185867
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
А ключевое слово PARTIAL по-вашему не нужно ?
...
Рейтинг: 0 / 0
09.09.2009, 12:46
    #36186062
alex_bik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
Попробовал с PARTIAL - та же проблема, сервер проверяет наличие места для всей базы, а не только указанных файлов.
...
Рейтинг: 0 / 0
09.09.2009, 13:01
    #36186111
ТАРАКАН
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
может добавить параметр CONTINUE_AFTER_ERROR
...
Рейтинг: 0 / 0
10.09.2009, 12:00
    #36188201
alex_bik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
CONTINUE_AFTER_ERROR помогло пройти проверку доступного места, но потом рестор все равно валится из-за того, что операционная система не может "надуть" файл лога транзакций:

Код: plaintext
1.
MODIFY FILE encountered operating system error  112  (There is not enough space on the disk.)
while attempting to expand the physical file 'F:\MSSQL\Data\LogFile.LDF'.

Это при том, что я явно указываю PARTIAL и файлы, которые необходимо восстановить:

Код: plaintext
1.
2.
3.
4.
5.
6.
RESTORE DATABASE MyDB
 FILE = 'DataFile_dat',
 FILE = 'Indexes'
FROM DISK = '\\Some_URL\F$\BackupFolder\MyDB_Backup.BAK'
 WITH PARTIAL, CONTINUE_AFTER_ERROR, REPLACE, RECOVERY,
MOVE 'DataFile_dat' TO 'D:\MSSQL\Data\DataFile.MDF',
MOVE 'Indexes' TO 'D:\MSSQL\Data\Indexes.MDF'

У кого-нибудь есть мысли, что не так?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
14.04.2014, 12:17
    #38614073
serg1974serg1974
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
Подниму тему:
Та же пробема - делаем бакап на 2й тестовый сервер (тест копия базы)
а в full бакапе "закатан" лог файл размером 90 Гбт - что в 1,5 раза больше чем файл данных.
места не хватает для развертывания целиком
- при том что лог не нужен - т.к. сразу после развертывания в копии все равно включаем простую модель восстановления.

Есть мысли - как восстановить только базу без лога? (тем более, как я понимаю, - в full бакапе только инфа о том что лог = 90 Гб а самих данных там нет)
...
Рейтинг: 0 / 0
14.04.2014, 12:19
    #38614074
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
serg1974serg1974Есть мысли - как восстановить только базу без лога?
Никак
Надо было уменьшать файл журнала ДО бэкапа
...
Рейтинг: 0 / 0
14.04.2014, 13:54
    #38614184
serg1974serg1974
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
Т.е. уменьшать а потом снова увеличивать? (мне нужен большой журнал - т.к. база активно юзается)
А может можно делать бакап без лога транзакций?
...
Рейтинг: 0 / 0
14.04.2014, 13:57
    #38614187
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
serg1974serg1974Т.е. уменьшать а потом снова увеличивать? (мне нужен большой журнал - т.к. база активно юзается)
А где вы тогда возьмете место на диске, если его уже сейчас нет

serg1974serg1974А может можно делать бакап без лога транзакций?
Сколько еще раз нужно сказать нет ?
...
Рейтинг: 0 / 0
14.04.2014, 14:21
    #38614212
serg1974serg1974
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
GloryА где вы тогда возьмете место на диске, если его уже сейчас нет

место есть на том сервере где создается бакап - это разные машины.
Причем транзакции также бакапятся, и соответственно при создании full копии - журнал логов на 99% пуст....
Хм. ну да - раз не на 100% - значит отрезать данные нельзя! :)
Вы правы!!!

Значит можно решить так: - если шринковать данные перед бакапом и задавать лог=90Гб сразу после бакапа
- так положено по best practics?
...
Рейтинг: 0 / 0
14.04.2014, 14:25
    #38614217
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
serg1974serg1974GloryА где вы тогда возьмете место на диске, если его уже сейчас нет

место есть на том сервере где создается бакап - это разные машины.
Причем транзакции также бакапятся, и соответственно при создании full копии - журнал логов на 99% пуст....
Хм. ну да - раз не на 100% - значит отрезать данные нельзя! :)
Вы правы!!!

Значит можно решить так: - если шринковать данные перед бакапом и задавать лог=90Гб сразу после бакапа
- так положено по best practics?Терабайтный диск стоит менее ста долларов. Зачем взрывать мозг себе и форуму из-за каких-то 90 Гб?

Чтобы следовать best practice, надо располагать соответствующим оборудованием/бюджетом.
...
Рейтинг: 0 / 0
14.04.2014, 15:06
    #38614291
хмхмхм
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
serg1974serg1974Т.е. уменьшать а потом снова увеличивать? (мне нужен большой журнал - т.к. база активно юзается)


Ну так разверните копию базы из бэкапа, затем усеките её лог и далее бэкап или Detach - Attach. Делов-то
...
Рейтинг: 0 / 0
14.04.2014, 15:20
    #38614313
serg1974serg1974
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
хмхмхм,

В том то и проблема что развернуть не могу -т.к. места нет.
А поставить новый диск - не выход. - Это не просто комп. а сервер, он виртуальный и увеличивать размер вирт. машины плохо - т.к. растет размер его последующих бакапов....

В общем "купить новый диск" не вариант... Думаю правильно настроить бакап-восстановление это более правильно...
...
Рейтинг: 0 / 0
14.04.2014, 15:23
    #38614320
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
serg1974serg1974В общем "купить новый диск" не вариант... Думаю правильно настроить бакап-восстановление это более правильно...
Сказка про то, как сшить из шкуры 7 шапок, только на новый лад
Best practice решения проблемы "у меня не хватает места на диске" это
- удалите ненужные файлы
- установите новый диск
...
Рейтинг: 0 / 0
14.04.2014, 15:39
    #38614357
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Восстановление базы БЕЗ лога транзакций
serg1974serg1974В общем "купить новый диск" не вариант... Думаю правильно настроить бакап-восстановление это более правильно...
неправильно думаете, так как вы пытаетесь уйти от проблемы, а не решить её. правильно - отвести под базу столько места, чтоб она помещалась вся и был запас под возможное увеличение как самой базы, так и журнала транзакций. вы сами сказали что вам нужен большой журнал
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Восстановление базы БЕЗ лога транзакций / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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