同一数据库在两台机上不同路径的备份还原

原创 2015年07月09日 16:15:33

在做数据库复制或BI商业分析时,我们经常遇到这样的问题,同一数据库在A服务器上是一个路径(如:D:\database),在B服务器上的路径不同(D:\sqlserver data)。

如果用手工在企业管理器里操作,那么在还原时,我们要重新选择还原路径与实际路径相符,才可以还原成功,否则还原失败。

那么,如果直接用命令完成还原,应该什么做呢?步骤如下:

一、先把当前活动进程杀掉

二、检查文件是否存在

三、还原时,逻辑文件名对应到物理文件名真实路径

declare @dbname varchar(20) , @sql nvarchar(500)  
declare @spid int 
set @dbname='ORDER_DB' 
set @sql='declare getspid cursor for  select spid from sysprocesses where dbid=db_id('''+@dbname+''')' 
exec (@sql) 
open getspid  
fetch next from getspid into @spid  
while @@fetch_status<>-1 
begin  
	exec('kill '+@spid) 
	fetch next from getspid into @spid 
end  
close getspid 
deallocate getspid


DECLARE @param4 int
EXECUTE master..XP_FileExist 'D:\Backup\Data\Orders_DB.bak', @param4 OUTPUT 
IF @param4 <> 0
BEGIN
	ALTER DATABASE ORDER_DB SET SINGLE_USER
	RESTORE DATABASE ORDER_DB FROM DISK='D:\Backuup\Data\Orders_DB.bak' 
		with move 'ORDERS_DB' to 'D:\sqlserver data\ORDER_DB.mdf',
		move 'ORDERS_DB_log' to 'D:\sqlserver data\ORDER_DB_log.ldf'
	ALTER DATABASE ORDER_DB SET MULTI_USER
END


这样做的好处是可以用JOB自动完成,不需要手工操作。


附加:

1. 如果数据在还原过程中遇到问题,而且显示“正在还原”,久久不完成,最好不要强制停止,或停掉服务,应该用下面命令终止还原

RESTORE DATABASE FocalPrice_db with RECOVERY

不能用NORECOVERY 。

RECOVERY 和NORECOVERY 的区别在于,操作完成后RECOVERY 可以直接使用,而NORECOVERY 不能直接使用.



2. 如果有还原数据库时遇到这样的错误:
尚未备份数据库 "ORDER_DB" 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句来只覆盖该日志的内容。
RESTORE DATABASE 正在异常终止。

那么把还原数据库语句改为:
RESTORE DATABASE ORDER_DB FROM DISK='D:\BakSync\Data\Orders_DB.bak'
 with file=1, move 'ORDERS_DB' to 'D:\server sql data\ORDER_DB.mdf',
 move 'ORDERS_DB_log' to 'D:\server sql data\ORDER_DB_log.ldf',NOUNLOAD,REPLACE,STATS=10




SQL数据库不同备份名称存放不同路径还原方法

/*--------------------------------------------------------------------  Author : htl258(Tony)--  Dat...
  • htl258
  • htl258
  • 2010年04月15日 22:27
  • 9427

db2不同路径还原问题 SQLSTATE=57019 SQL1051N

db2 => db2stop force DB20000I  DB2STOP命令成功完成。 db2 => db2start DB20000I  DB2START命令成功完成。 db2 => b...
  • hety119
  • hety119
  • 2014年07月18日 18:42
  • 2779

如何判断两台电脑是不是在同一网段内

如何判断两台电脑是不是在同一网段内。
  • yeyingss
  • yeyingss
  • 2014年11月20日 06:42
  • 2398

不同网段的两台机器是如何通信的

一种方式是设置掩码为/16的,就是255.255.0.0,让计算机去广播去直接连接 第二种方式是在网关上起用路由,由网关来转发 第三种是把两台主机都把自己的网关设置成自己,这样也能相互通信 第四...
  • jimian0302
  • jimian0302
  • 2014年04月02日 17:37
  • 1179

同一网段的电脑之间ping不通的问题

和同事要做一下数据服务的事情,本机启动一个服务,然后用他的电脑访问,但是发现他的电脑能ping通我的,但是我ping不到他的电脑。  1.防火墙的问题           控制面板->系统和安全-...
  • u010429286
  • u010429286
  • 2016年10月20日 10:12
  • 1115

Oracle DB 复制数据库

• 列出创建副本数据库的目的 • 选择用于复制数据库的方法 • 使用RMAN 复制数据库 • 使用RMAN 备份复制数据库 • 基于正在运行的实例复制数据库 使用副本数据库 • 使用副本数据...
  • rlhua
  • rlhua
  • 2013年10月30日 10:55
  • 8680

同一个局域网的两台电脑实现文件共享

前一段时间,因为学校项目需要,
  • snchenjt
  • snchenjt
  • 2014年10月31日 15:16
  • 1745

nginx php分布在两台机器上部署

tar xzvf php-5.3.28.tar.gz cd ./php-5.3.28 yum install libxml2 yum install libxml2-devel -y ./co...
  • wych1981
  • wych1981
  • 2014年07月16日 17:09
  • 1289

连接两个路由器在同一网段

比如有两个路由器想连起来,而lian'j'e
  • danny35
  • danny35
  • 2014年09月25日 13:34
  • 1137

SQL SERVER 还原数据库名称不同的备份

string fileName = "";//备份路径文件名 string DBName = "";//备份数据库名 s...
  • fishernemo
  • fishernemo
  • 2012年03月20日 15:39
  • 1390
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:同一数据库在两台机上不同路径的备份还原
举报原因:
原因补充:

(最多只允许输入30个字)