나는 업무 중에 Oracle Database(이하, Oracle)를 직접적으로 사용하지는 않는다. 간접적으로나마 Oracle을 사용 중인데, 그마저도 이젠 더 사용하지 않게 될 것 같다. 그럼에도 Oracle에 대해 알아보기로 결심한 건, Oracle의 내부 동작이 굉장히 복잡하고, 체계적이기 때문에 이번 기회에 공부해 놓으면, 다른 DB나 데이터 처리 동작 관련하여 더 잘 이해할 수 있게 될 것 같기 때문이다.
전문가가 아니라, Oracle의 내부 동작은 거의 모르고, Oracle 동작에 대한 별도의 서적을 찾지 못해, Release Note를 보면서 공부하기로 했다.
Introduction
[Database]
- Database는 Application 들이 사용할 수 있게, information을 수집하고, 저장하고, 검색하기 위해 존재한다.
- Database Management system(DBMS)은 위의 Database의 목적을 충족할 수 있도록 조정하는 소프트웨어이다.
[Relational Model]
- 1970년에 "A Relational Model of Data for Large Shared Data Banks"에서 E.F.Codd란 사람이 수학 집합론에서 찾아 하여 relational model 개념을 제안했고, 이것이 요즘 Database 들에서 채택되어 relational database의 형태로 사용 중이다.
- relational model은 아래와 같은 특징을 갖는다.
- Structure : Database에 저장 및 접근 가능하도록 잘 정의된 object
- Operations : Application이 data를 잘 조작할 수 있도록 명확하게 정의된 action
- Integrity rules : 무결성 규칙을 지키면서, Database 직접을 제어
[RDBMS]
- Relational model을기반으로, relational database management system(RDBMS)가 만들어졌다. RDBMS는 데이터를 database 안에 넣고, 데이터를 저장하고, application이 조정 가능하도록 데이터를 검색할 수 있도록 한다.
- RDBMS는 2개 type의 operation을 지원한다.
- Logical Operation : Application이 필요한 내용을 지정하는 Operation. 즉, application에서 데이터를 요청하거나, 데이터베이스에 정보를 추가하는 경우
- Physical Operation : RDBMS가 어떻게 작업을 수행할지를 결정하고, 그 작업을 수행하는 것. 즉, application이 요청한 작접을 처리하기 위해, 어떻게 데이터를 찾고, 어느 메모리에서 읽을 것인지 등등의 과정을 포함함. Application 단에서는 해당 작업을 신경 쓸 필요가 없어야 함.
- Oracle Dtabase도 1977년 개발된 RDBMS이다.
Oracle 특징
[Schema 구조]
- 앞서 언급한 대로, RDBMS에서는 Logical Operation과 Physical Operation을 분리하기 위해, Logical Data Structure와 Physical Data Storage는 분리되어야 한다.
- 이를 위해, Oracle Database는 logical data structure들의 집합인 schema를 사용하고, 각 user들이 schema를 소유하는 방식을 사용한다.
- Database는 다양한 schema를 지원하는데, 가장 중요한 것은 Table과 Index이다.
- Table : Column과 Row로 이루어진 2D 형태의 데이터. user는 Table에 무결성 제약 조건을 지정할 수 있다.
- Index : Data 검색을 빠르도록, row의 위치 정보를 일정 규칙 형태로 가지고 있는 것. Table마다 하나 이상의 index를 생성할 수 있다. Index는 logical 영역이기 때문에, 실제 데이터의 위치를 변경하지 않음. 따라서, Index를 지워도 다른 부분에 영향을 미치지 않음.
[Transaction 관리]
- Oracle database는 여러 user가 사용할 수 있도록 설계되었다. 따라서, database는 여러 user의 요청을 다른 user들의 data에 영향을 미치지 않도록 유지하면서, 동시에 처리해야 한다.
- 이를 위해, Oracle에서는 Transaction의 개념을 사용한다. Transaction은 1개나 그 이상의 SQL 질의문에 대한 logical, atomic unit이다.
- RDBMS는 이러한 transaction을 database에 모두 적용(commit)되거나, 취소(rollback) 되도록 할 수 있어야 한다. 즉, data 처리를 위한 여러 SQL들을 묶음으로 묶어, 데이터 무결성을 유지하는 것이다. 갑작스러운 장애로 인해, transaction 내에 존재하는 하나의 SQL이 수행되지 않는다면, database는 해당 trasaction에 속한 모든 SQL을 rollback 하여 데이터 무결성을 유지한다.
[Data 동시성]
- Data 무결성을 유지하기 위해, DBMS는 데이터 동시성에 대한 처리가 필요하다.
- Oracle에서는 OS나 C언어처럼,Lock의 개념을 사용하여 데이터 동시성을 제어한다.
- Lock은 공유 리소스에 접근하는 transaction 간에 충돌을 방지하여, 데이터 무결성을 보장하면서 최대한의 동시 접근을 허용한다.
[Data 일관성]
- Data 일관성은 database에 접근한 사용자가 data에 대해 일관된 내용을 볼 수 있어야 하는 것을 의미한다
- Oracle database에서는 항상 statement-level의 read 일관성을 시행한다. 이것은 하나의 query가 반환하는 데이터가 단일 시간 시점에서 commit 되고, 일관성을 보장한다는 것을 의미한다.
- Database는 tansaction 수준에서 read 일관성을 제공한다. 이 경우에는 transaction 내의 문장이 동일한 시간 시점에서 data를 볼 수 있다.
→ Sub Query를 이용한 SQL이 처리에서 각기 다른 sub query에서 동일 데이터를 조회했을 때, 실제 physical 단위의 수행 시점에 따라 data가 달라지지는 않는다는 것을 의미한다.
Oracle Database 아키텍처
- database server가 information 관리에 키다.
- 일반적으로 server는 위에서 언급한 Oracle 특징인, 여러 사용자가 동시에 동일 데이터에 안정적으로 접근할 수 있도록 대량의 데이터를 관리해야 한다.
- database server는 또한, 보안적인 관점과 failure recovery에 대해 효과적인 solution을 제공해야 한다.
[Database and Instance]
- Oracle Database Server는 하나의 database와 한 개 이상의 database instance로 구성된다.
- 일반적으로 database와 instance는 밀접하게 연관되어 있어, Oralce database는 둘을 포함하는 말이지만, 엄격하게 구별하면 다음과 같다.
- Database : Database는 data 저장을 목적으로 disk 상에 위치한 file들의 집합을 의미한다. 이 file들은 실제로 data를 저장한다. database file은 database와 독립적으로 존재할 수 있다.
- Database instance : Database file을 관리하는 역할을 한다. Instance는 공유 메모리 영역인 system global area(SGA)와 background process들을 포함한다. instance는 datavbase file과 독립적으로 존재한다.
- Oracle Database와 instance의 구조도는 아래와 같다.
- Client의 요청에 의해, SQL과 Transactuion을 처리하는 역할을 하는 Server Process가 존재하는데. 이 sever process가 사용하는 메모리 공간이 program global area(PGA)이다.
엄격하게 구분하자면, Oracle database의 Physical 구조와 Logical 구조를 어떻게 연결하느냐에 따라 2가지 아키텍처가 존재하는데, 각가 Multitenant Architecture과 Sharding Architecture이다.
[Multitenant Architecture]
- Multitenant Architecture는 Oracle database가 하나의 physical database에서 다중 테넌트 공유할 수 있도록 하는 것이다.
※ 테넌트란? : Database 시스템 내에서 독립적으로 관리되는 하나의 사용자 또는 Application을 나타냄. 다중 테넌트에서는 여러 테넌트가 하나의 Database 시스템을 공유하지만, 각 테넌트는 자체 데이터 및 application을 logical 하게 격리하여 사용함.
- 이 아키텍처의 가장 큰 장점은 장점은 관리 machine 수가 줄어든다는 것이다. 장점을 세부적으로 보면 다음과 같다.
- 하드웨어 비용 감소 : 여러 대 physical server에서 운영되는 여러 database를 단일 machine의 단일 database로 통합 가능
- Data와 Code 이동이 쉬움 : 단일 machine에 존재하기 때문에, 데이터 마이그레이션에 추가적인 network I/O 등이 들지 않는다.
- Physical Database 관리 편이 : 관리 machine의 수가 줄어, 관리가 용이하다.
- Data와 Code를 분리
- 권한과 역할 분리
[Sharding Architecture]
- Oracle Sharding은 여러 Oracle database들에 수평적인 분할을 통해 database를 scaling 하는 방법이다. Application 단에서는 이 database pool을 하나의 logical database로 인식한다.
- 이 아키텍처의 장점은 선형 확장과 장애 격리이다.
- Sharding 아키텍처에서 각 database는 고유한 server에 호스팅 되며(physical 분리) 각 database는 다른 machine이다. 이때 각 database를 shard라 부린다.
- 수평 분할 시, database 테이블을 여러 shard에 각각 나눠 보관하는데, 이러한 방식으로 분할된 table은 shared table이라고 부른다.
Oracle Database Storage 구조
- Database 저장 구조는 Dataase를 Physical 및 Logical 관점에서 고려할 수 있다.
- Physical 저장소와 Logical 저장소는 분리되어 있기 때문에, Pysical 저장소를 관리할 때, Logical 저장소 구조에 영향을 미치지 않고 관리 가능하다.
[Physical Storage 구조]
- Physical database 구조는 data를 저장하기 위한 file들이다.
- CREATE DATABASE를 입력하는 순간 아래의 file들이 생성된다.
- Data File : 모든 Oracle Database는 database의 data를 가지고 있는 하나 이상의 physical data file들을 포함한다. Logical Database 구조는 Data File 형태로 저장된다.
- Control File : 모든 Oracle Dtabase는 control file을 가지고 있다. control file은 database의 physical 구조를 정의하는, database name 등이나 위치정보 같은 metadata를 포함한다.
- Online redo log file: databse에 발생하는 모든 변경 사항을 기록하는 File이다. Transaction Log 기록 등을 보관한다.
- Parameter File : Database server의 설정과 동작을 제어하는 데 사용한다.
- Networking File : Database server와 client 간 통신을 구성하는 데 사용한다.
- Backup File : Database 복구를 지원하기 위해 사용된다. 일정 간격으로 Database의 복사본을 저장한다.
- File에는 Offline File과 Online File이 있는데, 두 용어는 File의 상태를 나타낸다.
- Online File : database가 활성화되어 잇고, 접근 가능한 상태에서 사용되는 File. Database의 일부로 사용되고, Application이 Server와 상호작용하고 Data를 읽고 쓸 수 있는 파일. Database Table, Index, View, Online Redo log File 등이 해당됨.
- Offline File : Database가 사용 중이 아니거나, 접근 불가능한 상태에서 사용되는 File. 주로 Backup, 복구, Data 이동, File 관리 등의 작업을 수행할 때, Database File을 일시적으로 Offline 상태로 전환할 때 사용된다. Backup File, Archived Redo log file 들 중, 이미 사용된 것은 Offline File에 해당됨.
[Logical Storage 구조]
- Logical Storage 구조는 Oracle Database가 disk space를 잘 사용할 수 있도록 control 한다.
- Logical Storage 구조는 다음을 포함한다.
- Data Block :가장 작은 저장 단위. 하나의 Datablock은 Disk 상의 특정 바이트 개의 영역으로 할당됨.
- Extent : 논리적으로 연속적인 Data Block의 특정 개수. 한 번의 할당으로 얻은 것으로 특정 유형의; 정보를 저장하는 데 사용됨. Data의 물리적, 저장 관리를 위한 단위로 사용됨.
- Segments : user object, undo data, 임시 data 등을 할당하기 위한 extent들의 집합
- Tablespaces : Database를 Logical Storage 단위로 분할한 것을 의미함. Tablespace는 segment의 logical container로, 각 tablespace는 적어도 하나의 data file로 구성됨. Tablespace를 사용하여, data를 조직하고, segment를 배치하여 database의 성능과 관리 최적화가 가능함.