powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Бэкап базы данных SQL и усечение журнала транзакций
25 сообщений из 42, страница 1 из 2
Бэкап базы данных SQL и усечение журнала транзакций
    #38958320
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Вопрос очень элементарный, но прошу тапками не кидать, я в 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, то все последующие бэкапы будут дозаписываться в тот же файл, если не ошибаюсь? То есть через некоторое время файл бэкапа тоже выростет до огромного размера?

Заранее благодарен.
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958331
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcmurphyМожно самый простой - чтобы делать полный бэкап БД, полный бэкап журнала и обрезать журнал.
Планирую делать раз в сутки.
- Полный бэкап не усекает журнал
- Не существует полного или неполного бэкапа журнала. Потому что бэкап журанала - он один единственный.
- Зачем сжимать журнал, если он чуть позднее вырастет снова ?

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

mcmurphyИ такой вопрос - если при бэкапе указать параметр noinit, то все последующие бэкапы будут дозаписываться в тот же файл, если не ошибаюсь? То есть через некоторое время файл бэкапа тоже выростет до огромного размера?
Разумеется. А разве должно быть по другому ?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958337
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
mcmurphyдо настоящего времени бэкапы тоже не делались
так может вы только думаете, что у вас полная модель.
недостаточно выполнить alter database myDB set recovery full.
чтобы база действительно перешла в full recovery model,
необходимо сделать полный бэкап,
а вы сами пишете, что его никто не делал
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958342
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
mcmurphyесли при бэкапе указать параметр noinit, то все последующие бэкапы будут дозаписываться в тот же файл, если не ошибаюсь? То есть через некоторое время файл бэкапа тоже выростет до огромного размера?

вовсе нет.
указывайте при каждом бэкапе новый файл, ничего никуда не будет дописываться.
так и забирать удобнее, и восстанавливать,
или вы что, собираетесь "бэкапить по сети" или хранить бэкапы прямо там же, где и сами базы лежат?
(оба варианта плохие)
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958370
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory- Зачем сжимать журнал, если он чуть позднее вырастет снова ?
Так, если журнал забивается полностью, до того размера которым он ограничен, это не дает работать с базой данных, разве нет?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958375
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
o-oтак может вы только думаете, что у вас полная модель.
В менеджмент студио: свойства БД - Параметры. Модель восстановления - полная.
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958377
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcmurphyТак, если журнал забивается полностью, до того размера которым он ограничен, это не дает работать с базой данных, разве нет?
А сжатие журнала разве особождает в нем место от транзакций ?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958387
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
так в случае полной модели восстановления, вроде делают сначало бэкап лога, а потом шринк. это в связке позволяет освободить журнал для новых транзакций?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958389
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcmurphyтак в случае полной модели восстановления, вроде делают сначало бэкап лога, а потом шринк. это в связке позволяет освободить журнал для новых транзакций?
Мда.
Усечение журнала и сжатие журала - это разные операции
Место внутри файла освобождает первая, а ен вторая
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958393
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
хм... а какая команда выполняет усечение, и какая - сжатие?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958396
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcmurphyм... а какая команда выполняет усечение
Вы не поверите, это команда ... бэкапа журнала.

Зачем вы включили полную модель восстановления, если вы делаете бэкап журнала только для усечения журнала ?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958400
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
mcmurphyo-oтак может вы только думаете, что у вас полная модель.
В менеджмент студио: свойства БД - Параметры. Модель восстановления - полная.
Код: sql
1.
2.
3.
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


вот только то, что выдаст этот скрипт, в полной модели.
у меня не экспресс , так там по умолчанию у всех "фулл",
и студия тоже это нарисует.
и что, у меня все базы в симпл.
но если вы там и правда с размером лога боретесь, то наверное и правда полная,
зачем пишете тогда, что бэкапы не делались?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958401
Фотография Nik_Kurta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958404
Фотография Nik_Kurta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

как то так...
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958407
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Резервное копирование журнала создает копию транзакций, сохраненных в журнале, в файл. После копирования можно выполнить усечение журнала, т.е. записи новых транзакций не будут писаться в конец файла журнала, а будут записаны поверх старых, сохраненных в файл.
Т.е. если уменьшить размер файла, то новые транзакции будут записаны в конец файла (места-то в файле не будет) и файл будет увеличен, это даст нагрузку на систему и т.д.
Полная модель используется восстановления только тогда, кода требуется восстановление данных на любой момент времени. Если Вам неважно точное восстановление, используйте простую модель.
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958415
Фотография Nik_Kurta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и 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"
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958425
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958429
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcmurphyЛог на то время был не ограничен, и разросся до того, что места на жестком диске почти не осталось,
Потому что кто-то включил полную модель восстановления. Просто так, ан всякий случай.

mcmurphyПосле этого сжали лог, и выставили ограничение на его размер, но это костыль - приходится делать раз от раза сжимать его.
Потому что кто-то до сих пор не отключил полную модель восстановления.
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958443
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcmurphy, модель восстановления выбирают не потому, что где-то написано "как лучше", а потому, что таковы требования надёжности. Если Вас устраивает простая - просто переключите её в настройках.
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958453
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

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

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

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

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

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

Вопрос был именно как увязать при полной модели бэкап базы, бэкап лога, ну и шринк - если он необходим.
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958454
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcmurphyВопрос был именно как увязать при полной модели бэкап базы, бэкап лога, ну и шринк - если он необходим.
Да не нужен никакой шринк при регулярных бэкапах журнала
Вы это в состоянии понять ?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958461
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
mcmurphyo-o,
Пишу, потому что не делались.
да все уже ясно с вами и с логом, но как пишете, так я буквально и понимаю.
у вас бэкапы ЛОГА не делались, а не "вообще бэкапы не делались".
кто "переводит в полную модель" и не делает при этом полный бэкап, у того воз и ныне там -- никакой полной модели.
а студия отрисует, ей-то что

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

хотите убедиться -- создайте базу с указанием полной модели,
бэкап не делайте, залейте в нее сотню мегабайт короткими транзакциями,
проверьте размер лога.
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958477
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory, не волнуйтесь :-) Пробую переварить, спасибо.

Т.е. если на сегодняшний день я имею лог например, 100 мб, и буду регулярно делать бэкап БД + бэкап лога, его размер останеться примерно таким же? Завершенные транзакции при бэкапе лога будут переноситься в БД, а на их место будут записываться новые, но сам файл лога будет расти несуществеено? Имеется в виду, если кто-то за день не набъет в БД тройной объем информации?
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958481
mcmurphy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
o-o, ок, теперь понятно.
Спасибо.
...
Рейтинг: 0 / 0
Бэкап базы данных SQL и усечение журнала транзакций
    #38958483
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcmurphyи буду регулярно делать бэкап БД + бэкап лога, его размер останеться примерно таким же?
Еще раз - полный бэкап ничего не делает с журналом. Только бэкап журнала.

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


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