ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ubuntu 서버에 Microsoft ODBC Driver 설치
    Tech Shared 2021. 10. 7. 23:58
    설정환경
    OS ubuntu 16.04
    language perl

     

     

    설치

    1. ubuntu 리눅스에 apt 설정을 추가한다.

    # uname -a 
    Linux zeus 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux 
    
    # curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100    79  100    79    0     0    136      0 --:--:-- --:--:-- --:--:--   136

    2. apt 패키지 정보를 갱신한다.

    # apt-get update
    기존:1 http://mirror.kakao.com/ubuntu xenial InRelease                                                   
    받기:2 http://mirror.kakao.com/ubuntu xenial-updates InRelease [109 kB]                                          
    받기:3 http://mirror.kakao.com/ubuntu xenial-backports InRelease [107 kB]                                        
    받기:4 https://packages.microsoft.com/ubuntu/16.04/prod xenial InRelease [4,002 B]                               
    받기:5 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]                          
    무시:4 https://packages.microsoft.com/ubuntu/16.04/prod xenial InRelease
    받기:6 https://packages.microsoft.com/ubuntu/16.04/prod xenial/main amd64 Packages [232 kB]
    받기:7 https://esm.ubuntu.com/infra/ubuntu xenial-infra-security InRelease [7,509 B]
    받기:8 https://esm.ubuntu.com/infra/ubuntu xenial-infra-updates InRelease [7,475 B]
    내려받기 576 k바이트, 소요시간 1초 (354 k바이트/초)
    패키지 목록을 읽는 중입니다... 완료
    W: GPG 오류: https://packages.microsoft.com/ubuntu/16.04/prod xenial InRelease: 다음 서명들은 공개키가 없기 때문에 인증할 수 없습니다: NO_PUBKEY EB3E94ADBE1229CF
    W: The repository 'https://packages.microsoft.com/ubuntu/16.04/prod xenial InRelease' is not signed.
    N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
    N: See apt-secure(8) manpage for repository creation and user configuration details.

    3. GPG 오류가 발생할 경우 아래와 같은 명령어를 입력한다.

    ( 공개키 오류로 해당 키를 등록을 하는 과정이다. )

    # apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EB3E94ADBE1229CF
    Executing: /tmp/tmp.42ZMEBnw2B/gpg.1.sh --keyserver
    keyserver.ubuntu.com
    --recv-keys
    EB3E94ADBE1229CF
    gpg: requesting key BE1229CF from hkp server keyserver.ubuntu.com
    gpg: key BE1229CF: public key "Microsoft (Release signing) <gpgsecurity@microsoft.com>" imported
    gpg: Total number processed: 1
    gpg:               imported: 1  (RSA: 1)
    
    # apt-get update 
    에러가 사라진 것을 확인할 수 있다.

    4. 패키지 설치

    # apt-get install msodbcsql17
    패키지 목록을 읽는 중입니다... 완료
    의존성 트리를 만드는 중입니다       
    상태 정보를 읽는 중입니다... 완료
    다음 새 패키지를 설치할 것입니다:
      msodbcsql17
    0개 업그레이드, 1개 새로 설치, 0개 제거 및 5개 업그레이드 안 함.
    744 k바이트 아카이브를 받아야 합니다.
    이 작업 후 0 바이트의 디스크 공간을 더 사용하게 됩니다.
    받기:1 https://packages.microsoft.com/ubuntu/16.04/prod xenial/main amd64 msodbcsql17 amd64 17.8.1.1-1 [744 kB]
    내려받기 744 k바이트, 소요시간 0초 (1,145 k바이트/초)
    패키지를 미리 설정하는 중입니다...
    Selecting previously unselected package msodbcsql17.
    (데이터베이스 읽는중 ...현재 112580개의 파일과 디렉터리가 설치되어 있습니다.)
    Preparing to unpack .../msodbcsql17_17.8.1.1-1_amd64.deb ...
    Unpacking msodbcsql17 (17.8.1.1-1) ...
    msodbcsql17 (17.8.1.1-1) 설정하는 중입니다 ...
    
    # apt-get install -y mssql-tools
    
    # apt-get install -y unixodbc-dev

    5. 테스트 

    # 사용한 계정의 bash 설정에 아래의 내용을 추가.
    $ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
    $ . ~/.bashrc
    
    # mssql 서버에 접속해 본다 
    $ sqlcmd -S {ipaddress} -U {username} -P {password}
    1> SELECT GETDATE()
    2> go
                           
    -----------------------
    2021-10-07 23:56:00.233
    
    (1 rows affected)

     

    Perl 프로그램 만들기

    DBD 패키지 설치

    # apt-get install libdbd-odbc-perl

    test_mssql.pl 파일을 만듭니다 ( vi test_mssql.pl ) 

    #!/usr/bin/perl
    #
    #use strict;
    #use warnings;
    use DBI;
    
    my $driver      = '/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.8.so.1.1';
    my $server      = '192.168.1.xxx';
    my $database    = 'dbname';
    my $user        = 'dbusername';
    my $password    = 'dbpassword';
    
    my $dbh = DBI->connect("dbi:ODBC:Driver={$driver};Server=$server;Database=$database;UID=$user;PWD=$password");
    my $sth = $dbh->prepare(" SELECT GETDATE() AS GETDATE ");
    
    #print "LongReadLen is '", $sth->{LongReadLen}, "'\n";
    #print "LongTruncOk is ", $sth->{LongTruncOk}, "\n";
    
    #not anymore errors if content is truncated - you don't necessarily want this
    $sth->{'LongTruncOk'} = 1;
    #nice, hard coded constant for the length of data to be read from Longs
    $sth->{'LongReadLen'} = 200000;
    
    $sth->execute();
    
    print "LongReadLen is '", $sth->{LongReadLen}, "'\n";
    print "LongTruncOk is ", $sth->{LongTruncOk}, "\n";
    
    while ( ($get_date) = $sth->fetchrow_array() ) {
        print "------------------------------\n";
        print $get_date."\n";
        print "------------------------------\n";
    }

    만든 프로그램을 테스트 해 본다. 

    $ ./test_mssql.pl 
    LongReadLen is '200000'
    LongTruncOk is 1
    ------------------------------
    2021-10-08 00:07:57.160
    ------------------------------

     

    나머지는 업무에 맞게 개발을 하면 된다.

     

    참고 문서

    https://docs.microsoft.com/ko-kr/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

     

    댓글