SQL Server on Linux 문제 해결

적용 대상:SQL Server - Linux

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

질문과 대답은 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 Docker 컨테이너의 실행을 관리하는 방법을 보여 줍니다. Linux용 서비스를 관리하려면 Linux에서 SQL Server 서비스 시작, 중지 및 다시 시작을 참조하세요.

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

다음 명령을 실행하여 최근에 만든 SQL Server Docker 컨테이너의 상태 및 컨테이너 ID를 가져올 수 있습니다(ID는 열 아래에 CONTAINER ID 있음).

sudo docker ps -l

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

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

Docker에 대한 자세한 문제 해결 팁은 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 Core 덤프(확장) 또는 SQL 미니덤프(.tar.gz2.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

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

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

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

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

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

Warning

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

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

  • 데이터베이스 마스터 키 정보
  • 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
    

    향후 시작 문제를 방지하려면 항상 사용자와 함께 Linux에서 mssql SQL Server를 시작해야 합니다.

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

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

    sudo /opt/mssql/bin/mssql-conf set-sa-password
    
  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
    
  4. 로그인 암호의 특수 문자로 인해 오류 또는 로그인 실패가 발생합니다.

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

    작동하지 않음:

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

    작동함:

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

도움말 보기

SQL 설명서에 참여하세요

SQL 콘텐츠를 직접 편집할 수 있다는 것을 알고 계셨나요? 직접 편집하면 설명서가 개선될 뿐만 아니라 페이지에 참여자로 기입됩니다.

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