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

Откуда:
Сообщений: 10398
Необходимо присоединить БД, сделать бекапы, очистить лог файлы.

Присоединяю БД к серверу
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

Выполняю следующий bat-ник
set datetemp=%date:~-10%
set yyyymmdd=%date:~6,4%.%date:~3,2%.%date:~0,2%
MD D:\DataSQL\Backups\%yyyymmdd%

sqlcmd -S ssssss -U sa -P 123456 -i MonthlyFull.sql
pause

Скрипт MonthlyFull.sql:
DECLARE @yyyymmdd NVARCHAR(512) 
DECLARE @backupName NVARCHAR(512) 
DECLARE @pathName NVARCHAR(512) 
DECLARE @databaseName NVARCHAR(512) 
DECLARE @stFullDiff NVARCHAR(512) 
DECLARE @directory NVARCHAR(512) 
SET @stFullDiff = '_full_'
SET @directory = 'D:\DataSQL\Backups\'
SET @yyyymmdd = convert(varchar(10),getdate(),102)

SET @databaseName = 'test_tekush'
SET @backupname = @databaseName + @stFullDiff + @yyyymmdd 
SET @pathName = @directory + @yyyymmdd + '\' + @backupname+'.bak'
BACKUP DATABASE @databaseName TO  DISK = @pathName WITH NOFORMAT, NOINIT,  NAME = @backupname, SKIP, NOREWIND, NOUNLOAD,  STATS = 10

SET @databaseName = 'test_sud'
SET @backupname = @databaseName + @stFullDiff + @yyyymmdd 
SET @pathName = @directory + @yyyymmdd + '\' + @backupname+'.bak'
BACKUP DATABASE @databaseName TO  DISK = @pathName WITH NOFORMAT, NOINIT,  NAME = @backupname, SKIP, NOREWIND, NOUNLOAD,  STATS = 10

SET @stFullDiff = '_log_'

SET @databaseName = 'test_tekush'
SET @backupname = @databaseName + @stFullDiff + @yyyymmdd 
SET @pathName = @directory + @yyyymmdd + '\' + @backupname+'.bak'
BACKUP LOG @databaseName TO  DISK = @pathName WITH NOFORMAT, NOINIT,  NAME = @backupname, SKIP, NOREWIND, NOUNLOAD,  STATS = 10

SET @databaseName = 'test_sud'
SET @backupname = @databaseName + @stFullDiff + @yyyymmdd 
SET @pathName = @directory + @yyyymmdd + '\' + @backupname+'.bak'
BACKUP LOG @databaseName TO  DISK = @pathName WITH NOFORMAT, NOINIT,  NAME = @backupname, SKIP, NOREWIND, NOUNLOAD,  STATS = 10

ALTER DATABASE test_tekush SET RECOVERY SIMPLE 
DBCC SHRINKFILE (test_tekush_log, 1); 
ALTER DATABASE test_tekush SET RECOVERY FULL

ALTER DATABASE test_sud SET RECOVERY SIMPLE 
DBCC SHRINKFILE (test_sud_log, 1); 
ALTER DATABASE test_sud SET RECOVERY FULL


Получаю следующее:

D:\DataSQL\Backups>set datetemp=27.02.2012

D:\DataSQL\Backups>set yyyymmdd=2012.02.27

D:\DataSQL\Backups>MD D:\DataSQL\Backups\2012.02.27
Подпапка или файл D:\DataSQL\Backups\2012.02.27 уже существует.

D:\DataSQL\Backups>sqlcmd -S ssssss -U sa -P 123456 -i Month
lyFull.sql
10 обработано.
20 обработано.
30 обработано.
40 обработано.
50 обработано.
60 обработано.
70 обработано.
80 обработано.
90 обработано.
Обработано 54624 страниц для базы данных "test_tekush", файл "_tekush" для файла
2.
100 обработано.
Обработано 1 страниц для базы данных "test_tekush", файл "_tekush_log" для файла
2.
BACKUP DATABASE успешно обработал 54625 страниц за 27.012 секунд (15.798 MБ/сек)
.
10 обработано.
20 обработано.
30 обработано.
40 обработано.
50 обработано.
60 обработано.
71 обработано.
80 обработано.
91 обработано.
Обработано 8288 страниц для базы данных "test_sud", файл "_sud" для файла 2.
100 обработано.
Обработано 1 страниц для базы данных "test_sud", файл "_sud_log" для файла 2.
BACKUP DATABASE успешно обработал 8289 страниц за 3.959 секунд (16.357 MБ/сек).
100 обработано.
Обработано 2 страниц для базы данных "test_tekush", файл "_tekush_log" для файла
2.
BACKUP LOG успешно обработал 2 страниц за 0.080 секунд (0.140 MБ/сек).
100 обработано.
Обработано 2 страниц для базы данных "test_sud", файл "_sud_log" для файла 2.
BACKUP LOG успешно обработал 2 страниц за 0.040 секунд (0.280 MБ/сек).
Сообщение 8985, уровень 16, состояние 1, сервер ssssss , стро
ка 34
Не удалось найти файл "test_tekush_log" для базы данных "master" в sys.database_
files. Файл не существует или был удален.
Сообщение 8985, уровень 16, состояние 1, сервер ssssss , стро
ка 38
Не удалось найти файл "test_sud_log" для базы данных "master" в sys.database_fil
es. Файл не существует или был удален.

D:\DataSQL\Backups>pause
Для продолжения нажмите любую клавишу . . .

Как решить эту проблему?
Спасибо.
27 фев 12, 10:42    [12155245]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
MSSQLAndDotNet
Как решить эту проблему?
Спасибо.
Ну так DBCC SHRINKFILE (test_tekush_log, 1); вы выполняете для базы мастер? А там нету такого файла лога.
27 фев 12, 10:47    [12155264]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
alexeyvg
MSSQLAndDotNet
Как решить эту проблему?
Спасибо.
Ну так DBCC SHRINKFILE (test_tekush_log, 1); вы выполняете для базы мастер? А там нету такого файла лога.

Прочитал Это:
DBCC SHRINKFILE (ИмяФайлаЛога, ЖелаемыйРазмер);
И думал что достаточно указать ИмяФайлаЛога и будет работать.

Подскажите пожалуйста как обрезать файл лога в моем случае ?
27 фев 12, 10:53    [12155292]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
MSSQLAndDotNet
alexeyvg
пропущено...
Ну так DBCC SHRINKFILE (test_tekush_log, 1); вы выполняете для базы мастер? А там нету такого файла лога.

Прочитал Это:
DBCC SHRINKFILE (ИмяФайлаЛога, ЖелаемыйРазмер);
И думал что достаточно указать ИмяФайлаЛога и будет работать.

Подскажите пожалуйста как обрезать файл лога в моем случае ?
Типа, сервер сам должен догадаться, в какой базе находится нужный файл лога с таким именем, а если их несколько, угадать и выбрать нужный?
27 фев 12, 10:54    [12155297]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Гавриленко Сергей Алексеевич
MSSQLAndDotNet
пропущено...

Прочитал Это:
DBCC SHRINKFILE (ИмяФайлаЛога, ЖелаемыйРазмер);
И думал что достаточно указать ИмяФайлаЛога и будет работать.

Подскажите пожалуйста как обрезать файл лога в моем случае ?
Типа, сервер сам должен догадаться, в какой базе находится нужный файл лога с таким именем, а если их несколько, угадать и выбрать нужный?

При присоединении БД сервер определяет файл лога для присоединяемой БД.
Логично предположить что и при
DBCC SHRINKFILE (ИмяФайлаЛога, ЖелаемыйРазмер);
сервер знает к какой БД относится лог-ИмяФайлаЛога
27 фев 12, 11:04    [12155359]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Да и в свойствах БД лог файл определяется
27 фев 12, 11:05    [12155363]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
MSSQLAndDotNet
Гавриленко Сергей Алексеевич
пропущено...
Типа, сервер сам должен догадаться, в какой базе находится нужный файл лога с таким именем, а если их несколько, угадать и выбрать нужный?

При присоединении БД сервер определяет файл лога для присоединяемой БД.
Логично предположить что и при
DBCC SHRINKFILE (ИмяФайлаЛога, ЖелаемыйРазмер);
сервер знает к какой БД относится лог-ИмяФайлаЛога
А ничего, что ИмяФайлаЛога может быть одинаковым в стопиццот БД одновременно?
27 фев 12, 11:06    [12155364]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Гавриленко Сергей Алексеевич
MSSQLAndDotNet
пропущено...

При присоединении БД сервер определяет файл лога для присоединяемой БД.
Логично предположить что и при
DBCC SHRINKFILE (ИмяФайлаЛога, ЖелаемыйРазмер);
сервер знает к какой БД относится лог-ИмяФайлаЛога
А ничего, что ИмяФайлаЛога может быть одинаковым в стопиццот БД одновременно?

чего
Ошибку понял
27 фев 12, 11:07    [12155373]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
как ее исправить
27 фев 12, 11:08    [12155383]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
MSSQLAndDotNet
как ее исправить
Сделать текущуей нужную базу.
27 фев 12, 11:09    [12155388]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Гавриленко Сергей Алексеевич
MSSQLAndDotNet
как ее исправить
Сделать текущуей нужную базу.

USE test_tekush
GO
ALTER DATABASE test_tekush SET RECOVERY SIMPLE 
DBCC SHRINKFILE (test_tekush_log, 1); 
ALTER DATABASE test_tekush SET RECOVERY FULL

USE test_sud
GO
ALTER DATABASE test_sud SET RECOVERY SIMPLE 
DBCC SHRINKFILE (test_sud_log, 1); 
ALTER DATABASE test_sud SET RECOVERY FULL

Рано я обрадовался
Ошибка таже
27 фев 12, 11:21    [12155477]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Делаю так
USE Act_sud 
go
ALTER DATABASE Act_sud SET RECOVERY SIMPLE 
DBCC SHRINKFILE (Act_sud_log, 1); 
ALTER DATABASE Act_sud SET RECOVERY FULL

USE Act_tekush 
go
ALTER DATABASE Act_tekush SET RECOVERY SIMPLE 
DBCC SHRINKFILE (Act_tekush_log, 1); 
ALTER DATABASE Act_tekush SET RECOVERY FULL 

все норм, а с присоединенными ошибка
27 фев 12, 11:49    [12155649]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
MSSQLAndDotNet
Рано я обрадовался
Ошибка таже
Не может быть. Может, такого имени нету?

Поставьте перед DBCC SHRINKFILE вызов exec sp_helpfile
27 фев 12, 11:50    [12155661]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
MSSQLAndDotNet
все норм, а с присоединенными ошибка
Просто имя неправильно набрали.
27 фев 12, 11:50    [12155664]     Ответить | Цитировать Сообщить модератору
 Re: Как обрезать log файл присоединенной БД?  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
alexeyvg
MSSQLAndDotNet
все норм, а с присоединенными ошибка
Просто имя неправильно набрали.

USE test_tekush
ALTER DATABASE test_tekush SET RECOVERY SIMPLE 
DBCC SHRINKFILE (_tekush_log, 1); 
ALTER DATABASE test_tekush SET RECOVERY FULL

Вопрос снят
27 фев 12, 13:12    [12156420]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить