共用方式為


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

適用於:SQL Server - Linux

在某些情況下,您可能需要在 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. 當您在 SQLCMD 使用 -m 選項時,可以限制指定用戶端應用程式的連線 (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 執行個體:

    /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