ORACLE -- PostgreSQL 상속표와 유사한 실현 방식
우선 ORACLE 데이터베이스에는 상속표 같은 OBJECT가 없다는 것을 명확히 할 수 있다.그러나 PostgreSQL의 계승표와 유사하고 서로 다른 테이블의 데이터가 어떤 방식으로 연결되며 공유 저장 공간의 측면에서 ORACLE 데이터베이스에도 이런 OBJECT가 존재한다.
바로 CLUSTER입니다.
먼저 ORACLE 데이터베이스는 CLUSTER에 대해 다음과 같이 정의합니다.
CREATE CLUSTER (oracle.com)
A cluster is a schema object that contains data from one or more tables.
다음은 CLUSTER가 어떻게 적용되는지 살펴보겠습니다.
-- CLUSTER
SQL> conn test/test@localhost:1521/pdb
されました。
SQL> CREATE CLUSTER object
(object VARCHAR2(23))
SIZE 512
STORAGE (initial 100K next 50K); 2 3 4
クラスタが されました。
-- CLUSTR
SQL> CREATE INDEX idx_object ON CLUSTER object;
が されました。
-- CLUSTER
SQL> CREATE TABLE object_table
CLUSTER object (OBJECT_TYPE)
AS SELECT * FROM dba_objects WHERE OBJECT_TYPE = 'TABLE'; 2 3
が されました。
-- CLUSTER
SQL> CREATE TABLE object_index
CLUSTER object (OBJECT_TYPE)
AS SELECT * FROM dba_objects WHERE OBJECT_TYPE = 'INDEX'; 2 3
が されました。
--
SQL> select count(*) from object_index;
COUNT(*)
----------
2898
SQL> select count(*) from object_table;
COUNT(*)
----------
2223
SQL> @obj
object_nameに を してください: object_index
1: select owner,object_name,object_type from dba_objects where object_name like upper('&object_name')
1: select owner,object_name,object_type from dba_objects where object_name like upper('object_index')
OWNER OBJECT_NAME OBJECT_TYPE
-------------------- -------------------------------------------------- -----------------------
TEST OBJECT_INDEX TABLE
SQL> @obj
object_nameに を してください: object_table
1: select owner,object_name,object_type from dba_objects where object_name like upper('&object_name')
1: select owner,object_name,object_type from dba_objects where object_name like upper('object_table')
OWNER OBJECT_NAME OBJECT_TYPE
-------------------- -------------------------------------------------- -----------------------
TEST OBJECT_TABLE TABLE
SQL> @ddl
object_typeに を してください: TABLE
object_nameに を してください: OBJECT_INDEX
ownerに を してください: TEST
1: select dbms_metadata.get_ddl('&object_type','&object_name','&owner') from dual
1: select dbms_metadata.get_ddl('TABLE','OBJECT_INDEX','TEST') from dual
DBMS_METADATA.GET_DDL('TABLE','OBJECT_INDEX','TEST')
--------------------------------------------------------------------------------
CREATE TABLE "TEST"."OBJECT_INDEX"
( "OWNER" VARCHAR2(128),
"OBJECT_NAME" VARCHAR2(128),
"SUBOBJECT_NAME" VARCHAR2(128),
"OBJECT_ID" NUMBER,
"DATA_OBJECT_ID" NUMBER,
"OBJECT_TYPE" VARCHAR2(23),
"CREATED" DATE,
"LAST_DDL_TIME" DATE,
"TIMESTAMP" VARCHAR2(19),
"STATUS" VARCHAR2(7),
"TEMPORARY" VARCHAR2(1),
"GENERATED" VARCHAR2(1),
"SECONDARY" VARCHAR2(1),
"NAMESPACE" NUMBER,
"EDITION_NAME" VARCHAR2(128),
"SHARING" VARCHAR2(18),
"EDITIONABLE" VARCHAR2(1),
"ORACLE_MAINTAINED" VARCHAR2(1),
"APPLICATION" VARCHAR2(1),
"DEFAULT_COLLATION" VARCHAR2(100),
"DUPLICATED" VARCHAR2(1),
"SHARDED" VARCHAR2(1),
"CREATED_APPID" NUMBER,
"CREATED_VSNID" NUMBER,
"MODIFIED_APPID" NUMBER,
"MODIFIED_VSNID" NUMBER
) CLUSTER "TEST"."OBJECT" ("OBJECT_TYPE")
SQL> @ddl
object_typeに を してください: TABLE
object_nameに を してください: OBJECT_TABLE
ownerに を してください: TEST
1: select dbms_metadata.get_ddl('&object_type','&object_name','&owner') from dual
1: select dbms_metadata.get_ddl('TABLE','OBJECT_TABLE','TEST') from dual
DBMS_METADATA.GET_DDL('TABLE','OBJECT_TABLE','TEST')
--------------------------------------------------------------------------------
CREATE TABLE "TEST"."OBJECT_TABLE"
( "OWNER" VARCHAR2(128),
"OBJECT_NAME" VARCHAR2(128),
"SUBOBJECT_NAME" VARCHAR2(128),
"OBJECT_ID" NUMBER,
"DATA_OBJECT_ID" NUMBER,
"OBJECT_TYPE" VARCHAR2(23),
"CREATED" DATE,
"LAST_DDL_TIME" DATE,
"TIMESTAMP" VARCHAR2(19),
"STATUS" VARCHAR2(7),
"TEMPORARY" VARCHAR2(1),
"GENERATED" VARCHAR2(1),
"SECONDARY" VARCHAR2(1),
"NAMESPACE" NUMBER,
"EDITION_NAME" VARCHAR2(128),
"SHARING" VARCHAR2(18),
"EDITIONABLE" VARCHAR2(1),
"ORACLE_MAINTAINED" VARCHAR2(1),
"APPLICATION" VARCHAR2(1),
"DEFAULT_COLLATION" VARCHAR2(100),
"DUPLICATED" VARCHAR2(1),
"SHARDED" VARCHAR2(1),
"CREATED_APPID" NUMBER,
"CREATED_VSNID" NUMBER,
"MODIFIED_APPID" NUMBER,
"MODIFIED_VSNID" NUMBER
) CLUSTER "TEST"."OBJECT" ("OBJECT_TYPE")
--
col OWNER for a10
col SEGMENT_NAME for a20
col SEGMENT_TYPE for a18
col SEGMENT_SUBTYPE for a10
col TABLESPACE_NAME for a10
col RETENTION for a7
set lin 200 pages 999
select OWNER,SEGMENT_NAME,SEGMENT_TYPE,SEGMENT_SUBTYPE,TABLESPACE_NAME,HEADER_FILE,HEADER_BLOCK,BLOCKS,EXTENTS,RETENTION
from dba_segments
where OWNER='TEST';
OWNER SEGMENT_NAME SEGMENT_TYPE SEGMENT_SU TABLESPACE HEADER_FILE HEADER_BLOCK BLOCKS EXTENTS RETENTI
---------- -------------------- ------------------ ---------- ---------- ----------- ------------ ---------- ---------- -------
TEST OBJECT CLUSTER ASSM USERS 12 130 96 12
TEST IDX_OBJECT INDEX ASSM USERS 12 146 8 1
OK. CLUSTER를 사용하는 두 테이블이 스토리지를 공유하고 있는지 확인할 수 있습니다.
물론 ORACLE 데이터베이스의 CLUSTER와 PostgreSQL 계승표는 같은 것이 아니다. 위의 예는 여러 장의 테이블이 물리적 저장 공간을 공유하는 측면에서 분석했을 뿐 다른 측면에서 보면 현명하다.
2021/06/18 @ Dalian
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.