-
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
'Tech Shared' 카테고리의 다른 글
MySQL 컬럼 DATA-TYPE (0) 2023.01.01 [javascript] 4bytes 이모지(emoji) 제한하기 (0) 2022.10.05 [node.js] oracle -> mysql 데이타 전송 테스트 ( 시간측정 포함 ) (0) 2022.10.05 MacOS 에서 SQLDeveloper 설정 (0) 2021.12.26