프린트 하기

OS환경 : Oracle Linux6.8(64bit)


DB 환경 : Oracle Database 11.2.0.4


방법 : 오라클 기초 정리

1. 엔진 내리고 올리기

싱글db

DB 종료

1
2
$ sqlplus / as sysdba
SQL> shutdown immediate

shutdown은 nomal, transactional, immediate, abort 명령어가 있음

명령어별 설명

nomal - 디폴트 값으로서, 현재 사용 중인 모든 접속이 종료되기를 기다린다.

transactional - 트랜잭션이 진행 중인 세션은 기다리지만 트랜잭션이 진행 중이지 않은 세션은 강제로 종료시킨다.

immediate - 모든 트랜잭션과의 접속을 강제로 종료한다.(일반적으로 사용)

abort - DB의 상태와 상관없이 메모리에서 인스턴스를 해제한다.(장애시 정상종료가 안될때 어쩔수 없는 경우 사용)


DB 시작

1
2
$ sqlplus / as sysdba
SQL> startup

startup 은 nomount, mount, open 단계가 있음

각 단계별로 올리는 명령어

1
2
3
nomount : startup nomount
mount : startup mount 
open : startup


nomount상태에서 mount 상태로 올리기

1
alter database mount;

mount상태에서 open 상태로 올리기

1
alter database open;

*한단계씩 올리는건 가능하지만 nomount->open 으로 바로 올릴수는 없음

*한단계씩 내리는것도 불가능, 한번에 내리는 것만 가능

각 단계별 설명

종료 (SHUTDOWN) - 데이터베이스에 대한 엑세스를 수행할 수 없는 상태

노마운트 (NOMOUNT) - 파라메터 파일 읽기, SGA 할당, alertSID.log 파일과 trace파일 시작 및 필요 백그라운드 프로세스를 기동시킴

마운트(MOUNT) - 컨트롤 파일을 읽은 후 데이터 파일 및 라두 로그 파일을 인지함

오픈(OPEN) 온라인 데이터 파일과 온라인 리두 로그 파일의 존재 및 정합성을 확인한 후 해당 파일들을 열어 실제 데이터베이스를 사용할 수 있는 상태로 만듦



2. 횐경파일 수정(파라미터파일)

환경파일은 2가지가 존재함

pfile : vi 명령으로 읽을수 있는 텍스트 형태 파일(initSID.ora)

- 인스턴스가 가동(nomount)  단계에서 pfile을 읽어 데이터베이스에 적용됨

- pfile은 인스턴스 가동 중에 값 변경이 가능하지만 재기동 후엔 pfile에 저장된 값으로 다시 적용됨


spfile : vi 명령으로 읽을수 없는 바이너리 형태 파일(spfileSID.ora)

해당파일이 존재하면 인스턴스 가동 중 pfile이 아닌 spfile이 데이터베이스에 적용됨

spfile이 없는 경우에는 pfile을 이용하여 생성함 

ex) create spfile='$ORACLE_HOME/dbs/orclspfile.ora' from pfile='$ORACLE_HOME/dbs/initorcl.ora';

해당 인스턴스가 어떤파일을 읽고 가동되었는지 확인이 가능하며, 필요에 따라 pfile로도 변경이 가능함

scope옵션을 이용하여 memory/spfile/both 세가지로 수정 가능함

- memory : 현재상태에만 영향 (재기동 후엔 이전값으로 rollback)

- spfile : 변경 내용을 spfile에만 저장하고 현재상태에는 영향없음, 재기동시 적용

- both : 변경 내용을 현재상태와 spfile에는 반영하여 영구 저장


대부분 oracle 계정 홈 경로에서 .bash_profile(리눅스), .profile(유닉스) 을 열어보면

$ORACLE_HOME 이 지정되어 있을텐데

cd $ORACLE_HOME/dbs/ 로 이동하면 환경파일들을 확인 할 수 있음


현재 pfile을 사용하는지 spfile 을 사용하는지 확인하는 방법

아래와 같이 spfile 의 VALUE에 값이 들어가 있으면 spfile 을 사용하는 중이고 빈칸이면 pfile을 사용중인 상태이다.

1
2
3
4
SQL> show parameter spfile
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
spfile                     string     /oracle/app/11.2.0/db/dbs/spfileORCL.ora

 

환경파일 생성

spfile을 이용해 pfile 생성

1
SQL> create pfile from spfile;


pfile을 이용해 spfile 생성

1
SQL> create spfile from pfile;


경로 지정해서 spfile을 이용해 HOME 경로에 pfile.ora 생성

1
create pfile='/home/oracle/pfile.ora' from spfile='/oracle/app/11.2.0/db/dbs/spfileORCL.ora';



3. 볼륨 생성

ASM 일경우 볼륨 생성

(RAC 설치 문서 참고)


datafile 추가

filesystem 환경

현재 테이블스페이스 및 datafile 확인

1
2
3
4
5
6
7
SQL> select * from dba_data_files; 
FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME               BYTES     BLOCKS STATUS      RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- -----------
/oradata/ORCL/mmmts01.dbf
     8 MMMTS              1073741824     131072 AVAILABLE         8 NO        0           0        0 1073676288      131


mmmts 테이블스페이스에 mmmts02.dbf라는 datafile 추가

1
alter tablespace mmmts add datafile '/oradata/ORCL/mmmts02.dbf' size 10m;

현재 테이블스페이스 및 datafile 재확인

1
2
3
4
5
6
7
8
9
SQL> select * from dba_data_files; 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME               BYTES     BLOCKS STATUS      RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- -----------
/oradata/ORCL/mmmts01.dbf
     8 MMMTS              1073741824     131072 AVAILABLE         8 NO        0           0        0 1073676288      131064
 
/oradata/ORCL/mmmts02.dbf
     9 MMMTS                10485760       1280 AVAILABLE         9 NO        0           0        10420224    1272


raw device 환경

raw device map 을 확인 한 뒤 안쓰는 raw device 를 추가

1
alter tablespace mmmts add datafile '/dev/raw/raw8' size 10m;


asm 환경

1
2
3
4
5
6
7
SQL> select * from dba_data_files; 
FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME               BYTES     BLOCKS STATUS      RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_
---------- ------------------------------ ---------- ---------- --------- ------------ --- ---------- ---------- ------------ ---------- ----------- -------
+ORADATA/rac/datafile/mmmts.273.995101033
    11 MMMTS                52428800       6400 AVAILABLE        11 NO        0           0        0    51380224    6272 ONLINE

+으로 시작하면 ASM 환경을 사용하는것


ASM 환경에선 datafile 경로를 직접 적어주지 않아도 자동으로 파일명이 생성됨

1
2
3
4
5
6
7
SQL> alter tablespace mmmts add datafile size 10m;
SQL> select * from dba_data_files; 
+ORADATA/rac/datafile/mmmts.273.995101033
    11 MMMTS                52428800       6400 AVAILABLE        11 NO        0           0        0    51380224    6272 ONLINE
 
+ORADATA/rac/datafile/mmmts.274.995273673
    12 MMMTS                10485760       1280 AVAILABLE        12 NO        0           0        0     9437184    1152 ONLINE



4. alert log 위치 확인

10g 이하

1
2
3
4
5
6
7
8
SQL> show parameter user_dump_dest
 
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                 string     /oracle/app/oracle/diag/rdbms/orcl/ORCL/trace
 
$ cd /oracle/app/oracle/diag/rdbms/orcl/ORCL/trace
vi alert*.log


11g 이상

1
2
3
4
5
6
7
8
SQL> show parameter diag
 
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest              string     /oracle/app/oracle
 
$ cd /oracle/app/oracle/diag/rdbms/"HOSTNAME"/"SID"/trace/
vi alert*.log


5. 자주나는 장애시 노말한 조치

장애가 유형마다 다달라  어떻게  딱히 말할수 없지만

(트러블슈팅 문서 참조)



6. 느린 쿼리 찾아 지우기

실행시간 5초 이상 걸린 쿼리 조회

1
2
3
4
5
6
7
8
9
10
11
SELECT * FROM(
SELECT ROUND(ELAPSED_TIME/EXECUTIONS/1000000,3) AS ELAPSED_TIME
          , LAST_ACTIVE_TIME
          , HASH_VALUE
          , SQL_TEXT 
  FROM V$SQL 
WHERE parsing_schema_name = '스키마명' 
  AND LAST_ACTIVE_TIME >= TO_DATE('20180307''YYYYMMDD')
)
 WHERE ELAPSED_TIME > 5 --초 단위 입력
 order by ELAPSED_TIME desc;
찾은 뒤 튜닝은 가능하지만 쿼리 삭제는 개발계에서 해줘야함


7. 주요 사이트
오라클 database 및 OS 다운로드

오라클 서포트(메타링크)

오라클 설치 기초문서

https://oracle-base.com/






참조 :