다음을 통해 공유


Linux 컨테이너에서 SQL Server 데이터베이스 복원

적용 대상: SQL Server - Linux

이 자습서에서는 SQL Server 백업 파일을 Docker에서 실행되는 SQL Server 2017(14.x) Linux 컨테이너 이미지로 이동하고 복원하는 방법을 보여 줍니다.

이 자습서에서는 SQL Server 백업 파일을 Docker에서 실행되는 SQL Server 2019(15.x) Linux 컨테이너 이미지로 이동하고 복원하는 방법을 보여 줍니다.

이 자습서에서는 SQL Server 백업 파일을 Docker에서 실행되는 SQL Server 2022(16.x) Linux 컨테이너 이미지로 이동하고 복원하는 방법을 보여 줍니다.

  • 최신 SQL Server Linux 컨테이너 이미지를 가져오고 실행합니다.
  • Wide World Importers 데이터베이스 파일을 컨테이너로 복사합니다.
  • 컨테이너에서 데이터베이스를 복원합니다.
  • Transact-SQL 문을 실행하여 데이터베이스를 보고 수정합니다.
  • 수정된 데이터베이스를 백업합니다.

사전 요구 사항

배포 옵션

이 섹션에서는 사용자 환경에 대한 배포 옵션을 제공합니다.

sqlcmd는 현재 컨테이너를 만들 때 MSSQL_PID 매개 변수를 지원하지 않습니다. 이 자습서의 sqlcmd 지침을 사용하는 경우 SQL Server Developer 버전을 사용하여 컨테이너를 만듭니다. CLI(명령줄 인터페이스) 지침을 사용하여 선택한 라이선스를 사용하여 컨테이너를 만듭니다. 자세한 내용은 SQL Server Linux 컨테이너 배포 및 연결을 참조하세요.

컨테이너 이미지 풀하기 및 실행

  1. Linux에서 Bash 터미널을 엽니다.

  2. Microsoft Container Registry에서 SQL Server 2017(14.x) Linux 컨테이너 이미지를 끌어옵니다.

    sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
    
  3. Docker를 사용하여 컨테이너 이미지를 실행하려면 다음 명령을 사용하면 됩니다.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
       --name 'sql1' -p 1401:1433 \
       -v sql1data:/var/opt/mssql \
       -d mcr.microsoft.com/mssql/server:2017-latest
    

    주의

    암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.

    이 명령은 Developer Edition(기본값)을 사용하여 SQL Server 2017(14.x) 컨테이너를 만듭니다. SQL Server 포트 1433은 호스트에서 포트 1401로 노출됩니다. 선택적 -v sql1data:/var/opt/mssql 매개 변수는 sql1data라는 데이터 볼륨 컨테이너를 만듭니다. 이 컨테이너는 SQL Server에서 생성된 데이터를 유지하는 데 사용됩니다.

    중요

    이 예제에서는 Docker 내의 데이터 볼륨 컨테이너를 사용합니다. 자세한 내용은 Docker에서 SQL Server 컨테이너 이미지 구성을 참조하세요.

  4. 컨테이너를 보려면 docker ps 명령을 사용합니다.

    sudo docker ps -a
    
  5. STATUS 열에 Up 상태가 표시되면 SQL Server가 컨테이너에서 실행 중이고 PORTS 열에 지정된 포트에서 수신 대기 중입니다. SQL Server 컨테이너에 대한 STATUS 열이 Exited로 표시 되면 SQL Server Docker 컨테이너 문제 해결을 참조하세요.

$ sudo docker ps -a

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
941e1bdf8e1d        mcr.microsoft.com/mssql/server/mssql-server-linux   "/bin/sh -c /opt/m..."   About an hour ago   Up About an hour    0.0.0.0:1401->1433/tcp   sql1
  1. Linux에서 Bash 터미널을 엽니다.

  2. Microsoft Container Registry에서 SQL Server 2019(15.x) Linux 컨테이너 이미지를 끌어옵니다.

    sudo docker pull mcr.microsoft.com/mssql/server:2019-latest
    
  3. Docker를 사용하여 컨테이너 이미지를 실행하려면 다음 명령을 사용하면 됩니다.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
       --name 'sql1' -p 1401:1433 \
       -v sql1data:/var/opt/mssql \
       -d mcr.microsoft.com/mssql/server:2019-latest
    

    주의

    암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.

    이 명령은 Developer Edition(기본값)을 사용하여 SQL Server 2019 (15.x) 컨테이너를 만듭니다. SQL Server 포트 1433은 호스트에서 포트 1401로 노출됩니다. 선택적 -v sql1data:/var/opt/mssql 매개 변수는 sql1data라는 데이터 볼륨 컨테이너를 만듭니다. 이 컨테이너는 SQL Server에서 생성된 데이터를 유지하는 데 사용됩니다.

    중요

    이 예제에서는 Docker 내의 데이터 볼륨 컨테이너를 사용합니다. 자세한 내용은 Docker에서 SQL Server 컨테이너 이미지 구성을 참조하세요.

  4. 컨테이너를 보려면 docker ps 명령을 사용합니다.

    sudo docker ps -a
    
  5. STATUS 열에 Up 상태가 표시되면 SQL Server가 컨테이너에서 실행 중이고 PORTS 열에 지정된 포트에서 수신 대기 중입니다. SQL Server 컨테이너에 대한 STATUS 열이 Exited로 표시 되면 SQL Server Docker 컨테이너 문제 해결을 참조하세요.

    $ sudo docker ps -a
    
    CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
    941e1bdf8e1d        mcr.microsoft.com/mssql/server/mssql-server-linux   "/bin/sh -c /opt/m..."   About an hour ago   Up About an hour    0.0.0.0:1401->1433/tcp   sql1
    
  1. Linux에서 Bash 터미널을 엽니다.

  2. Microsoft Container Registry에서 SQL Server 2022(16.x) Linux 컨테이너 이미지를 끌어옵니다.

    sudo docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  3. Docker를 사용하여 컨테이너 이미지를 실행하려면 다음 명령을 사용하면 됩니다.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
       --name 'sql1' -p 1401:1433 \
       -v sql1data:/var/opt/mssql \
       -d mcr.microsoft.com/mssql/server:2022-latest
    

    주의

    암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.

    이 명령은 Developer Edition(기본값)을 사용하여 SQL Server 2022(16.x) 컨테이너를 만듭니다. SQL Server 포트 1433은 호스트에서 포트 1401로 노출됩니다. 선택적 -v sql1data:/var/opt/mssql 매개 변수는 sql1data라는 데이터 볼륨 컨테이너를 만듭니다. 이 컨테이너는 SQL Server에서 생성된 데이터를 유지하는 데 사용됩니다.

    중요

    이 예제에서는 Docker 내의 데이터 볼륨 컨테이너를 사용합니다. 자세한 내용은 Docker에서 SQL Server 컨테이너 이미지 구성을 참조하세요.

  4. 컨테이너를 보려면 docker ps 명령을 사용합니다.

    sudo docker ps -a
    
  5. STATUS 열에 Up 상태가 표시되면 SQL Server가 컨테이너에서 실행 중이고 PORTS 열에 지정된 포트에서 수신 대기 중입니다. SQL Server 컨테이너에 대한 STATUS 열이 Exited로 표시 되면 SQL Server Docker 컨테이너 문제 해결을 참조하세요.

    $ sudo docker ps -a
    
    CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
    941e1bdf8e1d        mcr.microsoft.com/mssql/server/mssql-server-linux   "/bin/sh -c /opt/m..."   About an hour ago   Up About an hour    0.0.0.0:1401->1433/tcp   sql1
    

SA 암호 변경

sa 계정은 설치 중에 생성된 SQL Server 인스턴스의 시스템 관리자입니다. SQL Server 컨테이너를 만든 후 컨테이너에서 echo $MSSQL_SA_PASSWORD를 실행하여 지정한 MSSQL_SA_PASSWORD 환경 변수를 검색할 수 있습니다. 보안을 위해 암호를 변경합니다 sa .

  1. 계정에 사용할 sa 강력한 암호를 선택합니다. 암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.

  2. Transact-SQL 문을 통해 암호를 변경하려면 docker exec을 사용하여 sqlcmd 유틸리티를 실행합니다. <old-password><new-password>를 사용자 고유의 암호 값으로 바꿉니다.

    Important

    SA_PASSWORD 환경 변수는 사용되지 않습니다. 대신 MSSQL_SA_PASSWORD를 사용하세요.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U sa -P '<old-password>' \
       -Q 'ALTER LOGIN sa WITH PASSWORD="<new-password>"'
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U sa -P "<old-password>" `
       -Q "ALTER LOGIN sa WITH PASSWORD='<new-password>'"
    

컨테이너에 백업 파일 복사

이 자습서에서는 Microsoft SQL용 Wide World Importers 샘플 데이터베이스를 사용합니다. 다음 단계를 사용하여 Wide World Importers 데이터베이스 백업 파일을 다운로드하고 SQL Server 컨테이너에 복사합니다.

  1. 먼저 docker exec를 사용하여 백업 폴더를 만듭니다. 다음 명령은 SQL Server 컨테이너 내부에 /var/opt/mssql/backup 디렉터리를 만듭니다.

    sudo docker exec -it sql1 mkdir /var/opt/mssql/backup
    
  2. 그런 다음, 호스트 컴퓨터에 WideWorldImporters-Full.bak 파일을 다운로드합니다. 다음 명령을 사용하여 home/user 디렉터리로 이동하고 백업 파일을 wwi.bak로 다운로드합니다.

    cd ~
    curl -L -o wwi.bak 'https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak'
    
  3. docker cp를 사용하여 백업 파일을 /var/opt/mssql/backup 디렉터리의 컨테이너로 복사합니다.

    sudo docker cp wwi.bak sql1:/var/opt/mssql/backup
    

데이터베이스 복원

이제 백업 파일이 컨테이너 내부에 있습니다. 백업을 복원하기 전에 백업 내의 논리적 파일 이름 및 파일 형식을 알고 있어야 합니다. 다음 Transact-SQL 명령은 백업을 검사하고 컨테이너에서 sqlcmd를 사용하여 복원을 수행합니다.

컨테이너에 이 도구가 미리 설치되어 제공되므로 이 자습서에서는 컨테이너 내부에서 sqlcmd를 사용합니다. 그러나 컨테이너 외부에서 Visual Studio Code용 SQL Server 익스텐션 또는 SQL Server Management Studio와 같은 다른 클라이언트 도구를 사용하여 Transact-SQL 문을 실행하여 SQL Server on Linux를 관리할 수도 있습니다. 연결하려면 컨테이너에서 포트 1433에 매핑된 호스트 포트를 사용합니다. 이 예제에서 해당 호스트 포트는 호스트 머신의 localhost,1401 및 원격으로 Host_IP_Address,1401입니다.

  1. 컨테이너 내에서 sqlcmd를 실행하여 백업 내부 논리적 파일 이름 및 경로를 나열합니다. 이 작업에는 RESTORE FILELISTONLY Transact-SQL 문을 사용합니다.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost \
       -U sa -P '<new-password>' \
       -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/wwi.bak"' \
       | tr -s ' ' | cut -d ' ' -f 1-2
    

    다음과 유사한 결과가 표시됩니다.

    LogicalName   PhysicalName
    ------------------------------------------
    WWI_Primary   D:\Data\WideWorldImporters.mdf
    WWI_UserData   D:\Data\WideWorldImporters_UserData.ndf
    WWI_Log   E:\Log\WideWorldImporters.ldf
    WWI_InMemory_Data_1   D:\Data\WideWorldImporters_InMemory_Data_1
    
  2. RESTORE DATABASE 명령을 호출하여 컨테이너 내부에서 데이터베이스를 복원합니다. 이전 단계에서 각 파일의 새 경로를 지정합니다.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U sa -P '<new-password>' \
       -Q 'RESTORE DATABASE WideWorldImporters FROM DISK = "/var/opt/mssql/backup/wwi.bak" WITH MOVE "WWI_Primary" TO "/var/opt/mssql/data/WideWorldImporters.mdf", MOVE "WWI_UserData" TO "/var/opt/mssql/data/WideWorldImporters_userdata.ndf", MOVE "WWI_Log" TO "/var/opt/mssql/data/WideWorldImporters.ldf", MOVE "WWI_InMemory_Data_1" TO "/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1"'
    

    다음과 유사한 결과가 표시됩니다.

    Processed 1464 pages for database 'WideWorldImporters', file 'WWI_Primary' on file 1.
    Processed 53096 pages for database 'WideWorldImporters', file 'WWI_UserData' on file 1.
    Processed 33 pages for database 'WideWorldImporters', file 'WWI_Log' on file 1.
    Processed 3862 pages for database 'WideWorldImporters', file 'WWI_InMemory_Data_1' on file 1.
    Converting database 'WideWorldImporters' from version 852 to the current version 869.
    Database 'WideWorldImporters' running the upgrade step from version 852 to version 853.
    Database 'WideWorldImporters' running the upgrade step from version 853 to version 854.
    Database 'WideWorldImporters' running the upgrade step from version 854 to version 855.
    Database 'WideWorldImporters' running the upgrade step from version 855 to version 856.
    Database 'WideWorldImporters' running the upgrade step from version 856 to version 857.
    Database 'WideWorldImporters' running the upgrade step from version 857 to version 858.
    Database 'WideWorldImporters' running the upgrade step from version 858 to version 859.
    Database 'WideWorldImporters' running the upgrade step from version 859 to version 860.
    Database 'WideWorldImporters' running the upgrade step from version 860 to version 861.
    Database 'WideWorldImporters' running the upgrade step from version 861 to version 862.
    Database 'WideWorldImporters' running the upgrade step from version 862 to version 863.
    Database 'WideWorldImporters' running the upgrade step from version 863 to version 864.
    Database 'WideWorldImporters' running the upgrade step from version 864 to version 865.
    Database 'WideWorldImporters' running the upgrade step from version 865 to version 866.
    Database 'WideWorldImporters' running the upgrade step from version 866 to version 867.
    Database 'WideWorldImporters' running the upgrade step from version 867 to version 868.
    Database 'WideWorldImporters' running the upgrade step from version 868 to version 869.
    RESTORE DATABASE successfully processed 58455 pages in 18.069 seconds (25.273 MB/sec).
    

복원된 데이터베이스 확인

다음 쿼리를 실행하여 컨테이너의 데이터베이스 이름 목록을 표시합니다.

sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U sa -P '<new-password>' \
   -Q 'SELECT name FROM sys.databases'

데이터베이스 목록에 WideWorldImporters가 표시되어야 합니다.

변경

데이터베이스를 변경하려면 다음 단계를 수행합니다.

  1. 쿼리를 실행하여 Warehouse.StockItems 테이블의 상위 10개 항목을 확인합니다.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U sa -P '<new-password>' \
       -Q 'SELECT TOP 10 StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems ORDER BY StockItemID'
    

    항목 식별자 및 이름 목록이 표시됩니다.

    StockItemID StockItemName
    ----------- -----------------
              1 USB missile launcher (Green)
              2 USB rocket launcher (Gray)
              3 Office cube periscope (Black)
              4 USB food flash drive - sushi roll
              5 USB food flash drive - hamburger
              6 USB food flash drive - hot dog
              7 USB food flash drive - pizza slice
              8 USB food flash drive - dim sum 10 drive variety pack
              9 USB food flash drive - banana
             10 USB food flash drive - chocolate bar
    
  2. 다음 UPDATE 문을 사용하여 첫 번째 항목의 설명을 업데이트합니다.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U sa -P '<new-password>' \
       -Q 'UPDATE WideWorldImporters.Warehouse.StockItems SET StockItemName="USB missile launcher (Dark Green)" WHERE StockItemID=1; SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1'
    

    다음 텍스트와 유사한 출력이 표시됩니다.

    (1 rows affected)
    StockItemID StockItemName
    ----------- ------------------------------------
              1 USB missile launcher (Dark Green)
    

새 백업 만들기

데이터베이스를 컨테이너로 복원한 후 실행 중인 컨테이너 내에서 정기적으로 데이터베이스 백업을 만들 수도 있습니다. 해당 단계는 이전 단계와 비슷한 패턴을 따르지만 방향은 반대입니다.

  1. BACKUP DATABASE Transact-SQL 명령을 사용하여 컨테이너에서 데이터베이스 백업을 만듭니다. 이 자습서에서는 이전에 만든 wwi_2.bak 디렉터리에 새 백업 파일인 /var/opt/mssql/backup를 만듭니다.

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U sa -P '<new-password>' \
       -Q "BACKUP DATABASE [WideWorldImporters] TO DISK = N'/var/opt/mssql/backup/wwi_2.bak' WITH NOFORMAT, NOINIT, NAME = 'WideWorldImporters-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
    

    다음과 비슷한 결과가 나타나야 합니다.

    10 percent processed.
    20 percent processed.
    30 percent processed.
    40 percent processed.
    50 percent processed.
    60 percent processed.
    70 percent processed.
    Processed 1200 pages for database 'WideWorldImporters', file 'WWI_Primary' on file 1.
    Processed 53096 pages for database 'WideWorldImporters', file 'WWI_UserData' on file 1.
    80 percent processed.
    Processed 3865 pages for database 'WideWorldImporters', file 'WWI_InMemory_Data_1' on file 1.
    Processed 938 pages for database 'WideWorldImporters', file 'WWI_Log' on file 1.
    100 percent processed.
    BACKUP DATABASE successfully processed 59099 pages in 25.056 seconds (18.427 MB/sec).
    
  2. 그런 다음, 컨테이너에서 백업 파일을 복사하여 호스트 머신에 붙여넣습니다.

    cd ~
    sudo docker cp sql1:/var/opt/mssql/backup/wwi_2.bak wwi_2.bak
    ls -l wwi*
    

지속형 데이터 사용

데이터를 보호하기 위해 데이터베이스 백업을 수행할 뿐 아니라 데이터 볼륨 컨테이너를 사용할 수도 있습니다. 이 자습서의 시작 부분에서는 -v sql1data:/var/opt/mssql 매개 변수를 사용하여 sql1 컨테이너를 만들었습니다. sql1data 데이터 볼륨 컨테이너는 컨테이너가 제거된 후에도 /var/opt/mssql 데이터를 유지합니다. 다음 단계에서는 sql1 컨테이너를 완전히 제거한 후 지속된 데이터를 사용하여 새 컨테이너인 sql2를 만듭니다.

  1. sql1 컨테이너를 중지합니다.

    sudo docker stop sql1
    
  2. 컨테이너를 제거합니다. 이렇게 해도 이전에 만든 sql1data 데이터 볼륨 컨테이너와 해당 컨테이너의 지속형 데이터는 삭제되지 않습니다.

    sudo docker rm sql1
    
  3. 새 컨테이너인 sql2를 만들고 sql1data 데이터 볼륨 컨테이너를 다시 사용합니다.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
       --name 'sql2' -e 'MSSQL_PID=Developer' -p 1401:1433 \
       -v sql1data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
    
  4. Wide World Importers 데이터베이스는 이제 새 컨테이너에 있습니다. 쿼리를 실행하여 이전에 변경한 내용을 확인합니다.

    sudo docker exec -it sql2 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U sa -P '<new-password>' \
       -Q 'SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1'
    

    암호는 sa 컨테이너MSSQL_SA_PASSWORD=<password>에 대해 지정한 암호가 sql2 아닙니다. 자습서의 앞부분에서 변경된 암호를 포함하여 모든 SQL Server 데이터가 sql1에서 복원되었습니다. 실제로 /var/opt/mssql의 데이터를 복원하기 때문에 이와 같은 일부 옵션은 무시됩니다. 이런 이유로 암호는 여기 표시된 대로 <new-password>입니다.

  1. sql1 컨테이너를 중지합니다.

    sudo docker stop sql1
    
  2. 컨테이너를 제거합니다. 이렇게 해도 이전에 만든 sql1data 데이터 볼륨 컨테이너와 해당 컨테이너의 지속형 데이터는 삭제되지 않습니다.

    sudo docker rm sql1
    
  3. 새 컨테이너인 sql2를 만들고 sql1data 데이터 볼륨 컨테이너를 다시 사용합니다.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
       --name 'sql2' -e 'MSSQL_PID=Developer' -p 1401:1433 \
       -v sql1data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest
    
  4. Wide World Importers 데이터베이스는 이제 새 컨테이너에 있습니다. 쿼리를 실행하여 이전에 변경한 내용을 확인합니다.

    sudo docker exec -it sql2 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U sa -P '<new-password>' \
       -Q 'SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1'
    

    암호는 sa 컨테이너MSSQL_SA_PASSWORD=<password>에 대해 지정한 암호가 sql2 아닙니다. 자습서의 앞부분에서 변경된 암호를 포함하여 모든 SQL Server 데이터가 sql1에서 복원되었습니다. 실제로 /var/opt/mssql의 데이터를 복원하기 때문에 이와 같은 일부 옵션은 무시됩니다. 이런 이유로 암호는 여기 표시된 대로 <new-password>입니다.

  1. sql1 컨테이너를 중지합니다.

    sudo docker stop sql1
    
  2. 컨테이너를 제거합니다. 이렇게 해도 이전에 만든 sql1data 데이터 볼륨 컨테이너와 해당 컨테이너의 지속형 데이터는 삭제되지 않습니다.

    sudo docker rm sql1
    
  3. 새 컨테이너인 sql2를 만들고 sql1data 데이터 볼륨 컨테이너를 다시 사용합니다.

    sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
       --name 'sql2' -e 'MSSQL_PID=Developer' -p 1401:1433 \
       -v sql1data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2022-latest
    
  4. Wide World Importers 데이터베이스는 이제 새 컨테이너에 있습니다. 쿼리를 실행하여 이전에 변경한 내용을 확인합니다.

    sudo docker exec -it sql2 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U sa -P '<new-password>' \
       -Q 'SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1'
    

    암호는 sa 컨테이너MSSQL_SA_PASSWORD=<password>에 대해 지정한 암호가 sql2 아닙니다. 자습서의 앞부분에서 변경된 암호를 포함하여 모든 SQL Server 데이터가 sql1에서 복원되었습니다. 실제로 다음과 같은 일부 옵션은 데이터를 /var/opt/mssql복원하기 때문에 무시됩니다. 이런 이유로 암호는 여기 표시된 대로 <new-password>입니다.

주의

암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.

다음 단계

이 자습서에서는 Windows에서 데이터베이스를 백업하고 이를 컨테이너에서 SQL Server 2017(14.x)을 실행하는 Linux 서버로 이동하는 방법을 알아보았습니다. 다음 방법에 대해 알아보았습니다.

이 자습서에서는 Windows에서 데이터베이스를 백업하고 이를 컨테이너에서 SQL Server 2019(15.x)를 실행하는 Linux 서버로 이동하는 방법을 알아보았습니다. 다음 방법에 대해 알아보았습니다.

이 자습서에서는 Windows에서 데이터베이스를 백업하고 이를 컨테이너에서 SQL Server 2022(16.x)를 실행하는 Linux 서버로 이동하는 방법을 알아보았습니다. 구체적으로 다음 작업 방법을 알아보았습니다.

  • SQL Server Linux 컨테이너 이미지를 만듭니다.
  • SQL Server 데이터베이스 백업을 컨테이너에 복사합니다.
  • sqlcmd를 사용하여 Transact-SQL 문을 실행합니다.
  • 컨테이너에서 백업 파일을 만들고 추출합니다.
  • 데이터 볼륨 컨테이너를 사용하여 SQL Server 프로덕션 데이터를 유지합니다.

다음으로, 다른 컨테이너 구성 및 문제 해결 시나리오를 검토합니다.

SQL 설명서 작성에 참여하세요.

SQL 콘텐츠를 직접 편집할 수 있다는 것을 알고 계셨나요? 직접 편집하여 설명서를 개선하고, 페이지에 기여자로 참여하세요.

자세한 내용은 SQL Server 설명서에 기여하는 방법을 참조하세요