TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-14 |
제목 | SNAPSHOT의 기본 개념과 예제 | ||
---|---|---|---|
SNAPSHOT의 기본 개념과 예제
========================== 먼저 Oracle7 에서의 snapshot 에 대해 논하고 implementation 하는 방법과 refresh 하는 방법에 대해 알아보자 . 1) 서론 Oracle7 에서는 분산 network 환경에서 서로 다른 노드의 갯수에 제한이 없이 master table 의 replication 을 위한 table snapshot 을 제공한다. Snapshot 은 update 가 불가능하다. 이것은 read 만 가능한 table 과 같다고 할 수 있겠다. Update 는 master table 에서만 가능하다. 각 master table의 변경된 사항은 snapshot (replicat) 에 비동기적으로 반영되어진다. 이 refresh 는 SQL 명령어를 이용해 수동적으로 수행되어질 수도 있고, refresh 시간에 따라 자동적으로 수행되어질 수도 있다. 2) Simple 과 Complex Simple snapshot 은 각 row 가 1개의 remote table 의 1개의 row 에 기초한 것이다. 즉 Group by, Order by, subqueries, joins, set operation이 없는 경우이다. 반대로 snapshot 에 정의된 query 가 이러한 구문을 포함하면 complex snapshot 이라 한다. 3) snapshots 의 장점 . remote table 에 대한 snapshot 을 local 에 가짐으로써 network 을 통한 query 를 하지 않아도 되어 시간을 절약할 수 있다. . 여러가지 원인에 의해 master table 을 access 하지 못하더라도 master site 사용자들은 여전히 snapshots을 사용할 수 있다. 4) 사용 방법 CREATE SNAPSHOT PCTFREE integer PCTUSED integer INITRANS integer MAXTRANS integer TABLESPACE tablespace STORAGE storage_clause CLUSTER cluster (column_list) REFRESH START WITH date NEXT date 5)Snapshot 에 관련한 오브젝트들 Master table Snapshot base table Snapshot log 6) Snapshot 에 관련한 Data dictionary Views: DBA_SNAPSHOTS DBA_SNAPSHOT_LOGS USER_SNAPSHOTS ALL_SNAPSHOTS MVIEW$ 7) Snapshot 에 관련한 Data dictionary tables: SNAP$ MLOG$ 8) 연관된 Packages *DBMS_SNAPSHOT 이것은 스크립트를 수행하면 생성된다. catproc.sql -- 이 Package 에서 수행되는 것들 -- -- purge_log - 필요없는 row 의 log 를 purge -- refresh - 주어진 snapshot 의 refresh -- refresh_all - 모든 snapshot 을 refresh -- drop_snapshot - snapshot 을 drop -- set_up - snapshot refresh 를 위해 master 쪽을 setup -- wrap_up - master site 에서 refresh를 record -- get_log_age - log 에서 가장 오래된 date 를 check -- testing - snapshot을 test (currently null) -- I_am_a_refresh - flag used to let triggers identify refreshes 이 package 는 snapshot 를 생성하기 전에 반드시 존재하여야 한다. 9) init.ora 에 적용되는 파라미터들 snapshot 의 refresh process 를 위한 파라미터는 다음과 같다. o SNAPSHOT_REFRESH_PROCESSES (number) o SNAPSHOT_REFRESH_INTERVAL (seconds) o SNAPSHOT_REFRESH_KEEP_CONNECTIONS (true/false) 10) Snapshot Mechanism Snapshot이 생성되면, Oracle은 이 snapshot에 관련한 여러 다른 오브젝트들도 함께 생성한다. 이들 오브젝트는 변화되어지지 않는다. snapshot site에서는 snapshot 에서 정의한 query 에 의해 가져온 row 를 저장할 base table 을 생성한다. 또한 이 table 을 기반으로 view 를 생성한다. 이 view 는 read-only 이고 snapshot 을 이용하는 사용자가 이용 가능하다 . 또 다른 view 로는 snapshot 을 refresh 하기 위한 view 가 있다. Snapshot refreshing: 주기적으로 snapshot 은 refresh 하여 최근의 변화된 사항들을 master table 에 반영한다. Snapshot process는 snapshot 에서 정의된 query를 이용하여 변화된 사항들을 가져와 이전의 snapshot data 를 변환한다. 각 snapshot 은 각기 트렌젝션에서 refresh 된다. Snapshot Log: snapshot log 는 master table과 관련이 있고 master DB 쪽에 존재한다. 여기에는 mater table에서 update/delete/insert 되는 row 가 저장되며 Snapshot refresh 시 이용된다. 임의의 master table에 기초한 simple snapshot이 refresh되면 snapshot log의 해당 row가 반영된다. 이것을 "fast refresh"라 일컫는다. 한 snapshot log는 같은 master table에 설정된 여러 개의 snapshot log 에 사용되어진다. Log 의 특정 row 는 모든 snapshot 에 의해 필요 없게 되면 삭제가 되어 그 크기가 작게 유지된다. 그러나, 필요로 하는 snapshot 이 하나라도 있으면 지워지지 않는다. Snapshot이 simple snapshot이 아니고 snapshot log가 없으면 fast refresh 는 불가능하며 이 경우 "complete refresh" 에 의해 refresh 된다. ========= 사용 예 : ========= ************************************************** [1] Simple snapshot 과 Snapshot log (on Master): ************************************************** MASTER SITE (REMOTE) -------------------- Create a snapshot log on the master table: sqlplus scott/tiger create snapshot log on emp tablespace users storage (initial 10K pctincrease 0) pctfree 5; NOTE: init.ora 파라미터는 필요하지 않다. SNAPSHOT SITE (LOCAL) --------------------- 1. 다음처럼 initSID.ora 파라미터를 설정한다. snapshot_refresh_interval = 20 snapshot_refresh_processes = 2 snapshot_refresh_keep_connections = true open_cursors = 250 2. sqldba connect internal shutdown startup (init.ora 파라미터 적용) 3. sqlplus scott/tiger create database link chicago connect to scott identified by tiger -- remote, master table의 owner/passwd 지정. using 'chicago'; NOTE:SQL*Net V2 의 'chicago'는 tnsnames.ora에 정의되어 있어야 한다. 4. sqlplus scott/tiger create snapshot emp_snap pctfree 5 pctused 60 refresh fast start with sysdate next sysdate + (1/288) /* 5 분마다 refresh */ as select * from emp@chicago; MASTER SITE (REMOTE) -------------------- 1. sqlplus scott/tiger insert into emp (empno,ename,job,hiredate,deptno) values (1234, 'SCOTT','DBA',sysdate,10); commit; SNAPSHOT SITE (LOCAL) --------------------- 1. sqlplus scott/tiger (or simply switch to client window) select count(*) from emp_snap; snapshot 이 자동으로 refresh 될 때까지 반복한다.(약 5 분) 이 방법은 fast refresh 가 작동됨을 보여준다. (2) REFRESH COMPLETE OPTION 을 이용한 SNAPSHOT. ===================== SNAPSHOT SITE (LOCAL) ===================== Snapshot 생성 --------------- SQL) connect system/manager Connected. SQL) grant resource to saj; Grant succeeded. Database Link 생성 -------------------- SQL) create database link aixlink 2 connect to system identified by manager 3 using 't:tcaix:V716'; Database link created. Create the Snapshot ------------------- SQL) connect saj/saj Connected. SQL) create snapshot deptsnap2 2 pctfree 5 3 pctused 60 4 refresh complete 5 start with sysdate 6 next sysdate + 1/(288*20) /* REFRESH EVERY 15 SECONDS */ 7 as select * from system.dept@aixlink; Snapshot created. |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |