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

Откуда:
Сообщений: 1708
Добрый день, уважаемые. Есть сервер
автор
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)

на котором около 200 баз, у всех модель восстановления Full.
Вот требуется написать скрипт, чтобы он для всех этих баз последовательно делал
Backup Log dbname With truncate_only
и
DBCC SHRINKFILE (logname, 100);
Вроде написал
USE master;
GO
--Объявляем переменные
DECLARE @dbnumber As int;
DECLARE @dbname AS sysname;
DECLARE @logname AS sysname;
------------------------
SELECT @dbnumber = max(dbid) FROM [dbo].[sysdatabases]; --Выбираем БД с наибольшим Id
WHILE @dbnumber > 4 --Организуем цикл для всех несистемных баз
BEGIN
IF EXISTS (SELECT [name] FROM [dbo].[sysdatabases] WHERE dbid = @dbnumber) --проверяем, есть-ли БД с таким Id
BEGIN
SELECT @dbname = [name] FROM [dbo].[sysdatabases] WHERE dbid = @dbnumber; --выбираем имя БД для текущего ID
--print @dbnumber
--print @dbname
Backup Log @dbname With truncate_only;--Копируем лог текущей БД
SELECT @logname = [name]FROM [dbo].[sysaltfiles] WHERE dbid = @dbnumber AND groupid = 0--Выбираем логическое имя 
--файла журнала для текущего ID
--print @logname
DBCC SHRINKFILE (@logname, 100);--Усекаем лог текущей БД 
END
SET @dbnumber = @dbnumber - 1 -- переходим к БД с меньшим ID. И так до БД msdb
END

Запускаю, понятное дело ошибка
Msg 8985, Level 16, State 1, Line 18
Could not locate file 'PubsLog' for database 'master' in sys.database_files. The file either does not exist, or was dropped. 

Когда делаю
SELECT @dbname = [name] FROM [dbo].[sysdatabases] WHERE dbid = @dbnumber; --выбираем имя БД для текущего ID
USE @dbname
Backup Log @dbname With truncate_only;--Копируем лог текущей БД
SELECT @logname = [name]FROM [dbo].[sysaltfiles] WHERE dbid = @dbnumber AND groupid = 0DBCC SHRINKFILE (@logname, 0);--Усекаем лог текущей БД 
10 июн 09, 12:46    [7285214]     Ответить | Цитировать Сообщить модератору
 Re: Переход от одгой к другой базе в скрипте  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/articles/mssql/02030101UndocumentedSQL.shtml#sp_MSforeachdb
10 июн 09, 12:50    [7285248]     Ответить | Цитировать Сообщить модератору
 Re: Переход от одгой к другой базе в скрипте  [new]
petsa
Member

Откуда:
Сообщений: 1708
tpg
Cпасибо. Буду пробывать, мож что получится.
10 июн 09, 13:13    [7285414]     Ответить | Цитировать Сообщить модератору
 Re: Переход от одгой к другой базе в скрипте  [new]
petsa
Member

Откуда:
Сообщений: 1708
Сейчас
Exec sp_MSforeachdb @command1 = 'Backup Log ? With truncate_only; 
DECLARE @logname AS sysname; 
Select @logname = [name] From ?.dbo.sysfiles WHERE groupid =0;
DBCC SHRINKFILE (@logname, 0) WITH NO_INFOMSGS;', @replacechar ='?';
Та же ошибка
Could not locate file 'Northwind_log'   in sysfiles.
Msg 8985, Level 16, State 1, Line 4

Не пойму, почему не находит.
Если так
Exec sp_MSforeachdb @command1 = 'DECLARE @logname AS sysname; 
Select @logname = [name] From ?.dbo.sysfiles WHERE groupid =0;
PRINT @logname ', @replacechar ='?';

Выводит полный список логических имен файлов журналов. Где я неправ, подскажите.
11 июн 09, 12:01    [7289381]     Ответить | Цитировать Сообщить модератору
 Re: Переход от одгой к другой базе в скрипте  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

sp_MSforeachdb сама по себе контекст между базами не переключает.
Exec sp_MSforeachdb @command1 = 'Backup Log ? With truncate_only;
DECLARE @logname AS sysname;
Select @logname = [name] From ?.dbo.sysfiles WHERE groupid =0;
use ?;
DBCC SHRINKFILE (@logname, 0) WITH NO_INFOMSGS;', @replacechar ='?';

Posted via ActualForum NNTP Server 1.4

11 июн 09, 12:41    [7289721]     Ответить | Цитировать Сообщить модератору
 Re: Переход от одгой к другой базе в скрипте  [new]
petsa
Member

Откуда:
Сообщений: 1708
Не помогает. Я так уже тоже делал. Все та же ошибка.
11 июн 09, 13:07    [7289913]     Ответить | Цитировать Сообщить модератору
 Re: Переход от одгой к другой базе в скрипте  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Не помогает. Я так уже тоже делал. Все та же ошибка.

а так?
Exec sp_MSforeachdb @command1 = 'Backup Log ? With truncate_only;
DECLARE @logname AS sysname;
Select @logname = rtrim([name]) From ?.dbo.sysfiles WHERE groupid =0;
use ?;
DBCC SHRINKFILE (@logname, 0) WITH NO_INFOMSGS;', @replacechar ='?';

Posted via ActualForum NNTP Server 1.4

11 июн 09, 13:42    [7290172]     Ответить | Цитировать Сообщить модератору
 Re: Переход от одгой к другой базе в скрипте  [new]
petsa
Member

Откуда:
Сообщений: 1708
О-па. А так работает отлично.
daw
Спасибо огромное

Откуда же там пробелы в хвосте взялись???
11 июн 09, 13:50    [7290224]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить