![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Программное востановление БД [D7, MSSQL]
NotGooDP © (2006-09-11 16:50:00)Всем привет!
Подскажите пожалуйста каким образом можно восстановить программно БД на msSQL
мой код
Restore DataBase SPZ_Database From DISK = путь к файлу
Старый коннект надо закрыть, но тогда каким образом или где мне указать сам сервер куда надо восстанавливать БД
использую для коннекта и запросов ADO механизмы.
Заранее спасибо!
NotGooDP (2006-09-12 10:52:00) [1]спасибо, все заработало
Ega23 (2006-09-12 09:17:00) [2]Вот кусок SP на восстановление. Писалось давно, что делает - уже не помню. Выполнять в контексте master
--=================== ВОССТАНОВЛЕНИЕ БД
IF @ACTNAM='RESTORE'
BEGIN
set @sqls='RESTORE FILELISTONLY FROM DISK ="'+@bakupfile+'"'
create table ##Bakfiles(LogicalName nvarchar(128) null,PhysicalName nvarchar(260) null,Type char(1)null ,
FileGroupName nvarchar(128) null,Size numeric(20,0) null,MaxSize numeric(20,0) null
)
insert ##Bakfiles exec (@sqls)
set @cnt=0 set @bakmdf='' set @bakndf=''
declare Cur cursor local static for select cast(LogicalName as varchar(8000)) from ##Bakfiles where type='D'
open Cur
while 0 = 0
Begin
fetch next from Cur into @ss
if @@fetch_status <> 0 BREAK
set @cnt=@cnt+1
if @cnt=1 set @bakmdf=@ss
if @cnt=2 set @bakndf=@ss
end
close Cur
deallocate Cur -- was for 1 select top 1 @bakmdf=LogicalName from ##Bakfiles where type='D'
select top 1 @bakldf=LogicalName from ##Bakfiles where type='L'
if @Debug<>-1 select * from ##Bakfiles
drop table ##Bakfiles
create table ##Dbfiles(name sysname null,fileid smallint null,filename nchar(260) null,filegroup sysname null,
size nvarchar(18) null,maxsize nvarchar(18) null,growth nvarchar(18) null, usage varchar(9) null )
set @sqls='insert ##Dbfiles exec '+@dbname+'..sp_helpfile'
exec (@sqls)
if @Debug<>-1 select * from ##Dbfiles
set @mdf='' set @ldf='' set @ndf=''
select @mdf=ltrim(rtrim(filename)) from ##Dbfiles where fileid =1
select @ndf=ltrim(rtrim(filename)) from ##Dbfiles where fileid <>1 and not (filegroup is null)
select @ldf=ltrim(rtrim(filename)) from ##Dbfiles where usage like ('%log%')
if @Debug<>-1 select * from ##Dbfiles
drop table ##Dbfiles
set @sqls=''
Print 'Restoring base :'+ @dbname +' from '+ @bakupfile
Print 'Restoring data :'+ @bakmdf +' --> '+ @mdf
if (@ndf<>'')and(@bakndf<>'')
begin
Print 'Restoring data1:'+ @bakndf +' --> '+ @ndf
set @sqls=' MOVE "'+@bakndf+'" TO '+'"'+@ndf+'",'
end
Print 'Restoring log :'+ @bakldf +' --> '+ @ldf
set @sqls='
RESTORE DATABASE '+@dbname+' FROM DISK = "'+@bakupfile+'"
WITH MOVE "'+@bakmdf+'" TO '+'"'+@mdf+'",'+
@sqls +
' MOVE "'+@bakldf+'" TO '+'"'+@ldf+'",'+
' REPLACE '
if @debug<>-1 print @sqls
-- goto Fin
-- exec S_BACKUP @ACTNAM='RESTORE', @debug=1,@dbname='tete',@bakupfile='D:\temp\knps-21-Oct-2002.BAK'
exec (@sqls)
if @@error<>0 begin print 'RESTORE ERROR !!!' goto fin end
-- Установить Collation !!
exec S_BACKUP @ACTNAM='COLLATE',@dbname=@dbname,@COLLATEnam=@defCOLLATEnam,@debug=@debug
-- goto bind
goto Fin
END
AlexWlad (2006-09-11 20:11:00) [3]Сервер определяется в строке подключения (ConnectionString).
Далее. Для восстановления базы необходимое условие - отсутствие коннектов (даже закрытых, но еще висящих), поэтому лучше в строке подключения указывать Master или любую другую базу. Ну и конечно BOL, соотв. раздел прочитать очень внимательно.