지난번에 오라클 Heatmap, ADO 의 개요와 ADO 커맨드 샘플 을 정리해봤습니다.
이번에는 처음부터 끝까지 쭉 순차적으로 핸즈온(따라해보기)을 진행해보겠습니다.
오라클 ILM 에는 Compression Tiering 과 Storage Tiering 2가지가 있습니다. 여기에서는 Compression Tiering 만 먼저 해보겠습니다.
간단히 절차를 먼저 체크하면, 아래 순서로 작업하면 됩니다.
1) DB 파라메타 변경
2) 테스트할 샘플 테이블 생성 및 데이터 생성
3) ADO Policy 생성
4) ADO Policy 를 수동으로 강제 적용
5) ADO Policy 삭제
실제 운영에 적용하는 상황이라면 1), 3) 번만 있으면 됩니다.
운영DB에는 테이블이 이미 있으니 2)번은 필요없고, ADO Policy 는 만들어두면 알아서 자동적용(Triggering) 되기 때문에 수동으로 강제 적용할 필요가 없는 일이고, ADO Policy 를 삭제할 일도 없겠죠.. 그냥 쭉 가는 거니까..
1) DB 파라메타 변경
heat_map 이라는 파라메타를 변경해줘야 합니다. 디폴트로 off 로 되어 있습니다.
/*
sys 유저에서 실행
*/
SQL>
alter system set heat_map=on scope=both;
exec dbms_ilm_admin.set_heat_map_start(sysdate);
간혹, 위 set_heat_map_start() 에서 ORA-38327 에러가 나는 경우가 있습니다.
이 경우는 버그랍니다. (Bug #17303764) 12.1.0.1 에서 나는 경우고, 12.1.0.2 로 패치하면 된다고 합니다.
2) 테스트할 샘플 테이블 생성 및 데이터 생성
Oracle 샘플유저 scott 유저에 디폴트로 존재하는 EMP 테이블을 가지고 데이터를 증식해서 EMPLOYEE 라는 샘플테이블을 만듭니다.
/*
scott 유저에서 실행
*/
-- 테이블 생성
CREATE TABLE scott.employee
(EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2))
/
-- 데이터 Insert 처음
INSERT INTO scott.employee (empno, ename, job, mgr, hiredate, sal, comm, deptno)
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno
FROM scott.emp;
-- 데이터 증식 8 번 반복
DECLARE
blowup PLS_INTEGER := 8;
sql_test clob;
BEGIN
for i in 1..blowup loop
sql_test := 'insert /*+ append */ into employee select * from scott.employee';
execute immediate sql_test;
commit;
end loop;
END;
/
이렇게 하면 employee 테이블에는 3584 건의 데이터가 생성됩니다.
※ 여기에서는 Insert 구문으로 만들었는데, 테스트하면서 CTAS 로 테이블 복제해서 만들게되면 Heat Map 에 데이터가 안생겨서 아래에서 수동적용시 실행이 안될 수 있습니다. CTAS 로 만든경우는 select count(*) from ... 구문을 한번 실행해준 다음에 하면 Heat Map 데이터가 정상으로 생성됩니다.
Heat Map 데이터 생성유무는 아래 쿼리로 확인할 수 있습니다.
/*
scott 유저에서 실행
*/
select object_name, subobject_name, segment_read_time, segment_write_time, full_scan, lookup_scan
from user_heat_map_segment;
--> 여기에 테스트할 테이블이 나와야 합니다.
3) ADO Policy 생성
이제, employee 테이블에 ADO 정책을 만들어보겠습니다.
/*
scott 유저에서 실행
*/
SQL>
alter table scott.EMPLOYEE ilm add policy
row store compress advanced
segment
after 4 days
of no modification;
-- Segment 단위
employee 테이블에 4일동안 아무 변경이 없는 경우 ACO 압축을 하라는 정책입니다.
segment 를 row 로 바꾸면 row 단위로 변경여부를 체크하고, 4일동안 변경이 없는 row 들만 block 단위로 압축을 합니다.
정책(Policy)에 대한 자세한 설정은 이전 문서를 참조하세요.
이제 생성한 정책을 딕셔너리뷰에서 아래와 같이 확인할 수 있습니다.
/*
scott 유저에서 실행
*/
SQL>
set numwidth 10
column policy_name format a8
column compression_level format a17
SELECT policy_name, action_type, scope, compression_level, condition_type, condition_days
FROM user_ilmDatamovementPolicies
ORDER BY policy_name;
POLICY_N ACTION_TYPE SCOPE COMPRESSION_LEVEL CONDITION_TYPE CONDITION_DAYS
-------- ----------- ------- ----------------- ---------------------- --------------
P85 COMPRESSION SEGMENT ADVANCED LAST MODIFICATION TIME 4
저는 Policy_Name 이 P85 입니다. 여러번 테스트해서 그런것이고, 처음 하는 경우는 P1 부터 시작합니다.
위 ilm add policy 문에서 지정한대로 설정이 되어 있는것을 확인할 수 있습니다.
이제는 4일 동안 employee 테이블을 변경하지 않고 기다리면 됩니다. 4일뒤에 뵙겠습니다.ㅎㅎ
4) ADO Policy 를 수동으로 강제 적용
but, 우리는 성질이 급하기 때문에 기다릴 수 없죠~
그냥 아래 커맨드를 scott 유저에서 실행해주면 ADO 정책을 실행해 버립니다.
아래 SQL을 실행하기 전에 실행전과 실행후를 비교할 필요가 있습니다. 즉, 정책이 적용되기 전에 비압축상태를 확인하고, 정책을 적용하고나서 압축이 되는 것을 확인해야 겠죠.
/*
sys 유저에서 실행
*/
EXEC dbms_ilm_admin.customize_ilm(dbms_ilm_admin.POLICY_TIME, dbms_ilm_admin.ILM_POLICY_IN_SECONDS);
-- 빠른 적용을 위해 Triggering 체크시간을 초단위로 체크하도록 변경
위 커맨드는 Triggering 체크시간을 초단위로 체크하도록 변경하는 것인데, 안그러면 디폴트가 일단위라 아래 커맨드를 실행해도 체크 자체를 다음날이 되어야 체크하기 때문에 하루를 기다려야 하기 때문입니다.
이걸 다시 원복하려면 위 커맨드에서 ILM_POLICY_IN_SECONDS 부분을 ILM_POLICY_IN_DAYS 로 바꿔서 실행해주면 됩니다.
/*
scott 유저에서 실행
*/
EXEC dbms_ilm.flush_all_segments;
-- 이거 반드시 해줘야 합니다. 이거 안하고 아래만 실행하면 동작 안합니다.
DECLARE
v_executionid number;
BEGIN
dbms_ilm.execute_ILM (ILM_SCOPE => dbms_ilm.SCOPE_SCHEMA,
execution_mode => dbms_ilm.ilm_execution_offline,
task_id => v_executionid);
END;
/
저번에 포스팅했었던 "테이블 압축방식 체크 스크립트" 페이지에 있는 스크립트에서 EMP 테이블을 EMPLOYEE 로 바꿔주고 실행해봅니다.
3,584건 모두 No Compression 으로 나오는 것을 확인할 수 있습니다.
그럼, 이제 위 강제로 정책을 적용하는 스크립트를 실행한 후에 다시 조회해 봅니다.
정책이 segment 단위로 걸려있어, 테이블의 모든 데이터가 ACO 압축이 되어진 것을 확인할 수 있습니다.
!!! Mission Complete !!!
5) ADO Policy 삭제
요리의 끝은 설거지라고 하죠~ 아래와 같이 내가 테스트한 정책을 지워주면 되겠습니다.
/*
scott 유저에서 실행
*/
alter table EMPLOYEE ilm delete policy P85;
-- P85 Policy를 삭제
/*
sys 유저에서 실행
*/
EXEC dbms_ilm_admin.customize_ilm(dbms_ilm_admin.POLICY_TIME, dbms_ilm_admin.ILM_POLICY_IN_DAYS);
-- 초단위로 동작하도록 바꿨던 부분을 다시 원래대로 일단위로 동작하도록 변경
※ 참고)
위에서 정책을 segment 로 설정했었는데, row 단위로 하면 Advanced compression level 로 안나오고,
basic compression 으로 나오는 경우가 있습니다. 이 경우는 버그라고 하네요. 패치하면 됩니다. (MOS #17947871)
※ 이전글 참고)
- 오라클 Heatmap, ADO, ILM 기능 샘플 커맨드 예제
- 오라클 Heatmap, ADO, ILM 기능 테스트 핸즈온 - Storage Tiering
- 오라클 Heatmap, ADO, ILM 기능관련 딕셔너리 조회 스크립트 모음
'IT관련' 카테고리의 다른 글
오라클 Heatmap, ADO, ILM 기능관련 딕셔너리 조회 스크립트 모음 (0) | 2019.07.09 |
---|---|
오라클 Heatmap, ADO, ILM 기능 테스트 핸즈온 - Storage Tiering (0) | 2019.07.09 |
오라클 Heatmap, ADO, ILM 기능 샘플 커맨드 예제 (0) | 2019.07.06 |
테이블 압축방식 체크 스크립트, Table Compression Type Check Script (0) | 2019.07.06 |
오라클 Heatmap, ADO, ILM 기능 설명 - Oracle 12c New Feature (0) | 2019.07.06 |