如何使用命令列復原與 NMM 復原 SQL 資料庫

Ця стаття стосується Ця стаття не стосується Ця стаття не стосується якогось конкретного продукту. У цій статті зазначено не всі версії продукту.

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”。

kA5j0000000TNJYCA4_1_0

如果中繼資料儲存集不存在,則需要執行 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 Number: 000022417
Article Type: How To
Востаннє змінено: 09 серп. 2022
Version:  4
Отримайте відповіді на свої запитання від інших користувачів Dell
Служба підтримки
Перевірте, чи послуги служби підтримки поширюються на ваш пристрій.