如何使用命令列復原與 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 伺服器 GUI 或 SSMS 附掛程式的 Networker 使用者) 發生問題,可能需要使用命令列從備份還原 SQL 資料庫。可能是 GUI 的瀏覽工作速度緩慢,或是所需的資料庫在 GUI 中看不到以進行還原。
備份單一資料庫時,通常會建立下列集區:
單一資料庫的完整備份具有下列儲存集:
SQLbackups.001 Data Domain sql12srv1 2016/5/25 下午1:26:41 119 MB 3209027663 cb fullMSSQL$FINANCE:testdb ==> 完整備份儲存集
SQLbackups.001 Data Domain sql12srv1 2016/5/25 下午1:29:16 5 KB 3192250597 cb Incr MSSQL$FINANCE:testdb ==> 中繼資料儲存集。
單一資料庫的增量備份將具有下列集區:
SQLbackups.001 Data Domain sql12srv1 2016/5/25 下午1:34:14 1320 MB 3141919250 cb incr MSSQL$FINANCE:testdb ==> 記錄備份 儲存集
SQLbackups.001 Data Domain sql12srv1 5/25/2016 1:40:31 PM 5 KB 3125142409 cb incr MSSQL$FINANCE:testdb ==> 中繼資料儲存集
請注意,每個備份都有一個中繼資料儲存集,該集一律會以「incr」層級建立,而且通常非常小。此儲存集包含的資訊可讓您在「適用於 SQL Server 的 Networker User」GUI 中看到 DB 清單。此儲存集會隨著每個 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”
在上面的命令
中,選項是指定Networker伺服器名稱,
-c 選項用於指定源用戶端(如果恢復是在源用戶端以外的主機上完成的),
-d 指定要還原到的目標資料庫。此資料庫將不存在。還原過程將在目標實例上創建資料庫。
-C 指定這是副本還原。-C 後面的參數指定資料庫中檔的邏輯名稱。 請注意,這些名稱必須與要還原的資料庫的邏輯名稱完全匹配。 如果資料庫存在,則從 SSMS GUI 對資料庫名稱執行屬性,並在“檔”下查看。
如果還原是針對叢集的 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):計算機名稱:SQL12SRV1 使用者名:管理員
NSR_CLIENT:sql12srv1.jets.local;
NSR_SERVER:nsr 伺服器;
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):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
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):正在退出清理()。
43709:(PID 2144):停止時間:Wed May 25 15:37:49 2016
***********************
在上面的命令中,我給出了一個隨機的邏輯名稱“mydb”,該命令會吐出資料庫檔的實際邏輯名稱及其原始位置。您可以使用此資訊來構建還原命令。請注意,您必須提供其他路徑來還原數據。您不能也不應在 restore 命令中提供原始來源路徑,以避免覆寫現有資料的風險。
還原的備份時間可從 mminfo 命令取得。可以使用輸出中所示的儲存時間,也可以報告 nsavetime 並改用此時間。
例如:
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 fullMSSQL$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 sql12srv1
5/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 已滿 2016/5/25 13:26:41 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 2016/5/25 下午4:43:15 151 KB 2672168543 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 2016/5/25 下午4:45:26 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 2016/5/25 16:53:58 PM 151 KB 2588283103 cb incr MSSQL$FINANCE:執行以下儲存時間的 nsrinfo,
以取得儲存集一部分的 DB 資訊:
nsrinfo -n mssql -t “5/25/2016 4:43:15 PM” sql12srv1
掃描用戶端「sql12srv1」以從 mssql 命名空間
1464208995(5/25/2016 4:43:15 PM) MSSQL$FINANCE:/DB21
MSSQL$FINANCE:/DB21%/files.1464208995.1464209044
找到
2 個物件 nsrinfo -n mssql -t “5/25/2016 4:49:42 PM” sql12srv1
掃描用戶端「sql12srv1」以從 mssql 命名空間
1464209382(5/25/2016 4:49:42 PM) MSSQL$FINANCE:/DB24
MSSQL$FINANCE:/DB24%/files.1464209382.1464209437
找到
2 個物件由於儲存集不會顯示資料庫名稱,因此在中繼資料儲存集不存在的情況下,上述情況可能有點反覆試驗。使用近似的 DB 大小作為線索,將 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.