이 문서는 root 권한이 없는 시스템에서 MS SQL등의 데이터베이스 서버에 command line으로 접속하는 방법을 정리한다.
바이너리 준비
실제 Linux 환경에 root 권한이 없어 패키지 설치가 불가하므로 별도의 임시 서버에서 바이너리를 준비한다.
- 실제 구성할 서버와 동일한 OS 버전의 VM 준비
mssql tool 설치
curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/msprod.repo
설치된 파일 묶음 만들기
- MSSQL 도구는 CentOS의 경우 /opt에 설치됨cd /opt tar -zcvf /tmp/mssql.tar.gz mssql_tools microsoft
- odbc library 묶음 만들기
cd /usr/lib64 tar -zcvf /tmp/libodbc.tar.gz libodbc.tar.gz libodbc*
odbcinst binary 복사
/usr/bin/odbcinst
실제 환경 구성
임시 서버에서 준비된 바이너리를 이용해 실제 환경을 구성한다.
파일 압축 해제
mkdir ~/mssql cd ~/mssql tar -zxvf ~/Downloads/mssql.tar.gz mkdir lib64 cd lib64 tar -zxvf ~/Downloads/libodbc.tar.gz
odbc driver 설정
vi ~/mssql/microsoft/msodbcsql17/etc/odbcinst.ini [ODBC Driver 17 for SQL Server] Description=Microsoft ODBC Driver 17 for SQL Server Driver=/home/username/mssql/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1 <-- 바이너리 환경에 맞게 경로 수정
실행 환경 변수 설정
export PATH="$PATH:$HOME/mssql/mssql-tools/bin" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/mssql/lib64" export ODBCSYSINI=$HOME/mssql/microsoft/msodbcsql17/etc
서버 접속 시험
쿼리 파일 생성
USE <database name> GO SELECT TOP (100) * FROM MY_TABLE GO
쿼리 실행
sqlcmd -U <username> -P <password> -S <SQL sever IP>,<port number> -i <쿼리 파일 이름> 예) sqlcmd -U curvc -P 비밀번호 -S 10.100.10.10,1433 -i query.sql
쿼리 결과 저장
CSV 출력
HEADER 포함
sqlcmd -U <username> -P <password> -S <SQL sever IP>,<port number> -i <쿼리 파일 이름> -W -f 65001 -s "," -o "<OutputFilePath>"
HEADER 제외
sqlcmd -U <username> -P <password> -S <SQL sever IP>,<port number> -i <쿼리 파일 이름> -W -f 65001 -h -1 -s "," -o "<OutputFilePath>"