共用方式為


以單一使用者模式在 Linux 上還原 master 資料庫

適用於:Linux 上的 SQL Server

在某些情況下,您可能需要在單一使用者模式下還原在 Linux 上的 SQL Server 執行個體上的 master 資料庫。 情況包括遷移到新的實例,或從不一致的狀況中恢復。

注意

SQL Server 會在還原完成之後自動關閉。 這種行為是刻意設計的。

要還原 master 資料庫,必須從命令列使用啟動選項 -m,以單一使用者模式啟動 SQL Server。

如需在 Windows 上以單一使用者模式啟動 SQL Server 執行個體,請參閱 SQL Server 的以單一使用者模式

必要條件

以單一使用者模式啟動 SQL Server,可讓本機管理員群組的任何成員以系統管理員固定伺服器角色的成員身分連線至 SQL Server。 如需詳細資訊,請參閱當系統管理員遭到鎖定時連線到 SQL Server

在單一使用者模式中啟動 SQL Server 的執行個體:

  • 只有一個使用者可以連接到伺服器。
  • 未執行 CHECKPOINT 程序。 依預設,在啟動時會自動執行。

停止 SQL Server 服務

  1. 如果 SQL Server 執行個體正在執行,下列命令會將其停止:

    systemctl stop mssql-server
    

將目前的使用者變更為 mssql

  1. Linux 上的 SQL Server 會在 mssql 使用者下執行,因此您必須先切換為此使用者。 執行此命令時,系統會提示您輸入 root 密碼。

    su mssql
    

以單一使用者模式啟動 SQL Server

  1. 當您使用 -mSQLCMD 選項時,可以限制連接到指定用戶端應用程式 (SQLCMD 必須大寫,如下所示):

    /opt/mssql/bin/sqlservr -m"SQLCMD"
    

    例如,-m"SQLCMD" 會將連線限制為單一連線,而且該連線必須將自己識別為 sqlcmd 用戶端程式。 當您以單一使用者模式啟動 SQL Server 以還原 master 資料庫時,請使用此選項。

  2. SQL Server 啟動時,會產生數個記錄項目。 您可以藉由在輸出中尋找下列幾行,以確認其在單一使用者模式中執行:

    [...]
    2022-05-24 04:26:27.24 Server      Command Line Startup Parameters:
             -m "SQLCMD"
    [...]
    2022-05-24 04:26:28.20 spid8s      Warning ******************
    2022-05-24 04:26:28.21 spid8s      SQL Server started in single-user mode. This an informational message only. No user action is required.
    

連接到 SQL Server 執行個體

  1. 使用 sqlcmd 連線到 SQL Server 實例。 完成 在單一使用者模式中啟動 SQL Server 一節中所述的步驟之後,您可以看到 SQL Server 是以 互動式 模式執行。 因此,您必須開啟新的終端機會話,以啟動 sqlcmd ,如下所示。

    /opt/mssql-tools/bin/sqlcmd -S <ServerName> -U sa -P <password>
    

    在上一個範例中,如果您要從遠端連線,<ServerName> 即為執行 SQL Server 的主機名稱。 如果您要直接連線到執行 SQL Server 的主機,可以略過此參數,或使用 localhost<StringPassword>SA 帳戶的密碼。

還原 master 資料庫

  1. sqlcmd 內執行下列命令。 請記住,sqlcmd 的指令碼結尾要有 GO,才會加以執行。

    USE [master];
    GO
    
    RESTORE DATABASE [master] FROM DISK = N'/var/opt/mssql/data/master.bak'
        WITH FILE = 1,
        MOVE N'master' TO N'/var/opt/mssql/data/master.mdf',
        MOVE N'mastlog' TO N'/var/opt/mssql/data/mastlog.ldf',
        NOUNLOAD, REPLACE, STATS = 5;
    GO
    

    在上一個範例中,master 資料庫備份檔案的路徑是 /var/opt/mssql/data/master.bak。 您必須以 master 資料庫備份檔案的正確路徑取代此值。

  2. 如果還原成功,您應該會看到類似下列範例的輸出。

    Processed 456 pages for database 'master', file 'master' on file 1.
    Processed 5 pages for database 'master', file 'mastlog' on file 1.
    The master database has been successfully restored. Shutting down SQL Server.
    SQL Server is terminating this process.
    

重新啟動 SQL Server 服務

  1. 若要重新啟動 SQL Server,請執行下列命令。

    systemctl start mssql-server
    

備註

當您還原 master 資料庫備份時,在建立備份之後新增至執行個體的任何現有使用者資料庫,在還原 master 之後都不會出現。 檔案應該仍存在於儲存層,因此您必須手動重新附加這些使用者資料庫檔案,讓這些資料庫連線。 如需詳細資訊,請參閱 Attach a Database