SQL recyclebin, CTAS

eungjj·2024년 6월 21일

📍SQL

목록 보기
3/6
post-thumbnail

[0306 정리]

drop 한 테이블 확인 /recyclebin 테스트 + 파라미터 동적 변경

create table T1 (C1 number);
insert into T1 values (2);
insert into T1 values (40);
insert into T1 values (3);
drop table T1;

select *
from recyclebin
where original_name = '<Table_Name'> ;

show param recycle

alter system set USE_RECYCLEBIN=N;

재기동하면 동적변경되었던 파라미터 다시 원복된 것 확인 가능.

기존 테이블을 이용하는 테이블 생성 / CTAS

1. 전체 데이터를 모두 복사하는 방법
create user test1 identified by 'tibero';
grant resource, connect to test1;

conn user1/tibero
ls user (USER 확인!)

create table table1 (C1 number);
insert into table1 select level from dual connect by level < 40;

create table table2
as
select * from table1;

select count(*)
from table1;

select count(*)
from table2;
동일하게 생성된 것 확인 완료
sys.log 뭐 .. 별거 없음.. 그냥 DDL exec......
2. 원하는 데이터만 추가하는 방법 (where 절 이용)
create table table3
as
select * from table1
where C1 = 1;

CTAS 활용과 주의사항

  • 테이블의 형식 (DDL?)만 복사하기 위한 마이그레이션 작업에 사용된다.
  • 기존 테이블의 데이터를 새로 생성하기 위해 테이블 재구성에 사용된다.
  • 기존 테이블이 가지고있는 기본값, 제약조건, 인덱스 등은 복사할 수 없다.
    -- 그냥 값(데이터)만 복사하는 듯....
  • 파티션 테이블일 경우엔 일반 테이블로 복사된다.

[MAXTRANS] TEST
1. 최대 몇개의 ITL 엔트리를 허용할지를 결정.
2. 가령 MAXTRANS의 값을 50으로 주면 최대 50개까지의 동시 트랜잭션을 허용

  • 데이터가 들어가있는 블럭 확인
select distinct dbms_rowid.rowid_block_number(rowid) from test1.table1;

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------
                                  64

SQL> select distinct dbms_rowid.rowid_block_number(rowid) from test1.table2;

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------
                                1690

select distinct dbms_rowid.rowid_block_number(rowid) from test1.table3;

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------
                                1722
  • MAXTRANS를 2로 줬을 때 (alter system set _TX_BLK_EXTEND_ITL_MAXTRANS=3;)
    세번째 세션에서 table 에 대한 update 주면 lock 걸림.

신기행

FLASH TEST

  • 실수로 삭제된 데이터를 복구하기 위해서 사용하는 방법.
  • 데이터베이스의 UNDO 기능을 사용해서 복구를 하는 방법입니다.
  • 삭제한 데이터가 COMMIT한 후이거나, 시간이 좀 지난 후 알았을 경우에 사용가능합니다.
  • DDL은 지원하지 않으며 DML의 경우에 지원하여 사용 가능합니다.
1. 먼저 undo 관련 파라미터 설정 확인
show param undo

NAME                         TYPE     VALUE
---------------------------- -------- ----------------------------------------
UNDO_RETENTION               INT32    900(default)
UNDO_TABLESPACE              STRING   UNDO0


select count(*)
from table2;

  COUNT(*)
----------
        60
		
delete from table2; commit;

select count(*)
from table2;

  COUNT(*)
----------
         0

insert into table2
select * from table2
as of timestamp (systimestamp-interval '5' minute);
commit;

select count(*)
from table2;

  COUNT(*)
----------
        60

복구된 것 확인 가능

근데 이거 하다가 undo에 쌓이는 것이 너무 많으면 아래 에러가 생길 수 있다고 함.

TBR-21003: Snapshot is too old

snapshot is too old 에러란.. 일반적으로 쿼리 수행시간이 오래 걸려서 발생하는 undo 관련 에러...

무분별하게 undo retention 값을 늘릴 경우, undo segment 보관기간이 늘어나 재사용할 수 있는 segment 가 부족해지며

select  ts_name as "TABLESPACE_NAME",
        ROUND(total_size/1024/1024,2) as "TOTAL_SIZE(MB)",
        ROUND((total_size - free_size) / 1024/1024 ,2)as "USED_SIZE(MB)",
        ROUND(free_size/1024/1024,2) as "FREE_SIZE(MB)",
        ROUND(( free_size / total_size) * 100,2) as "FREE_SIZE(%)"
from v$undo_free_space
/
  • ERROR_CANT_ALLOC_EXT

extent 할당에 실패하면서 발생하는 에러..
auto extend 가 꺼져있거나, 파일의 최대 크기(32GB)에 도달했거나, disk 공간 부족..

select * from vt_usgmt_cache;
US_N TS_I IS_M     STATUS    UHDRDBA UHDRDBA_DFID UHDRDBA_BLKNO
---- ---- ---- ---------- ---------- ------------ -------------
   0    0    0          0          7            0             7
   1    1    1          0    4194311            1             7
   2    1    1          0    4195335            1          1031
   3    1    1          0    4196359            1          2055
   4    1    1          0    4197383            1          3079
   5    1    1          0    4198407            1          4103
   6    1    1          0    4199431            1          5127
   7    1    1          0    4200455            1          6151
   8    1    1          0    4201479            1          7175
   9    1    1          0    4202503            1          8199
  10    1    1          0    4203527            1          9223
  11    1    1          0    4204551            1         10247


SELECT * FROM vt_datafile_bm;
     FILE#     BLOCKS  UNIT_SIZE   MAX_SIZE AUTOEXTEND  INCREMENT
---------- ---------- ---------- ---------- ---------- ----------
         0      25600         16     131072          1       2048
         1     131072         16    1310720          1       2048
         2      12800         16     131072          1       2048
         3       2560         16    1572864          1       1280


SELECT * FROM _dd_props
NAME                      VALUE      COMMENT_STR
------------------------- ---------- ----------------------------------------
DFLT_PERM_TS              USR        Name of default permanent tablespace
DFLT_TEMP_TS              TEMP       Name of default temporary tablespace
DFLT_UNDO_TS0             UNDO0      Name of default undo tablespace
NLS_CHARACTERSET          UTF8
NLS_NCHAR_CHARACTERSET    UTF16
DB_NAME                   tibero1    database name

0개의 댓글