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

Откуда:
Сообщений: 13
Добрый день!

Вопрос очень элементарный, но прошу тапками не кидать, я в SQL-е новичек.

Есть БД, котораяет работает на SQL-express.
Точнее - Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)
Aug 19 2014 12:21:34
Copyright (c) Microsoft Corporation
Express Edition with Advanced Services (64-bit) on Windows NT 6.3 <X64>
(Build 9600: ).
Экземпляр по умолчанию, единственный на сервере.

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

Если у кого-нибудь есть готовый скриптик по бэкапу и шринку журнала - поделитесь, плиз.
Можно самый простой - чтобы делать полный бэкап БД, полный бэкап журнала и обрезать журнал.
Планирую делать раз в сутки.

Планируется выполнять через виндовый планировщик, и sqlcmd, и стандартные команды
типа "SQLCMD -S (local) -E -Q "BACKUP DATABASE My_BD TO DISK... BACKUP LOG... DBCC SHRINKFILE"
В принципе, менеджмент студио показывает, как будут выглядеть эти команды в виде кода, но как их увязать, чтобы они запускались поочередно через sqlcmd?

И такой вопрос - если при бэкапе указать параметр noinit, то все последующие бэкапы будут дозаписываться в тот же файл, если не ошибаюсь? То есть через некоторое время файл бэкапа тоже выростет до огромного размера?

Заранее благодарен.
14 май 15, 10:14    [17638142]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104751
mcmurphy
Можно самый простой - чтобы делать полный бэкап БД, полный бэкап журнала и обрезать журнал.
Планирую делать раз в сутки.

- Полный бэкап не усекает журнал
- Не существует полного или неполного бэкапа журнала. Потому что бэкап журанала - он один единственный.
- Зачем сжимать журнал, если он чуть позднее вырастет снова ?

mcmurphy
Планируется выполнять через виндовый планировщик, и sqlcmd, и стандартные команды
типа "SQLCMD -S (local) -E -Q "BACKUP DATABASE My_BD TO DISK... BACKUP LOG... DBCC SHRINKFILE"
В принципе, менеджмент студио показывает, как будут выглядеть эти команды в виде кода, но как их увязать, чтобы они запускались поочередно через sqlcmd?

Изучить параметры SQLCMD и узнать, как запускать в ней скрипты

mcmurphy
И такой вопрос - если при бэкапе указать параметр noinit, то все последующие бэкапы будут дозаписываться в тот же файл, если не ошибаюсь? То есть через некоторое время файл бэкапа тоже выростет до огромного размера?

Разумеется. А разве должно быть по другому ?
14 май 15, 10:21    [17638179]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
o-o
Guest
mcmurphy
до настоящего времени бэкапы тоже не делались

так может вы только думаете, что у вас полная модель.
недостаточно выполнить alter database myDB set recovery full.
чтобы база действительно перешла в full recovery model,
необходимо сделать полный бэкап,
а вы сами пишете, что его никто не делал
14 май 15, 10:25    [17638198]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
o-o
Guest
mcmurphy
если при бэкапе указать параметр noinit, то все последующие бэкапы будут дозаписываться в тот же файл, если не ошибаюсь? То есть через некоторое время файл бэкапа тоже выростет до огромного размера?

вовсе нет.
указывайте при каждом бэкапе новый файл, ничего никуда не будет дописываться.
так и забирать удобнее, и восстанавливать,
или вы что, собираетесь "бэкапить по сети" или хранить бэкапы прямо там же, где и сами базы лежат?
(оба варианта плохие)
14 май 15, 10:29    [17638219]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
mcmurphy
Member

Откуда:
Сообщений: 13
Glory
- Зачем сжимать журнал, если он чуть позднее вырастет снова ?

Так, если журнал забивается полностью, до того размера которым он ограничен, это не дает работать с базой данных, разве нет?
14 май 15, 10:58    [17638358]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
mcmurphy
Member

Откуда:
Сообщений: 13
o-o
так может вы только думаете, что у вас полная модель.

В менеджмент студио: свойства БД - Параметры. Модель восстановления - полная.
14 май 15, 11:00    [17638374]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104751
mcmurphy
Так, если журнал забивается полностью, до того размера которым он ограничен, это не дает работать с базой данных, разве нет?

А сжатие журнала разве особождает в нем место от транзакций ?
14 май 15, 11:01    [17638380]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
mcmurphy
Member

Откуда:
Сообщений: 13
Glory,
так в случае полной модели восстановления, вроде делают сначало бэкап лога, а потом шринк. это в связке позволяет освободить журнал для новых транзакций?
14 май 15, 11:06    [17638415]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104751
mcmurphy
так в случае полной модели восстановления, вроде делают сначало бэкап лога, а потом шринк. это в связке позволяет освободить журнал для новых транзакций?

Мда.
Усечение журнала и сжатие журала - это разные операции
Место внутри файла освобождает первая, а ен вторая
14 май 15, 11:07    [17638423]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
mcmurphy
Member

Откуда:
Сообщений: 13
Glory,
хм... а какая команда выполняет усечение, и какая - сжатие?
14 май 15, 11:10    [17638440]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104751
mcmurphy
м... а какая команда выполняет усечение

Вы не поверите, это команда ... бэкапа журнала.

Зачем вы включили полную модель восстановления, если вы делаете бэкап журнала только для усечения журнала ?
14 май 15, 11:11    [17638449]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
o-o
Guest
mcmurphy
o-o
так может вы только думаете, что у вас полная модель.

В менеджмент студио: свойства БД - Параметры. Модель восстановления - полная.

select DB_NAME(d.database_id) as name, d.recovery_model_desc, r.last_log_backup_lsn
from sys.databases d join sys.database_recovery_status r on d.database_id = r.database_id
where d.recovery_model = 1 and r.last_log_backup_lsn is not null

вот только то, что выдаст этот скрипт, в полной модели.
у меня не экспресс, так там по умолчанию у всех "фулл",
и студия тоже это нарисует.
и что, у меня все базы в симпл.
но если вы там и правда с размером лога боретесь, то наверное и правда полная,
зачем пишете тогда, что бэкапы не делались?
14 май 15, 11:15    [17638471]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Nik_Kurta
Member

Откуда: Россия, Симферополь
Сообщений: 66
PRINT 'Начало работы скрипта - "BackupBASE_LOG" ' + RTRIM(CONVERT(varchar(30), GETDATE(),20))
GO
USE [DASE]
GO
DECLARE @name varchar(200);
SET @name='C:\Servis\BackupBASE\BackupBASE_LOG_'+convert(varchar(50),GETDATE(),105)+'_'+REPLACE(convert(varchar(50),GETDATE(),8),':','.')+'.log_backup'
BACKUP LOG DAT to DISK=@name
GO
PRINT 'Окончание работы скрипта - "BackupBASE_LOG" ' + RTRIM(CONVERT(varchar(30), GETDATE(),20))
GO

PRINT 'Начало работы скрипта - "BackupBASE" ' + RTRIM(CONVERT(varchar(30), GETDATE(),20))
GO
USE [BASE]
GO
DECLARE @name varchar(200);
SET @name='C:\Servis\BackupBASE\BackupBASE_'+convert(varchar(50),GETDATE(),105)+'_'+REPLACE(convert(varchar(50),GETDATE(),8),':','.')+'.bak'
BACKUP database DAT to DISK=@name
GO
PRINT 'Окончание работы скрипта - "BackupBASE" ' + RTRIM(CONVERT(varchar(30), GETDATE(),20))
GO
14 май 15, 11:16    [17638481]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Nik_Kurta
Member

Откуда: Россия, Симферополь
Сообщений: 66
PRINT 'Начало работы скрипта - "BackupBASE_LOG" ' + RTRIM(CONVERT(varchar(30), GETDATE(),20))
GO
USE [BASE]
GO
DECLARE @name varchar(200);
SET @name='C:\Servis\BackupBASE\BackupBASE_LOG_'+convert(varchar(50),GETDATE(),105)+'_'+REPLACE(convert(varchar(50),GETDATE(),8),':','.')+'.log_backup'
BACKUP LOG BASE to DISK=@name
GO
PRINT 'Окончание работы скрипта - "BackupBASE_LOG" ' + RTRIM(CONVERT(varchar(30), GETDATE(),20))
GO

PRINT 'Начало работы скрипта - "BackupBASE" ' + RTRIM(CONVERT(varchar(30), GETDATE(),20))
GO
USE [BASE]
GO
DECLARE @name varchar(200);
SET @name='C:\Servis\BackupBASE\BackupBASE_'+convert(varchar(50),GETDATE(),105)+'_'+REPLACE(convert(varchar(50),GETDATE(),8),':','.')+'.bak'
BACKUP database BASE to DISK=@name
GO
PRINT 'Окончание работы скрипта - "BackupBASE" ' + RTRIM(CONVERT(varchar(30), GETDATE(),20))
GO

как то так...
14 май 15, 11:19    [17638497]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8813
Резервное копирование журнала создает копию транзакций, сохраненных в журнале, в файл. После копирования можно выполнить усечение журнала, т.е. записи новых транзакций не будут писаться в конец файла журнала, а будут записаны поверх старых, сохраненных в файл.
Т.е. если уменьшить размер файла, то новые транзакции будут записаны в конец файла (места-то в файле не будет) и файл будет увеличен, это даст нагрузку на систему и т.д.
Полная модель используется восстановления только тогда, кода требуется восстановление данных на любой момент времени. Если Вам неважно точное восстановление, используйте простую модель.
14 май 15, 11:20    [17638504]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Nik_Kurta
Member

Откуда: Россия, Симферополь
Сообщений: 66
и cmd к скриптам

C:
cd "\Servis\log"
del backupBASE_LOG###.log
ren backupBASE_LOG##.log backupBASE_LOG###.log
ren backupBASE_LOG#.log backupBASE_LOG##.log
ren backupBASE_LOG.log backupBASE_LOG#.log
rem
cd "\Servis\Scripts\"
sqlcmd -U SqlUser -P SqlPwl -S NameServer -d BASE -f 1251 -i "xp_backupBASE_LOG.sql" -o "C:\Servis\Log\backupBASE_LOG.log"

C:
cd "\Servis\log"
del backupBASE###.log
ren backupBASE##.log backupBASE###.log
ren backupBASE#.log backupBASE##.log
ren backupBASE.log backupBASE#.log
rem
cd "\Servis\Scripts\"
sqlcmd -U SqlUser -P SqlPwl -S NameServer -d BASE -f 1251 -i "xp_backupBASE.sql" -o "C:\Servis\Log\backupBASE.log"
14 май 15, 11:25    [17638530]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
mcmurphy
Member

Откуда:
Сообщений: 13
o-o,
Пишу, потому что не делались. Лог на то время был не ограничен, и разросся до того, что места на жестком диске почти не осталось, что вызвало тормоза сервера и неработоспособность БД.
После этого сжали лог, и выставили ограничение на его размер, но это костыль - приходится делать раз от раза сжимать его.

Насчет модели восстановления - не очень понял, почему экспресс-версия показывает у всех полную модель... если создавать БД через Студио, и указать модель простой - она так и будет отображаться, и лог расти не будет до бесконечности.
Кроме этой БД есть ряд других, тестовых, у них простая модель, и лог ведет себя соответсвующе.
Не совсем вас понял, пардон.

Если остановиться на варианте с полной моделью, эти команды подойдут:

BACKUP DATABASE [MyDB] TO DISK = N'E:\BackupDB\MyDB.bak' WITH NOFORMAT, INIT, NAME = N'DeviceAutotTest-Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

BACKUP LOG [MyDB] TO DISK = N'E:\BackupDB\AT3.trn' WITH NOFORMAT, INIT, NAME = N'MyDB-Журнал транзакций Резервное копирование', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

USE [MyDB]
GO
DBCC SHRINKFILE (N'MyDB_log' , 0, TRUNCATEONLY)
GO
14 май 15, 11:34    [17638582]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104751
mcmurphy
Лог на то время был не ограничен, и разросся до того, что места на жестком диске почти не осталось,

Потому что кто-то включил полную модель восстановления. Просто так, ан всякий случай.

mcmurphy
После этого сжали лог, и выставили ограничение на его размер, но это костыль - приходится делать раз от раза сжимать его.

Потому что кто-то до сих пор не отключил полную модель восстановления.
14 май 15, 11:37    [17638598]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8813
mcmurphy, модель восстановления выбирают не потому, что где-то написано "как лучше", а потому, что таковы требования надёжности. Если Вас устраивает простая - просто переключите её в настройках.
14 май 15, 11:47    [17638675]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
mcmurphy
Member

Откуда:
Сообщений: 13
Владислав Колосов,

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

БД создали лет 5 назад, создали ПО для работы с ней, и на этом успокоились. Какое-то время ее еще администрировали, но потом персонал сменился и по сути она почти бесхозная - ее использовали, пока не вышла неприятность с логом.

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

Использовали БД АльтаГТД, там, в документации был план создания бэкапа через sqlcmd:
SQLCMD -S (local) -E -Q "BACKUP DATABASE gtd TO DISK = 'D:\BACKUP\gtd_monday.bak' WITH INIT, NOFORMAT, SKIP, NOUNLOAD"
Но там простая модель.

Менеджмент студио показывает примерно такой же код, если делать бэкап из нее.

Вопрос был именно как увязать при полной модели бэкап базы, бэкап лога, ну и шринк - если он необходим.
14 май 15, 11:56    [17638742]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104751
mcmurphy
Вопрос был именно как увязать при полной модели бэкап базы, бэкап лога, ну и шринк - если он необходим.

Да не нужен никакой шринк при регулярных бэкапах журнала
Вы это в состоянии понять ?
14 май 15, 11:58    [17638752]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
o-o
Guest
mcmurphy
o-o,
Пишу, потому что не делались.

да все уже ясно с вами и с логом, но как пишете, так я буквально и понимаю.
у вас бэкапы ЛОГА не делались, а не "вообще бэкапы не делались".
кто "переводит в полную модель" и не делает при этом полный бэкап, у того воз и ныне там -- никакой полной модели.
а студия отрисует, ей-то что

mcmurphy
Насчет модели восстановления - не очень понял, почему экспресс-версия показывает у всех полную модель...

читать надо правильно, и не выкидывать слова.
говорю, у вас такое не пронаблюдаете без смены модели у "model",
а у меня девелопер, а НЕ экспресс.
и все базы создаются с описанием модели "FULL".
(в экспрессе же по умолчанию все базы создаются в simple)
но это не более чем формальное описание,
хотя студия именно это и показывает.
на самом деле до первого бэкапа все базы останутся в простой модели,
у меня базы тестовые и все в симпл,
просто лень менять что-то в model.
студия -- не показатель.

хотите убедиться -- создайте базу с указанием полной модели,
бэкап не делайте, залейте в нее сотню мегабайт короткими транзакциями,
проверьте размер лога.
14 май 15, 12:04    [17638798]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
mcmurphy
Member

Откуда:
Сообщений: 13
Glory, не волнуйтесь :-) Пробую переварить, спасибо.

Т.е. если на сегодняшний день я имею лог например, 100 мб, и буду регулярно делать бэкап БД + бэкап лога, его размер останеться примерно таким же? Завершенные транзакции при бэкапе лога будут переноситься в БД, а на их место будут записываться новые, но сам файл лога будет расти несуществеено? Имеется в виду, если кто-то за день не набъет в БД тройной объем информации?
14 май 15, 12:14    [17638857]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
mcmurphy
Member

Откуда:
Сообщений: 13
o-o, ок, теперь понятно.
Спасибо.
14 май 15, 12:17    [17638868]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы данных SQL и усечение журнала транзакций  [new]
Glory
Member

Откуда:
Сообщений: 104751
mcmurphy
и буду регулярно делать бэкап БД + бэкап лога, его размер останеться примерно таким же?

Еще раз - полный бэкап ничего не делает с журналом. Только бэкап журнала.

mcmurphy
Завершенные транзакции при бэкапе лога будут переноситься в БД, а на их место будут записываться новые, но сам файл лога будет расти несуществеено?

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