서버의 각 Oracle 홈에 설치된 Oracle 버전을 프로그램에서 확인해야합니다. 아직 홈에 생성 된 데이터베이스가 없을 수 있으므로 데이터베이스 외부 (즉, 데이터베이스에 연결하지 않고)를 수행 할 수 있어야합니다. 또한 원격 프로그램에서이 작업을 수행 할 수있는 것이 좋습니다.

이는 .Net (중요한 경우 C #)을 실행하는 Windows 프로그램에서 가져온 것입니다.

I 현재 원격 레지스트리 키 (이 기술 사용 : https://stackoverflow.com/questions/1566547/how-to-read-remote-registry-keys )를 읽고 있으며, 다음에 따라 모든 Oracle 홈을 찾습니다. 이 방법 . 이것은 잘 작동하지만, 해당 키를 둘러 보았고 정확한 버전 / 릴리스에 대한 정보를 보지 못했습니다.

물론 Oracle 홈 자체의 이름은 1) 신뢰할 수있는 지표가 아니며 2 )에 정확한 버전 / 릴리스가 없습니다 (예 : “10.2.0.4.0”). 기본적으로 Oracle Universal Installer가 설치된 제품 버튼에서 무엇을 알려주는지 알아낼 방법을 찾고 있습니다.


모든 서버에서 Windows 2003-2008을 실행합니다.

댓글

  • 어려울 것입니다. Oracle Universal 설치 프로그램을 살펴보십시오. 각 구성 요소에는 고유 한 버전이 있습니다. 전체 Oracle Client 설치에서 버전을 결정할 수는 없습니다. 적어도 모든 숫자에 대해서는 아닙니다.
  • 나는 tnaping과 Sqlplus가 실제 설치 버전을 제공한다고 생각합니다. Windows에서는 명령 프롬프트를 사용하여 tnsping의 출력을 스풀링 할 수 있습니다. C:\tnsping>>E:\tnspingoutput.txt. 그런 다음 고급 언어를 사용하여 텍스트 파일에서 버전을 추출합니다.
  • @WernfriedDomscheit 첫째, 클라이언트 버전이 아니라 서버 버전에 대해 묻습니다. 둘째, 당신은 그것을 결정할 수 있습니다. 그것은 가정 아래의 마지막 수준 하나입니다 (개별 구성 요소는 하위 수준의 자식입니다). 항상 Universal Installer로 수동으로 수행합니다. 저는 ' 항상 수동으로 수행하는 데 시간을 낭비하고 싶지 않습니다.
  • 서버가 Linux / Unix (즉, 나는 대다수라고 생각한다)? 그렇다면 C # 프로그램이나 레지스트리 읽기는 도움이되지 않습니다.
  • @WernfriedDomscheit 제 경우에는 모두 Windows 서버입니다. 제 질문에서 명확히하겠습니다.

답변

데이터베이스 홈이 제대로 설치된 경우 중앙 인벤토리 그들에 대한 목록이 있습니다. Windows의 중앙 인벤토리는 C:\Program Files\Oracle\Inventory에 있습니다. Linux / UNIX 플랫폼에서 중앙 인벤토리의 위치는 /etc/oraInst.loc에서 찾을 수 있습니다. 인벤토리의 ContentsXML\inventory.xml에는 XML 형식으로 설치된 주택 목록이 있습니다. 예 :

<INVENTORY> <VERSION_INFO> <SAVED_WITH>12.1.0.2.0</SAVED_WITH> <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER> </VERSION_INFO> <HOME_LIST> <HOME NAME="OraGI12Home1" LOC="/opt/oracle/grid12102" TYPE="O" IDX="1"/> <HOME NAME="OraDB12Home1" LOC="/opt/oracle/base/product/db12102ee" TYPE="O" IDX="2"/> <HOME NAME="OraDb11g_home1" LOC="/opt/oracle/base/product/db11204ee" TYPE="O" IDX="3"/> </HOME_LIST> </INVENTORY> 

이 목록을 구문 분석하고 opatch를 사용하여 자세한 정보를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

/opt/oracle/grid12102/OPatch/opatch lsinventory -oh /opt/oracle/grid12102 -details /opt/oracle/base/product/db12102ee/OPatch/opatch lsinventory -oh /opt/oracle/base/product/db12102ee -details /opt/oracle/base/product/db11204ee/OPatch/opatch lsinventory -oh /opt/oracle/base/product/db11204ee -details 

Windows 예제는 다음과 같습니다.

C:\oracle\base\product\12.1.0\dbhome_1\OPatch\opatch lsinventory -oh C:\oracle\base\product\12.1.0\dbhome_1 -details 

물론 서버에서 위의 내용을 실행해야합니다.

적절한 설치가있는 최상의 시나리오입니다. 최악의 시나리오는 가정에서 별도의 인벤토리를 사용하거나 인벤토리를 전혀 사용하지 않고 서버의 모든 파일 시스템에서 가능한 Oracle 설치를 검색해야한다는 것입니다.

답변

Oracle 버전을 표시하는 또 다른 방법은 dbv 유틸리티를 호출하는 것입니다. 이것은 데이터베이스 서버 설치에서만 작동합니다. 이 도구의 버전은 항상 데이터베이스 버전과 일치해야합니다. 먼저 적절한 환경 (PATH; ORACLE_HOME, LD_LIBRARY_PATH)을 설정해야합니다. 그러면 다음과 같은 내용이 표시됩니다.

 $ $ORACLE_HOME/bin/dbv DBVERIFY: Release 12.1.0.2.0 - Production on Sun Jan 01 12:00:00 2016 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. Keyword Description (Default) ---------------------------------------------------- FILE File to Verify (NONE) START Start Block (First Block of File) END End Block (Last Block of File) BLOCKSIZE Logical Block Size (8192) LOGFILE Output Log (NONE) FEEDBACK Display Progress (0) PARFILE Parameter File (NONE) USERID Username/Password (NONE) SEGMENT_ID Segment ID (tsn.relfile.block) (NONE) HIGH_SCN Highest Block SCN To Verify (NONE) (scn_wrap.scn_base OR scn) 

첫 번째 줄에는 릴리스가 포함됩니다.

댓글

  • 로컬에서 작동 가능해 보입니다. 원격으로 호출 할 수있는 내장 된 방법이 있습니까?
  • 아니요. ' 그렇게 생각하지 않습니다. Linux 시스템에서는 ssh를 사용하여 서버에 로그인하려고합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다