# ROW ID
SELECT rowid, id, name, sal FROM test; ROWID ID NAME SAL ------------------ ---------- ---------- ---------- AAAVrdAAEAAAAJEAAA 1 a 1000 AAAVrdAAEAAAAJEAAB 2 b 100 AAAVrdAAEAAAAJEAAC 1 a 2000 AAAVrdAAEAAAAJEAAD 5 j 3000 |
|||
AAAVrd | 6자리 | DATA OBJECT ID | SELECT * FROM user_objects WHERE object_name = 'TEST'; DATA_OBJECT_ID : 88723 -- 고유번호 |
AAE | 3자리 | FILE ID | SELECT * FROM user_segments WHERE segment_name = 'TEST'; TABLESPACE_NAME : USERS SELECT * FROM dba_data_files; TABLESPACE_NAME : USERS FILE_ID : 4 |
AAAAJE | 6자리 | BLOCK ID | SELECT * FROM dba_extents WHERE segment_name = 'TEST'; BLOCK_ID : 584 |
AAA | 3자리 | ROW SLOT | |
총 18자리 |
■ 제약 조건 체크 여부
SELECT * FROM user_constraints; | DEFERRED | ||
INITIALLY IMMEDIATE | INITIALLY DEFERRED | ||
DEFERRABLE | NOT DEFERRABLE | DML 수행 즉시 체크. 기본값 SET CONSTRAINTS ~ 상태 수정 불가 |
- |
DEFERRABLE | DML 수행 즉시 체크 | COMMIT 수행 시 체크 |
<< HR SESSION >> CREATE TABLE hr.emp_sal( salary NUMBER CONSTRAINT sal_ck CHECK(salary > 100) DEFERRABLE INITIALLY IMMEDIATE, bonus NUMBER CONSTRAINT bonus_ck CHECK(bonus > 0) DEFERRABLE INITIALLY DEFERRED ); SELECT * FROM user_constraints WHERE table_name = 'EMP_SAL'; CONSTRAINT_NAME DEFERRABLE DEFERRED ---------------- ----------- --------- SAL_CK DEFERRABLE IMMEDIATE -- 즉시 체크 BONUS_CK DEFERRABLE DEFERRED -- 즉시 체크하지 않는다 INSERT INTO hr.emp_sal (salary, bonus) VALUES (90, 5); ORA-02290: check constraint (HR.SAL_CK) violated INSERT INTO hr.emp_sal (salary, bonus) VALUES (101, -5); SELECT * FROM hr.emp_sal; SALARY BONUS ---------- ---------- 101 -5 COMMIT; ORA-02091: transaction rolled back ORA-02290: check constraint (HR.BONUS_CK) violated |
|
# DEFERRABLE - INITIALLY DEFERRED : COMMIT 수행 시 체크 | |
# 현재 세션에서 제약조건을 지연가능하도록 수행하겠다는 의미 # 트랜젝션이 끝나면 자동으로 해지 된다. # NOT DEFERRABLE 로 설정되어 있을 경우에는 수행할 수 없다. -- DEFERRABLE 상태여야 한다. SET CONSTRAINTS ALL DEFERRED; 또는 ALTER SESSION SET CONSTRAINT = DEFERRED; INSERT INTO hr.emp_sal (salary, bonus) VALUES (90, 5); INSERT INTO hr.emp_sal (salary, bonus) VALUES (101, -5); COMMIT; ORA-02091: transaction rolled back ORA-02290: check constraint (HR.SAL_CK) violated SELECT * FROM hr.emp_sal; no rows selected |
|
# 현재 세션에서 bonus_ck 제약조건 여부 체크를 commit 시에 체크하도록 설정 SET CONSTRAINTS bonus_ck DEFERRED; INSERT INTO hr.emp_sal (salary, bonus) VALUES (101, -5); COMMIT; ORA-02091: transaction rolled back ORA-02290: check constraint (HR.BONUS_CK) violated |
|
# DEFERRABLE - INITIALLY IMMEDIATE : DML 수행 즉시 체크 | |
# 현재 트랜잭션을 수행하는 동안 모든 제약조건 체크는 즉시체크하겠다. SET CONSTRAINTS ALL IMMEDIATE; 또는 ALTER SESSION SET CONSTRAINT = IMMEDIATE; INSERT INTO hr.emp_sal (salary, bonus) VALUES (101, -5); ORA-02290: check constraint (HR.BONUS_CK) violated |
|
# NOT DEFERRABLE - INITIALLY IMMEDIATE : SET CONSTRAINTS 상태 변경 작업을 할 수 없다. |
|
DROP TABLE emp_sal PURGE; CREATE TABLE hr.emp_sal( salary NUMBER CONSTRAINT sal_ck CHECK(salary > 100) NOT DEFERRABLE INITIALLY IMMEDIATE, bonus NUMBER CONSTRAINT bonus_ck CHECK(bonus > 0) NOT DEFERRABLE INITIALLY IMMEDIATE ); SELECT * FROM user_constraints WHERE table_name = 'EMP_SAL'; CONSTRAINT_NAME DEFERRABLE DEFERRED ---------------- --------------- --------- SAL_CK NOT DEFERRABLE IMMEDIATE -- 즉시 검사 BONUS_CK NOT DEFERRABLE IMMEDIATE -- 즉시 검사 SET CONSTRAINTS ALL DEFERRED; >> 오류가 없지만 적용안된다. INSERT INTO hr.emp_sal (salary, bonus) VALUES (90, 5); ORA-02290: check constraint (HR.SAL_CK) violated INSERT INTO hr.emp_sal (salary, bonus) VALUES (200, -5); ORA-02290: check constraint (HR.BONUS_CK) violated |
** 제약조건은 ADD or DROP 으로 설정과 삭제는 가능하지만 수정은 불가하다.
단, NOT NULL 제약조건은 MODIFY를 사용하여 수정 가능
# 대량의 데이터가 입력된 상태에서 제약조건을 설정하자. |
|
<< HR SESSION >> DROP TABLE hr.test PURGE; CREATE TABLE test(id NUMBER, name CHAR(10), sal NUMBER); INSERT INTO test(id,name,sal) VALUES(1,'a',1000); INSERT INTO test(id,name,sal) VALUES(2,'b',100); INSERT INTO test(id,name,sal) VALUES(1,'a',2000); COMMIT; SELECT * FROM test; ID NAME SAL ---------- ---------- ---------- 1 a 1000 2 b 100 1 a 2000 ALTER TABLE test ADD CONSTRAINT test_id_pk PRIMARY KEY(id); ORA-02437: cannot validate (HR.TEST_ID_PK) - primary key violated >> 제약조건에 위반된 기존 데이터가 있어 제약조건을 생성할 수 없다. SELECT * FROM user_constraints WHERE table_name = 'TEST'; no rows selected |
|
1. 내용 체크 없이 체크 제약 생성만 한다. |
|
ALTER TABLE test ADD CONSTRAINT test_id_pk PRIMARY KEY(id) DISABLE; SELECT * FROM user_constraints WHERE table_name = 'TEST'; STATUS : DISABLED -- 생성만하고 체크 비활성화 VALIDATED : NOT VALIDATED -- 내용체크 안함 >> 신규 및 기존 데이터의 검증 안한다. INSERT INTO TEST(id,name,sal) VALUES(5,'j',3000); COMMIT; SELECT * FROM TEST; ID NAME SAL ---------- ---------- ---------- 1 a 1000 2 b 100 1 a 2000 5 j 3000 |
|
2.EXCEPTIONS형식의 테이블 생성 |
|
SQL> @$ORACLE_HOME/rdbms/admin/utlexpt1 desc exceptions Name Null? Type ---------- -- ------------ ROW_ID UROWID OWNER VARCHAR2(30) TABLE_NAME VARCHAR2(30) CONSTRAINT VARCHAR2(30) |
|
3.test 테이블을 활성화하는데 문제되는 행이 있다면 exceptions 테이블에 패치 |
|
ALTER TABLE test ENABLE CONSTRAINT test_id_pk EXCEPTIONS INTO exceptions; ORA-02437: cannot validate (HR.TEST_ID_PK) - primary key violated SELECT * FROM exceptions; ROW_ID OWNER TABLE_NAME CONSTRAINT -------------------- ------- --------------- --------------- AAAVrdAAEAAAAJEAAC HR TEST TEST_ID_PK AAAVrdAAEAAAAJEAAA HR TEST TEST_ID_PK |
|
4. row id 와 데이터 매칭 |
|
SELECT rowid, t.* FROM test t WHERE rowid IN (SELECT row_id FROM exceptions); ROWID ID NAME SAL ------------------ ---------- ---------- ---------- AAAVrdAAEAAAAJEAAA 1 a 1000 AAAVrdAAEAAAAJEAAC 1 a 2000 |
|
5. 데이터 검증 -> 업무팀 |
|
UPDATE test SET id = 6 WHERE rowid = 'AAAVrdAAEAAAAJEAAC'; COMMIT; SELECT * FROM test; ID NAME SAL ---------- ---------- ---------- 1 a 1000 2 b 100 6 a 2000 5 j 3000 |
|
6. exceptions 테이블 초기화 후 제약 설정 재적용 |
|
TRUNCATE TABLE exceptions ; ALTER TABLE test ENABLE CONSTRAINT test_id_pk EXCEPTIONS INTO exceptions; >> 문제가 없다면 Table altered. SELECT * FROM exceptions ; no rows selected SELECT * FROM user_constraints WHERE table_name = 'TEST'; STATUS : ENABLED VALIDATED : VALIDATED |
** DISABLE 하지않고 처음부터 ENABLE 상태에서 작업가능하다.
ALTER TABLE test ADD CONSTRAINT test_id_pk PRIMARY KEY(id) EXCEPTIONS INTO exceptions;
** 제약조건 = 트리거
■ 제약조건 상태
ALTER TABLE ~ | VALIDATED | ||
NOVALIDATE | VALIDATE | ||
STATUS | DISABLED | 신규 및 기존 데이터 검증 안함 (이관 작업 시) |
신규 데이터 DML 작업 불허 (트랜잭션 막을 때) |
ENABLED | 신규 데이터만 검증 | 신규 및 기존 데이터 모두 검증 (운영 활성화) |
DISABLED 기본값 : DISABLE NOBALIDATE
ENABLED 기본값 : ENABLE VALIDATE
<< HR SESSION >> SELECT * FROM user_constraints WHERE table_name = 'TEST'; SELECT * FROM test; ID NAME SAL ---------- --------------- ---------- 1 a 1000 2 b 100 6 a 2000 5 j 3000 |
|
# ENABLED NOVALIDATED : 기존 데이터는 검증하지 않고, 새로운 데이터만 검증하는걸로 생성 | |
ALTER TABLE test ADD CONSTRAINT test_sal_ck CHECK (sal >= 1000) ENABLE NOVALIDATE; SELECT * FROM user_constraints WHERE table_name = 'TEST'; STATUS : ENABLED VALIDATED : NOT VALIDATED INSERT INTO test (id,name,sal) VALUES (10,'j',500); ORA-02290: check constraint (HR.TEST_SAL_CK) violated >> 오류발생 체크제약조건식에 위배되었다. SELECT * FROM test; ID NAME SAL ---------- --------------- ---------- 1 a 1000 2 b 100 6 a 2000 5 j 3000 |
|
# ENABLE NOVALIDATE -> ENABLE VALIDATE : 안에 있던 데이터까지 검증하기에 기존 데이터 수정 필요 | |
ALTER TABLE test ENABLE [ VALIDATE ] CONSTRAINT test_sal_ck EXCEPTIONS INTO exceptions; ORA-02293: (HR.TEST_SAL_CK)을 검증할 수 없습니다 - 잘못된 제약을 확인합니다 SELECT * FROM exceptions; ROW_ID OWNER TABLE_NAME CONSTRAINT ------------------ ------- --------------- ------------ AAAVqTAAEAAAAJMAAB HR TEST TEST_SAL_CK SELECT rowid, t.* FROM test t WHERE rowid in (SELECT row_id FROM exceptions); ROWID ID NAME SAL ------------------ ---------- ---------- ---------- AAAVqTAAEAAAAJMAAB 2 b 100 UPDATE test SET sal = 1001 WHERE rowid = 'AAAVqTAAEAAAAJMAAB'; COMMIT; SELECT * FROM test; ID NAME SAL ---------- ---------- ---------- 1 a 1000 2 b 1001 6 a 2000 5 j 3000 TRUNCATE TABLE exceptions; ALTER TABLE test ENABLE VALIDATE CONSTRAINT test_sal_ck EXCEPTIONS INTO exceptions; >> 문제없다면 성공 SELECT * FROM user_constraints WHERE table_name = 'TEST'; STATUS : ENABLED VALIDATED : VALIDATED |
|
# DISABLED VALIDATED : 신규 데이터 DML 작업 불가 | |
ALTER TABLE test DISABLE VALIDATE CONSTRAINT test_sal_ck; SELECT * FROM user_constraints WHERE table_name = 'TEST'; STATUS : DISABLED -- 제약조건 비활성화 VALIDATED : VALIDATED -- 내부검증한다 >>> DML 작업 불가 INSERT INTO test (id,name,sal) VALUES (10,'j',1000); ORA-25128: No insert/update/delete on table with constraint (HR.TEST_SAL_CK) disabled and validated ORA-25128: 사용 안함으로 설정되고 검증된 제약 조건(HR.TEST_SAL_CK)을 사용하여 테이블에서 삽입/갱신/삭제 작업이 수행되지 않았습니다. ALTER TABLE test DISABLE NOVALIDATE CONSTRAINT test_sal_ck; SELECT * FROM user_constraints WHERE table_name = 'TEST'; STATUS : DISABLED -- 제약조건 비활성화 VALIDATED : NOT VALIDATED -- 내부검증 안함 >>> 신규 및 기존 데이터 검증 안함 INSERT INTO test (id,name,sal) VALUES (10,'j',1000); 1 row created. ROLLBACK; |
** PRIMARY KEY, UNIQUE 제약조건은 ENABLE NOVALIDATE 성격을 수행하더라도 자동으로 unique index를 생성해야하기 때문에 기존 데이터에 대해서 검증을 체크한다. (중복, NULL 체크) |
|
DROP TABLE test PURGE; CREATE TABLE test(id NUMBER, name CHAR(10), sal NUMBER); INSERT INTO test(id,name,sal) VALUES(1,'a',1000); INSERT INTO test(id,name,sal) VALUES(2,'b',100); INSERT INTO test(id,name,sal) VALUES(1,'a',2000); COMMIT; SELECT * FROM hr.test; ID NAME SAL ---------- ---------- ---------- 1 a 1000 2 b 100 1 a 2000 ALTER TABLE test ADD CONSTRAINT test_id_pk PRIMARY KEY(id) ENABLE VALIDATE; ORA-02437: cannot validate (HR.TEST_ID_PK) - primary key violated ALTER TABLE test ADD CONSTRAINT test_id_pk PRIMARY KEY(id) ENABLE NOVALIDATE; ORA-02437: cannot validate (HR.TEST_ID_PK) - primary key violated |
# 터미널에서 EXPORT
SQL> ! pwd /home/oracle/spool SQL> spool emp_sal.dat SQL> SELECT employee_id||','||last_name||','||first_name||','||salary||','||department_id FROM hr.employees; SQL> spool off SQL> ! cat emp_sal.dat >> 데이터 외 칼럼명, 실행한 SQL문, 라인공백, 총 작업 행 수, spool off 실행문까지 불필요한 데이터가 포함되어있다. |
|
↓ | |
SQL> ! pwd /home/oracle/spool SQL> ! vi emp_sal.sql set pagesize 0 set linesize 200 set echo off set termout off set trimspool on set feedback off spool emp_sal.csv SELECT employee_id||','||last_name||','||first_name||','||salary||','||department_id FROM hr.employees; spool off :wq SQL> @emp_sal.sql SQL> ! cat emp_sal.csv >> 데이터만 깔끔하게 생성되었다! |
|
SET PAGESIZE 0 | 한페이지로 지정할 라인 수, 0으로 설정하면 컬럼은 출력하지 않는다. |
SET LINESIZE 200 | 한라인에 표시할 글자 수 |
SET ECHO OFF | 실행하는 SQL문을 출력하지 않는다. |
SET TERMOUT OFF | SQL문으로 실행한 결과를 표시하지 않는다. (화면 미출력) |
SET TRIMSPOOL ON | 라인뒤 공백 제거 |
SET FEEDBACK OFF | SQL문으로 실행한 결과 건수를 표시하지 않는다. |
SPOOL file_name | SQL문의 실행결과를 spool file로 생성한다. |
SPOOL OFF | SQL문의 실행결과를 spool file로 생성을 멈춘다. |
■ SQL LOADER
- 데이터 이관 작업하는 프로그램
- 외부파일에서 오라클 데이터베이스의 테이블로 data를 load(insert) 하는 프로그램
- sqlldr : 오라클에서 제공하는 프로그램
drop table emp_sal purge; create table emp_sal as select employee_id, last_name, first_name, salary, department_id from hr.employees where 1 = 2; # CONTROL FILE 생성 : emp_sal.csv -> emp_sal 테이블에 이관 작업 [oracle@oracle spool]$ vi emp_sal.ctl UNRECOVERABLE LOAD DATA INFILE emp_sal.csv INSERT INTO TABLE hr.emp_sal FIELDS TERMINATED BY ',' (employee_id, last_name, first_name, salary, department_id) :wq [oracle@oracle spool]$ sqlldr hr/hr control=emp_sal.ctl direct=true Load completed - logical record count 106. SELECT * FROM hr.emp_sal; |
drop table test purge; create table hr.test( id number constraint test_id primary key, name varchar2(30), phone varchar2(20)); |
|
[oracle@oracle spool]$ vi insa.ctl UNRECOVERABLE LOAD DATA INFILE * INSERT INTO TABLE hr.test FIELDS TERMINATED BY ',' (id, name, phone) BEGINDATA 1,"JAMES","010-1000-0001" 2,"ORACLE","010-7777-7777" 3,"KIM","010-8888-8888" :wq |
[oracle@oracle spool]$ vi insa.ctl UNRECOVERABLE LOAD DATA INFILE * INSERT INTO TABLE hr.test FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (id, name, phone) BEGINDATA 1,"JAMES","010-1000-0001" 2,"ORACLE","010-7777-7777" 3,"KIM","010-8888-8888" :wq |
[oracle@oracle spool]$ sqlldr hr/hr control=insa.ctl direct=true Load completed - logical record count 4. |
|
select * from hr.test; ID NAME PHONE 1 "JAMES" "010-1000-0001" 2 "ORACLE" "010-7777-7777" 3 "KIM" "010-8888-8888" >>> 따옴표까지 값에 포함되었다!?! truncate table hr.test; select * from hr.test; no rows selected |
select * from hr.test; ID NAME PHONE 1 JAMES 010-1000-0001 2 ORACLE 010-7777-7777 3 KIM 010-8888-8888 |
INSERT | 비어있는 테이블에 입력할 때 사용 |
REPLACE | 기존행을 DELETE 한 후 데이터를 입력 |
TRUNCATE | 테이블을 TRUNCATE 한 후 새로운 데이터를 입력 > REPLACE 보다 TRUNCATE 사용하는게 리소스 절약 (복구 가능성이 없다면) |
APPEND | 새로운 데이터를 기존 테이블에 추가. 단, 제약조건 무시 주의 |
[oracle@oracle spool]$ vi insa.ctl UNRECOVERABLE LOAD DATA INFILE * APPEND INTO TABLE hr.test FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (id, name, phone) BEGINDATA 1,"JAMES","010-1000-0001" 2,"ORACLE","010-7777-7777" 3,"KIM","010-8888-8888" :wq [oracle@oracle spool]$ sqlldr hr/hr control=insa.ctl direct=true Load completed - logical record count 4. SELECT * FROM hr.test; ID NAME PHONE --- ------- ------------- 1 JAMES 010-1000-0001 2 ORACLE 010-7777-7777 3 KIM 010-8888-8888 1 JAMES 010-1000-0001 2 ORACLE 010-7777-7777 3 KIM 010-8888-8888 >>> 중복된 데이터가 들어간다!! SELECT * FROM user_constraints WHERE table_name = 'TEST'; CONSTRAINT_NAME : TEST_ID CONSTRAINT_TYPE : P STATUS : ENABLED 활성화 VALIDATED : VALIDATED 신규 및 기존 데이터 모두 검증 DEFERRABLE : NOT DEFERRABLE CONSTRAINTS 상태 수정 불가 DEFERRED : IMMEDIATE DML 수행 즉시 체크 >> hr.test 테이블은 제약조건 검증이 활성화 되어있다. >> APPEND 작업 시 제약조건이 있는 상태를 무시하고 데이터가 입력된다. 주의 필요!! SELECT * FROM user_objects WHERE object_name = 'TEST_ID'; STATUS : VALID -> 사용가능하고 되어있지만 망가졌다. SELECT * FROM user_indexes WHERE table_name = 'TEST'; STATUS : UNUSABLE SELECT * FROM user_cons_columns WHERE table_name = 'TEST'; COLUMN_NAME : ID SELECT * FROM hr.test WHERE id = 1; >> FUll SCAN 상태 # 제약조건 검증 비활성화 ALTER TABLE hr.test DISABLE CONSTRAINT test_id; SELECT * FROM user_constraints WHERE table_name = 'TEST'; STATUS : DISABLED 비활성화 VALIDATED : NOT VALIDATED 신규 및 기존 데이터 검증 안함 DEFERRABLE : NOT DEFERRABLE CONSTRAINTS 상태 수정 불가 DEFERRED : IMMEDIATE DML 수행 즉시 체크 SELECT * FROM user_indexes where table_name = 'TEST'; no rows selected >> 비활성화 시 INDEX 정보 자동 DROP # 검증 활성화 ALTER TABLE test ENABLE CONSTRAINT test_id; ORA-02437: cannot validate (HR.TEST_ID) - primary key violated TRUNCATE TABLE exceptions; # 검증 활성화 시 에러는 exceptions 테이블에 패치 ALTER TABLE test ENABLE CONSTRAINT test_id EXCEPTIONS INTO exceptions; ORA-02437: cannot validate (HR.TEST_ID) - primary key violated >> 오류가 나면 exceptions 테이블을 확인하자. SELECT * FROM exceptions; ROW_ID OWNER TABLE_NAME CONSTRAINT ------------------ ------- --------------- ----------- AAAVsiAAEAAAAJEAAA HR TEST TEST_ID AAAVsiAAEAAAAJDAAA HR TEST TEST_ID AAAVsiAAEAAAAJEAAB HR TEST TEST_ID AAAVsiAAEAAAAJDAAB HR TEST TEST_ID AAAVsiAAEAAAAJEAAC HR TEST TEST_ID AAAVsiAAEAAAAJDAAC HR TEST TEST_ID SELECT rowid, t.* FROM hr.test t WHERE rowid IN (SELECT row_id FROM exceptions); ROWID ID NAME PHONE ------------------ ---------- ------------------------------ -------------------- AAAVsiAAEAAAAJDAAA 1 JAMES 010-1000-0001 AAAVsiAAEAAAAJDAAB 2 ORACLE 010-7777-7777 AAAVsiAAEAAAAJDAAC 3 KIM 010-8888-8888 AAAVsiAAEAAAAJEAAA 1 JAMES 010-1000-0001 AAAVsiAAEAAAAJEAAB 2 ORACLE 010-7777-7777 AAAVsiAAEAAAAJEAAC 3 KIM 010-8888-8888 DELETE FROM test WHERE rowid IN ('AAAVquAAEAAAAJEAAA','AAAVquAAEAAAAJEAAB','AAAVquAAEAAAAJEAAC'); COMMIT; SELECT * FROM hr.test; ID NAME PHONE ---------- ------------------------------ -------------------- 1 JAMES 010-1000-0001 2 ORACLE 010-7777-7777 3 KIM 010-8888-8888 TRUNCATE TABLE exceptions; # 검증 활성화 시 에러는 exceptions 테이블에 패치 ALTER TABLE test ENABLE CONSTRAINT test_id EXCEPTIONS INTO exceptions; SELECT * FROM user_constraints WHERE table_name = 'TEST'; STATUS : ENABLED 활성화 VALIDATED : VALIDATED 신규 및 기존 데이터 모두 검증 DEFERRABLE : NOT DEFERRABLE CONSTRAINTS 상태 수정 불가 DEFERRED : IMMEDIATE DML 수행 즉시 체크 SELECT * FROM user_objects WHERE object_name = 'TEST_ID'; STATUS : VALID SELECT * FROM user_indexes where table_name = 'TEST'; STATUS : VALID SELECT * FROM hr.test WHERE id = 1; TABLE ACCESS : BY INDEX ROWID INDEX : UNUQUE SCAN |
# 오류해결 SELECT employee_id||','||last_name||','||first_name||','||salary||','||department_id FROM hr.employees; ORA-28144: Failed to execute fine-grained audit handler ORA-12899: value too large for column "HR"."FGA_LOG"."USER_SQL" (actual: 102, maximum: 100) >> FGA 모니터링 테스트 이슈 > 모니터링 삭제 << SYS SESSION >> SELECT * FROM dba_audit_policies; BEGIN dbms_fga.drop_policy( object_schema => 'hr', object_name => 'employees', policy_name => 'fga_emp_log' ); end; / |
'Oracle 11g > Oracle DB' 카테고리의 다른 글
59 ORACLE Listener, DB Link, Server (1) | 2024.01.05 |
---|---|
58 ORACLE SQL Loader, Listener (1) | 2024.01.04 |
56-2 ORACLE 종속성 (0) | 2023.12.28 |
55 ORACLE Audit, Trigger (1) | 2023.12.27 |
54-2 ORACLE Audit (1) | 2023.12.26 |