출처: https://sidorl.tistory.com/10
오라클
▶ 오라클에서 스키마는 사용자(USER)가 생성한 모든 오브젝트(테이블, 인덱스, 프로시저 등)를 의미합니다. 사용자와 스키마가 같다고 보는 사람도 있는데, 엄밀히 말해서 다르다고 봐야 되겠죠. 그래서 스키마에 각각의 사용자에게 선택적인 권한을 줍니다. 오라클에서 데이터베이스는 실제 물리적인 데이터베이스를 의미합니다.
Mysql/MariaDB
▶데이터베이스와 스키마가 같은 의미로 테이블 등의 오브젝트 집합입니다.
PostgreSQL
▶Mysql의 데이터베이스가 PostgreSQL의 스키마입니다. 데이터베이스는 스키마의 상위 개념입니다.
그래서 PostgreSQL는 Mysql과 다르게 데이터베이스가 다르면 완전히 물리적인 분리로 보게 됩니다. 그래서 dblink가 아닌 일반적으로는 다른 데이터베이스의 테이블을 조회 및 조인 등을 할 수 없습니다. 다른 스키마끼리는 가능하고요.
MSSQL(SQL Server)
▶MSSQL도 스키마가 데이터베이스의 하위에 속합니다. PostgreSQL과 차이는 같은 서버의 데이터베이스를 완전히 분리하지 않는다. 그래서 다른 데이터베이스의 테이블을 조회 및 조인 가능하다.
SELECT * FROM DB명.스키마명.테이블명
이상입니다!
※사실 교재 등에서 스키마의 사전적 의미는 외부 스키마, 개념 스키마, 내부 스키마로 나누어집니다. 일반적으로 프로젝트에서 말하는 스키마는 개념 스키마를 의미합니다.
개념 스키마 :
- 개념 단계 하나의 개념적 스키마로 구성 모든 사용자 관점을 통합한 조직 전체의 DB를 기술하는 것.
- 모든 응용 시스템들이나 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술한 것으로 DB에 저장하는 데이터와 그들의 관계를 표현한 스키마
출처: https://sidorl.tistory.com/10 [잇킹 시도르:티스토리]
[붙임]
티베로에서 스키마와 테이블스페이스는 데이터베이스 구조의 중요한 개념으로, 각각의 역할과 기능이 다릅니다.
스키마 (Schema)
- 정의: 스키마는 데이터베이스 객체(테이블, 뷰, 인덱스 등)의 집합으로, 특정 사용자에 의해 소유됩니다. 즉, 스키마는 논리적인 구조로, 데이터베이스 내에서 객체를 조직하는 네임스페이스 역할을 합니다.
- 특징:
- 스키마는 데이터베이스의 구조와 제약 조건을 정의합니다.
- 하나의 사용자 계정은 하나의 스키마를 가지며, 이 스키마 내에서 다양한 객체를 생성하고 관리할 수 있습니다.
- 스키마는 물리적인 데이터 저장 방식과는 독립적이며, 데이터의 저장 방식에 영향을 미치지 않습니다.
테이블스페이스 (Tablespace)
- 정의: 테이블스페이스는 데이터베이스의 물리적 저장 구조로, 데이터 파일을 포함하여 실제 데이터를 저장하는 논리적 영역입니다. 테이블스페이스는 여러 스키마의 객체를 저장할 수 있습니다.
- 특징:
- 테이블스페이스는 데이터베이스의 물리적 저장소를 관리하는 단위로, 데이터 파일을 통해 실제 데이터를 저장합니다.
- 테이블스페이스는 시스템 테이블스페이스와 비시스템 테이블스페이스로 나뉘며, 시스템 테이블스페이스는 데이터베이스 생성 시 자동으로 생성됩니다.
- 사용자는 테이블스페이스를 생성하고, 데이터 파일의 크기 및 관리 방식을 설정할 수 있습니다.
차이점 요약
- 스키마는 데이터베이스 객체의 논리적 집합으로, 사용자에 의해 소유되고 관리됩니다. 반면, 테이블스페이스는 데이터의 물리적 저장소로, 데이터 파일을 포함하여 실제 데이터를 저장하는 구조입니다.
이러한 차이로 인해 스키마와 테이블스페이스는 데이터베이스 관리에서 서로 보완적인 역할을 하며, 데이터의 조직과 저장 방식을 효과적으로 관리할 수 있도록 돕습니다.
출처: https://bongra.tistory.com/238
회사를 다니면서 Postgres만 거의 2년간 사용하다 보니, 오랜만에 Oracle을 가지고 스키마를 생성해
사용하려 하니, 생소해서 오늘은 오라클에서의 스키마에 대해 한번 정리해보려고 한다.
오라클과 다른 데이터베이스 소프트웨어(Postgres/MySQL...)에서의 스키마는 조금 다르다.
Postgres

Oracle

이런 느낌이다.. 그래서 보통 Postgres를 사용할 때는 필요한 스키마를 생성해서 스키마에 테이블 만들고
썼었는데.. Oracle에서는 그게 안되더라..
그럼 실제로 한번 스키마를 만들어보면서 이해 해보도록 하자.
1) Oracle 사용자 생성
-- MOCHI라는 사용자를 생성
CREATE USER MOCHI IDENTIFIED BY MOCHI;
-- MOCHI 사용자에게 DBA 권한을 줌
GRANT CONNECT, RESOURCE, DBA to MOCHI;

이렇게 하고, DBeaver의 스키마를 보면...

이렇게 MOCHI라는 스키마가 생성 된 것을 알 수 있다. 이제 이 MOCHI라는 스키마에 테이블을 생성해보자.
-- MOCHI 스키마에 user_table을 CREATE함
CREATE TABLE MOCHI.user_table (
user_id varchar(100) NULL,
user_name varchar(100) NULL
);
이 쿼리를 실행시키면 어떻게 될까?

SQL Error [1950] [42000]: ORA-01950: no privileges on tablespace 'SYSTEM' 에러 발생
즉 현재 접속해 있는 계정은 'SYSTEM'인데 MOCHI라는 사용자가 소유하고 있는 MOCHI스키마에
접근하려고 하니, 해당 tableSpace에 권한이 없다 라는 내용의 에러가 발생한 것이다..
그럼 이번에는 MOCHI 사용자로 로그인을 한 뒤, MOCHI 스키마에 테이블을 생성하면 어떻게 될까?


MOCHI 사용자로 로그인하니, 그제서야 MOCHI 스키마에 테이블을 생성 할 수 있었다.
그럼 스키마를 생성할때마다 사용자를 생성해야 되는건가? 라는 생각이 든다.
맞다. Oracle에서는 스키마를 생성하려면 사용자를 생성해야 한다.
Oracle에서는 스키마를 생성하는 명령어가 CREATE USER 명령어이다..
그럼 다른 사용자의 스키마에는 접근을 할 수 없는가? 그건 또 아니다. 권한을 주면 된다.
Oracle 테이블 스페이스 접근권한 부여 명령어
--특정 사용자에게 특정 테이블스페이스에 50mb만큼 사용권한을 줌
--alter user [사용자명] quota 50M on [tableSpace명];
alter user MOCHI quota 50M on SYSTEM;
-- 특정 사용자에게 모든 테이블스페이스에 무제한 사용권한을 줌
--grant unlimited tablespace to [사용자명];
grant unlimited tablespace to SYSTEM;

나는 SYSTEM 사용자에게 모든 테이블스페이스에 대한 권한을 주었다.
이제 SYSTEM 사용자로 로그인하여, MOCHI스키마에 테이블을 만들 수 있다. 아래처럼

이렇게 오늘은 오라클의 스키마가 다른 데이터베이스들과 어떻게 다른 지에 대해서 알아보았다.
솔직히 데이터베이스들간의 CRUD는 다 비슷하고, 사용 가능한 함수만 조금 다르다 뿐이라고 생각했는데,
스키마도 이렇게 다르다는 건 처음 알았다. 공부 할 게 아직도 많구나..
'컴퓨터 활용(한글, 오피스 등) > 기타' 카테고리의 다른 글
| 짙은 회색과 잘 어울리는 배색 (0) | 2025.04.21 |
|---|---|
| 프로세스 매핑 가이드: 정의, 작성 방법, 활용 팁 (1) | 2025.04.15 |
| JTrac 설치하기 개발 (0) | 2025.04.11 |
| Windows Redmine 수동 구축 하기 (0) | 2025.04.11 |
| 리눅스 사용자 계정 생성 및 권한 부여 (0) | 2025.04.11 |