단일 사용자 모드로 Linux에서 master 데이터베이스 복원

적용 대상:SQL Server - Linux

특정 상황에서는 Linux의 master 단일 사용자 모드에서 SQL Server 인스턴스의 데이터베이스를 복원해야 할 수 있습니다. 시나리오에는 새 인스턴스로 마이그레이션하거나 불일치에서 복구하는 것이 포함됩니다.

참고 항목

SQL Server는 복원이 완료된 후 자동으로 종료됩니다. 이 동작은 의도된 것입니다.

master 데이터베이스를 복원하려면 명령줄에서 시작 옵션-m을 사용하여 단일 사용자 모드로 SQL Server를 시작해야 합니다.

Windows에서 단일 사용자 모드로 SQL Server 인스턴스를 시작하려면 단일 사용자 모드로 SQL Server 시작을 참조하세요.

필수 조건

단일 사용자 모드로 SQL Server를 시작하면 로컬 관리자 그룹의 모든 멤버가 sysadmin 고정 서버 역할의 멤버로 SQL Server 인스턴스에 연결할 수 있습니다. 자세한 내용은 시스템 관리자가 잠겨 있는 경우 SQL Server에 연결을 참조하세요.

단일 사용자 모드에서 SQL Server 인스턴스를 시작할 때 다음 사항에 유의하세요.

  • 한 명의 사용자만 서버에 연결할 수 있습니다.

  • CHECKPOINT 프로세스는 실행되지 않습니다. 기본적으로 시작 시 자동으로 실행됩니다.

SQL Server 서비스 중지

  1. 다음 명령은 현재 실행 중인 경우 SQL Server 인스턴스를 중지합니다.

    systemctl stop mssql-server
    

현자 사용자를 mssql로 변경

  1. SQL Server on Linux는 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 <StrongPassword> 
    

    이전 예제에서 <ServerName>은 원격으로 연결하는 경우 SQL Server를 실행하는 호스트의 이름입니다. SQL Server가 실행 중인 호스트에서 직접 연결하는 경우 이 매개 변수를 건너뛰거나 localhost를 사용할 수 있습니다. <StringPassword>SA 계정의 암호입니다.

master 데이터베이스 복원

  1. sqlcmd 내에서 다음 명령을 실행합니다. sqlcmd에서는 스크립트의 끝에 GO를 실행해야 합니다.

    use [master];
    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 복원 후에 표시되지 않습니다. 파일은 스토리지 계층에 계속 존재해야 하므로 해당 데이터베이스를 온라인으로 전환하기 위해 해당 사용자 데이터베이스 파일을 수동으로 다시 연결해야 합니다. 자세한 내용은 데이터베이스 연결을 참조하세요.