1. Clone database 생성

 

1) Source Database 사전 작업

1-1) Backup Database

Source Database Rman 접속

   

$ rman target /

   

Controlfile Auto backup 이 활성화 되어있지 않은 경우 활성화 시켜준다.

   

RMAN> configure controlfile autobackup on;

   

RMAN> configure controlfile autobackup format for device type disk to '/u01/app/oracle/rman_bak/%F';

   

Database backup

   

RMAN> RUN

2> {

3> allocate channel ch1 type disk

4> format '/u01/app/oracle/rman_bak/%d_DB_%u_%s_%p';

5> backup database plus archivelog;

6> release channel ch1;

7> }

    

1-2) Prameter File 백업

Controlfile Auto backup 시에 자동으로 Parameter file 도 백업이 되지만

Pfile 로 생성해서 직접 수정하기 위해 따로 한번 더 생성해준다.

   

SQL> create pfile ='/home/oracle/initTEST.ora' from spfile;

   

RMAN> RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM AUTOBACKUP;

   

1-3) Backup File 전송

Source 에서 Target 으로 SCP 를 이용해 RMAN Backup 파일들과 parameter file 전송

   

$ scp FILENAME oracle@192.168.1.100:/home/oracle/rman_bak/

   

2. Clone DB 설정(Target)

2-1) Parameter File 설정

기존 RAC 관련 파라미터는 삭제하거나 주석처리하고, 경로나 메모리부분을 환경에 맞게 조절

DB NAME 의 경우 추후 변경

$ vi initTEST.ora

   

*.audit_file_dest='/app/oracle/admin/TEST/adump'

*.audit_sys_operations=TRUE

*.audit_trail='db'

#*.cluster_database=true

*.compatible='11.2.0.2.0'

*.db_create_file_dest='/app/oracle/oradata/TEST'

*.db_files=1024

*.db_name='TESTORA'

*.db_recovery_file_dest='/app/oracle/flash_recovery_area'

*.db_recovery_file_dest_size=4992899480

*.diagnostic_dest='/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=TESTXDB)'

*.fast_start_mttr_target=300

*.global_names=TRUE

#TESTORA2.instance_number=2

#TESTORA1.instance_number=1

*.log_archive_format='%t_%s_%r.dbf'

*.open_cursors=1000

*.os_authent_prefix=''

*.pga_aggregate_target=15899340

*.processes=800

#*.remote_listener='etk-scan:1521'

*.remote_login_passwordfile='exclusive'

*.session_cached_cursors=100

*.sga_target=1001798690

#TESTORA2.thread=2

#TESTORA1.thread=1

TEST.undo_tablespace='UNDOTBS1'

#TSETORA2.undo_tablespace='UNDOTBS2'

#*.use_large_pages='ONLY'

   

2-2) Password File 생성/ Startup nomount

   

$ orapwd file=orapwTEST entries=6 password=oracle

   

nomount 상태로 startup

   

SQL> startup nomount

   

2-3) Controlfile restore / Backuppiece 등록

Source DB 의 Database backup 시에 autobackup 으로 받아진 file 로 Restore

   

RMAN> restore controlfile from '/u01/11g_db/rman_db_backups/con_c-208065887-20121014-01';

   

Restore 시에 기존에 받았던 백업들이 RMAN 에 등록이 되나 실제로 존재하지 않기 때문에 삭제해주고 새로 등록해준다.

   

RMAN> crosscheck backup;

RMAN> list expired backup;

RMAN> delete expired backup;

   

RMAN> catalog backuppiece '/home/oracle/rman_bak/TESTORA_DB_0uq6bchc_30_1';

RMAN> catalog backuppiece '/home/oracle/rman_bak/TESTORA_DB_0vq6bcid_31_1;

RMAN> catalog backuppiece '/home/oracle/rman_bak/ TESTORA_DB_0sq6bce7_28_1;

RMAN> catalog backuppiece '/home/oracle/rman_bak/TESTORA_DB_0tq6bcfu_29_1;

 

2-4) Restore Datafile

Controlfile 이 Restore 되었기 때문에 mount 시킨 뒤

Datafile Restore 진행

   

SQL> alter database mount;

   

RMAN> run {

2> set until sequence 63 thread 2; --set until cancel;

3> set newname for datafile 1 to '/backup/oradata/system01.dbf';

4> set newname for datafile 2 to '/backup/oradata/sysaux01.dbf';

5> set newname for datafile 3 to '/backup/oradata/undotbs01.dbf';

6> set newname for datafile 4 to '/backup/oradata/undotbs02.dbf';

7> set newname for datafile 5 to '/backup/oradata/users01.dbf';

8> restore datafile 1;

9> restore datafile 2;

10> restore datafile 3;

11> restore datafile 4;

12> restore datafile 5;

13> switch datafile all;

14> recover database;

15> }

   

2-5) RedoLog File 이름 수정 / Database Open

기존 ASM 기반의 경로와 이름으로 되어있는 것을 현재 경로에 맞게 수정해준다.

   

SQL> select member from v$logfile;

MEMBER

--------------------------------------------------------------------------------

+REDO/etk/onlinelog/group_1.256.860865469

+REDO/testora/onlinelog/group_2.257.860865477

+REDO/testora/onlinelog/group_3.258.860865841

+REDO/testora/onlinelog/group_4.259.860865849

   

SQL> alter database rename file '+REDO/testora/onlinelog/group_1.256.860865469' to

2 '/app/oracle/oradata/TEST/redo01.log';

SQL> alter database rename file '+REDO/testora/onlinelog/group_3.258.860865841' to

2 '/app/oracle/oradata/TEST/redo03.log';

SQL> alter database rename file '+REDO/testora/onlinelog/group_4.259.860865849' to

2 '/app/oracle/oradata/TEST/redo04.log';

SQL> alter database rename file '+REDO/testora/onlinelog/group_4.259.860865849' to

2 '/app/oracle/oradata/TEST/redo04.log';

   

수정 완료 후 Database open

   

SQL > alter database open resetlogs;

    

2-6) 필요 없는 Redo Log group 삭제

RAC 에서 사용하던 THREAD 2 번의 Redo Log Goup 을 삭제

   

SQL> select thread#, status, enabled from v$thread;

THREAD# STATUS ENABLED

---------- ------ --------

1 OPEN PUBLIC

2 CLOSED PUBLIC

   

SQL> select group# from v$log where thread#2;

GROUP#

----------

3

4

   

SQL> alter database disable thread 2;

SQL> alter database drop logfile group 3;

SQL> alter database drop logfile group 4;

   

   

2-7) DB_NAME 변경

DB NAME 을 변경할 필요가 있을 경우 nid utility 를 사용해서 변경해준다

   

SQL> shutdown immediate

SQL> startup mount

   

$ nid target=sys/oracle dbname=TEST


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,




Oracle 10g Install 설치 후(DBCA생성 전) -> Upgrade(10.2.0.4) -> DB설치(DBCA) -> Upgrad(10.2.0.5) [RHEL5]

   

1.오라클 현재 버전 확인

   

1-1 Dbupgdiag.sql

   

   

1-2 dbupgdiag.sql 실행 및 버전 확인

  • 간단하게 sqlplus "/as sysdba" 나 select * from v$version 을 통해서 알아 볼 수 도 있다.
  • 해당 스크립트를 사용하는 이유는 현재 버전에 대한 정보와, 그 후에 버전의 번화를 확인할 때 편리하기 때문이다.

       

   

   

2.기존에 존재하던 패치파일 삭제

   

   

3.10.2.0.5 패치파일 준비

   

   

4.패치를 하기 전에 리스너와 DB를 정지시킨다.

  • 정지하지 않을 경우 중간에 프로세스를 중지하라는 에러가 발생하게 됨.

   

   

5.10.2.0.5 패치 파일 실행

   

   

   

5-1 패치 할 Oracle Home 지정

   

   

5-2 오라클 서포터를 받을 건지에 대한 선택

   

   

5-3 해당 패치파일 설치에 필요한 요구 값들 체크

   

<에러 발생1>

  • 커널 파라미터 값에 대한 에러발생

       

   

Checking the Components installed in Oracle Home

Check complete. The overall result of this check is: Passed

=======================================================================

   

Checking for Oracle Home incompatibilities ...

Check complete. The overall result of this check is: Passed

=======================================================================

   

Checking kernel parameters

Checking for semmsl=250; found semmsl=250.        Passed

Checking for semmns=32000; found semmns=32000.        Passed

Checking for semopm=100; found semopm=100.        Passed

Checking for semmni=128; found semmni=128.        Passed

Checking for shmmax=1073741824; found shmmax=536870912.        Failed <<<<

Checking for shmmni=4096; found shmmni=4096.        Passed

Checking for shmall=2097152; found shmall=2097152.        Passed

Checking for file-max=101365; found file-max=65536.        Failed <<<<

Checking for VERSION=2.6.18; found VERSION=2.6.18-194.el5.        Passed

Checking for ip_local_port_range=9000 - 65500; found ip_local_port_range=1024 - 65000.        Failed <<<<

Checking for rmem_default=1048576; found rmem_default=262144.        Failed <<<<

Checking for rmem_max=1048576; found rmem_max=262144.        Failed <<<<

Checking for wmem_default=262144; found wmem_default=262144.        Passed

Checking for wmem_max=262144; found wmem_max=262144.        Passed

Check complete. The overall result of this check is: Failed <<<<

Problem: The kernel parameters do not meet the minimum requirements (see above).

Recommendation: Perform operating system specific instructions to update the kernel parameters.

  

  

   

<에러 해결1>

  • 에러가 발생한 파라미터 값들을 해당 패치가 원하는 값의 크기로 변경하여 적용

       

# Vi /etc/sysctl.conf

파일 위치

   

   

<에러 발생2>


<에러 해결2>

  • 10g는 기본적으로 물리적 메모리를 1GB 이상 요구한다. 그러나, 실제 시스템에서는 2GB 이상의 메모리를 장착하므로 기본적으로 Passed로 나오게 된다. 512MB인 경우에도, swap이 충분하면 설치가 가능하며 DB 생성, 운영이 가능하다.
  • 넘어가도 설치하는 것에는 이상이 없음(정확한 이유를 잘모르겠음)

   

5-4 패치 요약

   

   

5-5 패치 설치

   

   

5-6 스크립트 실행(Root계정)

   

   

   

5-7 패치 설치완료

   

   

<에러 발생3>

  • 패치 후에 DB를 시작하게 되면 다음과 같은 에러가 발생한다.

       

   

   

  • 오라클 10g 패치 후(10.2.0.4 -> 10.2.0.5)  

    startup 명령어로 DB를 open 하려고 할 때,

    ORA-01092: ORACLE instance terminated. Disconnection forced 에러 발생

       

  • 발생 원인

    오라클 엔진만 패치되고 DB에 패치가 제대로 적용되지 않았을 경우

   

   

7.Post Upgrade

   

  • 해당 작업은 DB를 이미 사용하고 있는 경우에 작업, 즉 DB가 설치되어 있지 않은 경우에는 하지 않아도 된다.(소프트웨어만 설치되었을 경우)
  • 패치 작업이 끝난 후에는 Post Upgrade 작업을 진행
  • 주 작업 내용은 DB 파라미터 값을 수정.

   

6-1

   

SQL> startup upgrade

(SQL> startup migrate)

두 개 중 1개만 사용

SQL> select status from v$instance;

현재 상태확인

   

   

   

   

6-2

SQL> @?/rdbms/admin/catupgrd.sql

엔진을 따라서 DB에 버젼 패치 적용.

   

   

   

6-3

SQL> shutdown

  

SQL> startup

  

SQL> @?/rdbms/admin/utlrp.sql

// Invalid PL/SQL package를 compile 하는 단계

   

   

   

7.패치완료 확인

  • 현재까지 무사히 왔다면, 패치가 완료되었을 것임.
  • 마지막으로 패치가 잘 되었는지를 확인해야 함.
  • 현재 DB 버전확인
  • 현재 DB 상태확인
  • 데이터베이스 중요 데이터파일들이 존재하고, 잘 적용이 되는지 확인한다.
  • Dbupgdiag.sql를 통하여 현재 데이터베이스의 패치 상태를 확인한다.(아래 참고)

       

   

7-1 dbupgdiag.sql 패치완료 확인

  • 스크립트 실행후, 해당 로그 파일을 천천히 보면서 패치가 잘 적용되었는지 확인한다.

   

   

   

   

   

원본 위치 <http://web3.c2.cyworld.com/myhompy/board/retrieveBoard.php?home_id=a3177717&lmenuSeq=499037&smenuSeq=834741&postSeq=6952833&referrer=http%3A%2F%2Fwww.cyworld.com%2FBC83%2F6952833>

원본 위치 <http://blog.naver.com/PostView.nhn?blogId=thesot&logNo=70126892070&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true&topReferer=http%3A%2F%2Fsearch.naver.com%2Fsearch.naver%3Fsm%3Dtab_hty.top%26where%3Dnexearch%26ie%3Dutf8%26query%3Dora-01092%26x%3D0%26y%3D0>

원본 위치 <http://www.saybox.co.kr/bbs/board.php?bo_table=board04&wr_id=1>

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,



Oracle 10g Install 설치 후(DBCA생성 전) -> Upgrade(10.2.0.4) -> DB설치(DBCA) [RHEL5]

   

1.Display 및 DB 설치 시작

   

# Xhost +

Display 사용

# Su - oracle

Oracle 유저

$ dbca

DB 설치

   

   

2.DBCA를 이용한 DB 생성

   

   

2-1 데이터베이스 생성

   

   

2-2 General Purpose 선택(일반 목적)

   

   

2-3 데이터베이스 이름(SID)

  • 이전에 설정했던 .bash_profile의 SID와 설정 값을 맞추어야 된다.

       

   

2-4 EM(Enterprise Manager) 사용할지 않할지 선택.(않함)

   

   

2-5 DB 생성 사용자의 암호(일괄적으로 암호를 설정함)

  • 개별적으로 암호를 설정할 수 있음.

   

   

2-6 데이터베이스의 저장 환경 지정(File system 선택)

   

   

<기본값 계속>

   

<기본값 계속>

   

2-7 플래시 복구 영역 설정

   

   

2-8 샘플 스키마 설치

  • 안 해도 되는데, 실습을 위한 환경이므로 설치

   

   

2-9 3번째 탭에서 Charater Sets 설정

  • 한국어 (언어 설정)

   

   

<기본값 계속>

   

2-10 데이터베이스 생성

   

   

   

   

<설치 완료>

   

3.오라클 10g DB 생성 완료

   

   

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,




Oracle 10g Install 설치 후(DBCA생성 전) 바로 Upgrade(10.2.0.4) [RHEL5]

   

1.해당 패치파일 준비 및 Certified Versions 확인

  • 오라클 10g 설치파일에서는 RHEL5에 대한 버전이 없었는데 패치파일에서는 추가된 것을 확인할 수 있다.

     

     

    

 

   

2.오라클 패치파일 실행

  • 오라클 초기 설치 때와 같은 방식이다.
  • DB가 생성된 뒤에 패치를 했다면, 해당 패치 설치 후에, DB에 추가적인 적용을 해주어야 한다.
  • 하지만 소프트웨어만 설치한 뒤, 바로 패치를 하기 때문에 추가적인 적용이 필요 없어 수월하게 작업을 할 수 있다.
  • 조금 바뀐 부분에 대해서만 추가적으로 이야기를 추가함.

       

   

   

2-1 패치할 Oracle Home 지정

   

   

2-2 패치 설치를 위한 체크

   

   

   

2-3 패치 요약

   

   

2-4 패치 설치

   

   

   

   

   

3.오라클 10.2.0.4 패치 완료

   

   

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Explain Plan란?
  • Explain plan은 QL문의 엑세스 경로를 확인하고 튜닝할 수 있도록 SQL문을 분석하고 해석하여 실행계획을 수립한 후 실행계획을PLAN_TABLE에 저장하도록 해주는 명령이다.
  • SQL Trace 없이 사용 할 수 있다.
     
  • EXPLAIN Plan문법

       

Explain plan[set statement_id = 'identifier' ]

[ Into tablename ]

For sql statement

  

   

Explain plan Set statement_id='a1' For

Select /*+ use_nl(emp dept) */ *

From emp, dept Where emp.deptno = dept.deptno And emp.deptno=10;

  

   

  • statement_id = 'identifiedr' : 1-30자로 부여할 수 있는 해당 실행문의 제목
  • INTO tablename : 출력문을 저장하는 테이블명 PLAN_TABLE을 사용하지 않을경우 사용
  • FOR statement : 실행계획을 수립하고자 하는 SQL문(SELECT, INSERT, DELETE, UPDATE)

       

  • EXPLAIN 설치

       

    EXPLAIN PLAN 을 설치하면 $ORACLE_HOME/rdbms/admin에 다수의 스크립트가 포함된다.

       

    PLAN_TALBE이라 명명된 테이블의 CREATE TABLE문을 포함하고 있는 utlxplan.sql(UTiLility

    eXplain의 줄임말)

    병렬 쿼리 계획에 특화된 정보를 포함하여 계획 테이블의 내용을 보여 주는 utlxplp.sql(UTiLtility eXplain Plan Parallel의 줄임말)

    일반적인 직렬(비병렬) 계획에 대한 계획 테이블의 내용을 보여 주는 utlxpls.sql(UTiLity eXplain PLan으 줄임말)

    • EXPLAIN PLAN을 설정하기 위해서는 먼저 PLAN_TABLE을 만들어야 한다. PLAN_TABLE 생성은 오라클에서 스크립트로 제공해 주고 있다.

       

SQL > @C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlxplan

  

   

   

Global Temporary 생성

Gloal Temporary란?

  • 임시 테이블은 사용자가 DML(update, insert, delete) 문을 실행한 후, 트랜젝션을 종료(commit)하면 변경된 데이터들이 테이블에 저장되지 않는 테이블이다

       

Create 문법

Create Global Temporary Table <table_name>(

<column_name> <column_data_type>,

<column_name> <column_data_type>,

<column_name> <column_data_type>)

[ON COMMIT DELETE ROWS | ON COMMIT PRESERVE ROWS];

  

   

  • on commit delete rows : 트랜젝션을 발생시킨 후, commit문을 실행할 때 없어지는 방법, 한 transaction 동안만 data를 저장(default임)
  • on commit preserve rows : 트랜젝션을 종료하면(commit) 테이블 내에 데이터가 저장되었다가 세션을 종료하면 임시 테이블에 저장되었던 데이터들이 모두 없어지는 방법

    한 session 동안만 data를 저장

       

    • Temporary Table?
      • 특정 Session 또는 Transaction 동안만 data를 저장함.
      • TABLE의 definition 정보는 data dictionary에 영구적으로 저장되지만, data는 일시적으로 저장된다.
      • CREATE로 TABLE 생성시 SEGMENT가 할당되는 것이 아니라 첫 번째 INSERT시 할당된다.
      • DML 작업 시 해당 data에 대해 LOCK을 걸지 않는다.
      • data 변경 시 redo log에 기록이 남지 않는다.

           

CREATE GLOBAL TEMPORARY TABLE PLAN_TABLE (
statement_id varchar2(30),
plan_id number,
timestamp date,
remarks varchar2(4000),
operation varchar2(30),
options varchar2(255),
object_node varchar2(128),
object_owner varchar2(30),
object_name varchar2(30),
object_alias varchar2(65),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns number,
id numeric,
parent_id numeric,
depth numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2(255),
partition_start varchar2(255),
partition_stop varchar2(255),
partition_id numeric,
other long,
distribution varchar2(30),
cpu_cost numeric,
io_cost numeric,
temp_space numeric,
access_predicates varchar2(4000),
filter_predicates varchar2(4000),
projection varchar2(4000),
time numeric,
qblock_name varchar2(30),
other_xml clob
)

ON COMMIT PRESERVE ROWS;

-- 모든권한
grant ALL on PLAN_TABLE 모든유저;

-- 동의어 생성 : PUBLIC SYNONYM 을 생성할수 있는 권한이 있는 유저로 가야한다.
CREATE PUBLIC SYNONYM PLAN_TABLE FOR PLAN_TABLE;

  

   

  • PLAN_TABLE 컬럼 설명

컬 럼 명

설 명

STATEMENT_ID

EXPLAIN PLAN문에서 사용자가 지정한 제목

TIMESTAMP

실행계획이 수립된 날짜와 시간

REMARKS

사용자가 부여한 주석(COMMENT)

OPERATION

아래 표에 자세히 설명 되어 있습니다.

OPTIONS

아래 표에 자세히 설명 되어 있습니다.

OBJECT_NODE

사용한 데이터베이스 링크

OBJECT_OWNER

해당 라인의 오브젝트를 생성한 사용자 그룹

OBJECT_NAME

테이블이나 인덱스, 클러스터등의 이름

OBJECT_INSTANCE

SQL의 FROM절에 기술된 오브젝트를 좌에서 우로 부여한 번호

OBJECT_TYPE

오브젝트의 종류(예 non-unique index)

ID

수립된 각 실행단계에 붙여진 일련번호

PARENT_ID

해당 ID의 부모가 가진 ID

POSITION

같은 부모 ID를 가지고 있는 자식 ID간의 처리 순서

OTHER

다른 필요한 텍스트를 지정하기 위한 필트

   

  • Explain Plan 실행

       

SQL> Explain plan Set statement_id='a1' For

Select /*+ use_nl(emp dept) */ *

From emp, dept Where emp.deptno = dept.deptno And emp.deptno=10;

해당 SQL문

SQL> def id = a12

ID값 지정

SQL> SELECT LPAD(operation,LENGTH(operation)+ 2*(LEVEL-1)) ||DECODE(id,0,'cost estimate:' ||
DECODE(position,'0','N/A',position),null) || ' ' ||options || DECODE(object_name,null,null,':') ||
RPAD(object_owner, LENGTH(object_name)+1,',') || object_name ||
DECODE (object_type,'UNIQUE' ,'(U) ','NON_UNIQUE','(NU)',null) ||
DECODE(object_instance,null,null,'('||object_instance||')') "Explain Plan"
FROM PLAN_TABLE
START WITH ID= 0 and STATEMENT_ID = '&&id'
CONNECT by prior ID=PARENT_ID and STATEMENT_ID='&&id'

  

   

SQL> Explain plan Set statement_id='a1' For

2 Select /*+ use_nl(emp dept) */ *

3 From emp, dept Where emp.deptno = dept.deptno And emp.deptno=10;

   

해석되었습니다.

   

SQL> def id=a1

   

SQL> SELECT LPAD(operation,LENGTH(operation)+ 2*(LEVEL-1)) ||DECODE(id,0,'cost estimate:' ||

2 DECODE(position,'0','N/A',position),null) || ' ' ||options || DECODE(object_name,null,null,':') ||

3 RPAD(object_owner, LENGTH(object_name)+1,',') || object_name ||

4 DECODE (object_type,'UNIQUE' ,'(U) ','NON_UNIQUE','(NU)',null) ||

5 DECODE(object_instance,null,null,'('||object_instance||')') "Explain Plan"

6 FROM PLAN_TABLE

7 START WITH ID= 0 and STATEMENT_ID = '&&id'

8 CONNECT by prior ID=PARENT_ID and STATEMENT_ID='&&id';

구 7: START WITH ID= 0 and STATEMENT_ID = '&&id'

신 7: START WITH ID= 0 and STATEMENT_ID = 'a1'

구 8: CONNECT by prior ID=PARENT_ID and STATEMENT_ID='&&id'

신 8: CONNECT by prior ID=PARENT_ID and STATEMENT_ID='a1'

   

Explain Plan

--------------------------------------------------------------------------------

SELECT STATEMENTcost estimate:4

NESTED LOOPS

TABLE ACCESS BY INDEX ROWID:SYS,,DEPT(2)

INDEX UNIQUE SCAN:SYS,,,,,DEPT_U1

TABLE ACCESS BY INDEX ROWID:SYS,EMP(1)

INDEX RANGE SCAN:SYS,,,,EMP_N1

   

6 개의 행이 선택되었습니다.

   

SQL> exit

  

   

  • PERATION의 종류와 OPTIONS에 대한 설명

OPERATION(기능)

OPTIONS(옵션)

설 명

AGGREGATE

GROUP BY

그룹함수를 사용하여 하나의 로우가 추출되도록 하는 처리(버전 7에서만 표시됨)

AND-EQUAL

  

인덱스 머지를 이용하는 경우

CONNECT BY

  

CONNECT BY를 사용하여 트리 구조로 전개

CONCATENATION

  

단위 액세스에서 추출한 로우들의 합집합을 생성

COUNTING

  

테이블의 로우스를 센다

FILTER

  

선택된 로우에 대해서 다른 집합에 대응되는 로우가 있다면 제거하는 작업

FIRST ROW

  

조회 로우 중에 첫번째 로우만 추출한다.

FOR UPDATE

  

선택된 로우에 LOCK을 지정한다.

INDEX

INQUE

UNIQUE인덱스를 사용한다. (단 한개의 로우 추출)

  

RANGE SCAN

NON-UNIQUE한 인덱스를 사용한다.(한 개 이상의 로우)

  

RANGE SCAN

DESCENDING

RANGE SCAN하고 동일하지만 역순으로 로우를 추출한다.

NTERSECTION

  

교집합의 로우를 추출한다.

MERGE JOIN

  

먼저 자신이ㅡ 조건만으로 액세스한 후 각각을 SORT하여 MERGE해 가는 조인

  

OUTER

위와 동일하지만 outer join을 사용한다

MINUS

  

MINUS 함수를 사용한다.

NESTED LOOPS

  

먼저 어떤 드라이빙 테이블의 로우를 액세스한 후 그 결과를 이용해 다른 테이블을 연결하는 조인

  

OUTER

위와 동일하지만 outer join을 사용한다.

PROJECTION

  

내부적인 처리의 일종

REMOTE

  

다른 분산 데이터베이스에 있는 오브젝트를 추출하기 위해 DATABASE LINK를 사용하는 경우

SEQUENCE

  

시퀀스를 액세스 한다.

SORT

UNIQUE

같은 로우를 제거하기 위한 SORT

  

GROUP BY

액세스 결과를 GROUP BY 하기 위한 SORT

  

JOIN

MERGE JOIN을 하기 위한 SORT

  

ORDER BY

ORDER BY를 위한 SORT

TABLE ACCESS

FULL

전체 테이블을 스캔한다.

  

CLUSTER

CLUSTER를 액세스 한다.

  

HASH

키값에 대한 해쉬 알고리즘을 사용(버전 7에서만)

  

BY ROWID

ROWID를 이용하여 테이블을 추출한다.

UNION

  

두 집합의 합집합을 구한다.(중복없음) 항상 전체 범위 처리를 한다.

UNION ALL

  

두 집합의 합집합을 구한다.(중복가능) UNION과는 다르게 부분범위 처리를 한다.

VIEW

  

어떤 처리에 의해 생성되는 가상의 집합에서 추출한다.(주로 서브쿼리에 의해 수행된 결과)

  • DBMS_XPLAN Package
    • DBMS_XPLAN은 EXPLAIN PLAN 구문보다 확장된 정보를 보여준다.
    • Oracle 9.2버젼에 소개되었으며 plan_table에 저장된 실행계획을 좀 더 쉽게 출력해 볼 수 있게 되었다.
    • DBMS_XPLAN Package에서 제공하는Procedure
    • DISPLAY
    • DISPLAY_CURSOR
    • DISPLAY_AWR
    • DISPLAY_SQLSET
    • PREPARE_RECORDS
    • VALIDATE_FORMAT

         

    • 이 Package를 사용하기 위해서는 아래의 객체에 SELECT권한이 있어야 한다.
    • V$SESSION
    • V$SQL_PLAN
    • V$SQL(optional)
    • V$SQL_PLAN_STATISTICS_ALL
    • @$ORACLE_HOME/rdbms/admin/ultxpls 스크립트를 열여보면 내부적으로 DBMS_XPLAN Package를 호출하고 있는것을 볼 수 있다.

         

select plan_table_output from table(dbms_xplan.display('plan_table',null,'serial'))

  

  • DBMS_XPLAN.DISPLAY
    • DBMS_XPLAN.DISPLAY는 단일 SQL문에 대해 예측 실행계획을 보여주는 Function 이다.
    • DBMS_XPLAN.DISPLAY는 실측 정보가 아닌 예측 정보를 제공한다.
    • Function Parameter

FUNCTION DISPLAY(TABLE_NAME VARCHAR2 DEFAULT 'PLAN_TABLE',
STATEMENT_ID VARCHAR2 DEFAULT NULL,
FORMAT VARCHAR2 DEFAULT 'TYPICAL',
FILTER_PREDS VARCHAR2 DEFAULT NULL)


 

   

  • 파라미터 설명

파라미터

  

설명

TABLE_NAME

  

Execution Plan이 저장되는 테이블을 지정하며, 기본값은 'PLAN_TABLE' 이다.

STATEMENT_ID

  

Execution Plan시 SET STATEMENT_ID를 지정한 경우 이를 불러올 수 있다. 

값이 NULL일 경우 마지막에 실행된 문장을 불러온다.

FORMAT

BASIC

가장 기본적인 정보만 보여 준다.

  

TYPICAL

Format의 Default값인 Typical은 SQL 튜닝에 필요한 Normal한 정보를 보여 준다. 

SQL 튜닝에 가장 유용하게 사용되는 Predicate Information이 제공 된다.

  

ALL

Typical Format에 Query Block Name과 Column Projection Information이 추가로 제공된다

  

OUTLINE

Typical Format에 추가적으로 Hidden Hint인 Outline Global Hint를 제공한다

  

ADVANCED

ALL Format에 OUTLINE Format를 합친 정보를 제공한다

FILTER_PREDS

  

저장된 PLAN에서 일부 Row 또는 Row Set을 제한하여 출력할 수 있다.

   

  • 사용방법

       

    Explain plan [set statement_id = 'identifier' ] [ Into tablename ] for + SQL;

    • 분석하고자 하는 SQL을 'Explain plan for' 다음에 넣고 Enter

         

    Select * from Table(DBMS_XPLAN.DISPLAY);

    • SQL이 Explain 되었으면 그 다음에 원하는 포맷으로 출력하기 위해서 위와 같이 기본적으로 'PLAN_TABLE'과 'TYPICAL' Format으로 출력.

         

SQL>

SQL> explain plan for

2 select /*+ use_nl(emp dept) */ * from emp, dept

3 where emp.empno=dept.deptno

4 and emp.deptno=10;

   

해석되었습니다.

   

SQL> select * from table(dbms_xplan.display('plan_table',null,'typical',null));

   

   

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 3431005640

---------------------------------------------------------------------------------------

   

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

   

---------------------------------------------------------------------------------------

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 57 | 3 (0)| 00:00:01 |

| 1 | NESTED LOOPS | | 1 | 57 | 3 (0)| 00:00:01 |

| 2 | TABLE ACCESS FULL | DEPT | 4 | 80 | 3 (0)| 00:00:01 |

|* 3 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 37 | 0 (0)| 00:00:01 |

   

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

|* 4 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 0 (0)| 00:00:01 |

---------------------------------------------------------------------------------------

   

Predicate Information (identified by operation id):

---------------------------------------------------

   

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

3 - filter("EMP"."DEPTNO"=10)

4 - access("EMP"."EMPNO"="DEPT"."DEPTNO")

   

17 개의 행이 선택되었습니다.

  

   

여기서 잠깐~! Predicate Information에 나오는 Access,Filter Predicate에 대해 알아보자~!

  • *Access Predicate*는 Access Type을 결정하는데 사용되는 Predicate(조건)을 의미한다. 더 정확하게 말하면 실제 Block을 읽기 전에 어떤 방법으로 Block을 읽을 것인가를 결정한다는 의미이다.
    따라서 Index Lookup이나 Join등은 Access Predicate로 표현된다.
  • *Filter Predicate*는 실제 Block을 읽은 후 Data를 걸러 내기 위해 사용되는 Predicate(조건)를 의미한다.

       

  • Predicate Information test

       

SQL>

SQL> explain plan for

2 select /*+ use_nl(emp dept) */ * from emp, dept

3 where emp.empno=dept.deptno

4 and emp.deptno=10;

   

해석되었습니다.

   

SQL> select * from table(dbms_xplan.display('plan_table',null,'typical',null));

   

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 3431005640

---------------------------------------------------------------------------------------

   

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

   

---------------------------------------------------------------------------------------

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 57 | 3 (0)| 00:00:01 |

| 1 | NESTED LOOPS | | 1 | 57 | 3 (0)| 00:00:01 |

| 2 | TABLE ACCESS FULL | DEPT | 4 | 80 | 3 (0)| 00:00:01 |

|* 3 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 37 | 0 (0)| 00:00:01 |

   

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

|* 4 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 0 (0)| 00:00:01 |

---------------------------------------------------------------------------------------

   

Predicate Information (identified by operation id):

---------------------------------------------------

   

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

3 - filter("EMP"."DEPTNO"=10)

4 - access("EMP"."EMPNO"="DEPT"."DEPTNO")

   

17 개의 행이 선택되었습니다.

  

   

SQL>

SQL> explain plan for

2 select /*+ use_hash(emp dept) */ * from emp, dept

3 where emp.empno=dept.deptno

4 and emp.deptno=10;

   

해석되었습니다.

   

SQL> select * from table(dbms_xplan.display('plan_table',null,'typical',null));

   

   

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 1123238657

   

---------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

---------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 57 | 7 (15)| 00:00:01 |

|* 1 | HASH JOIN | | 1 | 57 | 7 (15)| 00:00:01 |

|* 2 | TABLE ACCESS FULL| EMP | 3 | 111 | 3 (0)| 00:00:01 |

| 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |

---------------------------------------------------------------------------

   

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   

1 - access("EMP"."EMPNO"="DEPT"."DEPTNO")

2 - filter("EMP"."DEPTNO"=10)

   

16 개의 행이 선택되었습니다.

  

   

  • 왜 Nested Loops Join과 Hash Join에서 Access Predicate가 표현되는 방식의 차이가 발생하는가? 
    두 Join의 동작방식의 차이에서 비롯된다.

구분

방식

결론

Nested Loops Join

선행 Table읽으면서 후행 Table을 한번씩 Access

실제 Join은 후행 Table에 대한 Access에서 발생하기 때문에 실제 Join은 후행 Table에 대한 Acccess에서 발생한다. 

그러므로 후행 Table을 읽는 단계가 Access Predicate가 된다.

Hash Join

선행 Table을 먼저 Build한 후, 후행 Table과 한번에 Join

실제 Join이 발생하는 Hash Join 단계가 Access Predicat로 표현된다.

   

  • FORMAT

       

구분

FORMAT

내용

예측내용

BASIC

DBMS_XPLAN.DISPLAY 포멧과 같은 내용

예측내용

TYPICAL

DBMS_XPLAN.DISPLAY 포멧과 같은 내용

예측내용

ALL

DBMS_XPLAN.DISPLAY 포멧과 같은 내용

예측내용

OUTLINE

DBMS_XPLAN.DISPLAY 포멧과 같은 내용

예측내용

ADVANCED

DBMS_XPLAN.DISPLAY 포멧과 같은 내용

실측내용

ALLSTATS

실제 액세스한 로우수와 수행시간 그리고 CR, PR, PW 정보를 보여준다.

수행횟수에 따라 *누적된 값*을 보여준다

실측내용

ALLSTATS LAST

실제 액세스한 로우수와 수행시간 그리고 CR, PR, PW 정보를 보여준다.

*가장 최근*에 수행된 값만 보여준다.

실측내용

ADVANCED ALLSTATS LAST

DBMS_XPLAN.DISPLAY_CURSOR에서 지원하는 모든 Format의

정보를 보여준다.

   

   

<참고문헌>

Oracle Database 11g : Adminstration Workshop

Oracle Database 10g Documentation Library - councepts

원본 위치 <http://www.oracleclub.com>

원본 위치 <http://www.oracleclub.com/lecture/1017>

원본 위치 <http://www.gurubee.net/display/DBSTUDY/EXPLAIN+PLAN>

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,


메모리 구조

- Instance에는 크게 2가지로 구성되어 있다. 메모리 영역(SGA, PGA)과 프로세스 영역(백그라운드 프로세스)

   

   

  1. Instance
    1. SGA(System Global Area)
  • 단일 오라클 데이터 베이스 Instance의 데이터 및 제어 정보를 포함하는 SGA구성 요소라는 공유 메모리 구조 그룹.

       

       

       

  1. 데이터베이스 버퍼 캐시
    1. 2개의 list로 구성됨(Write List 와 LRU(Least Recently) List)
    2. 데이터베이스 버퍼 캐시의 사이즈 2K~32K(멀티 블록 사이즈, 표준 블록 사이즈, SYSTEM Tablespace, DB_BLOCK_SIZE 파리미터를 수정하여 변경가능)
    3. 파라미터 일 때(DB_2~32K_CACHE_SIZE) 블록과 캐쉬 사이즈 일 때(DB_BLOCK_SIZE=4096, DB_CACHE_SIE=1024M, DB_2K~8K_CACHE_SIE=512M)
    4. 추가적인 Multiple Buffer pools(Keep and Recycle - DB_KEEP_CACHE_SIZE and DB_RECYCLE_CACHE_SIZE 파라미터를 통해 수정가능.), 유지되고 있던 Data와 새롭게 사용되어진 데이터가 존재함
    5. 데이터 파일에서 읽은 데이터 블록의 복사본을 보관하는 SGA부분,
    6. SQL이 들어오게 되면, 디스크영역인 데이터파일로 바로 들어 가지 않고 데이터베이스 버퍼캐시에서 있는 지 없는 지를 확인한 뒤, 해당 SQL문의 값이 있다면 바로 데이터를 가져갈 수 있다. 없다면 디스크의 데이터 파일로 가게 되는데, 이 경우 속도가 느리다.

         

  2. 리두 로그 버퍼
    1. 데이터베이스에 대한 변경 사항 관련 정보가 포함된 SGA의 순환버퍼
    2. Insert, Update, Delete, Create, Alter or Drop 수행으로 변화된 내용의 정보를 Redo entries에 저장한다.
    3. Redo entries -> Redo log buffer -> LGWR -> Redo log file(or 파일 구룹형태)
    4. 초기화 파라미터 LOG_BUFFER redo log buffer size 결정(default setting 512kb 또는 128kb CPU_COUNT 파라미터)
    5. 변경사항의 기록을 통해서 추후에 발생할 수도 있는 데이터 손실이나 분실 시에 복구할 수 있도록 도와 준다. (리두로그버퍼->LGWR->온라인 리두 로그 파일->아카이브된 로그파일)

         

  3. Shared Pool(Shared_Pool_Size)
    1. 라이브러리 캐시
      1. Shared SQL Areas, Private SQL Areas, PL/SQL procedures and packages, and control structures such as locks and library cache handles 를 포함한다.

           

        1. Shared SQL Areas
          1. 주어진 SQL 상태의 실행 계획과 Parse Tree(파스트리: 언어에서 문법의 시작 기호가 어떻게 스트링을 유도하는가를 그림으로 표현하는 것으로 유도 트리라고도 한다.)가 들어 있다.
          2. 새로운 SQL-> 메모리(shared pool) -> Shared SQL area(SQL statements run multiple times), 종종 많은 유저들의 SQL이 실행 될 경우가 있다.
          3. 만약 Shared SQL area에 할당된 공간에 자리가 없다면, 공간이 생길 때 까지 대기,

               

        2. Private SQL Areas
          1. Private SQL은 data such as bind information and runtime memory structures 포함한다.
          2. A cursor is a handle or name for a private SQL area

               

        3. Shared SQL Areas 와 Private SQL Areas의 차이는??

             

      2. 딕셔너리 데이터를 보관하는 메모리의 나머지 한 영역
      3. 공유 SQL영역: SQL문에 대한 구문 분석 트리 및 실행 계획이 포함됨.
      4. SQL문이 들어오기 되면 가장 먼저 이 곳에 들어와 SQL문이 이전에 수행 되었는지를 체크한 한다.

           

    2. 데이터 딕셔너리 캐시 캐시
      1. 데이터베이스, 해당 구조 및 유저에 대한 참조 정보를 포함하는 데이터베이스 테이블 및 뷰 모음
      2. 메모리상의 2가지 특별한 위치로 ACCESS함(data dictionary cache, row cache), library cache

           

    3. Shared Pool에서 메모리 할당 및 재사용
      1. 라이브러리 캐시에 이전에 사용되었던 SQL문이 존재한다면, 서버 프로세스는 세션을 대신하여 Private SQL 영역을 할당하여 해당 SQL문의 재사용(SQL 수행 속도 향상)

           

  4. Large Pool
    1. The database administrator can configure an optional memory area called the large

      pool to provide large memory allocations for:

         

  • Session memory for the shared server and the Oracle XA interface (used where

    transactions interact with more than one database)

  • I/O server processes
  • Oracle backup and restore operations

       

  1. Java Pool
    1. Java pool memory is used in server memory for all session-specific Java code and data

      within the JVM. Java pool memory is used in different ways, depending on what mode

      the Oracle server is running in.

         

  2. Streams Pool

       

  1. PGA(System Global Area)

       

  • 서버 또는 백그라운드 프로세스의 데이터 및 제어 정보를 포함하는 메모리 영역

       

  1. User Process
    1. 사용자가 오라클 Application Program을 실행 시켰을 때 사용되는 프로세스

       

    1. 사용자가 오라클 서버에 접속할 때마다 사용자 프로세스가 생성된다.
    2. 사용자가 실행시킨 SQL문을 서버 프로세스에 전달하고, 그 결과를 서버 프로세스로부터 받는 역할을 수행한다.

       

  2. Server Process
    1. Oracle은 서버프로세스를 생성하여 접속된 사용자 프로세스의 요구 사항을 처리 및 상호작용
    2. 공유 서버 구성에서는 여러 개의 사용자 프로세스가 적은 수의 서버 프로세스를 공유하여 서버 프로세스 수를 최소화하는 동시에 사용 가능한 시스템 자원 활용도를 최대화 한다.
    3. 오라클 서버 프로세스는 사용자로부터 받은 요구사항(SQL문)을 처리 합니다.

    전달받은 SQL문을 Parse, 실행(Execute), 페치(Fetch) 작업을 통해 실행 시키는 역할을 한다.

       

       

       

  • Connection and Sessions
    • Connection 은 유저 프로세스와 오라클 인스턴스 사이의 Communication pathway
    • Sessions 은 유저 프로세스와 오라클 인스턴스가 Connection된 상태를 유지하는 특별한 상태.
    • Multiple Session 가능, 예) 같은 유저아이디로 여러명이 접속할 수 있음.

         

         

         

<참고문헌>

Oracle Database 11g : Adminstration Workshop

Oracle Database 11g Documentation Library

Oracle Database 10g Documentation Library

원본 위치 <http://www.oracleclub.com>

원본 위치 <http://www.dbguide.net/db.db?cmd=view&boardUid=12906&boardConfigUid=9&boardIdx=49&boardStep=1>

   

'1. IT Story > DB' 카테고리의 다른 글

Oracle Instance 시작과 종료  (0) 2012.02.29
Oracle Parameter file(spfile/pfile)  (0) 2012.02.29
Oracle Structure 저장 영역 구조  (0) 2012.02.29
Oracle Structure 프로세스  (0) 2012.02.29
Oracle 11g Install[RHEL 5] 3  (0) 2012.02.27
Oracle 11g Install[RHEL 5] 2  (0) 2012.02.27
Oracle 11g Install[RHEL 5] 1  (0) 2012.02.27
Oracle Engine백업 및 그외..  (0) 2011.09.11
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Export백업!!

1. IT Story/DB 2011. 9. 11. 19:34



안녕하세요!!!

이번 년도 어느새 절반이상이 지났습니다.
시간은 정말 빠르게 흘러만 가네요..
하나하나, 차근차근 해야될 일들을 하고 있지만
알 수없는 미래이기 때문에 항상 불안한 건 사실입니다.
하지만 나아가야 되겠지요?? 
그것이 삶이라고 생각합니다.

-운명을 바꾸는 자-







Export 백업 하기!!!!//앞에 있는 백업을 하기 전에 해야될 것들을 확인하기!!! 



1. 백업하기 전에 해야될 것들!!, datapump를 먼저 보신 뒤에 보세요!!
 
1-1 Export 백업전에 선수 과정을 확인한 뒤 시작하자!!
1-2 DB사용량 및 크기, DB의 사용 갯수등 백업을 하기 전에 꼭 선수 과정을 확인하자.

2. 바로 Export 백업시작!!

2-1 선수 과정이 끝났다면 Export백업을 시작하자.

2-2 Export백업 시작. 
     exp system/oracle full=y
                file=/home/oracle/datapump/exp_full_20110000.dmp log=/home/oracle/datapump/exp_full_20110000.log 

※백업을 할때에는 system/oracle(시스템/비번)을 확인하고, 경로확인, 파일이름은 백업하는 일자를 넣어준다.

2-3 Export백업을 부분적으로 받을 수도 있다.
      exp system/oracle tables=SYS.employees
               file=/home/oracle/datapump/exp_full_201100000.dmp log=/home/oracle/datapump/exp_full_20110000.log 



2-4 아무런 이상이 없다면 실행하는 모습을 볼 수 있다.



3. 현재 진행상태 확인!!

3-1 현재 Export백업의 진행상황을 log 파일을 통해 확인할 수 있다.
        "tail -f 파일명.log"


※ 이 밖에도 전송 속도확인, 파일내부 확인 등의 유용한 명령어들이 있다.
    



4. Exprot 백업 완료

4-1 각 테이블이나 파티션 별로 Export되는 것을 확인 할 수 있다.

4-2 아무런 에러가 발생하지 않는다면, Export백업 성공!

4-3 가끔식 테이블이나 파티션 권한설정으로 인하여 에러가 발생할 경우도 있음... 

 




Datapump / Export백업은 만약을 위한 백업이고, 가장 중요한 cold백업을 다음에는 소개하려고합니다.



 

'1. IT Story > DB' 카테고리의 다른 글

Oracle Structure 메모리  (0) 2012.02.29
Oracle 11g Install[RHEL 5] 3  (0) 2012.02.27
Oracle 11g Install[RHEL 5] 2  (0) 2012.02.27
Oracle 11g Install[RHEL 5] 1  (0) 2012.02.27
Oracle Engine백업 및 그외..  (0) 2011.09.11
Cold 백업하자!!  (0) 2011.09.11
백업하기전에 해야 되는 것들!!!  (0) 2011.09.04
Oracle 공부하기 위해 유용한 사이트  (0) 2011.08.14
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,




안녕하세요!!

비록 학생이지만 좋은 기회로 한O에서 Oracle Migration 작업에 참여하게 되었습니다.

그 곳에서 해던 DATABASE 백업 작업을 
제가 가지고 있는 DB를 통하여 다시 재구성 해보았습니다.

-운명을 바꾸는 자- 




 
 

데이터 베이스를 백업하기 전에 해야될 것들!!


<주의 사항>
 
-루트권한으로 백업 하지 않기.
-항상 스샷을 남겨서 작업을 기록
-Log Session 남기기
-안전한 저장 공간확보
-작업할 내용을 엔지니어와 담당자와 함께 미팅하기


1.  DB 버전확인 및 백업할 전체 현재 DB 사용량 확인

   1-1 Oracle DB 버전확인
          
       sqlplus "/as sysdba"
                       명령어를 통하여 간단하게 현재 DB의 버전을 확인할 수 있다.




1-2 Oracle DB 데이터 사용량 확인
 
    select sum (bytes)/1024/1024 from DBA_data_files;
                 //현재 DB의 전체 데이터 파일의 크기를 확인 할 수 있다.
       
                <주의> DB가 1개 이상이라면, 각 SID를 통해 DB에 접근하여 확인하자.
                                                     (echo $ORACLE_SID / Oracle_SID= SID)
 
    select sum (bytes)/1024/1024 from DBA_free_space;
                //현재 DB의 남은 데이터 파일의 크기를 확인 할 수 있다.


※ 결론적으로 전체 크기 - 남은 크기 = 현재 DB사용량을 알 수 있다.
 

2. 현재 사용중인 DB의 갯수 확인

   2-1  "cd $ORACLE_BASE/admin" 에서 확인



               - cd $ORACLE_BASE/admin 에서 DB의 SID(디렉토리) 갯수를 통해서 현재 사용중인 
              DB의 갯수를 확인할 수 있다.
                

   2-2 "cd $ORACLE_HOME/dbs/" 에서 확인



              
             - "cd $ORACLE_HOME/dbs/" 에서 spfile<SID>를 통하여 DB의 갯수를 확인 할 수 있다.


3. 중요파일들에 대한 경로 저장해두기




3-1 Recovery 시에 중요 파일의 해당 위치가 중요하다.(따로 기록해 두는 것이 좋다.)
3-2 Cold 백업을 Recovery할 때 해당 파일의 위치가 중요하다.

 

※SID를 통하여 DB의 갯수를 확인한다.(SID는 oracle DB의 고유 이름을 말한다. 각 DB마다 다르다.)
 





 

'1. IT Story > DB' 카테고리의 다른 글

Oracle Structure 메모리  (0) 2012.02.29
Oracle 11g Install[RHEL 5] 3  (0) 2012.02.27
Oracle 11g Install[RHEL 5] 2  (0) 2012.02.27
Oracle 11g Install[RHEL 5] 1  (0) 2012.02.27
Oracle Engine백업 및 그외..  (0) 2011.09.11
Cold 백업하자!!  (0) 2011.09.11
Export백업!!  (0) 2011.09.11
Oracle 공부하기 위해 유용한 사이트  (0) 2011.08.14
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,