Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Программное востановление БД [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, соотв. раздел прочитать очень внимательно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо