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

Откуда:
Сообщений: 20
Доброе время суток, очень нужен совет.

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

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м сервере примерно следующее:

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'

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

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)
8 сен 09, 17:42    [7633180]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104760
alex_bik


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

Это вы только думаете, что указываете восстанавливать часть базы
Но ваша команда не содержит указания восстанавливать только часть базы
8 сен 09, 17:47    [7633218]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
alex_bik

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

почему нельзя?
8 сен 09, 17:52    [7633259]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
Собственно то же интересно почему нельзя ? Да и есть функционал поднимать базу только из mdf....
8 сен 09, 17:56    [7633285]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
Ozerov
Собственно то же интересно почему нельзя ? Да и есть функционал поднимать базу только из mdf....

да но поднятие из файла .mdf придеться останавливать сиквел.
8 сен 09, 17:57    [7633291]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
ТАРАКАН
Ozerov
Собственно то же интересно почему нельзя ? Да и есть функционал поднимать базу только из mdf....

да но поднятие из файла .mdf придеться останавливать сиквел.

Это понятно, но, еще раз перечитав, не нашел условия "без остановки сервиса"
8 сен 09, 17:58    [7633303]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
alex_bik
Member

Откуда:
Сообщений: 20
Glory
Это вы только думаете, что указываете восстанавливать часть базы
Но ваша команда не содержит указания восстанавливать только часть базы

Разве это не оно:
--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 придеться останавливать сиквел.

Это понятно, но, еще раз перечитав, не нашел условия "без остановки сервиса"

Хотелось обойтись без этого.
8 сен 09, 18:34    [7633512]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
alex_bik

Потому что второй сервер - не наша вотчина, и тамошние админы обидятся, если мы для своих мутных целей вдруг отрежем от их базы лог транзакций, который они заботливо бэкапят каждый час и складывают в "копилку".

ну и в чем проблема подрезания лог файла после бэкапа лог файла?
8 сен 09, 18:40    [7633543]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
alex_bik
[quot Glory]
Потому что второй сервер - не наша вотчина, и тамошние админы обидятся, если мы для своих мутных целей вдруг отрежем от их базы лог транзакций, который они заботливо бэкапят каждый час и складывают в "копилку".

А Вы договоритесь после бэкапа лога шринкануть файл лога, сделать бэкап, и увеличить объем файла лога, если он такой им нужен, дабы они потом не грешили на затраты по приросту файла лога.
8 сен 09, 18:42    [7633556]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104760
alex_bik
Glory
Это вы только думаете, что указываете восстанавливать часть базы
Но ваша команда не содержит указания восстанавливать только часть базы

Разве это не оно:
--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
А вы укажите, где в вашем примере вы "указываете восстановить лишь часть базы"
8 сен 09, 19:59    [7633875]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
alex_bik
Member

Откуда:
Сообщений: 20
Если я правильно понял пример в BOL, вот эта конструкция
<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 ]'  
}
указывает серверу, что необходимо сделать не полный рестор, а восстановить лишь определенные файлы/группы файлов. В моем примере это
 FILE = 'DataFile_dat',
 FILE = 'Indexes'
9 сен 09, 11:35    [7635949]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104760
А ключевое слово PARTIAL по-вашему не нужно ?
9 сен 09, 11:50    [7636060]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
alex_bik
Member

Откуда:
Сообщений: 20
Попробовал с PARTIAL - та же проблема, сервер проверяет наличие места для всей базы, а не только указанных файлов.
9 сен 09, 12:46    [7636525]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
может добавить параметр CONTINUE_AFTER_ERROR
9 сен 09, 13:01    [7636644]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
alex_bik
Member

Откуда:
Сообщений: 20
CONTINUE_AFTER_ERROR помогло пройти проверку доступного места, но потом рестор все равно валится из-за того, что операционная система не может "надуть" файл лога транзакций:

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 и файлы, которые необходимо восстановить:

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'

У кого-нибудь есть мысли, что не так?
10 сен 09, 12:00    [7641105]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Восстановление базы БЕЗ лога транзакций  [new]
serg1974serg1974
Member

Откуда:
Сообщений: 71
Подниму тему:
Та же пробема - делаем бакап на 2й тестовый сервер (тест копия базы)
а в full бакапе "закатан" лог файл размером 90 Гбт - что в 1,5 раза больше чем файл данных.
места не хватает для развертывания целиком
- при том что лог не нужен - т.к. сразу после развертывания в копии все равно включаем простую модель восстановления.

Есть мысли - как восстановить только базу без лога? (тем более, как я понимаю, - в full бакапе только инфа о том что лог = 90 Гб а самих данных там нет)
14 апр 14, 12:17    [15878299]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104760
serg1974serg1974
Есть мысли - как восстановить только базу без лога?

Никак
Надо было уменьшать файл журнала ДО бэкапа
14 апр 14, 12:19    [15878313]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
serg1974serg1974
Member

Откуда:
Сообщений: 71
Т.е. уменьшать а потом снова увеличивать? (мне нужен большой журнал - т.к. база активно юзается)
А может можно делать бакап без лога транзакций?
14 апр 14, 13:54    [15879142]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104760
serg1974serg1974
Т.е. уменьшать а потом снова увеличивать? (мне нужен большой журнал - т.к. база активно юзается)

А где вы тогда возьмете место на диске, если его уже сейчас нет

serg1974serg1974
А может можно делать бакап без лога транзакций?

Сколько еще раз нужно сказать нет ?
14 апр 14, 13:57    [15879162]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
serg1974serg1974
Member

Откуда:
Сообщений: 71
Glory
А где вы тогда возьмете место на диске, если его уже сейчас нет

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

Значит можно решить так: - если шринковать данные перед бакапом и задавать лог=90Гб сразу после бакапа
- так положено по best practics?
14 апр 14, 14:21    [15879322]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
serg1974serg1974
Glory
А где вы тогда возьмете место на диске, если его уже сейчас нет

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

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

Чтобы следовать best practice, надо располагать соответствующим оборудованием/бюджетом.
14 апр 14, 14:25    [15879352]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
хмхмхм
Guest
serg1974serg1974
Т.е. уменьшать а потом снова увеличивать? (мне нужен большой журнал - т.к. база активно юзается)


Ну так разверните копию базы из бэкапа, затем усеките её лог и далее бэкап или Detach - Attach. Делов-то
14 апр 14, 15:06    [15879660]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
serg1974serg1974
Member

Откуда:
Сообщений: 71
хмхмхм,

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

В общем "купить новый диск" не вариант... Думаю правильно настроить бакап-восстановление это более правильно...
14 апр 14, 15:20    [15879789]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104760
serg1974serg1974
В общем "купить новый диск" не вариант... Думаю правильно настроить бакап-восстановление это более правильно...

Сказка про то, как сшить из шкуры 7 шапок, только на новый лад
Best practice решения проблемы "у меня не хватает места на диске" это
- удалите ненужные файлы
- установите новый диск
14 апр 14, 15:23    [15879822]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы БЕЗ лога транзакций  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
serg1974serg1974
В общем "купить новый диск" не вариант... Думаю правильно настроить бакап-восстановление это более правильно...

неправильно думаете, так как вы пытаетесь уйти от проблемы, а не решить её. правильно - отвести под базу столько места, чтоб она помещалась вся и был запас под возможное увеличение как самой базы, так и журнала транзакций. вы сами сказали что вам нужен большой журнал
14 апр 14, 15:39    [15879972]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить