AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 23518
Accepted
Rui Marques
Rui Marques
Asked: 2012-09-01 08:44:40 +0800 CST2012-09-01 08:44:40 +0800 CST 2012-09-01 08:44:40 +0800 CST

如何从类似于 mysql 的命令行备份/恢复 SQL Server 数据库

  • 772

我需要从旧服务器自动迁移某些数据库。我知道使用 C# 编写工具脚本是可能的,但我需要一个简单、快速且有效的解决方案来构建批处理文件来完成这项工作。

sql-server sql-server-2008
  • 2 2 个回答
  • 4211 Views

2 个回答

  • Voted
  1. Best Answer
    squillman
    2012-09-01T08:51:54+08:002012-09-01T08:51:54+08:00

    使用您的备份/恢复语句创建一个 .sql 文件并使用SQLCMD

    在那篇文章的一半左右,有一个做备份的例子。

    您可以参考以下页面,了解有关用于执行备份和恢复的 T-SQL 的信息:

    • 备份
    • 恢复
    • 9
  2. Kin Shah
    2013-03-15T07:41:44+08:002013-03-15T07:41:44+08:00

    由于您必须将数据库从旧服务器迁移到新服务器,因此下面是自动化它的脚本..

    重要提示:事先在测试服务器上对其进行测试,以便您了解脚本的作用......我对任何数量的数据丢失不承担任何责任或义务!!!

    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
    
    • 2

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 如何确定是否需要或需要索引

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve