阿里云rds-mssql日志备份到本地还原

1、在阿里云数据库里面找到最近的一次完整备份,没有就做一次完整备份

2、下载完整备份到本地并还原,本地不用创建数据库,还原的时候会自动生成

3、选择完整的备份文件过后,窗口会改变状态为“就绪” ,然后勾选要还原的备份资源

4、转到选项,恢复状态选择第三个“restore with standby”,解释一下对其他两个状态的理解

“restore with recovery ”:还原过后可以立即使用数据库

“restore with norecovery ”:还原过后,数据库处于“正在还原中”的状态,并且无法使用,后续还可以继续对数据库进行还原操作。如果要正常使用数据库,执行命令“restore database [数据库名称] with recovery ”就可以了,数据库的状态就正常了。

所以我们之类选择的第三种,还原过后,数据库可以使用,也可以继续还原。

 备用文件这里需要拷贝一下,后续的还原还会用到。

可以点一下脚本,工具会将我们的操作,生成命令的方式,让我们更好的理解。

USE [master]

RESTORE DATABASE [TestRestore] FROM  
DISK = N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\TestRestore.bak' 
WITH  FILE = 1,  
MOVE N'data1' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER2016\MSSQL\DATA\TestRestore.mdf',  
MOVE N'log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER2016\MSSQL\DATA\TestRestore_log.ldf', 
STANDBY = N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\TestRestore_RollbackUndo_2022-01-10_15-06-24.bak', 
NOUNLOAD,  STATS = 5

GO

如果是默认的数据库名字(不修改),那就不需要move的两个参数,如果要修改名称,最好将数据集所在路径为数据库名称,日志的路径为数据库名称+“_log”。也可以在文件选项页面勾选“将所有文件重新定位到文件夹

点击确定,提示成功还原

在对象资源管理器看到数据库的状态是“只读”的,没毛病,因为我们的需求就是根据阿里云的数据库来还原,需求本就是单项传输。

 5、下载阿里云日志备份文件

阿里云开放文档:阿里云 OpenAPI 开发者门户https://next.api.aliyun.com/api/Rds/2014-08-15/DescribeLogBackupFiles?sdkStyle=old¶ms=%7B%7D

阿里云的开发文档,说的很明白了,仔细一点看入参和出现。

 注意检索的时间的的格式“yyyy-MM-ddTHH:mmZ”,这里的时间和我们的时间相差8小时,我们上面全量备份开始时间是在“2022年1月9日 02:11:00”,我们检索的开始时间就应该是“2020-01-08T18:00Z”。

6、下载日志备份文件,进行还原

选择还原的方式为“事务日志

 如果工具中的“事务日志”和“页”是灰色的,就是数据库还原的时候,模式错误,一定要选择“restore with standby”。

 点击脚本,看看具体的sql命令

use master;

RESTORE LOG [TestRestore] FROM  
DISK = N'D:\LogBackup\2_hins20409680_2022010612430876102306\TestRestore.lbak' 
WITH  FILE = 1,
STANDBY = N'D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER2016\MSSQL\Backup\TestRestore_RollbackUndo.bak',
NOUNLOAD,  STATS = 10

 出现错误了,“该 LSN 太早”或者“该 LSN 太晚”,证明数据库的事务没链接上,这种还原方式必须是依次累计的,可以理解为增量。必须是“完整备份”之后的日志,逐个按照“LogBeginTime”顺序进行还原。

找到正确顺序的日志备份文件进行还原,成功了

错误1:无法处理数据库 'TestRestore',因为它正由此会话使用

解决方案:左上角选择的数据替换为master,或者,命令加入“use master”。

错误2:无法打开备份设备“……”

 解决方案:注意看disk后面的路径、文件名、文件后缀是否正确,阿里云备份文件的文件后缀为“lbak

错误3:无法还原日志备份或差异备份,因为没有文件可用于前滚。经过测试,如果同样的日志备份成功还原过后 ,再次执行,就会出现这样的错误

解决方案:删除数据库,从头开始恢复,所以在还原语句里一定要加上STANDBY 文件,测试反复恢复同一个日志文件都不会再出现错误

错误4:因为数据库正在使用,所以无法获得对数据库的独占访问权。

解决方案:删除数据库的所有进程微软mssql,杀掉指定数据库的进程_jieling07的博客-CSDN博客declare @sql nvarchar(500),@temp varchar(1000);declare @spid int;declare @dbname varchar(100);set @dbname='数据库名称';set @sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''') and spid > 50 and spid <>.https://blog.csdn.net/jieling07/article/details/122413615

总结

1、完整备份数据库,进行还原,选择模式为“restore with standby”。

2、还原方式为“事务日志”,并且只能是依次顺序的。

3、Restore Log 一定加入参数“STANDBY = '完整备份还原那里standby文件完整路径' ”,否则一旦实现错误,导致错误3的情况,数据库的状态发生改变,只能重头还原了。

文档里写了很多语句,因为需求是要和程序结合一起实现的,后面在程序中都会用到。

2022-03-23 更新

项目中可能用到对多个库进行还原,我们只下载日志还原文件到指定的目录。比如数据库在112,113,114,文件下载到服务器111。数据库是访问不了111的文件的,所以我们需要对111设置文件共享,然后命令指向的文件会有所调整,如下:N'\\10.10.55.113\d\log\test.lbak'

RESTORE LOG [test] FROM  DISK = N'\\10.10.55.111\d\log\test.lbak'
WITH  FILE = 1,
STANDBY = N'E:\data\hins19261749_2022031212021216052915\test.bak',
NOUNLOAD,  STATS = 5;

\\10.10.55.113\d\log,以IP地址的形式去指向,盘符后面不需要跟随冒号“:”。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值