반응형

Oracle Architecture

oracle sever = 인스턴스 + 데이터베이스

인스턴스 : 메모리 상에 생성되는 구조

SGA(System Global Area)

백그라운드 프로세스

데이터베이스 : 디스크 영역에 저장되는 구조

Data files : 데이터가 저장되는 영역

Control files : DB전체의 관리정보가 들어있는 영역

Redo log files : 장애 복구 시에 사용되는 영역

SGA?

-오라클서버의 메모리 영역

-Oracle 인스턴스에 대한 데이터와 제어정보를 가지는 공유 메모리 영역의 집합

-오라클 파라미터 파일(pfile,spfile)의 조정으로 SGA의 각 부분의 크기를 조절

initSID.ora : pfile (정적파라미터변경; 서버를 내리고 해야함)

spfileSID.ora : spfile (동적파라미터변경;)

-Oracle 9i부터 동적으로 변경 가능 (SGA_MAX_SIZE)

-Shared Pool,DataBase Buffer Cache, Redo LogBufferLarge PoolJava Pool로 구성

 

1.Shared Pool

- Shared PoolLibrary CacheData Dictionary Cache로 구성

- Shared Pool은 하나의 데이터베이스에 행해지는 모든 SQL문을 처리하기 위하여 사용

- Shared Pool은 문장을 실행하기 위해 그 문장과 관련된 실행 계획과 구문분석 정보가 들어있음

- SHARED_POOL_SIZE 파라미터 값으로 결정

1) Library Cache

- 가장 최근에 사용된 SQL문장의 명령문과, 구문 분석 트리, 실행계획 정보를 가지고 있음

- LRU(Least Recently Used) 알고리즘으로 관리

- 동일한 문장이 다음 번에 실행되면 Shared SQL 영역에 저장되어 있는 실행계획과 파싱 트리를 그대로 이용하기 때문에 SQL 문장의 처리 속도가 향상(Soft Parsing) <> Hard Parsing : Library Cache가 없는 것

*라이브러리캐시 히트레시오 : 소프트 파싱이 잘되는 rate (보통 90퍼이상)

 

-- TEST SQL 실행

SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 60;
SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 60;
SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 50;

 

-- plan hash value 값 확인

SELECT SQL_ID, SQL_TEXT, HASH_VALUE, PlAN_HASH_VALUE

FROM V$SQL

WHERE SQL_TEXT LIKE '%employees where department_id%'

OR SQL_TEXT LIKE '%EMPLOYEES WHERE DEPARTMENT_ID%';

 

 

 

literal SQL 변수를 바인드 처리해줌( 캐시에 불필요한 sql을 담기 때문 )--> 성능 향상

ex) select empno from emp where empno=:a

* 여러 empno를 조회하더라도 하나의 sql으로 보기 때문에 불필요한 메모리 낭비를 줄일 수 있다.

 

EXACT_MATCHING_SIGNATURE은 다르나 FORCE_MATCHING_SIGNATURE가 같으면 literal sql 변수

 

2) Data Dictionary Cache

- Object(테이블, 컬럼, 사용자 이름, 사용 권한) 같은 가장 최근에 사용된 데이터 사전의 정보를 저장

- 구문 분석 단계에서 서버 프로세스는 SQL문에 지정된 오브젝트 이름을 찾아내고 접근 권한을 검증하기 위해 Dictionary Cache의 정보를 찾아봄

 

3) Shared Pool Size

- 확인

SQL) show parameter shared_pool_size; <프롬프트창>

 

 

SQL) select * from v$parameter where name='shared_pool_size'; <접속툴:Orange>

 

 

- 변경

SQL) alter system set shared_pool_size=10m;

 

select * from v$sgastat;  - sga를 구성하는 4가지 pool의 크기를 이곳에서 조회할 수 있다.

select * from v$parameter  -  현재 세션의 현재 파라미터의 값 표시

 

SELECT * FROM V$PARAMETER

WHERE NAME = 'shared_pool_size';

 

 

 

SQL) alter system set shared_pool_size=13m;

 

 

==> 분명 10M, 13M로 변경하였는데 16M로 바뀌어있다. Granule사이즈 때문인데 아래에서 살펴보자

 

4) Granule

- Granule은 가상 메모리 상의 연속된 공간으로, dynamic SGA 모델에서 할당할 수 있는 최소 단위

- Granule의 크기는 SGA_MAX_SIZE에 따라 다음과 같이 구분

    if estimated SGA size is < 1G 4MB

    else 16MB

- Dynamic SGA를 사용할 수 있는 SGA관련 파라미터는 이 Granule 단위로 늘어나거나 줄어듬

 

2. Database Buffer Cache (Buffer Cache)

- 가장 최근에 사용된 데이터를 저장하는 메모리 공간

- DB Buffer Cache 용량이 적을 경우 디스크 I/O가 많아져 부하가 생겨 성능 저하

- 이 버퍼는 아직까지 디스크에 완전히 쓰여지지 않는 수정된 데이터를 보유할 수도 있음

- LRU 알고리즘에 의하여 가장 오래 전에 사용된 것은 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이터를 저장함으로, 디스크 입 출력이 줄어들고, 데이터베이스 시스템의 성능이 증가됨

- 데이터를 조회 -> 해당 데이터를 먼저 Database Buffer Cache에서 찾고 있으면 반환(Logical Read),

없으면 Database Buffer CacheFree Buffer를 일단 확보 후 Disk에서 데이터를 읽어 들여 cache하여 반환 (Physical Read)

 

Database Buffer Cache Block의 상태

- Pinned Buffer : 다른 사용자가 이미 사용하고 있는 Buffer Block으로 사용할 수 없음

- Dirty Buffer : 현재 작업은 진행되지 않지만 다른 사용자가 내용을 변경한 후 아직 데이터 파일에 변경된 내용을 저장 하지 않은 Buffer

- Free Buffer : Buffer는 사용되지 않았거나(Unused) 또는 Dirty Buffer였다가 디스크로 저장이 되고 다시 재사용 가능하게 된 Block

 

LRU List : Buffer Block들의 상태를 관리하고 있는 list

- 수많은 사용자가 동시에 Physical Read를 하여 동시에 Database Buffer CacheFree Buffer를 찾으려고 할 때 이 LRU List를 참조 -> 동시성 관리를 위해 순번제공 (Latch) -> 본인 순번이 올 때까지 대기

 

-확인

show parameter db_cache_size; <프롬프트창>

select * from v$parameter

where name ='db_cache_size';

 

-변경

SQL> alter system set db_cache_size=10m;

 

 

==> 이또한 Granule 사이즈 영향을 받는다.

 

3. Redo Log Buffer

· Redo 로그 버퍼는 데이터베이스에서 일어난 모든 변화를 저장하는 메모리 공간

· 장애 발생 시 복구를 위해 모든 변경사항 저장

· Redo Log Buffer에 기록하지 않는 경우도 있음

- Direct Load(SQL Loader, insert /+*append*/)

- table 이나 indexnologging 옵션의 경우

- , table nologging DML작업의 경우 제한적으로 Redo log에 기록

· DB에서 발생한 모든 변화는 LGWR에 의해 Redo 로그 파일에 저장

· LOG_BUFFER로 크기 지정

· 동적으로 Size 변경 불가능

 

4. Large Pool ( 위에 3까지가 중요하고 다음은 0으로 설정해도 무관 )

- Oracle 백업 및 복원 작업에 대한 대용량 메모리 할당, I/O 서버 프로세스 및 다중 스레드 서버와 Oracle XA에 대한 세션 메모리를

    제공하는 SGA의 선택적인 영역

      · RMAN으로 백업 및 복구를 할 경우 RMAN이 사용하는 I/OBuffer

      · Parallel Execution 작업을 할 경우 각 프로세스 간 Message Buffer

      · Shared Server ModeOracle Server 운영 시 UGA 

- LARGE_POOL_SIZE 파라미터로 관리되며, 기본크기는 0

 

5. Java Pool

- 자바로 작성된 프로그램을 실행할 때 실행 계획을 저장하는 영역

- JAVA_POOL_SIZE 파라미터로 관리되며, 기본크기 24MB가 할당

 

6. Streams Pool

- 10g New Feature

- Stream 기능 사용할 경우에만 사용되어 기본 값은 0

- 오라클 내부적으로 redolog 변경된 내용을 추적하여 타 DB로 복제

 

7. Fixed SGA

- Oracle이 내부적으로 사용하기 위해 생성시키는 공간

- 주로 백그라운드 프로세스들이 필요한 database 전반적인 공유 정보나 각 프로세스들끼리 공유해야 하는 lock 정보 같은 내용들이 저장

- Oracle이 시작될 때 자동으로 설정되며 사용자나 관리자가 임의로 변경 할 수 없음

 

SGA 사이즈 확인

- Total System Global Area : 전체 SGA 영역

- Fixed Size : 백그라운드 프로세스들이 사용하는 예약된 공간

- Variable Size : Shared Pool, Large Pool, Java Pool 공간

- Database Buffers : Database Buffer Cache 영역

- Redo Buffers : Redo log Buffer 영역

SQL > show SGA

 

 

Dynamic SGA 기능

- Oracle 9i 이후부터 등장하게 된 SGA 동적 관리 기법

- 파라미터의 크기를 Oracle Instance 재 기동 없이 변경할 수 있음

- Dynamic SGA를 사용할 수 있는 SGA 관련 파라미터는 DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE,

 

JAVA_POOL_SIZE

- SGA 파라미터의 합은 SGA_MAX_SIZE보다 작아야 함

- SGA_MAX_SIZE는 동적으로 변경 불가능

- 파라미터 사이즈 할당 시 Granule 단위로 할당됨

 

PGA(Program Global Area)

- 하나의 단일 프로세스에 대한 데이터와 제어 정보를 가지고 있는 메모리 공간을 USER PROCESSOracle Database에 접속하고

Session이 생성될 때 Oracle에 의해 할당(1:1)

- SERVER PROCESS에 하나만 할당되는 PGA 메모리 영역은 SGA영역과 달리 다른 프로세스와 공유되지 않는, 각 프로세스가

독립적으로 사용하는 non-shared 메모리 영역

- PGA는 프로세스가 생성될 때 할당되며 프로세스가 종료될 때 해제됩니다.

- PGA_AGGREGATE_TARGET라는 값을 통해 사이즈 설정

- 메모리 가득 차면 temp tablespace로 감

  1) Private SQL Area

· User Process로부터 전달받은 SQLBind 변수 값 보관

· Query의 실행 상태 정보 및 Query의 임시 정보 저장

 

2) SQL Work Area

· SortHash관련 작업을 수행하는 공간

· order byunion과 같은 정렬작업을 필요로 하는 SQL 구문 실행 시 1차적으로 해당 공간에서 작업 수행

· INDEX 생성 작업 역시 정렬이 필요하므로 해당 영역에서 1차적 작업 수행

· WORKAREA_SIZE_POLICY

- PGA의 각 영역의 메모리 할당 방식을 지정해 주는 파라미터

- MANUALAUTO(default)관리 방식으로 나뉨

- 세션 별, 시스템 별 설정 가능

SQL> alter session | system set WORKAREA_SIZE_POLICY = AUTO | MANUAL

- PGA_AGGREGATE_TARGET=0 이면 자동으로 WORKAREA_SIZE_POLICY = MANUAL로 설정되면서

PGA의 개별 구성요소 값을 수동으로 설정 해야 함

- PGA_AGGREGATE_TARGET > 0 이면 자동으로 WORKAREA_SIZE_POLICY = AUTO로 설정되면서

PGA의 개별 구성요소 값을 오라클 서버가 자동으로 설정

 

SQL> select * from v$PARAMETER

WHERE NAME in ('pga_aggregate_target'

,'workarea_size_policy'

,'sort_area_size'

,'hash_area_size'

,'bitmap_merge_area_size'

,'create_bitmap_area_size');

 

 

--PGA_AGGREGATE_TARGET의 사이즈가 0일 때 SGA 사이즈의 20% SGA*0.210M중 최대 값 으로 설정

--> 그래서 WORKAREA_SIZE_POLICYAUTO설정

SQL> ALTER SESSION SET WORKAREA_SIZE_POLICY=AUTO;

SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET=110M;

 

--세션 별 PGA SIZE확인

SELECT S.SID, S.SERIAL#, P.SPID AS "OS PID", S.USERNAME, S.MODULE, S.TERMINAL, S.SQL_ID, S2.SQL_TEXT, P.PGA_USED_MEM/1024/1024 AS "SIZE(MB)"

FROM V$PROCESS P, V$SESSION S, V$SQL S2

WHERE S.PADDR = P.ADDR

AND S.SQL_ID = S2.SQL_ID(+);

 

 

반응형

1. 일반적인 Oracle server 구성방식

* Process : A는 작업장1로 복사해와서 작업을하고, B는 작업장2로 복사를 해와서 작업을 하며 저장을 database에 한다. 이렇게 instance와 database 사이를 왔다 갔다 하면서 작업을 해주는 구성요소

  - server process

  - backgroud process

 

■ Oracle Server의 구성 방식

  - single server 구성 : 하나의 Database에 하나의 instance가 할당되는 구성

==> 일반적으로 DB서버 구현시 1개의 서버를 사용하는데, 이런 경우 istance 역할을 하는 서버에 장애 발생했을 때 storage에 저장된 데이터를 사용할 수 없게 되는 위험이 존재

 

  - OPS(8i버전까지) 또는 RAC(9i버전부터) : 하나의 database에 여러 개의 instance로 구성하는 방식

 

 

 

 

 

2. HA 구성 (High Availability = 고가용성)

  똑같은 장비 두개를 구축해서, 하나는 실제 서비스(active)를 하고, 한대는 대기상태(standby)로 두는 서버구성방식 그래서 active상태였던 서버가 고장나면, standby상태의 서버가 즉시 active 상태로 바뀌어서 투입되는 서비스 중단이 발생하지 않도록 조치되는 구성

 

 

 

※ 문제점

1. 비용이 많이 듬

2. 데이터 동기화 문제 : active 상태의 node에서 작업을 하다가 db가 죽으면, standby 상태의 node로 작업을 할 수는 있다고 쳐도, 데이터가 동기화 되지 않았으므로, 데이터는 이미 날라간 상태

  ==> 미러링을 어떻게 해 줄거냐에 따라서 성능이 결정

       * 미러링 : 장비가 고장나는 사고 생겼을때, 데이터가 손실되는것을 막기위해 데이터를 하나 이상의 장치 중복저장하는 것

  ==> DG(data guard) (HA구성 방식으로 사용시, 데이터 동기화 문제를 해결하기 위해 오라클에서 제공하는 무료 프로그램)

       : 운영 db를 백업받는 용도로 규칙적으로 동기화 ( 별 쓸모 없음 )

** 24X7X365(무정지) : 하루 24시간 7일 365일 내내 stop 하는 시간으로 -> 0이 될 수록 좋음.

 

3. OPS(Oracle Parallel Server)

  하나의 storage에 두 개의 instance가 연결되어 있는 구성으로, 사용자가 각각 다른 instance에 접속을 해도 storage가 하나이므로, 같은 데이터를 조회, 변경할 수 있음.

 

※ 장점

만약 1개의 instance에서 장애가 발생할 경우 남아 있는 다른 instance를 통해 storage에 접근가능하기 때문에 서비스가 중단되는 경우를 예방할 수 있다. (데이터가 날라가지 않음. 그 데이터 그대로 다른 instance에서 쓸 수 있음)

 

 

** 문제점 : RAC ping

 

 

 

[현재 상황] : storage에 저장된 홍길동 데이터를 A사용자가 instance1로 접속해서 조회하고, B사용자는 instance2에 접속한 후 조회.

                   이후에 A사용자가 홍길동을 일지매로 update한 후 commit까지 완료

[문제 발생] : 이때 instance2에 접속해 있는 B사용자가 홍길동 데이터를 조회할 경우 일지매라는 데이터가 보여야하는데,

                    instance1에서 변경완료후 commit된 일지매 데이터를 instance2로 가져오기 위해서 storage에 우선 저장 후 instance2로 가져와야 함

* RAC Ping 이란 Instance 1 에서 변경 완료 된 데이터를 Instance 2로 가져오기 위해서 우선 디스크에 저장을 한 후 해당 데이터를 Instance 2 로 복사해 오는 작업. 이런 과정이 디스크를 사용해서 시간이 오래 걸리기 때문에 OPS 환경에서 RAC Ping 작업은 성능 저하의 주요 원인으로 지적됨

 

4. HA와  OPS의 비교

 

HA  

  - standby 상태의 서버는 장애를 대비하여 대기만하고, 실제 서비스에는 전혀 도움을 주지 않음.

  - Active 상태의 서버 장애 발생시, 해당 서버에 접속해 있던 연결들은 모두 접속 종료 후 standby서버가 가동되면서 다시 접속됨

    즉, active상태였던 서버에서 하던 작업들은 모두 취소

  - 비용이 많이 들고 굉장히 비 효율적

  - 각 서버 별로 Storage를 별도로 가지고 있기 때문에 active상태였던 서버에서 변경된 작업이 standby상태 서버에 반영되지 못할 경우

    데이터 불일치 현상이 생길 수 있음.(데이터 동기화 문제) 

  - 두 개의 서버로만 구성할 수 있음

OPS

  - 두 노드 모두가 Active상태로 동작하기에 이론적으로는 부하가 50%로 분산될 수 있고, 서비스 속도도 두 배 빨리 짐

  - OPS의 경우에는 CTF나 TAF라는 설정이 되어있을 경우 기존 서버에 장애가 발생했을 경우 작업을 그대로 다른 서버로 이전시킬 수 있음

    (단, 수행 중이던 작업의 종류에 따라 다름)

  - 1개의 storage를 공유하므로 한 서버에서 변경된 작업을 다른 서버에서도 그대로 반영

  - OPS나 RAC는 이론적으로 서버수의 제한이 없이 확장이 가능함

  - Down Time을 획기적으로 줄일 수 있음

  - RAC ping이라는 현상으로 심각한 성능저하 발생

 

 

5. RAC(Real Application Cluster) (9i버전부터)

  OPS의 RAC ping문제가 개선되어 성능이 크게 향상 된 것으로, oracle9i버전부터는 서로 다른 instance에서 변경된 데이터를 디스크를 거치지 않고 바로 instance로 가져올 수 있는 기능인 Cache Fusion(캐쉬 퓨젼)이라는 기능이 사용됨.

 

 

* public network (public 망) : ip 3개 중 관리자가 유지,보수 할 때 쓰는 것으로 public 망에 붙어쓰는게 vip인데, service ip임

* inter connect = private network (private 망) : instance1과 instacne2를 연결하는 망

* cache fusion : instance1에 있는 데이터와 instance2에 있는 데이터를 서로 즉시 볼 수 있고, 어떤 물리적인 instance에서 작업을

                       하든지 내용 구분없이 섞여 있으므로 cache fusion이라고 부름

 

■ 클러스터용 소프트웨어

CRS (10g R1) --> clusterware (10g R2) --> Grid(11g)

10g R1버전부터 클러스터용 프로그램을 오라클에서 직접 만들어 제공하기 시작. 10g R2버전부터 클러스터웨어라는 용어로 부름.

11g에서는 ASM기능이 통합되어 grid라는 명칭으로 변경. Grid는 여러개의 local lock 떨어져 있는 것을 하나로 묶어 줌

 

■ clusterware (10g R2)

동일한 데이터를 동시에 변경을 하게 되는 문제가 생기지 않도록 관리해주는 역할

 

 

■ ASM기반

 

  - 10g R2까지는 OCR과 Vote disk를 ASM storage에 저장할 수 없기 때문에 별도의 Raw device를 구성해서 저장해야 함

  - 11g부터는 OCR이나 vote disk가 전부 ASM에 들어감

 

* OCR (Oracle Cluster Repository) : RAC 구성의 전체 정보를 저장하고 있는 디스크로, RAC에서의 핵심역할을 함

  - RAC를 시작할 때 OCR에 저장되어 있는 정보를 보고 RAC를 구성해야 하는데, 10g RAC까지는 RAC 시작 후 ASM instance를 시작하기 때문에

    OCR을 ASM에 저장할 경우 RAC를 시작할 수 없게 되는데, 그래서 별도의 Raw device에 저장 (최소크기 100MB)

 

* VoteDisk : 각 Node들이 장애가 있는지 없는지를 구분하기 위해서 사용하는 일종의 출석부 같은 역할을 하며,

                  cssd가 보내는 heartbeat에 응답을 보내면서 매 초마다 vote disk에도 자신이 정상적으로 동작하고 있다는 표시를 해둠

  - RAC를 구성하는 프로세스 중 cssd라는 프로세스가 각 Node들이 정상적으로 작동하고 있는지 interconnect를 통해 매 초마다

    핑(heartbeat)을 보내고 각 node들은 그에대한 응답을 다시 보내어 자신이 정상적으로 동작하고 있다는 것을 알려줌.

    ==> 만약 어떤 이유로 특정 node가 heartbeat에 응답하지 못했을 때, cssd는 2차로 vote Disk를 확인. 그 vote disk를 확인해보고

         그곳에서 해당 node의 표시가 없다면 해당 node가 장애가 생겼다고 가정하고 해당 node를 cluster에서 제외하고 재부팅한다.

         만약 heartbeat에응답이 없었는데, votedisk에 해당 node의 표시가 있다면, node가 바빴다고 생각하고 넘어간다.

         (최소크기 20MB, 3개로 다중화해서 구성하기를 권장)

 

6. Cache Fusion

  1) Cache Fusion 개념

     : 물리적으로 떨어져 있어도 하나로 만들어 주는 것

 

RAC 에서는 어떤 Instance 에서 작업을 해도 하나의 서버에서 작업을 하는 것과 같은 효과를 내게 되는데 이런 것을 가능하게 해 주는 RAC의 대표먹인 서비스 두가지가 GES , GCS 

GES (Global Enqueue Service) 란 어떤 Instance 에서 데이터 변경작업 ( 트랜잭션 ) 을 하든 하나의 Instance 에서 데이터 변경 작업을 하는것과 같이 관리하는 기능

GCS (Global Cache Fusion) 란 Cache Fusion 기능이 구현되기 위한 필수 서비스로서 어떤 사용자가 자신의 Instance 에서 원하는 데이터를 찾지 못해서 다른 Instance 에 있는 데이터를 요청했을 때 Insterconnect 를 통해서 데이터를 전달해 주는 서비스를 말함

GCS 에서는 데이터 블록을 전송하고 관리할 때 아래의  3가지 모드로 구분함 

  - Null (N) 모드 : 해당 블록을 사용중인 사용자가 없다는 것을 뜻함

  - Share (S) 모드 : 해당 블록을  select 하고 있는 세션이 있다는 뜻함

  - Exclusive (X) 모드 : 해당 블록을 누군가가 변경하고 있다는 뜻함

 

3. Interconnnect ( 인터커넥트 ) 란?

  - 앞에서 살펴본 예에서 알 수 있듯이  RAC의 핵심 기능인 Cache Fusion이라는 특징 때문에 블록들이 이동하는 길인  

    Interconnect 가 RAC 전체 성능에 아주 중요한 역할

  - Interconnect  를 통해 이동하는  정보는  크게  Clusterware  가  Cluster 를  유지하고  운영하기 위해 사용하는 정보와 실제 데이터 블록 ,

    Parallel Query 관련 정보들이 있음 

  - 일반적으로  Cluster 를 유지하고 운영하는 정보인  GCS/GES 관련 정보는  256 bytes 정도로 아주 작지만  실제  데이터  블록은  DB_BLOCK_SIZE   

    ( 10g/11g  기준으로  기본  크기는  8k )  나  Non-Standard Block Size 의 크기로 GCS/GES 정보에 비해 아주 큼

  - Parallel Query 관련 정보는  Parallel_Execution_message_size 에 의해 크기가 결정되는 데 기본크기는  8k 로 설정

  - 이런 내용들이 얼마나 자주 왕래하느냐가 성능에 아주 중요한 영향을 주게 되며 당연히 가급적이면 이동하는 양을 줄이는 것이 튜닝에 아주

      핵심적인 관점 

  -  RAC 튜닝에서  Interconnect 의 사용량을 측정하여 튜닝하는 것이 아주 자주 언급

즉,  Interconnect 를 사용하는 량을 줄이거나 혹은  Interconnect 의 속도를 높이는 것이  RAC 튜닝 에서 아주 중요하다는 뜻 

 

반응형

■ (rac1) Oracle 엔진 설치

# cd /home/oracle/database

# . runInstaller

 

 

좀 오래걸립니다

  ** rac1 rac2 순서대로 진행하며 동시 실행시키지 말 것.

 

(rac1) OCR & Voting disks ASM -> Raw Device로 변경

- root 계정으로 변경

[oracle@rac1 ~]$ su - root

Password:

- OCR raw device 추가

[root@rac1 db]# ocrconfig -add /dev/raw/raw1

[root@rac1 db]# ocrconfig -add /dev/raw/raw2

 

- 기존 OCR 디스크 제거

[root@rac1 db]# ocrconfig -delete +DATA

 

- ocrcheck로 변경사항 확인

[root@rac1 db]# ocrcheck

 

- 기존 VOTE 디스크를 rawdevice로 교체

[root@rac1 db]# crsctl replace votedisk /dev/raw/raw3 

 

- VOTE 디스크 추가 : 3개의 디스크로 구성

[root@rac1 db]# crsctl add css votedisk /dev/raw/raw4

[root@rac1 db]# crsctl add css votedisk /dev/raw/raw5

 

- VOTE 디스크 변경사항 확인

[root@rac1 db]# crsctl query css votedisk

 

Database 생성스크립트 제작

-(rac1) dbca 실행

[root@rac1 db]# su - oracle

[oracle@rac1 ~]# dbca 

 

 

 

DATA disk group에서 임시로 사용했던 raw device 데이터 삭제

[root@rac1 db]# dd if=/dev/zero of=/dev/raw/raw6 bs=8k

[root@rac1 db]# dd if=/dev/zero of=/dev/raw/raw7 bs=8k

[root@rac1 db]# dd if=/dev/zero of=/dev/raw/raw8 bs=8k

 

DB 생성 스크립트 수정 (rac1만 수정)

[root@rac1 ~]# su - oracle

[oracle@rac1 ~]$ cd /oracle11/oracle/admin/racdb/scripts

 

 

[oracle@rac1 scripts]$ vi racdb1.sql

(변경전)


(변경후)

[oracle@rac1 scripts]$ vi CreateDB.sql

(변경전)

(변경후)

[oracle@rac1 scripts]$ vi CreateDBFiles.sql

(변경전)

(변경후)

[oracle@rac1 scripts]$ vi postDBCreation.sql

(변경전)

(변경후)

[oracle@rac1 scripts]$ vi init.ora

권한 때문에 에러가 날 수도 있으니 실행전 한번 더 수행!

chown -R oracle.dba /home/oracle

chown -R oracle.dba /oracle11

 

(rac1에서 실행)

[oracle@rac1 scripts]$ . racdb1.sh

계정 설정한 암호 3번 입력!

 

rac1 완료후에

 

(rac2에서 실행)

[oracle@rac2 scripts]$ . racdb2.sh

계정 설정한 암호 3번 입력!

-(rac1) ASM resource 제거

[oracle@rac1 scripts]$ srvctl stop database -d racdb

[oracle@rac1 scripts]$ srvctl stop diskgroup -g data

[oracle@rac1 scripts]$ srvctl stop asm -n rac1 -f

[oracle@rac1 scripts]$ srvctl stop asm -n rac2 -f

[oracle@rac1 scripts]$ srvctl remove diskgroup -g data -f

[oracle@rac1 scripts]$ srvctl remove asm -f

[oracle@rac1 scripts]$ srvctl modify database -d racdb -z

[oracle@rac1 scripts]$ srvctl start database -d racdb

 

-(rac1) RAC 전환

[oracle@rac1 scripts]$ srvctl stop database -d racdb

[oracle@rac1 scripts]$ sqlplus / as sysdba

SQL> startup

SQL> alter system set cluster_database=true scope=spfile sid='*';

SQL> shutdown immediate

SQL> exit

- rac1 확인

[oracle@rac1 scripts]$ srvctl start database -d racdb

[oracle@rac1 scripts]$ sqlplus / as sysdba

SQL> select instance_name,status from v$instacne;

- rac2 확인

[oracle@rac2 scripts]$ sqlplus / as sbsdba

SQL> select instnace_name, status from v$instance;

'Study Note > Database' 카테고리의 다른 글

Oracle Architecture  (0) 2016.01.27
Oracle RAC(Real Application Clusters)  (0) 2016.01.27
Oracle 11g RAC 설치 on OEL - 3  (0) 2016.01.25
Oracle 11g RAC 설치 on OEL - 2  (0) 2016.01.25
Oracle 11g RAC 설치 on OEL - 1  (0) 2016.01.25
반응형

  vi /etc/ssh/sshd_config

Permitrootlogin yes 주석 해제

/etc/hosts 파일 수정

1. vi 편집기로 /etc/hosts 파일 수정

# vi /etc/hosts

2. 아래와 같이 내용 편집

127.0.0.1 localhost.localdomain localhost

# Public

192.168.40.11    rac1

192.168.40.12    rac2

# Private192.168.2.120    rac1-priv

192.168.2.130    rac2-priv

# VIP

192.168.40.21    rac1-vip

192.168.40.22    rac2-vip

192.168.40.23    rac-scan

앞서 설정한 Pulic Private, VIP IP를 설정해준다.

참고로 여기에 적힌 IPVMware마다 다르니 참고할 것!!

# service network restart

- 필요 없는 서비스 중지 ( 부팅 속도가 빨라질 수 있음)

chkconfig --level 123456 xinetd off

chkconfig --level 123456 sendmail off

chkconfig --level 123456 cups off

chkconfig --level 123456 cups-config-daemon off

chkconfig --level 123456 smartd off

chkconfig --level 123456 iptables off

 

- 오라클 계정 생성

groupadd -g 5000 dba

groupadd -g 5001 oinstall

useradd -g oinstall -G dba -d /home/oracle oracle

passwd oracle

 

- 공유 메모리 설정

# vi /etc/sysctl.conf

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.wmem_max = 1048576

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

fs.file-max = 6815744

fs.aio-max-nr = 1048576

 

# sysctl -p // sysctl.conf 에 있는 설정을 로드한다.

 

- 공유 자원 설정

# vi /etc/security/limits.conf

grid soft nproc 2047

grid hard nproc 16384

grid soft nofile 1024

grid hard nofile 65536

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

 

- /etc/pam.d/login 파일 내용 추가 

session required pam_limits.so

 

- /etc/modprobe.conf 파일 내용 추가

# vi /etc/modprobe.conf

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

 

 

/etc/rc.local 파일 내용 추가

# vi /etc/rc.local

/sbin/modprobe hangcheck-timer rdate -s 203.248.240.140

 

/etc/sysconfig/ntpd파일 내용 추가

# vi /etc/sysconfig/ntpd

OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"

=> 2번째 줄 -x 옵션 추가 후 저장

 

 

# service ntpd restart

# chkconfig --level 123456 ntpd on

 

[root@rac1 Server]# pwd

/media/OL5.9 i386 dvd 20130111/Server

**** 위에 경로가 없을 시 리눅스 셧다운 후 iso 다시 마운트 하고 재부팅 시 생성 됨

# rpm -Uvh libaio-devel-0.3.106-5.i386.rpm

# rpm -Uvh numactl-devel-0.9.8-12.0.3.el5_6.i386.rpm

# rpm -Uvh unixODBC-*

 

- rac1 환경 변수 설정

[root@rac1 ~]# vi .bash_profile

export GRID_HOME=/oracle11/11g/grid

export PATH=$PATH:$HOME/bin:$GRID_HOME/bin

 

[root@rac1 ~]#  vi /home/oracle/.bash_profile

export PATH

export EDITOR=vi

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_HOSTNAME=rac1

export ORACLE_UNQNAME=racdb

export ORACLE_BASE=/oracle11/oracle

export ORACLE_HOME=$ORACLE_BASE/11g/db

export GRID_HOME=/oracle11/11g/grid

export ORACLE_SID=racdb1

export ORACLE_TERM=xterm

export PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

 

Disk 설정

# fdisk /dev/sdb

n - p - 1 - 엔터 - 엔터 - t - 8e - p - w 순 으로 입력

The number of cylinders for this disk is set to 1305.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-1305, default 1): 엔터

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): 엔터

Using default value 1305

Command (m for help): t

Selected partition 1

Hex code (type L to list codes): 8e

Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/sdb1 1 1305 10482381 8e Linux LVM

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

#

 

# pvcreate rac /dev/sdb1

#vgcreate rac /dev/sdb1

 

- Logical Volume 생성

pvcreate rac /dev/sdb1

vgcreate rac /dev/sdb1

lvcreate -L 300M -n ocr01 rac

lvcreate -L 300M -n ocr02 rac

lvcreate -L 300M -n vote01 rac

lvcreate -L 300M -n vote02 rac

lvcreate -L 300M -n vote03 rac

lvcreate -L 700M -n system rac

lvcreate -L 700M -n sysaux rac

lvcreate -L 700M -n users rac

lvcreate -L 700M -n undotbs1 rac

lvcreate -L 700M -n undotbs2 rac

lvcreate -L 700M -n temp rac

lvcreate -L 100M -n control01 rac

lvcreate -L 100M -n control02 rac

lvcreate -L 100M -n control03 rac

lvcreate -L 200M -n redo01 rac

lvcreate -L 200M -n redo02 rac

lvcreate -L 200M -n redo03 rac

lvcreate -L 200M -n redo04 rac

lvcreate -L 200M -n redo05 rac

lvcreate -L 200M -n redo06 rac

lvcreate -L 100M -n spfile rac

 

■ 생성 확인

# lvscan

 

- Raw Device Rule 구성

# vi /etc/udev/rules.d/60-raw.rules

ACTION=="add", KERNEL=="raw*", OWNER=="oracle", GROUP=="dba", MODE=="0660"

 

- Raw Device Mapping

# vi /etc/sysconfig/rawdevices

/dev/raw/raw1 /dev/rac/ocr01

/dev/raw/raw2 /dev/rac/ocr02

/dev/raw/raw3 /dev/rac/vote01

/dev/raw/raw4 /dev/rac/vote02

/dev/raw/raw5 /dev/rac/vote03

/dev/raw/raw6 /dev/rac/system

/dev/raw/raw7 /dev/rac/sysaux

/dev/raw/raw8 /dev/rac/users

/dev/raw/raw9 /dev/rac/temp

/dev/raw/raw10 /dev/rac/undotbs1

/dev/raw/raw11 /dev/rac/undotbs2

/dev/raw/raw12 /dev/rac/redo01

/dev/raw/raw13 /dev/rac/redo02

/dev/raw/raw14 /dev/rac/redo03

/dev/raw/raw15 /dev/rac/redo04

/dev/raw/raw16 /dev/rac/redo05

/dev/raw/raw17 /dev/rac/redo06

/dev/raw/raw18 /dev/rac/control01

/dev/raw/raw19 /dev/rac/control02

/dev/raw/raw20 /dev/rac/control03

/dev/raw/raw21 /dev/rac/spfile

 

- Raw Device 재시작

# /etc/init.d/rawdevices restart

 

 

- Raw Device 권한 확인

ls -al /dev/raw/raw*

폴더 복사

1. 윈도우의 내컴퓨터 실행

2. C:\VM\Rac1 폴더 이동 // 나의 VMware 파일 경로

3. 아래 2개의 파일을 복사 (Ctrl + C) // 파일 아이콘 및 유형으로 확인할 것

Rac 설치 준비를 해둔 VMware 파일을 이용하여 Rac 두번째 노드를 손쉽게 구성하기 위해서 복사를 한다.

이 과정을 대신에 직접 Rac2 노드를 생성해도 된다.

 

폴더 이동

1. C:\VM 폴더에 Rac2 폴더 생성

2. C:\VM\Rac2 폴더에 복사한 파일 붙여넣기 (Ctrl + V)

3. 파일이름 변경 (Rac1 -> Rac2)

VMware 설정 파일 변경

1. 이름을 변경한 Rac2 파일중 Configuration 파일을 메모장으로 오픈 (용량이 가장 적은 파일)

2. 검색 기능 (Ctrl + F) 을 이용하여 Rac1 을 검색 후 모두 Rac2 로 바꿔줌

3. 저장 후 종료

4. 변경 완료 된 설정 파일 실행 (더블 클릭)

파일은 복사해 왔지만 VMware 의 설정은 모두 Rac1 로 되어있을 것이기 때문에 이를 Rac2 로 변경해주는 것이다.

 

Rac2 VMware 에 추가

1. VMware 가 실행되면서 Rac2 가 추가됨

2. Rac2 실행

 

복사한 Node 2 초기 설정 변경

복사 유,

I copied it 클릭

 

 

rac2 환경설정

# neat

# service network restart

 

# vi .bash_profile

export GRID_HOME=/oracle11/11g/grid

export PATH=$PATH:$HOME/bin:$GRID_HOME/bin

추가

 

# vi /home/oracle/.bash_profile

export ORACLE_HOSTNAME=rac2

export ORACLE_SID=racdb2

수정

 

설치파일 복사 및 RAC 설치 전 기본 환경설정

- (rac1) 파일 이동 후 압축 풀기

cd /home/oracle

unzip *.zip

 

- 설치파일 설치 디렉토리 소유권 oracle 계정으로 이전

(rac1,2전부 수행)

# chown -R oracle.dba /home/oracle

# chown -R oracle.dba /oracle11

 

- (rac1) cvuqdisk RPM 설치

[root@rac1 ~]# cd /home/oracle/grid/rpm

[root@rac1 rpm]# ls

cvuqdisk-1.0.7-1.rpm

[root@rac1 rpm]# export CVUQDISK_GRP=dba

[root@rac1 rpm]# rpm -Uvh cvuqdisk-1.0.7-1.rpm

- (rac1) scp를 이용하여 rac2노드에 cvudisk 복사

[root@rac1 rpm]# scp cvuqdisk-1.0.7-1.rpm rac2:~/

 

- (rac2) cvuqdisk-1.0.7-1.rpm 설치

[root@rac2 ~]# export CVUQDISK_GRP=dba

[root@rac2 ~]# rpm -Uvh cvuqdisk-1.0.7-1.rpm

 

- (rac1) Grid Infrastructure 설치

rac1oracle 계정 rac2root계정으로 로그인

[root@rac1 rpm]# su - oracle

[oracle@rac1 ~]$ cd /home/oracle/grid/

[oracle@rac1 grid]$ . runInstaller

 

rac1, rac2 위의 쉘을 root계정으로 수행 후 OK

ignore All 체크 후 Next

65%에서 한동안 멈춤 당황하지 말 것.

script 실행 순서 :

rac1 - 1sh

rac1 - 2sh

rac2 - 1sh

rac2 - 2sh2sh돌릴 때 입력키는 그냥 Enter

** 절대 동시에 실행 시키지 말 것 !! 순서 지켜 실행시킬 것!!

원래 뜨는 에러이니 당황하지 말 것

 

 

[root@rac1 oracle]# crs_stat -t

 

 이 화면 나온다면 crs 설치 완료

'Study Note > Database' 카테고리의 다른 글

Oracle Architecture  (0) 2016.01.27
Oracle RAC(Real Application Clusters)  (0) 2016.01.27
Oracle 11g RAC 설치 on OEL - 4  (0) 2016.01.25
Oracle 11g RAC 설치 on OEL - 2  (0) 2016.01.25
Oracle 11g RAC 설치 on OEL - 1  (0) 2016.01.25
반응형

2. OEL 설치

(리눅스 설치 및 네트워크 ip 설정)

boot 화면에서 Enter --> Skip 클릭! --> NEXT! --> english --> U.S. English

--> 경고시 YES --> Create custom layout 으로 파티션 설정

※ 각 Mount Point 별 용량 할당량

  / 7000

 /boot 100

 /var 1000

 swap 3000

 /home 8000

 /oracle11 나머지

 

 

 

 

 * sda 만 체크해주고 넘어가야함

sdb에는 추후 Logical Volume 생성

 사이즈 조정 'Fill to maxmum allowable size' 선택

 nat 과 host-only ip 확인

nat : 서버 외부 통신 (eth0)

host-only : 서버 내부 통신(eth1)

 

Desktop Enviroments - 변경 x

Applications - 그래픽 인터넷, 편집기 두고 다 지움

Development - 모두 체크

Servers - Server Configuration tools 만 체크

Base System - System Tools 추가 체크

* optional packagesysstat 체크하고 Close!

Cluster Storate,Clustering,Virtualization - 셋다 변경 x

Languages - Korean support

 

 Disabled

Disabled

추후 추가. 에러메세지 발생해도 그냥 넘어감

# ifconfig : ip 주소 확인

# netstat -nr : gateway 확인

 

'Enable IPv6 configuration for this interface' 체크 해제

(eth0) nat 영역대 ip 등록

'Enable IPv6 configuration for this interface' 체크 해제

(eth1) host-only 영역대 ip 등록

eth1은 Gateway를 입력하지 않는다.

 DNS네임과 DNS ip 추가 입력

 

ip설정 완료 후 네트워크 재시작

# service network restart

 

 

 

 

'Study Note > Database' 카테고리의 다른 글

Oracle Architecture  (0) 2016.01.27
Oracle RAC(Real Application Clusters)  (0) 2016.01.27
Oracle 11g RAC 설치 on OEL - 4  (0) 2016.01.25
Oracle 11g RAC 설치 on OEL - 3  (0) 2016.01.25
Oracle 11g RAC 설치 on OEL - 1  (0) 2016.01.25
반응형

1. VMware 환경 구성 (Virtual Machine Workstation 9 버전)

 Hardware 정보가 위와 아래가 다른데 실패를 여러번 해서 캡쳐를 전에 떠논걸 쓰다보니 이렇게 되었습니다.

다하고 나서 확인해서 참고 해주길 바랍니다. ( 입력하시는 창 그대로 따라하시면 됩니다. 이후 과정도 마찬가지로 )

위의 파일을 메모장으로 open 후, 아래 문장 추가

disk.locking = "FALSE"

diskLib.dataCacheMaxSize = "0"

scsi1.sharedBus = "virtual"

scsi1:0.deviceType = "disk"

CD 삽입 후 종료.

 

'Study Note > Database' 카테고리의 다른 글

Oracle Architecture  (0) 2016.01.27
Oracle RAC(Real Application Clusters)  (0) 2016.01.27
Oracle 11g RAC 설치 on OEL - 4  (0) 2016.01.25
Oracle 11g RAC 설치 on OEL - 3  (0) 2016.01.25
Oracle 11g RAC 설치 on OEL - 2  (0) 2016.01.25
반응형

Motion Controller 

졸업작품 < Motion Controller >

개발목적 : 가까운 미래에 '마이너리티 리포트'와 같은 SF 영화에서처럼 손가락을 움직여 컴퓨터 화면 위의 다양한 이미지와 데이터를 불러내고 작업하는 시대가 펼쳐질 것으로 전망되어, 이를 구현시키면서 ATmega8, Gyro, Flex 센서 및 Bluetooth 통신을 이해하고, CodeVisionAVR을 활용한 임베디드 능력을 향상시킨다.

개발환경 : Atmega8, Bluetooth통신, Gyro센서, Flex 센서, Windows 8, CodeVisionAVR,

Visualstudio2010, MFC C++, C언어

구현내용 :

손가락의 굽힘으로 여러 가지 패턴을 생성한다.

굽힘 패턴과 더불어 Gyro 센서의 움직임을 이용해 가공된 신호를 생성한다.

가공된 신호를 Bluetooth 통신을 통해 컴퓨터에서 받고 Win8의 마우스 및 기능을 구현한다.

활용기술

구분

구현내용

Flex Sensor

굽힘에 따라 저항이 증가하며 전압 분배 법칙을 이용한 회로를 통해 ADC 변환을 수행하여 각 손가락의 0 혹은 1의 패턴을 생성한다.

Gyro Sensor

(MPU-6050)

각속도와 가속도에 따라 변화하는 센서 값을 내장된 LPF를 거쳐 센서 값을 가공한 후 I2C 통신을 통해 MCU에 전달하고 손목의 움직임과 움직임의 크기를 감지한다.

Bluetooth

(HC-06)

wireless 화를 위한 통신 모듈로 rx, tx 포트를 사용한 slave 장비와 컴퓨터 usb dongle로 구성한 Master 장비 간의 통신을 가능하게 한다.

MFC

소켓을 생성해주고 Bluetooth를 통해 전달해 오는 데이터 값들을 가공하여 Windows 내 행동을 수행하도록 Windows에서 제공하는 함수를 이용해 마우스와 키보드를 제어하도록 한다.

 

나의 의견

우선 처음 사용했던 낯선 parts 들에 대한 이해와 구현을 하는 부분에 있어 가장 큰 어려움이 있었습니다.

parts 들에 대한 부족한 사전 지식은 datasheet를 보며 공부하였지만, datasheet를 보고 구현하기엔 많은 어려움이 있었습니다. 그 덕에 전공서적을 더 많이 찾아보고 더 부족한 내용은 인터넷을 활용해 검색해보았으며, 검색하는 과정에 있어 이쪽 분야의 넓은 견문과 지식을 쌓았습니다. 이 프로젝트를 진행하면서 빨리할 수도 있을 것 같았지만 많은 시간을 공들여 완성하였습니다. 그 결과로 제게 돌아온 지식과 성취감은 정말 말로 이룰 수 없이 좋았고, 그 많은 시간을 보낸 것에 대해 한 치의 후회도 없었습니다. 지금까지 얻어온 지식들과 열의로 무언가를 해내고 싶은 열망이 생겼습니다.

 

'Study Note > My work' 카테고리의 다른 글

OS 내 Log성 파일 관리 Shell  (0) 2016.03.07
Rand() 함수를 이용하여 C언어 게임 만들기  (0) 2016.03.07
주차 예약 시스템  (0) 2016.01.25
Android Application을 이용한 LED 제어  (0) 2016.01.25
라인트레이서  (3) 2016.01.25
반응형

주차 예약 시스템

기간 : 2014. 06 ~ 2014. 08

아이디어

주차를 함에 있어서 매번 자리를 찾아 돌아다녀야 하는 상황을 개선하고자 주차장의 빈자리를 미리 파악을 하거나 예약을 하여 불필요한 상황 발생하지 않도록 함

기대효과

스마트폰의 어플리케이션을 통하여 쉽게 주차공간 확보

개선방안

출입이 자유롭게 무인으로 관리 할 수 있도록 하며 자동으로 주차장까지 안내하는 LED를 사용하며, 현재 상용에서 사용되는 삼성Pay등을 이용해 자동 결제까지 되는 완벽한 무인주차장으로 완성

활동내용

1. 지그비와 TCP/IP통신을 이용한 프로그램

2. 적외선 센서를 통한 차량인식 

3. 주차관리서버 구축

 

'Study Note > My work' 카테고리의 다른 글

OS 내 Log성 파일 관리 Shell  (0) 2016.03.07
Rand() 함수를 이용하여 C언어 게임 만들기  (0) 2016.03.07
Motion Controller  (0) 2016.01.25
Android Application을 이용한 LED 제어  (0) 2016.01.25
라인트레이서  (3) 2016.01.25
반응형

Android Application을 이용한 LED 제어

Android Application 음성인식을 이용한 PIC LED제어



개발목적 : 편리함을 추구하는 사람들이 늘어나면서 홈네트워크 시장은 나날이 발전하고 있었으며, 스마트폰을 이용해 집의 내부를 제어하는 제품들도 많이 늘어나고 있다. 이런 트렌드에 맞춰 PIC 칩과 안드로이드 어플을 제작해 LED를 제어하는 제품을 제작하였다.

개발환경 : PIC, MPLAP, Hightech C Compiler, Java, Android Eclipse, Bluetooth 통신

구현내용 :

스마트폰의 어플을 제작하여 버튼을 누르거나 음성인식으로 불 꺼혹은 불 켜LED를 제어한다.

USART통신으로 받은 데이터로 LEDOn혹은 Off되도록 제어한다.

활동내용 :

하드웨어 및 소프트웨어를 이용한 임베디드 시스템

PIC & 무선통신의 기초적인 학습

Java를 이용해 Bluetooth & Android 음성인식 프로그램 개발

안드로이드 알고리즘

안드로이드 음성인식 소스코드





 

나의 의견

연구실에 들어와 처음 수행했던 프로젝트로 아는 것도 별로 없고 평소 사용해보던 MCU도 아니라 수행하는데 많은 어려움이 있었습니다. 특히 PIC 칩이 접근하는데 있어 어셈블리어에 대한 자료를 보게 되었고 그 부분을 접근하려다 보니 큰 어려움이 있었습니다. 계속하다 안돼서 당근이의 AVR 갖고 놀기라는 카페의 도움을 받고 C로 해결할 수 있단 정보를 알았습니다. 또 하나의 어려움은 안드로이드 어플 작성이었습니다. java라는 언어는 배워 본 적이 없어 안드로이드 어플 제작이 힘들었습니다. 하지만 인터넷에 많은 정보가 있었고, 오픈 소스들이 많이 제공되어 있어 java 언어를 몰라도 제작할 수 있었습니다

 

 

 

'Study Note > My work' 카테고리의 다른 글

OS 내 Log성 파일 관리 Shell  (0) 2016.03.07
Rand() 함수를 이용하여 C언어 게임 만들기  (0) 2016.03.07
Motion Controller  (0) 2016.01.25
주차 예약 시스템  (0) 2016.01.25
라인트레이서  (3) 2016.01.25
반응형

라인트레이서

라인트레이서

개발목적 : 기본적인 적외선센서, 서브모터에 대한 이해와 Atmega128의 기본적인 사용법에 대해 이론을 더욱 강화시키고 공부해온 정보를 취합시켜 결과물을 도출해내기 위해 제작하였습니다.

개발환경 : Atmega128, CodeVisionAVR, C언어

구현내용 :

라인트레이서 경로를 따라 양쪽 적외선센서의 결과 값을 이용해 경로를 파악합니다.

적외선센서 값에 따라 양쪽 모터속도를 제어해 경로를 이탈하지 않도록 제어합니다.

활동내용 :

ATmega128를 이용한 모터구동

적외선 센서를 통한 흰색라인 인식

CodeVision Program tool로 설계

간단한 축소 경로 제작

나의 의견

인터넷에도 많은 정보가 있듯 가장 기본적이지만 기본을 다지기 위해 학술동아리에 처음 들어와 완성한 작품으로 기반을 다지는데 많은 도움이 되었습니다. 과거 ebs에서 로봇파워라는 각 팀이 로봇을 만들어와 서로 대전하는 프로그램을 즐겨 봤는데 우리도 파괴하는 로봇은 아니지만 동아리 동기들끼리 각자 만들어 테스트하자고 하였습니다. 서로 기능 테스트를 하며 서로 안 되거나 모르는 부분을 도와가며 완성하였습니다. 이런 작품을 만드는데 서로의 경쟁력과 흥미를 유발해 모두가 열심히 했던 기억이 납니다. 앞으로의 모든 프로젝트 등을 이런 마음을 가지고 수행할 수 있다고 생각합니다.


 

'Study Note > My work' 카테고리의 다른 글

OS 내 Log성 파일 관리 Shell  (0) 2016.03.07
Rand() 함수를 이용하여 C언어 게임 만들기  (0) 2016.03.07
Motion Controller  (0) 2016.01.25
주차 예약 시스템  (0) 2016.01.25
Android Application을 이용한 LED 제어  (0) 2016.01.25

+ Recent posts