다음을 통해 공유


Linux에 SQL Server Java 언어 확장 설치

적용 대상: SQL Server 2019(15.x) - Linux 이상 버전

SQL Server on Linux용 Java 언어 확장 구성 요소를 설치하는 방법을 알아봅니다. Java 언어 확장은 SQL Server 언어 확장의 일부이며 데이터베이스 엔진의 추가 기능입니다.

데이터베이스 엔진과 언어 확장을 동시에 설치할 수 있지만, 더 많은 구성 요소를 추가하기 전에 문제를 해결할 수 있도록 먼저 SQL Server 데이터베이스 엔진을 설치하고 구성하는 것이 모범 사례입니다.

사전 요구 사항

  • Java 확장의 패키지 위치는 SQL Server Linux 원본 리포지토리에 있습니다. 데이터베이스 엔진 설치에 대한 원본 리포지토리를 이미 구성한 경우 동일한 리포지토리 등록을 사용하여 mssql-server-extensibility-java 패키지 설치 명령을 실행할 수 있습니다.

패키지 목록

인터넷에 연결된 디바이스에서 패키지는 각 운영 체제의 패키지 설치 프로그램을 사용하여 데이터베이스 엔진과 독립적으로 다운로드 및 설치됩니다. 다음 표에서는 이용 가능한 모든 패키지에 대해 설명합니다.

패키지 이름 적용 대상 설명
mssql-server-extensibility 모든 언어 Java 언어 확장에 사용되는 확장성 프레임워크
mssql-server-extensibility-java Java 적용 대상: SQL Server 2019(15.x) on Linux 전용

Java 언어 확장에 사용되고 지원되는 Java 런타임을 포함하는 확장성 프레임워크

Java 언어 확장 설치

mssql-server-extensibility-java를 설치하여 Linux에 언어 확장 및 Java를 설치할 수 있습니다. mssql-server-extensibility-java를 설치할 때 JRE 11이 아직 설치되지 않은 경우 패키지가 자동으로 설치합니다. 또한 JRE_HOME(이)라는 환경 변수에 JVM 경로를 추가합니다.

Java 언어 확장을 사용하도록 설정하려면 GitHub의 Java 언어 확장 페이지의 지침에 따라 사용자 지정 이진 파일을 빌드합니다.

참고

인터넷에 연결된 서버에서 패키지 종속성이 다운로드되고 주 패키지 설치의 일부로 설치됩니다. 서버가 인터넷에 연결되어 있지 않은 경우 오프라인 설정에서 자세한 정보를 참조하세요.

최신 Microsoft Build of OpenJDK 또는 공식적으로 라이선스가 부여된 Java 런타임을 포함하여 원하는 대로 Java 런타임을 다운로드하고 설치할 수 있습니다. SQL Server 2022(16.x)부터는 SQL Server 설치 프로그램에서 Java 런타임을 설치하지 않습니다.

Java 언어 확장을 사용하도록 설정하려면 GitHub의 Java 언어 확장 페이지의 지침에 따라 사용자 지정 이진 파일을 빌드합니다.

Red Hat 설치 명령

다음 명령을 사용하여 RedHat에 Java용 언어 확장을 설치할 수 있습니다.

가능하면 yum clean all을 실행하여 설치 전에 시스템에서 패키지를 새로 고칩니다.

# Install as root or sudo
sudo yum install mssql-server-extensibility-java

Ubuntu 설치 명령

다음 명령을 사용하여 Ubuntu에 Java용 언어 확장을 설치할 수 있습니다.

가능하면 apt-get update을 실행하여 설치 전에 시스템에서 패키지를 새로 고칩니다. 또한 Ubuntu의 일부 docker 이미지에는 https apt 전송 옵션이 없을 수도 있습니다. 설치하려면 apt-get install apt-transport-https를 사용합니다.

# Install as root or sudo
sudo apt-get install mssql-server-extensibility-java

SUSE 설치 명령

다음 명령을 사용하여 SUSE에 Java용 언어 확장을 설치할 수 있습니다.

# Install as root or sudo
sudo zypper install mssql-server-extensibility-java

설치 후 구성(필수)

  1. Linux에 사용 권한 부여

    외부 라이브러리를 사용하는 경우 이 단계를 수행할 필요가 없습니다. 권장되는 작업 방법은 외부 라이브러리를 사용하는 것입니다. jar 파일에서 외부 라이브러리를 만드는 방법에 대한 도움말은 외부 라이브러리 만들기를 참조하세요.

    외부 라이브러리를 사용하지 않는 경우 jar에서 Java 클래스를 실행할 수 있는 권한을 SQL Server 제공해야 합니다.

    jar 파일에 대한 읽기 및 실행 액세스 권한을 부여하려면 jar 파일에서 다음 chmod 명령을 실행합니다. SQL Server로 작업할 때는 항상 jar에 클래스 파일을 배치하는 것이 좋습니다. jar 만들기에 대한 도움말은 클래스 파일에서 Java jar 파일 만들기를 참조하세요.

    chmod ug+rx <MyJarFile.jar>
    

    또한 mssql_satellitejar 파일에 대한 읽기/실행 권한을 부여해야 합니다.

    chown mssql_satellite:mssql_satellite <MyJarFile.jar>
    

    추가 구성은 주로 mssql-conf tool을 통해 진행됩니다.

  2. SQL Server 서비스를 실행하는 데 사용되는 mssql 사용자 계정을 추가합니다. 이는 이전에 설치를 실행하지 않은 경우에 필요합니다.

    sudo /opt/mssql/bin/mssql-conf setup
    
  3. 아웃바운드 네트워크 액세스를 사용하도록 설정합니다. 아웃바운드 네트워크 액세스는 기본적으로 사용 안 함으로 설정됩니다. 아웃바운드 요청을 사용하도록 설정하려면 mssql-conf 도구를 사용하여 outboundnetworkaccess 부울 속성을 설정합니다. 자세한 내용은 mssql-conf를 사용하여 SQL Server on Linux 구성을 참조하세요.

    # Run as SUDO or root
    # Enable outbound requests over the network
    sudo /opt/mssql/bin/mssql-conf set extensibility outboundnetworkaccess 1
    
  4. SQL Server 실행 패드 서비스 및 데이터베이스 엔진 인스턴스를 다시 시작하여 INI 파일에서 업데이트된 값을 읽습니다. 다시 시작 메시지가 확장성 관련 설정이 수정될 때마다 사용자에게 알려줍니다.

    systemctl restart mssql-launchpadd
    systemctl restart mssql-server.service
    
  5. T-SQL을 실행하는 Azure Data Studio 또는 SQL Server Management Studio(Windows에만 해당)와 같은 다른 도구를 사용하여 외부 스크립트 실행을 사용하도록 설정합니다.

    EXEC sp_configure 'external scripts enabled', 1;
    RECONFIGURE WITH OVERRIDE;
    
  6. mssql-launchpadd 서비스를 다시 시작합니다.

  7. 언어 확장을 사용하려는 각 데이터베이스에 대해 외부 언어 만들기를 사용하여 외부 언어를 등록해야 합니다. 다음 섹션에서 단계를 참조하세요.

외부 언어 등록

언어 확장을 사용하려는 각 데이터베이스에 대해 외부 언어 만들기를 사용하여 외부 언어를 등록해야 합니다.

다음 예제는 SQL Server on Linux의 데이터베이스에 외부 언어가 호출한 Java를 추가합니다.

CREATE EXTERNAL LANGUAGE Java
FROM (CONTENT = N'/opt/mssql-extensibility/lib/java-lang-extension.tar.gz',
    FILE_NAME = 'javaextension.so',
    ENVIRONMENT_VARIABLES = N'{"JRE_HOME":"/opt/mssql/lib/zulu-jre-11"}');

Java 확장의 경우 JRE_HOME 환경 변수를 사용하여 JVM을 찾고 초기화할 경로를 결정합니다.

CREATE EXTERNAL LANGUAGE DDL은 익스텐션을 호스트하는 프로세스에 대해 특별히 환경 변수를 설정하는 매개 변수(ENVIRONMENT_VARIABLES)를 제공합니다. 이 프로세스는 외부 언어 확장에 필요한 환경 변수를 설정하는 권장되는 가장 효과적인 방법입니다.

자세한 내용은 외부 언어 만들기를 참조하세요.

설치 확인

Java 기능 통합에는 라이브러리가 포함되지 않지만 grep -r JRE_HOME /etc을 실행하여 JAVA_HOME 환경 변수의 생성을 확인할 수 있습니다.

설치의 유효성을 검사하려면 Java를 호출하는 시스템 저장 프로시저를 실행하는 T-SQL 스크립트를 실행합니다. 이 태스크에는 쿼리 도구가 필요합니다. Azure Data Studio를 선택하는 것이 좋습니다. SQL Server Management Studio와 같이 일반적으로 사용되는 다른 도구는 Windows 전용입니다. 이러한 도구가 포함된 Windows 컴퓨터를 사용하는 경우 이를 사용하여 데이터베이스 엔진의 Linux 설치에 연결합니다.

SQL Server 및 Java 언어 확장의 전체 설치

데이터베이스 엔진을 설치하는 명령에 Java 패키지와 매개 변수를 추가하여 한 가지 프로시저에서 데이터베이스 엔진과 Java 언어 확장을 설치하고 구성할 수 있습니다.

  1. 데이터베이스 엔진 및 언어 확장 기능을 포함하는 명령줄을 제공합니다.

    데이터베이스 엔진 설치에 Java 확장성을 추가할 수 있습니다.

    sudo yum install -y mssql-server mssql-server-extensibility-java
    
  2. 사용권 계약에 동의하고 설치 후 구성을 완료합니다. 이 작업을 위해 mssql-conf 도구를 사용합니다.

    sudo /opt/mssql/bin/mssql-conf setup
    

    이 단계에서는 데이터베이스 엔진에 대한 사용권 계약에 동의하고, 버전을 선택하고, 관리자 암호를 설정하라는 메시지가 표시됩니다.

  3. 서비스를 다시 시작하라는 메시지가 표시되면 서비스를 다시 시작합니다.

    sudo systemctl restart mssql-server.service
    

무인 설치

데이터베이스 엔진에 대한 무인 설치를 사용하고 mssql-server-extensibility-java용 패키지를 추가합니다.

오프라인 설치

패키지 설치 단계의 오프라인 설치 지침을 따릅니다. 다운로드 사이트를 찾은 후 이 섹션의 뒷부분에 나오는 패키지 목록을 사용하여 특정 패키지를 다운로드합니다.

여러 패키지 관리 도구에서 패키지 종속성을 확인하는 데 도움이 되는 명령을 제공합니다. Yum의 경우 sudo yum deplist [package]를 사용합니다. Ubuntu의 경우 dpkg -I [package name].debsudo apt-get install --reinstall --download-only [package name]을 차례로 사용합니다.

다운로드 사이트

https://packages.microsoft.com/에서 패키지를 다운로드할 수 있습니다. Java용 패키지는 모두 데이터베이스 엔진 패키지와 함께 배치됩니다.

다운로드 경로

Package(패키지) 배포 다운로드 위치
mssql/extensibility-java packages Red Hat 8 https://packages.microsoft.com/rhel/8/mssql-server-2019/
mssql/extensibility-java packages SUSE v15 https://packages.microsoft.com/sles/15/mssql-server-2019/
mssql/extensibility-java packages Ubuntu 20.04 https://packages.microsoft.com/ubuntu/20.04/mssql-server-2019/pool/main/m/

패키지 목록

사용하려는 확장에 따라 특정 언어에 필요한 패키지를 다운로드합니다. 정확한 파일 이름에는 접미사에 플랫폼 정보가 포함되지만, 다음의 파일 이름은 어떤 파일을 가져올지 판단할 수 있도록 도움이 되어야 합니다.

  • 핵심 패키지

    • mssql-server-15.0.1000
    • mssql-server-extensibility-15.0.1000
  • Java

    • mssql-server-extensibility-java-15.0.1000

제한 사항

현재로서는 Linux에서 암시적 인증을 사용할 수 없습니다. 즉, 진행 중인 Java에서 데이터 또는 기타 리소스에 액세스하기 위해 서버에 다시 연결할 수 없습니다.

리소스 거버넌스

외부 리소스 풀에 대한 리소스 거버넌스에서 Linux와 Windows 사이에 패리티가 있지만, sys.dm_resource_governor_external_resource_pools에 대한 통계는 현재 Linux에서 다른 단위를 사용합니다.

참고 항목

다음 표의 통계는 지정된 컨트롤 그룹(cgroups) 하위 시스템에서 가져온 것입니다.

열 이름 Description Linux의 값
peak_memory_kb 리소스 풀에 사용되는 최대 메모리 양입니다. Linux에서 이 통계의 출처는 memory 하위 시스템이며 값은 memory.max_usage_in_bytes입니다
write_io_count Resource Governor 통계를 다시 설정한 후 발생한 총 쓰기 IO입니다. Linux에서 이 통계의 출처는 blkio 하위 시스템이며 쓰기 행의 값은 blkio.throttle.io_serviced입니다
read_io_count Resource Governor 통계를 다시 설정한 후 발생한 총 읽기 IO입니다. Linux에서 이 통계의 출처는 blkio 하위 시스템이며 읽기 행의 값은 blkio.throttle.io_serviced입니다
total_cpu_kernel_ms Resource Governor 통계를 다시 설정한 후 누적된 CPU 사용자 커널 시간(밀리초)입니다. Linux에서 이 통계의 출처는 cpuacct 하위 시스템이며 사용자 행의 값은 cpuacct.stat입니다
total_cpu_user_ms Resource Governor 통계를 다시 설정한 후 누적된 CPU 사용자 시간(밀리초)입니다. Linux에서 이 통계의 출처는 cpuacct 하위 시스템이며 시스템 행의 값은 cpuacct.stat입니다
active_processes_count 요청 순간에 실행되는 외부 프로세스의 수입니다. Linux에서 이 통계의 출처는 pids 하위 시스템이며 값은 pids.current입니다