如何在 NMM 中使用命令行恢复来恢复 SQL 数据库
This article applies to
This article does not apply to
This article is not tied to any specific product.
Not all product versions are identified in this article.
Instructions
本文记录了使用 VDI
成功还原通过 NMM 备份的 SQL 数据库要遵循的步骤。如果从 GUI(SQL Server GUI 或 SSMS 插件的 Networker 用户)还原时出现问题,则可能需要使用命令行从备份还原 SQL 数据库。GUI 中的浏览任务速度缓慢,或者所需的数据库在 GUI 中不可见,无法还原。
Typically the following savesets are created when a single DB is backupup:
A full backup of a single DB will have the following savesets:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 1:26:41 PM 119 MB 3209027663 cb full MSSQL$FINANCE:testdb ==> Full backup saveset
SQLbackups.001 Data Domain sql12srv1 5/25/2016 1:29:16 PM 5 KB 3192250597 cb incr MSSQL$FINANCE:testdb ==> metadata saveset。
单个数据库的增量备份将具有以下存储集:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 1:34:14 PM 1320 MB 3141919250 cb incr MSSQL$FINANCE:testdb ==> Log backup saveset
SQLbackups.001 Data Domain sql12srv1 5/25/2016 1:40:31 PM 5 KB 3125142409 cb incr MSSQL$FINANCE:testdb ==> metadata saveset
请注意,每个备份都有一个元数据存储集,该存储集始终创建为“incr”级别,并且通常非常小。此存储集包含的信息使您可以在“Networker User for SQL Server”GUI 中查看数据库列表。每次执行 SQL VDI 备份都会创建此存储集。但是,如果手动克隆过程错误地将此存储集不包括用于克隆,并且原始存储集不再存在,则此存储集可能不存在。如果是这种情况,则命令行恢复是唯一的选择。
确定需要从哪个备份进行恢复后,您可以构造命令行。下面是还原命令的示例:
nsrsqlrc -s nsr-server -c sql12srv1 -t “5/25/2016 1:34:14 PM” -d “MSSQL$FINANCE:testdb-recovered” -C “ 'testdb' = 'c:\recover\testdb.mdf', 'testdb_log' = 'c:\recover\testdb_log.ldf', 'testdb_log1' = 'c:\recover\testdb_log1.ldf'” “MSSQL$FINANCE:testdb”
在上面的命令
-s选项中是指定Networker服务器名称,
-c 选项用于指定源客户端(如果在源客户端以外的主机上执行恢复),
-d 指定要恢复到的目标数据库。此数据库将不存在。还原过程将在目标实例上创建数据库。
-C 指定这是拷贝恢复。-C 后面的参数指定数据库中文件的逻辑名称。 请注意,这些名称必须与要还原的数据库的逻辑名称完全匹配。 如果数据库存在,则从 SSMS GUI 中对数据库名称执行属性操作,并在“Files”下查看。
如果要还原到群集 SQL Server,请将“-A ”virtual-Server name“添加到还原命令中。
命令中的最后一个组件是要还原的数据库的名称,例如 MSSQL$
FINANCE:testdb
如果您不确定数据库文件的逻辑名称是什么,则可以提供不完整的命令,如下所示:
nsrsqlrc -s nsr-server -c sql12srv1 -t “5/25/2016 1:34:14 PM” -d “MSSQL$FINANCE:testdb-recovered” -C “ 'mydb' = 'c:\recover\testdb.mdf'“ ”MSSQL $ FINANCE: testdb“
43708:(pid 2144):开始时间:Wed May 25 15:37:42 2016
43621:(pid 2144):Computer Name:SQL12SRV1用户名:管理员
NSR_CLIENT:sql12srv1.jets.local;
NSR_SERVER: nsr-server;
37725:(pid 2144):正在将数据库“testdb”恢复到“testdb-recovered”...
142468:(pid 2144):[2292] nsr/db_apps/bsmsql/rcstripes.c (222):查找存储集 MSSQL$FINANCE:/testdb 的备份。
37945:(pid 2144):逻辑文件 testdb 缺少重定位。
37945:(pid 2144):缺少逻辑文件testdb_log的重新定位。
37945:(pid 2144):逻辑文件testdb_log1缺少重定位。
37946:(pid 2144):原始数据库
29401:(pid 2144) 中没有名为 mydb 的逻辑文件:D atabase 文件重定位列表错误。实际文件列表为:
37947:(pid 2144): testdb = C:\Program Files\Microsoft SQL Server\MSSQL11.FINANCE\MSSQL\DATA\
testdb.mdf 37947:(PID 2144): testdb_log = C:\Program Files\Microsoft SQL Server\MSSQL11.FINANCE\MSSQL\DATA\testdb_log.ldf
37947:(pid 2144): testdb_log1= C:\Program Files\Microsoft SQL Server\MSSQL11.FINANCE\MSSQL\DATA\testdb_log1.ldf
142468:(pid 2144):[2292] nsr/db_apps/bsmsql/rcstripes.c (222):查找存储集 MSSQL$FINANCE:/testdb 的备份。
37945:(pid 2144):逻辑文件 testdb 缺少重定位。
37945:(pid 2144):缺少逻辑文件testdb_log的重新定位。
37945:(pid 2144):缺少逻辑文件testdb_log1的重新定位。
37946:(pid 2144):原始数据库
29401:(pid 2144):D atabase 文件重定位列表错误中名为 mydb 的逻辑文件。实际文件列表为:
37947:(pid 2144): testdb = C:\Program Files\Microsoft SQL Server\MSSQL11.FINANCE\MSSQL\DATA\
testdb.mdf 37947:(PID 2144): testdb_log = C:\Program Files\Microsoft SQL Server\MSSQL11.FINANCE\MSSQL\DATA\testdb_log.ldf
37947:(pid 2144): testdb_log1= C:\Program Files\Microsoft SQL Server\MSSQL11.FINANCE\MSSQL\DATA\testdb_log1.ldf
还原操作已完成,但有错误。有关详细信息,请参阅模块备份日志文件。未知 XBSA 错误 1169 (0x491) nsr/db_apps/bsmsql/rcovmain.cpp(442):输入 cleanUp()。nsr/db_apps/bsmsql/rcovmain.cpp(500):退出 cleanUp()。
43709:(pid 2144):停止时间:Wed May 25 15:37:49 2016
***********************
在上面的命令中,我给出了一个随机逻辑名称“mydb”,该命令会吐出数据库文件的实际逻辑名称及其原始位置。您可以使用此信息来构建还原命令。请注意,您必须提供不同的路径才能将数据还原到。您不能也不应在还原命令中提供原始源路径,以避免覆盖现有数据的风险。
可从 mminfo 命令获取还原的备份时间。可以使用输出中所示的保存时间,也可以报告 nsavetime 并改用此时间。
e.g:
mminfo -avot -s nsr-server -q “client=sql12srv1,savetime >= yesterday”
SQLbackups.001 Data Domain SQL12SRV1 5/25/2016 1:26:41 PM 119 MB 3209027663 cb full MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain SQL12SRV1 5/25/2016 1:29:16 PM 5 KB 3192250597 cb incr MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain SQL12SRV1 5/25/2016 1:34:14 PM 1320 MB 3141919250 CB INCR MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain SQL12SRV15/25/2016 1:40:31 PM 5 KB 3125142409 cb incr MSSQL$FINANCE:testdb
mminfo-avot -s nsr-server -q “client=sql12srv1,savetime >= yesterday” -r volume,client,sumflags,sumsize,level,savetime(25),nsavetime,name
SQLbackups.001 sql12srv1 cb 119 MB full 5/25/2016 1:26:41 PM 1464197201 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 5 KB incr 5/25/2016 1:29:16 PM 1464197356 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 1320 MB incr 5/25/2016 1:34:14 PM 1464197654 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 5 KB incr 5/25/2016 1:40:31 PM 1464198031 MSSQL$FINANCE:testdb
注意:您可以指定元数据存储集或实际数据存储集的 nsavetime/savetime。其中任何一个都可以。
情况 2:
如果在没有数据库名称的情况下在媒体数据库中注册备份,则所需备份的时间将不那么明显。例如,所有数据库备份都具有相同的存储集名称,如下所示:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 4:43:15 PM 151 KB 2672168543 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 4:45:26 PM 151 KB 2655391455 cb incr MSSQL$FINANCE:
从上面无法分辨哪个存储集具有所需的备份。
如果 medata 数据存储集存在,则备份可从 GUI 浏览,您可以从 GUI 中找到数据库名称和备份时间。例如,如果需要 DB24,GUI 会将备份时间显示为“5/25/2016 4:49 PM”。
如果不存在元数据存储集,则需要运行 nsrinfo 命令来查找还原的保存时间。例如,如果 mminfo 显示存储集如下:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 4:43:15 PM 151 KB 2672168543 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 4:45:26 PM 151 KB 2655391455 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 4:47:34 PM 151 KB 2638614367 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 4:49:42 PM 151 KB 2621837279 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 4:51:50 PM 151 KB 2605060191 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 5/25/2016 4:53:58 PM 151 KB 2588283103 cb incr MSSQL$FINANCE:在保存时间上运行 nsrinfo,
如下所示,以获取有关存储集一部分的数据库的信息:
nsrinfo-n mssql-t “5/25/2016 4:43:15 PM” sql12srv1
扫描客户端“sql12srv1”保存时间1464208995(5/25/2016 4:43:15 PM) 来自 mssql 命名空间
MSSQL$FINANCE:/DB21
MSSQL$FINANCE:/DB21%/files.1464208995.1464209044
2 objects found
nsrinfo-n mssql-t “5/25/2016 4:49:42 PM” sql12srv1
scanning client 'sql12srv1' for savetime 1464209382(5/25/2016 4:49:42 PM) from the mssql
namespace MSSQL$FINANCE:/DB24
MSSQL$FINANCE:/DB24%/files.1464209382.1464209437
2 objects found
由于存储集不显示数据库名称,因此在元数据存储集不存在的情况下,上述操作可能需要一些试错。使用近似的数据库大小作为线索,将 nsrinfo 查询范围缩小到几个存储集。
Article Properties
Article Number: 000022417
Article Type: How To
Last Modified: 09 Aug 2022
Version: 4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.