오라클의 SID는 데이터베이스 인스턴스의 고유 식별자다. 식별자라는 건 다른 RDBMS인 MYSQL, MSSQL, PostgreSQL 등 모두 있는 건데 유독 오라클에선 SID 라는 개념을 많이 헷갈려하는 거 같다.
왜냐하면 첫 줄에서 언급한 것처럼 오라클은 인스턴스(instance)라는 개념이 있기 때문이다.
인스턴스를 쉽게 설명하면 하나의 서버 장비에 있는 여러 개의 오라클 프로세스를 의미한다.
오라클은 하나의 장비에 여러 개의 프로세스를 올릴 수 있다. 이게 중요하다.
예를 들면 1521 포트에는 orcl 이라는 SID로 인스턴스를 실행하고 1522 포트에는 orcldev 라는 SID로 인스턴스를 실행할 수 있는 거다.
그럼 애플리케이션이 jdbc 연결을 할 때 같은 서버 장비를 바라보고 1521 포트로 연결할 수도 있고 1522 포트로도 연결할 수 있다.
이건 다른 RDB와 큰 차이다. 다른 RDB는 하나의 서버에 하나의 프로세스만 실행한다. 그리고 그 안에서 각각의 독립된 데이터베이스를 구성할 뿐이다.
그런데 오라클은 애초에 프로세스부터 독립시킨다. 여기서 각 인스턴스를 구분짓는 식별자가 SID(System Identifier)다.
jdbc:oracle:thin:@hostname:1521:orcl
jdbc:oracle:thin:@hostname:1522:orcldev
그리고 SID 안에서는 데이터베이스 대신 유저 개념을 사용한다. user1 라는 유저를 생성하면 user1 라는 섹션 안에 독립된 테이블을 구성할 수 있다.
요약하면 다른 RDB에서는 하나의 프로세스 안에 독립된 데이터베이스가 여러 개 운영되는데 오라클은 여러 개의 프로세스 안에 여러 사용자를 운영한다. 이 차이 때문에 다른 RDB를 쓰다가 오라클을 쓰면 SID가 헷갈리는 것이다. SID는 다른 RDB의 데이터베이스와 같은 개념이 아니다.