hyeonga_code
Database_55_SQL 데이터베이스 객체 본문
-- 데이터베이스 객체
-- 데이터 베이스 하위 폴더로 표시된 모든 것을 의미합니다.
-- 스키마_SCHEMA
-- 데이터베이스의 구조와 제약 조건에 관해 전반적인 명세를 기술한 것
-- 추상화 작업
-- 개념 스키마에서 외부 스키마를 생성하는 과정입니다.
-- 대량의 데이터 중 원하는 데이터만을 추출하여 간략하게 테이블을 구성합니다.
-- 기술 요소
-- Attribute : 개체의 특성
-- Entity : 속성의 집합
-- Relation : 개체 사이에 존재하는 관계
-- Constraint : 제약 조건
-- 유형
-- 개념 스키마 : 전체적인 뷰
-- 전체를 관리하는 데이터베이스입니다.
-- 하나의 개념 스키마가 존재합니다.
-- 외부 스키마 = 서브 스키마
-- 전체 데이터베이스의 한 논리적 부분입니다.
-- 다수의 외부 스키마자 존재할 수 있습니다.
-- 각자 필요한 데이터의 집합을 테이블인 것처럼 사용합니다.
-- 개념 스키마와 외부 스키마를 별도로 작성하는 이유
-- 개념 테이블의 변경으로 영향을 받는 외부 스키마가 최소화되도록 하기 위함입니다.
-- 데이터의 독립성
-- 유형
-- TABLE_테이블
-- 기본 저장 단위입니다.
-- 행과 열로 구성됩니다.
-- VIEW_뷰
-- 논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합을 나타냅니다.
-- SEQUENCE_시퀀스
-- 숫자 값을 생성합니다.
-- INDEX_인덱스 *****
-- 쿼리 성능을 향상시킵니다.
-- SYNONUM_동의어
-- 객체에 다른 이름을 제공합니다.
/*
-- 디스크에는 하나의 파일 안에 여러 테이블, 데이터가 혼합되어 저장됩니다.
-- 파일을 블록으로 분할하여 블록 안에 데이터를 저장합니다.
-- 저장하는 순서로 저장하는 구조이므로 같은 테이블의 데이터라도 연속적으로 저장되지 않습니다.
-- 출력의 형태는 연속적으로 출력됩니다.
-- 데이터를 조회하기 위해 모든 데이터를 검색해야 합니다.
-- 인덱스를 사용하여 행의 위치를 찾기 쉽게 하는 용도입니다.
*/
-- FULL TABLE SCAN
-- 테이블에 존재하는 모든 데이터를 읽어 조건에 맞는 데이터를 추출합니다.
-- INDEX SCAN
-- 인덱스를 구성하는 칼럼의 값을 기반으로 데이터를 추출합니다.
/*
-- ROOT 에 1001부터 5000까지 저장되어 있습니다.
-- BRANCH 에 500 단위로 분할 저장되어 있습니다.
-- LEAF 에 100 단위로 분할 저장되어 있습니다.
-- 3981 번을 찾을 경우
-- ROOT 에서 3000번 대를 찾습니다.
-- BRANCH 에서 3501부터 4000번이 저장된 위치를 찾습니다.
-- LEAF 에서 3900번대에 가서 3981번을 찾습니다.
-- 인덱스는 적은 데이터가 아닌 대량의 데이터에서 효과를 볼 수 있습니다.
-- 옵티마이징 : 최적화, SQL문을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진을 의미합니다.
*/
-- 인덱스
-- 쿼리 성능을 향상시킵니다.
-- 스키마 객체입니다.
-- ownership이 생성됩니다.
-- Oracle Server에서 포인터를 사용하여 행 검색 속도를 높이기 위해 사용합니다.
-- BTREE 검색 : 데이터 위치를 빠르게 찾는 신속한 경로 엑세스 방법을 사용하여 디스크 I/O를 줄여줍니다.
-- 인덱스화된 테이블과 독립되어 존재합니다.
-- Oracle Server에 의해 자동으로 유지 관리되며 사용됩니다.
-- ENTITY_개체/항목
-- 테이블에서의 열을 나타냅니다.
-- 인덱스 키 값과 ROWID로 구성됩니다.
-- 테이블과 별개로 저장됩니다.
-- ROWID
-- 행의 주소를 나타냅니다.
-- Oracle 에서 ROWID를 사용하여 인덱스 등에 테이블 행의 주소를 저장합니다.
-- 테이블마다 ROWID 의사_PSEUDO 열이 있습니다.
-- 테이블 하나에 인덱스가 여러 개가 존재할 수 있습니다.
-- 인덱스가 생성되는 경우
-- 자동 생성
-- 테이블 정의에 primary key / unique 제약 조건을 정의하는 경우
-- 수동 생성
-- 사용자가 열에 인덱스를 생성하여 행에 대한 엑세스 시간을 줄일 수 있습니다.
-- 유형
-- UNIQUE / NON UNIQUE
-- 조합 인덱스
-- 인덱스 저장 기법
-- B* TREE
-- 역방향 키 : 인덱스 키 값을 역으로 지정하여 인덱스 번호로 지정됩니다.
-- 데이터가 한쪽으로 집중되는 것을 방지하기 위함입니다.
-- 응용프로그램에서 사용하는 연산자에 따라 결정됩니다.
-- '=' 연산자만 사용하는 경우 유용합니다.
-- 비교 연산자를 자주 사용하는 경우 비효율적입니다.
-- 내림차순
-- 함수 기반
-- 표현식을 기반으로 하는 인덱스입니다.
-- 테이블, 열, 상수, SQL 함수 및 사용자가 정의한 함수로부터 생성됩니다.
/*
-- 인사관리 데이터베이스 하위 개체에 인덱스에 제약조건으로 인해 자동으로 생성된 인덱스가 존재합니다.
-- 자동으로 생성된 인덱스는 DROP 명령문으로 삭제할 수 없습니다.
-- 자동으로 생성된 인덱스는 PRIMARY KEY/ UNIQUE KEY를 비활성화/삭제하는 경우 자동으로 삭제됩니다.
*/
-- 인덱스 생성이 필요한 경우
-- 열에 광범위한 값이 포함된 경우
-- 열에 널 값이 많이 포함된 경우
-- WHERE 절 또는 조인 조건에서 하나 이상의 열이 함께 자주 사용되는 경우
-- 큰 테이블에서 대부분의 질의에 의해 검색되는 행이 2-4% 미만인경우
-- 인덱스를 생성하면 안되는 경우
-- 테이블이 작은 경우
-- 열이 질의의 조건으로 자주 사용되지 않는 경우
-- 대부분의 질의가 테이블에 있는 행의 2-4% 이상을 검색하는 경우
-- 테이블이 자주 갱신되는 경우
-- 조합 인덱스
-- 생성
/*
CREATE INDEX index_name
ON table( column1, column2, column3);
-- column1 : 인덱스로 많이 사용되는 컬럼으로 작성합니다.
*/
-- 사용 : WHERE 절에 AND로 작성합니다.
-- 두 개 이상의 열을 합쳐 인덱스를 만드는 인덱스입니다.
-- 결합 인덱스
-- 고려사항
-- WHERE 절에서 AND 조건으로 자주 결합되어 사용됩니다.
-- 각각의 분포도보다 두 개 이상의 컬럼이 결합될 때 분포도가 좋아지는 컬럼
-- 다른 테이블과 조인의 연결 고리로 자주 사용되는 컬럼들
-- 하나 이상의 키 컬럼 조건으로 같은 테이블의 컬럼들이 자주 조회되는 경우
-- 지침
-- 가장 자주 질의되는 열을 맨 앞에 작성합니다.
-- 전체 키를 지정하려면 가장 자주 질의되는 열을 맨 앞에 작성합니다.
-- 기본 테이블에 엑세스 하지 않고 질의 결과를 검색할 수 있도록 여분의 열을 인덱스에 추가합니다.
-- 저장 영역을 줄이기 위해 COMPRESS 옵션을 사용하여 반복되는 키 열 값을 제거할 수 있습니다.
-- WHERE 절의 조건문에서 첫 번째 열이 조건식에 없는 경우 사용하지 않습니다.
-- 인덱스 생성 시 고려사항
-- 인덱스 생성 시 DML 작업이 인덱스에 주는 영향을 고려해야 합니다.
-- Oracle 서버는 인덱스를 유지 관리해야 하므로 많은 인덱스로 인해 DML 문의 처리 속도가 느려집니다.
-- 삽입으로 인해 적절한 블록에 인덱스 항목이 삽입됩니다.
-- 블록이 분할될 수 있습니다.
-- 삭제로 인해 인덱스 항목이 논리적으로 삭제됩니다.
-- 빈 블록은 사용할 수 있습니다.
-- 키 열을 갯인하면 인덱스에 논리적인 삭제, 삽입이 발생합니다.
-- 질의 속도를 높이기 위해 최적기에서 사용할 것이 확실한 인덱스만 생성합니다.
-- 사용하지 않는 인덱스 식별
/*
ALTER INDEX index_name [ MONITORING | NOMONITORING ] USAGE;
*/
-- Oracle은 인덱스 사용 통계를 수집하는 기능을 제공합니다.
-- 인덱스 모니터링의 이점
-- 사용되지 않는 인덱스를 삭제하여 공간을 관리합니다.
-- DML 작업 중 불필요한 오버헤드 제거를 통해 성능을 향상시킵니다.
/*
V$OBJECT_USAGE
-- 한 번이라도 사용된 인덱스는 YES로 표시됩니다.
-- 사용되지 않은 경우 필요하지 않은 인덱스입니다.
*/
-- 데이터 딕셔너리에서 인덱스 확인
-- USER_INDEXES 데이터 딕셔너리 뷰는 인덱스 이름 및 고유성을 포함합니다.
/*
SELECT index_name, table_name, uniqueness FROM user_indexes
WHERE table_name= table;
*/
-- 인덱스 제거
/*
DROP INDEX index;
*/
-- 테이블을 삭제하는 경우 인덱스도 자동으로 삭제됩니다.
-- 테이블을 복구하는 경우 인덱스도 자동으로 복구됩니다.
-- 제약 조건 확인
SELECT c.table_name, cc.column_name, c.constraint_name, c.constraint_type, c.search_condition, c.status
FROM user_constraints c JOIN user_cons_columns cc
ON (c.constraint_name = cc.constraint_name)
WHERE c.table_name IN ('EMP', 'DEPT');
/*
T_NAME COL_NAME CON_NAME CON_TYPE SEARCH_CONDITION
-------------------------------------------------------------------------------------------------------------------------------
DEPT DEPTNAME SYS_C007541 C "DEPTNAME"" IS NOT NULL
DEPT CREATE_DATE DEPT_CREDATE_NN C "CREATE_DATE"" IS NOT NULL
DEPT DEPTNO SYS_C007554 P ( null )
DEPT DEPTNAME SYS_C007544 U ( null )
DEPT LOC DEPT_LOC_UK U ( null )
EMP EMP_NAME SYS_C007546 C "EMP_NAME" IS NOT NULL
EMP EMAIL SYS_C007547 C "EMAIL"" IS NOT NULL
EMP SALARY SYS_C007548 C "SALARY"" IS NOT NULL
EMP SALARY EMP_SAL_CK C salary BETWEEN 2500 AND 30000
EMP EMPID SYS_C007553 P ( null )
EMP DEPTNO EMP_DEPTNO_FK R ( null )
*/
-- 자동 생성된 인덱스 확인
SELECT table_name, index_name
FROM user_indexes
WHERE table_name IN ('EMP', 'DEPT');
/*
TABLE_NAME INDEX_NAME
--------------------------------------
DEPT DEPT_LOC_UK
DEPT SYS_C007544
DEPT SYS_C007554
EMP SYS_C007553
*/
-- DEPT의 DEPTNAME 인덱스를 삭제합니다.
DROP INDEX SYS_C007544;
/*
<오류>---------------------------------------------------------------------------------
오류 보고 -
ORA-02429: cannot drop index used for enforcement of unique/primary key
02429. 00000 - "cannot drop index used for enforcement of unique/primary key"
*Cause: user attempted to drop an index that is being used as the
enforcement mechanism for unique or primary key.
*Action: drop the constraint instead of the index.
-----------------------------------------------------------------------------------------
*/
-- EMP 테이블의 empid를 확인합니다. : SYS_C007553
-- empid 제약 조건을 비활성화합니다.
ALTER TABLE emp DISABLE PRIMARY KEY;
/*
Table EMP이(가) 변경되었습니다.
*/
-- 제약 조건 확인
SELECT c.table_name, cc.column_name, c.constraint_name, c.constraint_type, c.status
FROM user_constraints c JOIN user_cons_columns cc
ON (c.constraint_name = cc.constraint_name)
WHERE c.table_name IN ('EMP', 'DEPT');
/*
T_NAME COL_NAME CON_NAME CON_TYPE STATUS
-----------------------------------------------------------------------------------------------
DEPT DEPTNAME SYS_C007541 C ENABLED
DEPT CREATE_DATE DEPT_CREDATE_NN C ENABLED
DEPT DEPTNO SYS_C007554 P ENABLED
DEPT DEPTNAME SYS_C007544 U ENABLED
DEPT LOC DEPT_LOC_UK U ENABLED
EMP EMP_NAME SYS_C007546 C ENABLED
EMP EMAIL SYS_C007547 C ENABLED
EMP SALARY SYS_C007369 C ENABLED
EMP SALARY EMP_SAL_CK C ENABLED
EMP EMPID SYS_C007553 P DISABLED
EMP DEPTNO EMP_DEPTNO_FK R ENABLED
*/
-- 자동 생성된 인덱스 확인
SELECT table_name, index_name
FROM user_indexes
WHERE table_name IN ('EMP', 'DEPT');
/*
TABLE_NAME INDEX_NAME
------------------------------------------
DEPT DEPT_LOC_UK
DEPT SYS_C007544
DEPT SYS_C007554
*/
-- 다시 활성화합니다.
ALTER TABLE emp ENABLE PRIMARY KEY;
/*
Table EMP이(가) 변경되었습니다.
*/
-- 자동 생성된 인덱스 확인
SELECT table_name, index_name
FROM user_indexes
WHERE table_name IN ('EMP', 'DEPT');
/*
TABLE_NAME INDEX_NAME
------------------------------------------
DEPT DEPT_LOC_UK
DEPT SYS_C007544
DEPT SYS_C007554
EMP SYS_C007553
*/
-- 기본키를 삭제합니다.
ALTER TABLE emp DROP PRIMARY KEY;
/*
Table EMP이(가) 변경되었습니다.
*/
-- 자동 생성된 인덱스 확인
SELECT table_name, index_name
FROM user_indexes
WHERE table_name IN ('EMP', 'DEPT');
/*
TABLE_NAME INDEX_NAME
------------------------------------------
DEPT DEPT_LOC_UK
DEPT SYS_C007544
DEPT SYS_C007554
*/
-- 새로운 기본키를 추가합니다.
ALTER TABLE emp ADD PRIMARY KEY(empid);
/*
Table EMP이(가) 변경되었습니다.
*/
-- 자동 생성된 인덱스 확인
SELECT table_name, index_name
FROM user_indexes
WHERE table_name IN ('EMP', 'DEPT');
/*
TABLE_NAME INDEX_NAME
------------------------------------------
DEPT DEPT_LOC_UK
DEPT SYS_C007544
DEPT SYS_C007554
EMP SYS_C007557
-- 새로 생성한 기본키에 대해 인덱스가 자동으로 생성되었습니다.
*/
-- 기존의 테이블을 삭제합니다.
DROP TABLE emp PURGE;
/*
Table EMP이(가) 삭제되었습니다.
*/
-- 기존의 테이블을 삭제합니다.
DROP TABLE dept PURGE;
/*
Table DEPT이(가) 삭제되었습니다.
*/
-- EMP 테이블 생성
CREATE TABLE emp
AS
SELECT * FROM employees;
/*
Table EMP이(가) 생성되었습니다.
*/
-- EMP 테이블과 연관된 데이터가 없음을 확인합니다.
SELECT index_name
FROM user_indexes
WHERE table_name='EMP';
/*
-- 아무 것도 출력되지 않습니다.
*/
-- [F10] : 계획설명
-- 테이블 전체를 조회합니다.
SELECT last_name, email, hire_date
FROM emp;
-- 특정 데이터를 조회합니다.
SELECT last_name, email, hire_date
FROM emp
WHERE employee_id=101;
/*
LAST_NAME EMAIL HIRE_DATE
-------------------------------------------------
Kochhar NKOCHHAR 04/09/21
*/
-- 인덱스를 생성합니다.
CREATE INDEX emp_emp_id_ix ON emp(employee_id);
/*
Index EMP_EMP_ID_IX이(가) 생성되었습니다.
*/
-- 인덱스를 사용하는 경우에만 발생합니다.
SELECT last_name, email, hire_date
FROM emp
WHERE last_name='King';
SELECT employee_id, last_name
FROM emp
WHERE employee_id=100
AND last_name='King';
/*
EMPLOYEE_ID LAST_NAME
----------------------------------
100 King
*/
SELECT employee_id, last_name
FROM emp
WHERE last_name='King'
AND employee_id=100;
-- bigemp 테이블 생성
/*
DROP TABLE bigemp purge
/
CREATE TABLE bigemp AS SELECT * FROM empl_demo
/
ALTER TABLE bigemp MODIFY (employee_id NUMBER)
/
DECLARE
n NUMBER;
BEGIN
FOR n IN 1..12
LOOP
INSERT INTO bigemp SELECT * FROM bigemp;
END LOOP;
COMMIT;
END;
/
SELECT MIN(employee_id), MAX(employee_id), COUNT(*) FROM bigemp
/
MIN(EMPLOYEE_ID) MAX(EMPLOYEE_ID) COUNT(*)
---------------- ---------------- ----------
100 206 438272
*/
-- bigemp 테이블 데이터 순차 수정
/*
SELECT MIN(employee_id), MAX(employee_id), COUNT(*) FROM bigemp
/
UPDATE bigemp
SET employee_id = rownum
/
COMMIT
/
SELECT MIN(employee_id), MAX(employee_id), COUNT(*) FROM bigemp
/
MIN(EMPLOYEE_ID) MAX(EMPLOYEE_ID) COUNT(*)
---------------- ---------------- ----------
1 438272 438272
*/
-- 인덱스가 있는지 확인합니다.
SELECT index_name
FROM user_indexes
WHERE table_name='BIGEMP';
/*
-- 데이터가 없습니다.
*/
-- 모든 데이터를 읽어옵니다.
SELECT *
FROM bigemp;
-- 인덱스를 생성합니다.
CREATE INDEX bigemp_empid_ix ON bigemp(employee_id);
/*
Index BIGEMP_EMPID_IX이(가) 생성되었습니다.
*/
-- 인덱스가 있는지 확인합니다.
SELECT index_name
FROM user_indexes
WHERE table_name='BIGEMP';
/*
INDEX_NAME
---------------
BIGEMP_EMPID_IX
*/
-- 자주 사용하는 데이터에 관해 인덱스를 사용하는 경우 계획 설명에서 확인할 수 있습니다.
-- COST가 줄어듭니다.
-- 실제 운영중인 대량 데이터 처리에서 성능차이가 많이 날 수 있습니다.
-- 인덱스 정보를 확인합니다.
DESC user_indexes;
-- UNIQUENESS 인덱스가 있습니다.
-- UNIQUENESS 정보 확인합니다.
SELECT index_name, uniqueness
FROM user_indexes
WHERE table_name='BIGEMP';
/*
INDEX_NAME UNIQUENESS
----------------------------------------
BIGEMP_EMPID_IX NONUNIQUE
-- 따로 지정하지 않는 경우 자동으로 NONUNIQUE로 설정됩니다.
*/
SELECT *
FROM emp
WHERE salary>15000;
-- 인덱스를 사용하지 않고 FULL SCAN으로 작업합니다.
-- 계획 설명에 변화가 없습니다.
-- 연봉 관련 인덱스를 생성합니다.
CREATE INDEX emp_sal_ix ON emp(salary);
/*
Index EMP_SAL_IX이(가) 생성되었습니다.
*/
-- 생성한 인덱스를 사용하는지 확인합니다.
SELECT *
FROM emp
WHERE salary>15000;
-- 계획 설명에서 EMP_SAL_IX를 사용하여 RANGE SCAN하는 것을 볼 수 있습니다.
-- 함수를 사용하여 인덱스를 사용하는 지 확인합니다.
SELECT *
FROM emp
WHERE salary*12>150000;
-- 계획 설명에서 인덱스를 사용하지 않고 FULL TIME으로 실행합니다.
-- salary*12에 대한 함수 기반 인덱스를 생성합니다.
CREATE INDEX emp_annal_ix ON emp(salary*12);
/*
Index EMP_ANNAL_IX이(가) 생성되었습니다.
*/
-- 함수 기반 인덱스를 사용하는지 확인합니다.
SELECT *
FROM emp
WHERE salary*12 > 150000;
-- 인덱스 기반으로 RANGE SCAN 으로 함수 기반 인덱스를 사용합니다.
-- 조합 인덱스
CREATE INDEX emp_id_name_dept_ix
ON emp(employee_id, last_name, department_id);
/*
Index EMP_ID_NAME_DEPT_IX이(가) 생성되었습니다.
*/
--인덱스 사용 여부 체크
-- 아이디만 검색하는 경우
SELECT * FROM emp
WHERE employee_id=101;
-- 인덱스를 사용합니다.
-- 아이디와 성을 검색하는 경우
SELECT * FROM emp
WHERE employee_id=100
AND last_name='King';
-- 인덱스를 사용합니다.
-- 아이디, 성, 부서 번호를 검색하는 경우
SELECT * FROM emp
WHERE employee_id=100
AND last_name='King'
AND department_id=90;
-- 인덱스를 사용합니다.
-- 첫 번째로 작성한 아이디를 제외하고 검색하는 경우
SELECT * FROM emp
WHERE last_name='King'
AND department_id=90;
-- 인덱스를 사용하지 않습니다.
-- 인덱스에 포함된 데이터만 검색하는 경우
SELECT employee_id, department_id FROM emp
WHERE employee_id=100
AND last_name='King'
AND department_id=90;
-- 테이블을 스캔하지 않고 인덱스만 사용합니다.
-- 성능이 보다 좋아집니다.
-- 인덱스를 확인합니다.
DESC user_ind_columns
SELECT index_name, column_name, column_position
FROM user_ind_columns
WHERE table_name='EMP';
/*
INDEX_NAME COLUMN_NAME COLUMN_POSITION
---------------------------------------------------------------------------------------------
EMP_EMP_ID_IX EMPLOYEE_ID 1
EMP_SAL_IX SALARY 1
EMP_ANNAL_IX SYS_NC00012$ 1
EMP_ID_NAME_DEPT_IX EMPLOYEE_ID 1
EMP_ID_NAME_DEPT_IX LAST_NAME 2
EMP_ID_NAME_DEPT_IX DEPARTMENT_ID 3
-- COLUMN_POSITION : 누가 조합 인덱스인지 알 수 있습니다.
*/
-- 인덱스 제거
DROP INDEX emp_sal_ix;
/*
Index EMP_SAL_IX이(가) 삭제되었습니다.
*/
-- 인덱스를 확인합니다.
DESC user_ind_columns
SELECT index_name, column_name, column_position
FROM user_ind_columns
WHERE table_name='EMP';
/*
INDEX_NAME COLUMN_NAME COLUMN_POSITION
---------------------------------------------------------------------------------------------
EMP_EMP_ID_IX EMPLOYEE_ID 1
EMP_ANNAL_IX SYS_NC00012$ 1
EMP_ID_NAME_DEPT_IX EMPLOYEE_ID 1
EMP_ID_NAME_DEPT_IX LAST_NAME 2
EMP_ID_NAME_DEPT_IX DEPARTMENT_ID 3
*/
-- 테이블을 확인합니다.
SELECT * FROM emp;
-- 테이블 삭제
DROP TABLE emp;
/*
Table EMP이(가) 삭제되었습니다.
*/
-- 인덱스를 확인합니다.
SELECT index_name, column_name, column_position
FROM user_ind_columns
WHERE table_name='EMP';
/*
INDEX_NAME COLUMN_NAME COLUMN_POSITION
------------------------------------------------------------------------------
-- 테이블과 같이 삭제되었습니다.
*/
-- 휴지통을 확인합니다.
SHOW RECYCLEBIN;
/*
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
----------------------------------------------------------------------------------------------------------------------------------------------
EMP_EMP_ID_IX BIN$uPO9JWBlSdCpYsi7yoGevw==$0 INDEX 2023-08-09:18:50:49
EMP_ANNAL_IX BIN$NaVffKYwQ8e30sha05WYDg==$0 INDEX 2023-08-09:18:50:49
EMP_ID_NAME_DEPT_IX BIN$DsrHJzkFTxS6sJl2TNOOaw==$0 INDEX 2023-08-09:18:50:49
EMP BIN$/ OzfjNBXTyS2Zqi5IXT8fA==$0 TABLE 2023-08-09:18:50:49
-- 인덱스도 같이 휴지통에 버려집니다.
*/
-- 테이블을 복구합니다.
FLASHBACK TABLE emp TO BEFORE DROP;
/*
Flashback을(를) 성공했습니다.
*/
-- 휴지통을 확인합니다.
SHOW RECYCLEBIN;
-- 데이터가 존재하지 않습니다.
-- 실습이 끝났으므로 테이블을 영구 삭제합니다.
DROP TABLE emp PURGE;
'Oracle Database' 카테고리의 다른 글
Database_57_데이터베이스 객체_시퀀스_Sequence (0) | 2023.08.13 |
---|---|
Database_56_데이터베이스 객체_뷰_VIEW (0) | 2023.08.12 |
Database_54_SQL 제약 조건_Constraint( Not null, Unique, Primary Key, Foreign Key, Check) (0) | 2023.08.10 |
Database_53_SQL 테이블 삭제, 휴지통_DROP TABLE, RECYCLE BIN (0) | 2023.08.09 |
Database_52_SQL 테이블 수정_ALTER TABLE (0) | 2023.08.08 |