일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Oracle
- 리눅스
- css
- 자바스크립트
- 주식
- 7월 공모주 청약 일정
- jquery
- IPO
- 제이쿼리
- Stock ipo
- 주식 청약 일정
- linux
- 오라클
- 공모주 청약
- 주식 청약
- 맥
- 코드이그나이터
- JavaScript
- 공모주 청약 일정
- 공모주
- SQL
- MYSQL
- codeigniter
- Stock
- Eclipse
- html
- java
- php
- 6월 공모주 청약 일정
- 자바
- Today
- Total
개발자의 끄적끄적
[oracle]오라클 Replication 기능에 대해[펌] 본문
[oracle]오라클 Replication 기능에 대해[펌]
오라클의 replication기능을 사용하면 될 듯합니다.
SCOPE
-----
Standard Edition 은 Symmetric Replication 은 가능하지 않으며, Oracle 8.1.6 이상 부터 Basic Replication 기능은 사용이 가능하다.
(Oracle8i server fully supports bi-directional replication with automated conflict detection and resolution. Supported configurations include a single updatable master site with multiple updatable or read-only snapshot sites.)
SYMMETRIC REPLICATION 구축 예제 (MASTER-MASTER)
==============================================
(1) 두 개의 Master Site 사이의 replication 환경을 구축하는 예를 script로
작성하였다.
(2) 이 문서에서는 table 간의 conflict는 고려하지 않았으며, conflict 발생
가능성이 있는 환경에서는 SCHEMA 구성 시 conflict를 고려하여 table을
생성하여야 한다.
(3) Oracle을 install하면 demo로 만들어지는 SCOTT/TIGER 의 dept, emp
table을 이용하여 구축하였다.
(4) 이 문서에 포함된 모든 대,소문자는 문장 수행에는 전혀 관계가 없으며,
단지 script의 이해를 돕기 위한 것 뿐이다.
(5) Master Definition site의 global_name : MDS.WORLD
Master Site의 global_name : MS.WORLD
REM******************************************************************
REM MASTER DEFINITION SITE SETUP: (master definition site에서 수행)
REM******************************************************************
REM global_name view를 확인한다. 결과는 db_name.db_domain 형태인
REM MDS.WORLD이다.
sqlplus sys/manager
SQL> select * from global_name;
REM global_name을 다음과 같은 형태로 다른 이름으로 변경할 수도 있다.
REM alter database rename global_name to NEW_NAME1.NEW_DBNAME2;
REM SYS user의 권한으로 remote site에서 replication 기능을 수행해야 하는
REM REPSYS user 생성
SQL> drop user REPSYS cascade;
SQL> create user REPSYS identified by REPSYS
default tablespace USERS
temporary tablespace TEMP;
SQL> grant connect, resource to REPSYS;
SQL> execute DBMS_REPCAT_AUTH.GRANT_SURROGATE_REPCAT('REPSYS');
REM public database link를 만든다.
REM MSDB는 tnsnames.ora file 내에 master site의 database를 가리키는
REM alias 이름이다.
SQL> drop public database link MS.WORLD;
SQL> drop database link MS.WORLD
SQL> create public database link MS.WORLD using 'MSDB';
REM database link를 만든 후에는 항상 잘 만들어졌는지 test해보아야 한다.
REM database link에 잘못된 username이나 alias name을 이용해도 database
REM link 생성 시에는 오류가 발생하지 않으나, 이후 deferred transaction이
REM 오류없이 전달되지 못하고 queue에만 쌓여 있는 현상이 발생한다.
SQL> select * from global_name@MS.WORLD;
REM SYS user에서 REPSYS user로 private database link를 만든다.
SQL> create database link MS.WORLD connect to REPSYS
identified by REPSYS;
SQL> select * from global_name@MS.WORLD;
REM replication Administrator user인 REPADMIN user 생성 & database
REM link 생성
SQL> drop user REPADMIN cascade;
SQL> create user REPADMIN identified by REPADMIN
default tablespace USERS
temporary tablespace TEMP;
SQL> grant connect, resource to REPSYS;
SQL> execute DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_REPGROUP('REPADMIN');
SQL> grant execute on DBMS_DEFER_SYS to REPADMIN
with grant option;
SQL> connect REPADMIN/REPADMIN
SQL> create database link MS.WORLD connect to REPADMIN
identified by REPADMIN;
SQL> select * from global_name@MS.WORLD;
REM ****************************************************************
REM REMOTE MASTER SITE SETUP : (Master Site에서 수행)
REM ****************************************************************
REM global_name을 확인한다. 결과는 db_name.db_domain 형태인 MS.WORLD이다.
SQL> connect sys/mansger
REM REPSYS user생성 & database link 생성
SQL> drop user REPSYS cascade;
SQL> create user REPSYS identified by REPSYS
default tarblspace USERS temporary tablespace TEMP;
SQL> grant connect, resource to REPSYS;
SQL>execute DBMS_REPCAT_AUTH.GRANT_SURROGATE_REPCAT('REPSYS');
REM MDSDB는 tnsnames.ora file 내에 master site의 database를 가리키는
REM alias 이름이다.
SQL> drop public database link MDS.WORLD
SQL> drop database link MDS.WORLD
SQL> Create public database link MDS.WORLD using 'MDSDB*;
SQL> select * from global_name@MDS.WORLD
REM SYS user에서 REPSYS로 database link 생성
SQL> create database link MDS.WORLD connect to REPSYS
identified by REPSYS;
SQL> select * from global_name@MDS.WORLD
REM REPADMIN user 생성 & database link 생성
SQL> drop user REPADMIN cascade;
SQL> create user REPADMIN identified by REPADMIN
default tablespace USERS temporary tablespace TEMP;
SQL> grant connect, resource to REPSYS;
SQL> execute DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_REPGROUP('REPADMIN');
SQL> grant execute on DBMS_DEFER_SYS to REPADMIN with
grant option;
SQL> connect REPADMIN/REPADMIN
SQL> create database link MDS.WORLD connect to REPADMIN
identified by REPADMIN;
SQL> select * from global_name@MDS.WORLD
REM ****************************************************************
REM schema 및 데이타 생성 (Master Definition Site에서 수행)
REM ****************************************************************
REM SCOTT user 생성 및 권한 부여
SQL> connect sys/manager
SQL> drop user SCOTT cascade
SQL> create user SCOTT identified by TIGER
default tablespace USERS temporary tablespace TEMP
SQL> grant CONNECT, RESOURCE to SCOTT;
SQL> grant EXECUTE on DBMS_DEFER to SCOTT;
REM SCOTT user의 database link 생성
SQL> connect SCOTT/TIGER
SQL> create database link MS.WORLD connect to SCOTT identified
by TIGER;
SQL> select * from global_name@MS.WORLD;
REM SCOTT user의 데이타 생성, Master Definition Site에서 생성하여야 한다.
REM ORACLE_HOME/sqlplus/demo/demobld.sql script를 이용하였으며,
REM 이 script 내의 DEPT, EMP table을 제외한 나머지 table에 관한 사항은
REM 삭제해도 된다.
REM replication하고자 하는 모든 table은 primary key가 정의되어 있어야
REM 한다.
SQL> @$ORACLE_HOME/sqlplus/demo/demobld
SQL> alter table DEPT add constraint DEPT_DEPTNO_PK PRIMARY KEY
(DEPTNO);
SQL> alter table EMP add constraint EMP_EMPNO_PK PRIMARY KEY
(EMPNO);
REM *****************************************************************
REM SCOTT schema 생성 (Master Site에서 수행)
REM *****************************************************************
REM SCOTT user생성 및 권한 부여
SQL> connect sys/manager
SQL> drop user SCOTT cascade;
SQL> create user SCOTT identified by TIGER
default tablespace USERS temporary tablespace TEMP
SQL> grant CONNECT, RESOURCE to SCOTT;
SQL> grant EXECUTE on DBMS_DEFER to SCOTT;
REM database link 생성
SQL> connect SCOTT/TIGER
SQL> create database link MDS.WORLD connect to SCOTT
identified by TIGER;
SQL> select * from global_name@MDS.WORLD
REM ******************************************************************
REM Replication Objects 등록 (Master Definition Site에서 수행)
REM ******************************************************************
REM SCOTT replication group 생성, 반드시 replication group 이름과 schema
REM 이름이 같을 필요는 없다.
REM 아래의 CREATE_MASTER_REPGROUP을 수행시킴으로써, 이 site가 Master
REM Definition Site임을 지정하게 되는 것이다.
SQL>connect REPADMIN/REPADMIN
SQL> execute DBMS_REPCAT.CREATE_MASTER_REPGROUP('SCOTT');
REM SCOTT replication group 내에 DEPT replication object를 등록한다.
REM 여기에서와 같이 schema name과 group name이 같은 경우, gname 부분은
REM 생략해도 된다.
SQL> execute DBMS_REPCAT.CREATE_MASTER_REPOBJECT ('SCOTT',
'DEPT', 'TABLE' gname=>'SCOTT');
SQL> execute DBMS_REPCAT.CREATE_MASTER_REPOBJECT ('SCOTT',
'EMP', 'TABLE', gname=>'SCOTT' );
SQL> execute DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT('SCOTT','DEPT','TABLE');
SQL> execute DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT('SCOTT','EMP','TABLE');
REM 다음 query 문을 통해 replication object가 바르게 생성되었는지 확인한다.
SQL> select * from DBA_REPOBJECT;
REM 다음을 수행하면 MS.WORLD site에 EMP, DEPT table과 데이타 및 관계된
REM object들이 생성되어, MS.WORLD site에서 dept와 emp를 조회하면 table과
REM data가 조회되어야 한다.
SQL> execute DBMS_REPCAT.ADD_MASTER_DATABASE('SCOTT','MS.WORLD');
여기서 전파자가 없다는 에러 메세지가 뜹니다.
REM 이제까지 수행한 DBMS_REPCAT package 수행에 오류가 있는지 확인한다.
SQL> select ERRNUM, MESSAGE from DBA_REPCATLOG;
REM dba_repcat view를 조회하면 SCOTT group이 QUIESCED mode로 나타나므로,
REM NORMAL mode로 변경해야 dml 작업이 정상적으로 수행된다.
SQL> execute DBMS_REPCAT.RESUME_MASTER_ACTIVITY('SCOTT');
REM 다음 query를 통해 SCOTT replication group이 NORMAL 상태로 변경되었는지
REM 확인한다.
SQL> select * from DBA_REPCAT;
SQL> select * from DBA_REPCAT@MS.WORLD;
REM*******************************************************************
REM Script6.sql asynchronos mode인 경우 자동 propagation 설정
REM (Mater Definition site에서 수행)
REM*******************************************************************
REM 이제 replication 환경의 설정은 끝났으며, 이러한 경우 data의
REM propagation mode는 asynchronous mode이다. asynchronous mode의 경우
REM MDS.WORLD 혹은 MS.WORLD에서 수행한 dml 작업이 자동으로 remote site로
REM 전달되고자 한다면 다음과 같이 SCHEDULE 설정한다. 이 예에서는 10초에
REM 한번씩 deferred queue에 쌓인 transaction을 propagate하도록 한다.
SQL> execute DBMS_DEFER_SYS.SCHEDULE_EXECUTION('MS.WORLD',
'SYSDATE+10/86400', SYSDATE+10/86400);
REM ******************************************************************
REM asynchronous mode인 경우 자동 propagation 설정 (Mater site에서 수행)
REM ******************************************************************
REM master site에서도 자동으로 데이타의 변경 사항이 전달되도록 다음과 같이
REM 설정한다.
SQL> exec DBMS_DEFER_SYS.SCHEDULE_EXECUTION('MDS.WORLD',
'SYSDATE+10/86400', SYSDATE+10/86400);
지나가다님이 2006-08-01 16:52:15에 작성한 댓글입니다. Edit X
"운영서버에 장애가 났을때 백업으로 있던 서버로 서비스하려고 DR서버를 구축하고 있습니다.
두 장비의 환경은 동일합니다. "
위와 같은 상황일때는 hotstandby 가 제일 적절 할꺼 같습니다.
hot 에서 발생 하는 아카이브를 standby에 적용하여 동기화 시키는 방법입니다. hot서버에 부하도 없고 구현 하기도 간단 합니다
출처 : https://m.blog.naver.com/PostView.nhn?blogId=sungjs74&logNo=90009396129
'개발 > sql' 카테고리의 다른 글
[Oracle] 오라클 컬럼(Column) 추가, 삭제 방법 (컬럼 순서 변경) [펌] (0) | 2020.08.24 |
---|---|
[mysql] table comment , mysql 테이블 주석 및 필드 주석 [펌] (0) | 2020.08.24 |
[sql] MySQL Replication(미러링) [펌] (0) | 2020.08.22 |
[mysql] 이중화 구성 (Replication / 리눅스 + 윈도우) [펌] (0) | 2020.08.21 |
[MySQL] mysqldump 스크립트 자동화시 계정에 관한 경고 처리[펌] (0) | 2020.08.21 |