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

Откуда:
Сообщений: 2
На Sql server 2000 пользовался долгое время, а когда установили Sql server 2008, то после запуска

exec RESTORE_BD_BY_BACKUP
'db1'
,'D:\DATA\'
,'E:\BackUp\BD.bk'
,'admin'

выдаёт :

Сообщение 213, уровень 16, состояние 7, строка 1
Имя столбца или число предоставленных значений не соответствует определению таблицы.
Сообщение 3013, уровень 16, состояние 1, строка 1
RESTORE FILELIST прервано с ошибкой.

(строк обработано: 7)

Подскажите, что не так?

--------------------------------------------------------------------------------------------------------------------

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


ALTER PROCEDURE RESTORE_BD_BY_BACKUP
@basename [nvarchar] (200)
, @path_to_restore [nvarchar] (4000)
, @backup_path_and_file [nvarchar] (4000)
, @Nt_UserName [nvarchar] (50) = NULL
as
if right(@path_to_restore,1) <> '\' or right(@path_to_restore,1) <> '/'
set @path_to_restore = @path_to_restore + '\'
declare @SQL [nvarchar] (4000)
declare @Log_LogicalName [nvarchar](128)
declare @Data_LogicalName [nvarchar](128)
/*Вытаскиваем логические имена*/
create table #t
(
LogicalName nvarchar(128)
, PhysicalName nvarchar(260)
, Type char(1)
, FileGroupName nvarchar(128)
, [Size] numeric(20,0)
, [MaxSize] numeric(20,0)
)
set @SQL = N'RESTORE FILELISTONLY from DISK = N''' + @backup_path_and_file + ''''
insert #t exec(@SQL)
select @Log_LogicalName = LogicalName from #t where Type = 'L'
select @Data_LogicalName = LogicalName from #t where Type = 'D'
drop table #t
/*Вытаскиваем логические имена*/
set @SQL =
'RESTORE DATABASE [' + @basename + ']'
+ ' FROM DISK = N''' + @backup_path_and_file + ''''
+ ' WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY , REPLACE '
+ ', MOVE N''' + @Log_LogicalName + ''' TO N''' + @path_to_restore + @basename + '_log.ldf'''
+ ', MOVE N''' + @Data_LogicalName + ''' TO N''' + + @path_to_restore + @basename + '.mdf'''
exec(@SQL)
set @SQL = @basename
+ ': Востановлена из бэкапа - ' + @backup_path_and_file

exec p_insert_t_event_log @SQL

if not(@Nt_UserName is NULL)
BEGIN
set @SQL = ' exec master..xp_cmdshell N''net send ' + @Nt_UserName + ' " ' + 'База '
+ @basename + ' востановлена из бэкапа : ' + @backup_path_and_file + ' "'''
exec(@SQL)
END

/*
exec RESTORE_BD_BY_BACKUP
'db1'
,'D:\DATA\'
,'E:\BackUp\BD.bk'
,'admin'
/*


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
24 окт 13, 11:06    [15024738]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE_BD  [new]
RESTORE FILELISTONLY
Guest
http://technet.microsoft.com/ru-ru/library/ms173778(v=sql.105).aspx
24 окт 13, 11:09    [15024758]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE_BD  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
Потому что RESTORE FILELISTONLY в 2008 возвращает другое количество столбцов.
24 окт 13, 11:11    [15024770]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE_BD  [new]
fns
Member

Откуда:
Сообщений: 2
Спасибо, разобрался.
24 окт 13, 12:21    [15025473]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить