RedHat 7 msodbcsql17 문제

RedHat 7 msodbcsql17 문제

처음에 StackOverflow에 문의했는데, 제 생각에는 애플리케이션 개발 문제는 아닙니다. 기본적으로 msodbcsql17 패키지를 사용하여 SQL Server에 연결하는 C++ 응용 프로그램이 있습니다. RedHat 7 Linux 서버에서 실행 중입니다. 이 앱을 새 환경에 배포할 때 로컬 관리자는 yum을 사용하여 사용 가능한 최신 msodbcsql17 패키지인 17.6.1.1-1을 설치했습니다. DB에 연결할 때 애플리케이션이 중단되고, systemctl은 애플리케이션을 중지할 수 없으며 일정 시간이 지난 후에 애플리케이션을 종료해야만 합니다. 우리 연구실에서 확인해 보니 앱이 msodbcsql17 버전 17.4.2.1.1-1에서 잘 작동합니다. 그래서 랩 서버 중 하나를 가져와 복제하고 앱이 두 서버 모두에서 제대로 작동하는지 확인하여 버전을 테스트했습니다. 서버 중 하나를 msodbcsql17 17.6 버전으로 업그레이드했는데 앱이 "예상대로" 중단되었습니다. 그래서 17.4 버전으로 다운그레이드했는데 앱이 여전히 깨져있습니다.

내가 아는 한, 설치된 바이너리(/opt/microsoft 폴더에 있는 모든 항목)는 두 서버에서 동일합니다. 이 외에는 /usr/lib64에서 /opt/microsoft의 SO 파일을 가리키는 단일 심볼릭 링크만 볼 수 있습니다. yum에 따르면 다른 종속성은 설치되거나 제거되지 않았으며 'yum list install'을 파일로 내보내고 diff로 비교하여 이를 확인했습니다.

그래서 제가 시도한 것은 rsync를 사용하여 원래 작업 서버에서 새 서버로 파일을 복사하는 것입니다. 처음에는 그냥 드라이런을 해봤는데 별 차이를 못 느꼈어요. 그래서 전체 /usr 폴더를 복사했지만 여전히 작동하지 않습니다. 그런 다음 rsync를 사용하여 전체 /etc 폴더를 복사하고 호스트 이름과 IP 구성을 다시 변경했으며(분명히 이 파일도 덮어썼습니다) 앱이 다시 작동하기 시작했습니다. 그래서 최신 버전의 msodbcsql17을 설치하고 제거한 후 이전 버전을 설치하여 다시 깨뜨린 다음 또 다른 rsync dry-run을 수행했습니다. usr 폴더에서는 차이가 없으며 rsync는 심볼릭 링크를 건너뛰는 것(비정규 파일 "tmp" 건너뛰기)만 기록합니다. 그러나 etc 폴더에는 몇 가지 차이점이 있었고, 여기서는 문제가 되는 파일이 무엇인지 알 수 없습니다.

sudo rsync -r --dry-run --out-format="[%t]:%o:%f:Last Modified %M" [email protected]:/etc/ /etc/ | less

[2020/12/16 00:59:54]:recv:hostname:Last Modified 2019/11/07-17:10:40
[2020/12/16 00:59:54]:recv:ld.so.cache:Last Modified 2020/12/16-00:40:20
[2020/12/16 00:59:54]:recv:odbcinst.ini:Last Modified 2019/11/27-17:03:27
[2020/12/16 00:59:54]:recv:sysconfig/network-scripts/ifcfg-ens160:Last Modified 2019/11/07-17:09:02
[2020/12/16 00:59:54]:recv:tuned/active_profile:Last Modified 2020/09/15-09:51:08
[2020/12/16 00:59:54]:recv:tuned/profile_mode:Last Modified 2020/09/15-09:51:08

/etc/hostname과 /etc/sysconfig/network-scripts/ifcfg-ens160은 분명히 다릅니다. /etc/odbcinst.ini는 msodbcsql17 설치 중에 다시 생성되었지만 diff에 따르면 내용은 동일합니다. 나머지는 역시 diff에 따르면 내용은 같습니다. 음, 바이너리인 ld.so.cache를 제외하고는 크기가 다르므로 이 파일을 수동으로 복사했는데 해결되지 않았습니다.

그래서 여기서 문제를 정확히 해결하는 것이 무엇인지 잘 모르겠습니다. 가장 흥미로운 부분: 최신 msodbcsql17이 설치된 /etc 폴더를 rsync하면 앱이 다시 작동하기 시작합니다. /etc 폴더에 뭔가 문제가 있는 것 같나요?

답변1

좋아, 좀 더 광범위한 검사를 한 후에 첫 번째 항목을 놓친 것 같습니다. odbcinst.ini는 실제로 다릅니다! 17.6 msodbc 설치 중에 한 줄이 제거되었습니다. 다시 추가한 후 즉시 작동하기 시작했습니다.

odbcinst.ini

이 줄이 왜 제거되었는지 모르겠습니다. 또는 새로 설치하는 경우 이 줄은 odbcinst.ini에 추가되지 않았습니다. 어쨌든 이제 작동합니다.

관련 정보