Cách sao lưu / khôi phục cơ sở dữ liệu SQL Server từ dòng lệnh tương tự như mysql


8

Tôi cần tự động hóa việc di chuyển cho một số cơ sở dữ liệu từ một máy chủ cũ hơn. Tôi biết rằng kịch bản một công cụ sử dụng C # chẳng hạn có thể là một khả năng nhưng tôi cần một giải pháp đơn giản, nhanh chóng và hiệu quả để xây dựng một tệp bó để thực hiện công việc.

Câu trả lời:


9

Tạo một tệp .sql bằng (các) câu lệnh sao lưu / khôi phục của bạn và sử dụng SQLCMD

Khoảng một nửa bài viết đó có một ví dụ về việc sao lưu.

Bạn có thể tham khảo các trang sau với thông tin về T-SQL để thực hiện sao lưu và khôi phục:


Bạn có thể gọi Sqlcmd ở trên trong một tệp bó. Nó sẽ làm cho nó thuyết phục hơn để sử dụng, trong khi bạn có thể gán tên máy chủ và tên người dùng khác nhau nếu bạn cần.
Bầu trời

2

Khi bạn phải di chuyển cơ sở dữ liệu từ máy chủ cũ sang máy chủ mới, bên dưới là tập lệnh sẽ tự động hóa nó ..

Quan trọng: Kiểm tra nó trước khi sử dụng Máy chủ TEST, để bạn hiểu kịch bản làm gì ... Tôi không chịu trách nhiệm hoặc nghĩa vụ đối với bất kỳ số lượng DỮ LIỆU DỮ LIỆU nào !!!

set nocount on
/****************************************************************************** 
    Author  :: Kin
    Desc    :: Transfer Logins, Databases from one instance/Server to another
*******************************************************************************/
  declare @datafile varchar(255),
            @logfile varchar(255),
            @dbid tinyint,
            @SQLText varchar(8000),
            @dbname varchar(255),
            @destserver varchar(255),
            @SQLText2 varchar(8000)
set @destserver ='' --Destination Server Name goes here.

--1.Transfer Logins
select @SQLText='exec master..xp_cmdshell ''sqlcmd -S'+@@servername+' -E -Q"execute master.dbo.sp_help_revlogin" -oD:\logs\revloginout.sql'''
--print @sqltext
exec (@sqltext)
-- Create on Destination Server.
select @SQLText='exec master..xp_cmdshell ''sqlcmd -S'+@destserver+' -E -iD:\logs\revloginout.sql'''
--print @sqltext
exec (@sqltext)

--2. Detach All Local Databases and prepare for Attach on dest.
 --- if you want to filer only some database, then you can do it here !!
if exists(select 1 from tempdb..sysobjects where name like '%#filetable%')
      begin
      drop table #filetable
      end
      create table #filetable (mdf varchar(255),ldf varchar(255),dbid tinyint,dbname varchar(100),fileid tinyint)
      --

      insert #filetable (mdf,dbid,fileid) 
      select physical_name,database_id,data_space_id from sys.master_files where data_space_id=1

      insert #filetable (ldf,dbid,fileid) 
      select physical_name,database_id,data_space_id from sys.master_files where data_space_id=0

      update u 
      set u.dbname = s.name
      from #filetable u
      inner join master..sysdatabases s 
      on u.dbid = s.dbid


select @dbid = min(dbid) from #filetable where dbid > 4
while @dbid is not null
begin

      select @SQLText = 'alter database '+ dbname from #filetable where dbid = convert(varchar,@dbid) 
      select @SQLText = @SQLText+' set single_user with rollback immediate'
      select @SQLText = @SQLText+' exec master..sp_detach_db ' + dbname from #filetable where dbid = convert(varchar,@dbid)
      print @SQLText
      Exec(@SQLText)

      select @SQLText2 = 'exec opendatasource(''SQLNCLI'',''Datasource='+@destserver+';Persist Security Info=False;Integrated Security=SSPI'').master.dbo.sp_attach_db '''+dbname+'''' from #filetable where dbid = @dbid
      select @SQLText2= @SQLText2+','''+ mdf+'''' from #filetable where dbid = @dbid and mdf is not null
      select @SQLText2=@SQLText2+','''+ ldf+''''  from #filetable where dbid = @dbid and ldf is not null
      print @SQLText2
      Exec(@SQLText)
      select @dbid = min(dbid) from #filetable where dbid > 4 and dbid > @dbid
end

select * from #filetable
drop table #filetable
--Finally Shutdown SQL Server
shutdown with nowait
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.