클라이언트로부터 하드 드라이브의 이미지 파일을 받았고 이 파일에서 데이터베이스를 추출하고 싶습니다. 클라이언트는 이미지가 생성된 서버에 데이터베이스가 설치된 것 외에는 어떤 세부 정보도 모릅니다.
Informix DBS가 설치된 UNIX 시스템이라는 것을 알았지만 데이터베이스 파일을 찾을 수 없습니다. Informix의 버전이 무엇인지는 잘 모르겠지만 설치된 지 15년쯤 된 것 같습니다.
이미지에서 부팅할 수 없습니다. 파일만 보고 있어요.
informix 데이터베이스 파일에 확장자가 있습니까? 뭐가 될수 있었는지? 데이터베이스 파일을 식별하는 방법에 대한 다른 팁이 있습니까?
답변1
여기에는 많은 질문이 있습니다. 귀하의 상황에 따라 중요한 순서대로 답변해 드리겠습니다.
하드 드라이브 이미지에서 데이터베이스 추출하기 나는 여러분이 실제 데이터, 즉 다양한 테이블, 해당 행과 열 등에 관심이 있다고 가정합니다.
informix
최신 데이터베이스 시스템은 데이터를 플랫 파일이나 ASCII 형식으로 저장하지 않기 때문에 실제로 소프트웨어 자체가 없으면 거의 불가능합니다. 단일informix
인스턴스에는 많은 데이터베이스가 있을 수 있으며, 각 데이터베이스에는 데이터가 포함된 많은 테이블이 있으며 모두 독점 바이너리 형식으로 저장됩니다! 단일 테이블을 분할하여 여러 "파일"에 저장하는 것도 드문 일이 아닙니다. 따라서 데이터가 포함된 관련 파일을 찾았더라도 모든 데이터를 검색하지 못할 수도 있습니다. 당신이 물어봐야 할 질문은 이 운동의 궁극적인 목표가 무엇인가 하는 것입니다.파일 이름 및 확장자의 데이터베이스는
informix
"공백"이라는 용어로 알려진 저장 블록 파일 내에 바이너리 형식으로 저장됩니다informix
. 이러한 파일에는 확장자가 필요하지 않으며 파일 이름은 사용자(데이터베이스 관리자)가 지정합니다. 따라서 사용자가 확장명을 지정했을 수도 있고 지정하지 않았을 수도 있습니다.파일 찾기 팁 파일을 찾는 방법에는 여러 가지가 있습니다.
informix
소프트웨어 바이너리/실행 파일 및 구성 파일의 위치를 결정하는 것부터 시작하십시오 . 설치informix
디렉터리는 기술적으로 $INFORMIXDIR 이라고 합니다informix
. 드라이브에서oninit
또는이라는 바이너리 파일을 검색합니다onstat
. 이 파일은 사용자 루트 또는 에 소유되어야 합니다informix
.$INFORMIXDIR/bin
이제 우리는 위치를 알고 있습니다$INFORMIXDIR
. 가다$INFORMIXDIR/etc
. 여기에 인스턴스 구성 파일이 있습니다. 구성 파일은 특정 이름이나 확장자를 가질 필요는 없지만 파일 이름을onconfig
또는 와 유사하게 유지하는 것이 일반적입니다oncfg
. 또한 forROOTNAME
및 inside를ROOTPATH
통해$INFORMIXDIR/etc
구성 파일과 루트를 찾을 수도 있습니다.dbspace: grep -rn 'ROOTNAME\|ROOTPATH' *
루트dbspace
는 시스템 데이터베이스가 생성되는 블록 파일이자 사용자 데이터베이스가 생성되는 기본 파일이기도 합니다(명시적으로 다른 것으로 설정되지 않은 경우)dbspace
. 프로필을 확인한 후에는 더 깊이 파고들 수 있습니다.
답변2
Pradeep의 답변을 완성하려면 $INFORMIXDIR/etc가 무엇인지 알아낸 후에는 onconfig 및 oncfg 파일이라는 두 개의 파일이 필요합니다. 둘을 혼동하지 마십시오.
onconfig는 Informix 데이터베이스 구성 파일입니다. 불행하게도 이 파일은 무엇이든 불릴 수 있습니다. 일반적으로 onconfig.DBSERVERNAME이라고 합니다. 이 파일에는 DBSERVERNAME(인스턴스의 고유 이름) 및 SERVERNUM(인스턴스의 고유 번호)이라는 두 가지 구성이 있습니다.
oncfg_*.* 파일에는 인스턴스에서 사용하는 dbspace, 블록 및 논리 로그에 대한 정보가 포함되어 있습니다. 이 파일은 데이터베이스에서 dbspace, 블록 및 로그가 변경됨에 따라 데이터베이스 인스턴스가 초기화되고 업데이트될 때 생성됩니다. 이 파일의 명명 규칙은 oncfg_DBSERVERNAME.SERVERNUM이며 따라야 합니다. 모든 oncfg_*에 대해 ls를 수행하면 서버의 모든 인스턴스에 대한 잠재적인 목록이 제공됩니다.
oncfg_* 파일이 있는 특정 인스턴스에 대한 데이터 파일(청크)을 가져오려면 다음 명령을 실행합니다.
grep "^Chunk " $INFORMIXDIR/etc/oncfg_DBSERVERNAME.SERVERNUM | awk '{ print $12 }'
이 목록에서 첫 번째 파일은 위에서 Pradeep이 언급한 ROOTDBS입니다.
서버에서 실행 중인 인스턴스에 대한 구성 파일(onconfig 파일)을 가져오려면 다음을 실행합니다.
grep ^DBSERVERNAME * | grep DBSERVERNAME
이게 도움이 되길 바란다. ^_^
PS DBSERVERNAME 또는 SERVERNUM은 환경 변수가 아니기 때문에 앞에 "$"를 넣지 않았습니다. 이는 onconfig 파일의 구성 매개변수입니다. 파일의 실제 값으로 바꾸십시오. 건배!