IF [NOT] EXISTS 절
·
Oracle/SQL
Oracle 23c부터 일부 DDL 문에 IF [NOT] EXISTS 절을 사용할 수 있습니다.DDL object creation, modification, and deletion now support the IF EXISTS and IF NOT EXISTS syntax modifiers. This enables you to control whether an error should be raised if a given object exists or does not exist. The IF [NOT] EXISTS syntax can simplify error handling in scripts and by applications. 아래와 같이 DROP TABLE, CREATE TABLE, ALTER TAB..
UPDATE 문, DELETE 문에 대한 직접 조인
·
Oracle/SQL
Oracle 23c부터 UPDATE 문과 DELETE 문에 대한 직접 조인이 가능해졌습니다.Join the target table in UPDATE and DELETE statements to other tables using the FROM clause. These other tables can limit the rows changed or be the source of new values. Direct joins make it easier to write SQL to change and delete data. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;DROP TABLE t2 PURGE;CREATE TABLE t1 (c1, c2) AS SELECT R..
어노테이션 (Annotation)
·
Oracle/Administration
Oracle 23c에 오브젝트의 메타데이터를 관리할 수 있는 어노테이션 (Annotation) 기능이 추가되었습니다.Annotations enable you to store and retrieve metadata about database objects. These are name-value pairs or simply a name. These are freeform text fields applications can use to customize business logic or user interfaces. Annotations help you use database objects in the same way across all applications. This simplifies development..
IOT에 대한 Advanced LOW 압축
·
Oracle/Administration
Oracle 23c부터 IOT에 대한 Advanced LOW 압축이 가능해졌습니다. 이전 버전까지는 IOT에 대해 Prefiex 압축만 가능했습니다.An index-organized table (IOT) is a table stored in a variation of a B-tree index structure where rows are ordered by primary key. IOTs are useful because they provide fast random access by primary key without duplicating primary key columns in two structures - a heap table and an index. In earlier releases, IOTs ..
Inline LOB의 최대 크기 변경
·
Oracle/Administration
Oracle 23c부터 Inline LOB의 최대 크기를 8000 바이트로 설정할 수 있습니다.LOB values are stored either in the table row (inline) or outside of the table row (out-of-line). The maximum size of the inline LOB is increased to 8000 bytes, allowing larger LOB values being stored inside a row. Earlier, the maximum size was 4000. This provides better input-output performance while processing LOB columns. You can experience..
파티션 high_value_clob, high_value_json 칼럼 추가
·
Oracle/Administration
Oracle 23c에 파티션의 상위 값을 조회할 수 있는 CLOB 타입의 high_value_clob 칼럼과 JSON 타입의 high_value_json 칼럼이 추가되었습니다. 이제 불편한 LONG 타입의 high_value 칼럼을 사용하지 않아도 됩니다.All data dictionary views holding partitioning-related metadata, e.g. [ALL_TAB_PARTITIONS], have two additional columns representing the high value (boundary) information of partitions and subpartitions in JSON and CLOB format. Providing the high value (b..
Oracle Database 23c Free - Developer Release 설치
·
Oracle/Installation
Oracle Database 23c Free - Developer Release(이후 23c Free)는 Docker 컨테이너 이미지, VirtualBox VM, 리눅스 RPM 파일 형식으로 제공되고 있습니다. 아래 링크에서 설치에 필요한 파일과 관련된 정보를 찾을 수 있습니다.Downloads – Oracle VM VirtualBoxOracle Linux ISOs | Oracle, Software. Hardware. Complete. - OracleLinux-R8-U7-x86_64-dvd.isoOracle Database 23c Free Downloads - oracle-database-free-23c-1.0-1.el8.x86_64.rpmInstallation Guide for Linux x86-64O..
서브쿼리 팩토링 절과 log file sync 이벤트
·
Oracle/Performance
서브쿼리 팩토링 절(WITH 절)이 materialize되면 redo가 발생하고 이로 인해 log file sync 이벤트 대기가 발생할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1) AS SELECT ROWNUM FROM XMLTABLE ('1 to 10000000'); 아래 쿼리는 서브쿼리 팩토링 절이 materialize되었습니다. 실행 계획 2번에 LOAD AS SELECT (CURSOR DURATION MEMORY) 오퍼레이션이 표시됩니다. 물리 I/O가 발생하지 않았으므로 12.2 버전에 추가된 In-Memory CDT 기능이 동작한 것을 유추할 수 있습니다. -- 2 WITH w1 AS (..
오브젝트 ID
·
Oracle/Administration
Segment 오브젝트는 오브젝트 ID가 순차적으로 부여되고, Non-segment 오브젝트를 오브젝트 ID가 재사용될 수 있는 것으로 보입니다. 참고로 이 동작에 대한 오라클 포럼의 Regarding object_id in Oracle 글에도 명확한 이유가 설명되어 있지 않습니다. 아래는 Segment 오브젝트인 테이블로 테스트한 결과입니다. 오브젝트 ID가 순차적으로 부여되는 것을 확인할 수 있습니다. -- 1-1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER); -- 1-2 SELECT object_id, data_object_id FROM user_objects WHERE object_name = 'T1'; OBJECT_ID DATA_OBJECT_ID ---..
V$SQL 뷰의 program_id, program_line# 칼럼
·
Oracle/Performance
V$SQL 뷰의 program_id 칼럼은 SQL 문이 포함된 PL/SQL 오브젝트의 오브젝트 ID, program_line# 칼럼은 PL/SQL 오브젝트에서 SQL 문이 위치한 라인 번호를 표시합니다. SQL 문이 포함된 PL/SQL 오브젝트를 식별할 수 있는 유용한 정보지만 PL/SQL 오브젝트가 재생성되는 경우 부정확한 정보가 표시될 수 있습니다. 테스트를 위해 아래와 같이 p1 프로시저를 생성하고 프로시저를 실행하겠습니다. -- 1-1 CREATE OR REPLACE PROCEDURE p1 IS v1 NUMBER; BEGIN SELECT /*+ TEST */ 1 INTO v1 FROM DUAL; END; / -- 1-2 EXEC p1; 아래와 같이 V$SQL 뷰의 program_id 값으로 SQL..
SQL*Net more data from client 이벤트와 SDU 설정
·
Oracle/Performance
SQL*Net more data from client 이벤트는 클라이언트로부터 데이터 수신을 대기할 때 발생합니다. 주로 바인드 변수 값의 크기가 큰 INSERT 문에서 발생하지만, 구문의 크기가 큰 쿼리에서도 발생할 수 있습니다.The server is waiting on the client to send more data to its client shadow process, in an already initiated operation. 아래는 구문의 크기에 따라 SQL*Net more data from client 이벤트가 발생하는 횟수를 테스트한 결과입니다. 첫 번째는 8 KB 단위로 데이터를 전송하고 그 이후부터는 32 KB 단위로 데이터를 전송한다는 것을 유추할 수 있습니다.-- 1+------..
SCAN과 LOAD_BALANCE에 대한 접속 테스트
·
Oracle/Administration
부하 테스트 환경에서는 로드 밸런싱 관점에서 SCAN(Single Client Access Name)을 사용하는 것보다 LOAD_BALANCE 파라미터를 ON으로 설정하는 편이 유리할 수 있습니다. SCAN과 LOAD_BALANCE에 대한 접속 테스트를 위해 tnsnames.ora 파일을 아래와 구성하겠습니다. TNS_SCAN은 SCAN IP을 사용하고, TNS_LB는 LOAD_BALANCE 파라미터를 ON으로 설정하고 각각 인스턴스 IP를 사용합니다.# tnsnames.oraTNS_SCAN = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SCAN1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDI..