- table compact : 비어있는 공간으로 data 를 채워넣는것
- table shrink : HWM 를 아래로 내리는 작업
■ 새로운 db reorg 작업
1. scott 으로 접속해서 table 을 준비한다.
@demo.sql
insert into emp
select *
from emp; <--------- 10번 수행
delete from emp where deptno in (10,20);
2. emp 테이블의 실제 사용하고 있는 block 의 갯수
select count(distinct dbms_rowid.rowid_block_number(rowid))
as blocks
from emp;
169
3. High water mark 까지 할당된 block 의 갯수 확인
select blocks
from user_segments
where segment_name='EMP';
256
4. 테이블 compact 작업 수행
alter table emp enable row movement;
alter table emp shrink space compact;
5. emp 테이블의 실제 사용하고 있는 block 의 갯수
select count(distinct dbms_rowid.rowid_block_number(rowid))
as blocks
from emp;
77
6. High water mark 까지 할당된 block 의 갯수 확인
select blocks
from user_segments
where segment_name='EMP';
BLOCKS
----------
256
7. High water mark 를 내려주는 작업 수행
alter table emp shrink space;
select blocks
from user_segments
where segment_name='EMP';
BLOCKS
----------
88
■ 새로운 db reorg 작업
1. scott 으로 접속해서 table 을 준비한다.
@demo.sql
create index emp_sal on emp(sal);
create index emp_empno on emp(empno);
insert into emp
select *
from emp; <--------- 10번 수행
delete from emp where deptno in (10,20);
2. emp 테이블의 실제 사용하고 있는 block 의 갯수
select count(distinct dbms_rowid.rowid_block_number(rowid))
as blocks
from emp;
169
3. High water mark 까지 할당된 block 의 갯수 확인
select blocks
from user_segments
where segment_name='EMP';
256
4. 테이블 compact 작업 수행
alter table emp enable row movement;
alter table emp shrink space compact;
5. emp 테이블의 실제 사용하고 있는 block 의 갯수
select count(distinct dbms_rowid.rowid_block_number(rowid))
as blocks
from emp;
77
6. High water mark 까지 할당된 block 의 갯수 확인
select blocks
from user_segments
where segment_name='EMP';
BLOCKS
----------
256
7. High water mark 를 내려주는 작업 수행
alter table emp shrink space;
select blocks
from user_segments
where segment_name='EMP';
BLOCKS
----------
88
select index_name, table_name, status
from user_indexes;
select *
from all_tables
where owner='HR' and table_name !='COUNTRIES';
select 'alter table ' || table_name || ' enable row movement;'
from all_tables
where owner='HR' and table_name !='COUNTRIES'
union all
select 'alter table ' || table_name || ' shrink space compact;'
from all_tables
where owner='HR' and table_name !='COUNTRIES'
union all
select 'alter table ' || table_name || ' shrink space;'
from all_tables
where owner='HR' and table_name !='COUNTRIES';
.
alter table EMPLOYEES enable row movement;
alter table REGIONS enable row movement;
alter table LOCATIONS enable row movement;
alter table DEPARTMENTS enable row movement;
alter table JOBS enable row movement;
alter table JOB_HISTORY enable row movement;
alter table EMPLOYEES shrink space compact;
alter table REGIONS shrink space compact;
alter table LOCATIONS shrink space compact;
alter table DEPARTMENTS shrink space compact;
alter table JOBS shrink space compact;
alter table JOB_HISTORY shrink space compact;
alter table EMPLOYEES shrink space;
alter table REGIONS shrink space;
alter table LOCATIONS shrink space;
alter table DEPARTMENTS shrink space;
alter table JOBS shrink space;
alter table JOB_HISTORY shrink space;
alter table EMPLOYEES enable row movement;
alter table REGIONS enable row movement;
alter table LOCATIONS enable row movement;
alter table DEPARTMENTS enable row movement;
alter table JOBS enable row movement;
alter table JOB_HISTORY enable row movement;
alter table EMPLOYEES shrink space compact;
alter table REGIONS shrink space compact;
alter table LOCATIONS shrink space compact;
alter table DEPARTMENTS shrink space compact;
alter table JOBS shrink space compact;
alter table JOB_HISTORY shrink space compact;
alter table EMPLOYEES shrink space;
alter table REGIONS shrink space;
alter table LOCATIONS shrink space;
alter table DEPARTMENTS shrink space;
alter table JOBS shrink space;
alter table JOB_HISTORY shrink space;
답:
[oracle@ora19c ~]$ pwd
/home/oracle
[oracle@ora19c ~]$ vi alter_table.sql
[oracle@ora19c ~]$
[oracle@ora19c ~]$ cat alter_table.sql
# /home/oracle/alter_table.sql
alter table EMPLOYEES enable row movement;
alter table REGIONS enable row movement;
alter table LOCATIONS enable row movement;
alter table DEPARTMENTS enable row movement;
alter table JOBS enable row movement;
alter table JOB_HISTORY enable row movement;
alter table EMPLOYEES shrink space compact;
alter table REGIONS shrink space compact;
alter table LOCATIONS shrink space compact;
alter table DEPARTMENTS shrink space compact;
alter table JOBS shrink space compact;
alter table JOB_HISTORY shrink space compact;
alter table EMPLOYEES shrink space;
alter table REGIONS shrink space;
alter table LOCATIONS shrink space;
alter table DEPARTMENTS shrink space;
alter table JOBS shrink space;
alter table JOB_HISTORY shrink space;
[oracle@ora19c ~]$ pwd
/home/oracle
[oracle@ora19c ~]$ vi run_alter_table.sh
[oracle@ora19c ~]$
[oracle@ora19c ~]$ cat run_alter_table.sh
# /home/oracle/run_alter_table.sh
#!/bin/bash
export ORACLE_SID=ORA19 # DB SID
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
sqlplus -s scott/tiger <<EOF
@/home/oracle/scripts/alter_table.sql
EOF
[oracle@ora19c ~]$ chmod +x /home/oracle/run_alter_table.sh
[oracle@ora19c ~]$
[oracle@ora19c ~]$ crontab -e
crontab: installing new crontab
[oracle@ora19c ~]$
crontab -e
select 'alter table ' || table_name || ' enable row movement;'
from all_tables
where owner='SH'
union all
select 'alter table ' || table_name || ' shrink space compact;'
from all_tables
where owner='SH'
union all
select 'alter table ' || table_name || ' shrink space;'
from all_tables
where owner='SH';
alter table TIMES enable row movement;
alter table PRODUCTS enable row movement;
alter table CHANNELS enable row movement;
alter table PROMOTIONS enable row movement;
alter table CUSTOMERS enable row movement;
alter table COUNTRIES enable row movement;
alter table SALES enable row movement;
alter table COSTS enable row movement;
alter table TIMES shrink space compact;
alter table PRODUCTS shrink space compact;
alter table CHANNELS shrink space compact;
alter table PROMOTIONS shrink space compact;
alter table CUSTOMERS shrink space compact;
alter table COUNTRIES shrink space compact;
alter table SALES shrink space compact;
alter table COSTS shrink space compact;
alter table TIMES shrink space;
alter table PRODUCTS shrink space;
alter table CHANNELS shrink space;
alter table PROMOTIONS shrink space;
alter table CUSTOMERS shrink space;
alter table COUNTRIES shrink space;
alter table SALES shrink space;
alter table COSTS shrink space;
select index_name, table_name, status
from user_indexes;