이미 설치되어 있는 인터넷이 되지 않는 환경의 오라클 서버에 공간 데이터를 다루어야 하는 경우가 생겨버림.
오라클을 설치할때 spatial을 설치했어야 했지만, 이미 늦었고, 현재 운영중인 오라클서버라 재설치는 무리가 있음.
열심히 구글링을 해보고 spatial 설정을 복구하는 방법도 진행을 해보았으나, 모든 시도가 실패로 돌아갔는데, 내가 원하는 과정을 담고 있는 듯한 블로그를 발견함.
2015년의 게시글이였으나, 오라클 버전 11g에 대한 Spatial 설치가 명시되어 있어, 시도를 해보았다.
SQL > select comp_id, version, status from dba_registry where comp_id in ('JAVAVM', 'ORDIM', 'XDB');
MDSYS 계정이 없으면 생성한다.
MDSYS 계정은 지리 정보 저장을 위한 Oracle Spatial 기능을 위한 계정이다.
SQL> create user MDSYS identified by default tablespace SYSAUX account lock;
-- MDSYS 사용자 생성. 비밀번호를 로 설정하고, 기본 테이블스페이스를 SYSAUX로 지정.
-- 생성 후 계정을 잠금 상태로 설정하여 사용을 제한.
SQL> @?/md/admin/mdprivs.sql
-- Oracle Spatial에 필요한 권한을 MDSYS 사용자에게 부여하기 위해 스크립트 실행.
SQL> connect / as sysdba
-- SYSDBA 권한으로 데이터베이스에 접속.
SQL> spool spatial_installation.lst
-- 설치 과정을 기록하기 위해 로그 파일(spatial_installation.lst)에 스풀링(spooling) 시작.
SQL> @?/md/admin/mdinst.sql
-- Oracle Spatial을 설치하기 위한 스크립트를 실행. 이 스크립트는 MDSYS 스키마에 필요한 객체들을 생성 및 설정.
SQL> spool off
-- 스풀링 종료. spatial_installation.lst 파일에 모든 출력이 기록됨.
SQL> alter user MDSYS account lock;
-- 설치 완료 후 MDSYS 사용자의 계정을 다시 잠금 상태로 설정하여 보안을 유지.
SQL> connect / as sysdba
-- SYSDBA 권한으로 데이터베이스에 다시 접속.
SQL> set serveroutput on
-- 서버 출력(server output)을 활성화하여 PL/SQL 블록에서 DBMS_OUTPUT.PUT_LINE 등을 통해 출력을 표시할 수 있도록 설정.
SQL> execute validate_sdo;
-- Oracle Spatial 설치를 검증하는 PL/SQL 프로시저 실행. 정상적으로 설치되었는지 확인.
SQL> select comp_id, control, schema, version, status, comp_name from dba_registry where comp_id='SDO';
-- DBA_REGISTRY 뷰에서 'SDO' (Oracle Spatial)의 설치 상태를 확인.
-- 설치된 버전, 상태 및 관련 스키마 등의 정보를 조회.
SQL> select object_name, object_type, status from dba_objects where owner='MDSYS' and status <> 'VALID' order by object_name;
-- MDSYS 스키마에서 상태가 'VALID'가 아닌 객체들을 조회.
-- 이 명령어는 설치 중 문제가 발생했는지 여부를 판단하는 데 사용.
SQL> execute validate_sdo;
PL/SQL procedure successfully completed.
-- 위 예시는 Oracle Spatial이 성공적으로 설치되었음을 나타내는 출력 예시입니다.
해당 블로그 덕분에 해결이 될 수 있었다.