다음을 통해 공유


SQL Server on Linux 문제 해결

적용 대상: SQL Server - Linux

이 문서에서는 Linux 또는 Linux 컨테이너에서 실행되는 SQL Server 문제를 해결하는 방법을 설명합니다. SQL Server on Linux 문제를 해결할 때 지원되는 기능 및 알려진 제한 사항을 검토해야 합니다.

질문과 대답은 SQL Server on Linux FAQ를 참조하세요.

연결 오류 문제 해결

Linux SQL Server 인스턴스에 연결하는 데 어려움이 있는 경우 몇 가지 사항을 확인해야 합니다.

  • localhost를 사용하여 로컬로 연결할 수 없는 경우에는 IP 주소 127.0.0.1을 대신 사용해 보세요. localhost가 이 주소에 제대로 매핑되어 있지 않을 수 있습니다.

  • 클라이언트 머신에서 서버 이름 또는 IP 주소에 연결할 수 있는지 확인합니다.

    Ubuntu 머신의 IP 주소를 찾으려면 다음 예제와 같이 ifconfig 명령을 실행하면 됩니다.

    sudo ifconfig eth0 | grep 'inet addr'
    

    Red Hat의 경우 다음 예제와 같이 ip addr 명령을 사용할 수 있습니다.

    sudo ip addr show eth0 | grep "inet"
    

    이 기술에는 Azure VM과 관련된 한 가지 예외가 있습니다. Azure VM의 경우 Azure Portal에서 VM의 공용 IP를 찾습니다.

  • 해당하는 경우 방화벽에서 SQL Server 포트(기본값 1433)를 열었는지 확인합니다.

  • Azure VM의 경우 기본 SQL Server 포트에 대한 네트워크 보안 그룹 규칙이 있는지 확인합니다.

  • 사용자 이름 및 암호에 오타, 추가 공백 또는 잘못된 대/소문자가 포함되지 않았는지 확인합니다.

  • 다음 예시와 같이 서버 이름을 사용하여 프로토콜 및 포트 번호를 명시적으로 설정해 보세요(예: tcp:servername,1433).

  • 네트워크 연결 문제로 인해 연결 오류 및 시간 초과가 발생할 수도 있습니다. 연결 정보 및 네트워크 연결을 확인한 후 연결을 다시 시도하세요.

SQL Server 서비스 관리

다음 섹션에서는 SQL Server Linux 컨테이너의 실행을 관리하는 방법을 보여 줍니다. Linux용 서비스를 관리하려면 Linux에서 SQL Server 서비스 시작, 중지 및 다시 시작을 참조하세요.

SQL Server Linux 컨테이너의 실행 관리

다음 명령을 실행하여 생성된 최신 SQL Server Linux 컨테이너의 상태 및 컨테이너 ID를 가져올 수 있습니다(ID는 CONTAINER ID 열에 있음).

sudo docker ps -l

다음 명령을 사용하여 필요에 따라 SQL Server 서비스를 중지하거나 다시 시작할 수 있습니다.

sudo docker stop <container ID>
sudo docker restart <container ID>

Linux 컨테이너에 대한 자세한 문제 해결 팁은 SQL Server Docker 컨테이너 문제 해결을 참조하세요.

로그 파일 액세스

SQL Server 데이터베이스 엔진은 Linux 및 컨테이너 설치의 /var/opt/mssql/log/errorlog 파일에 로그합니다. 이 디렉터리를 찾아보려면 슈퍼 사용자 모드에 있어야 합니다.

설치 관리자는 /var/opt/mssql/setup-<time stamp representing time of install>에 로깅합니다. 다음과 같이 vim 또는 cat 같은 UTF-16 호환 도구를 사용하여 errorlog 파일을 찾아볼 수 있습니다.

sudo cat errorlog

원하는 경우 다음 명령을 사용하여 파일을 UTF-8로 변환하여 자세히 또는 간단히 읽을 수도 있습니다.

sudo iconv -f UTF-16LE -t UTF-8 <errorlog> -o <output errorlog file>

확장 이벤트

SQL 명령을 통해 확장 이벤트를 쿼리할 수 있습니다. 자세한 내용은 확장 이벤트를 참조하세요.

크래시 덤프

Linux의 로그 디렉터리에서 덤프를 검색합니다. /var/opt/mssql/log 디렉터리에서 Linux 코어 덤프(.tar.gz2 확장명) 또는 SQL 미니덤프(.mdmp 확장명)가 있는지 확인합니다.

예를 들어 코어 덤프를 보려면 다음을 실행합니다.

sudo ls /var/opt/mssql/log | grep .tar.gz2

SQL 덤프의 경우 다음 스크립트를 사용합니다.

sudo ls /var/opt/mssql/log | grep .mdmp

최소 구성 또는 단일 사용자 모드로 SQL Server 시작

최소 구성 모드로 SQL Server 시작

이 모드는 구성 값의 설정(예: 메모리 오버 커밋)으로 인해 서버가 시작되지 않는 경우에 유용합니다.

sudo -u mssql /opt/mssql/bin/sqlservr -f

단일 사용자 모드로 SQL Server 시작

때로는 시작 옵션 -m을 사용하여 SQL Server의 인스턴스를 단일 사용자 모드에서 시작해야 할 수도 있습니다. 자세한 내용은 시작 매개 변수를 참조하세요. 예를 들어 서버 구성 옵션을 변경하거나 손상된 master 데이터베이스 또는 다른 시스템 데이터베이스를 복구하려고 할 수도 있습니다.

예를 들어, 다음 스크립트를 사용하여 단일 사용자 모드에서 SQL Server를 시작합니다.

sudo -u mssql /opt/mssql/bin/sqlservr -m

이 스크립트는 sqlcmd를 사용하여 단일 사용자 모드에서 SQL Server를 시작합니다.

sudo -u mssql /opt/mssql/bin/sqlservr -m sqlcmd

향후 시작 문제를 방지하려면 항상 mssql 사용자로 SQL Server on Linux를 시작해야 합니다. 예: sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]

실수로 다른 사용자로 SQL Server를 시작한 경우에는 systemd를 사용하여 SQL Server를 시작하기 전에 SQL Server 데이터베이스 파일의 소유권을 다시 mssql 사용자로 변경해야 합니다. 예를 들어 /var/opt/mssql 아래에 있는 모든 데이터베이스 파일의 소유권을 mssql 사용자로 변경하려면 다음 명령을 실행합니다.

chown -R mssql:mssql /var/opt/mssql/

시스템 데이터베이스 다시 빌드

최후의 수단으로 mastermodel 데이터베이스를 기본 버전으로 다시 빌드하도록 선택할 수 있습니다.

Warning

사용자 데이터베이스에 대한 정보(사용자 데이터베이스 자체는 아님)를 포함하여 구성한 모든 SQL Server 시스템 데이터를 삭제할 수 있으므로 이 프로세스는 위험합니다.

나중에 사용자 데이터베이스를 인스턴스에 연결해야 합니다. 또한 다음을 포함하여 시스템 데이터베이스에 저장된 다른 정보도 삭제됩니다.

  • DMK(데이터베이스 마스터 키) 정보
  • master에 로드된 모든 인증서
  • 계정의 sa 암호
  • msdb에서 작업 관련 정보
  • msdb에서 데이터베이스 메일 정보
  • sp_configure 옵션

인증서 및 프라이빗 키도 백업하지 않은 한 TDE(투명한 데이터 암호화)로 암호화된 모든 사용자 데이터베이스를 다시 연결할 수 없습니다.

그 영향을 이해하는 경우에만 다음 단계를 사용하세요.

  1. SQL Server 데이터베이스 엔진 중지

    sudo systemctl stop mssql-server
    
  2. force-setup 매개 변수를 사용하여 sqlservr 실행

    sudo -u mssql /opt/mssql/bin/sqlservr --force-setup
    

    향후 시작 문제를 방지하려면 항상 mssql 사용자로 SQL Server on Linux를 시작해야 합니다.

  3. "복구가 완료되었습니다."라는 메시지가 표시되면 CTRL+C를 누릅니다. 이렇게 하면 SQL Server가 종료됩니다.

  4. 암호를 다시 구성합니다 sa .

    sudo /opt/mssql/bin/mssql-conf set-sa-password
    

    주의

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

  5. SQL Server를 시작하고 사용자 데이터베이스 복원 또는 다시 연결 등 서버를 다시 구성합니다.

    sudo systemctl start mssql-server
    

성능 향상

데이터베이스 디자인, 하드웨어, 워크로드 수요 등 많은 요인이 성능에 영향을 미칩니다. 성능을 향상시키려면 먼저 SQL Server on Linux에 대한 성능 모범 사례 및 구성 지침 문서에서 모범 사례를 검토하세요. 그런 다음, 성능 문제 해결에 사용할 수 있는 몇 가지 도구를 살펴봅니다.

일반적인 문제

  1. 원격 SQL Server 인스턴스에 연결할 수 없습니다.

    SQL Server on Linux에 연결 문서의 문제 해결 섹션을 참조하세요.

  2. 다음과 같은 오류 메시지가 표시됩니다. ERROR: Hostname must be 15 characters or less.

    이 문제는 SQL Server 패키지를 설치하려는 컴퓨터의 이름이 15자를 초과할 때마다 발생하는 알려진 문제입니다. 현재는 머신 이름을 변경하는 것 외에는 해결 방법이 없습니다. 이 작업은 /etc/hostname/etc/hosts를 모두 편집하고, 호스트 이름을 변경하고, 각 파일을 저장하고, 컴퓨터를 다시 시작하여 수행할 수 있습니다.

  3. 시스템 관리자(sa) 암호를 다시 설정하여 SQL Server 서비스를 일시적으로 중지해야 합니다.

    암호를 잊어버리 sa 거나 다른 이유로 재설정해야 하는 경우 다음 단계를 수행합니다.

    호스트 터미널에 로그인하고, 다음 명령을 실행하고, 프롬프트에 따라 암호를 재설정 sa 합니다.

    sudo systemctl stop mssql-server
    sudo /opt/mssql/bin/mssql-conf setup
    

    주의

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

  4. 암호의 특수 문자는 오류 또는 로그인 실패를 일으킬 수 있습니다.

    SQL Server 암호에서 일부 문자를 사용하는 경우 Linux 명령줄에서 사용할 때 백슬래시로 이스케이프해야 할 수 있습니다. 예를 들어 터미널 명령/셸 스크립트에서 언제든지 달러 기호($)를 이스케이프해야 합니다.

    • 작동하지 않음:

      sudo sqlcmd -S myserver -U sa -P Test$$
      
    • 작동함:

      sqlcmd -S myserver -U sa -P Test\$\$
      

도움말 보기

SQL 설명서에 참여하세요

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

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