栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

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

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

阿里云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 FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLBackupTestRestore.bak' 
WITH  FILE = 1,  
MOVE N'data1' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVER2016MSSQLDATATestRestore.mdf',  
MOVE N'log' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVER2016MSSQLDATATestRestore_log.ldf', 
STANDBY = N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLBackupTestRestore_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:LogBackup2_hins20409680_2022010612430876102306TestRestore.lbak' 
WITH  FILE = 1,
STANDBY = N'D:Program FilesMicrosoft SQL ServerMSSQL13.MSSQLSERVER2016MSSQLBackupTestRestore_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.113dlogtest.lbak'

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号