Overview of Primary Components

 

Oracle Instance

- Oracle Database 에 연결하는 것을 의미한다.

- 항상 하나의 DB에 한 개의 Instance 가 Open 됨

- Memory structures 와 Background Process structures 로 구성됨.

 

Oracle Memory Structure

- Oracle 의 메모리 구조는 SGA 와 PGA 로 구성

- System Global Area (SGA) :

→ 인스턴스가 시동되면 할당되고 Oracle Instance 의 주요한 요소

→ 모든 프로세스가 공유

- Program Global area (PGA) :

→ 서버 프로세스가 시작되어지면 할당된다.

→ 사용자별로 생성되어 별도로 사용됨.

→ Parse 작업 수행


 

System Global Area

- SGA 는 여러 개의 Memory structure 들로 구성됨.

→ Shared Pool

→ Database Buffer Cache

→ Redo Log Buffer

→ Java Pool

→ Large Pool

- SGA_MAX_SIZE parameter 로 변경 가능

 

Shared Pool

- 최근 실행된 SQL 구문들과 최근에 사용되어진 data 정의들이 저장됨

- 주요 기능을 수행하는 2개의 주요 메모리 구조로 구성되어짐

1. Library Cache

2. Data Dictionary Cache

- SHARED_POOL_SIZE 파라미터로 설정 됨

SQL>alter system set

2 shared_pool_size = 64M;

 

Library Cache

- 가장 최근 사용 되어진 SQL 과 PL/SQL 들에 관한 정보가 저장됨

- 일반적으로 사용되어지는 구문들의 공유가 가능함

- Soft Parse 과정을 위한 메모리 구조

- LRU Algorithm 에 의하여 메모리 관리가 이루어진다.

- Shared Pool 의 크기에 의해 Library Cache 의 크기가 결정된다.

 

 

 

Data Dictionary Cache

- DB 에서 최근 사용 되어진 사용자 정의들의 집합.

- database file, table, index,column,user,privilege 등에 관한 정보가 포함됨

- Parse 과정에서 서버 프로세스가 접근하게 되는데 이 때 구문의 유효성과 개체 이름을 확인하게 된다.

- Data Dictionary Cache 안에 원하는 정보가 존재 한다면 쿼리와 DML 성능에 향상을 가져오게 된다.

- Hard Parse 를 위한 메모리 구조

- Shared Pool 의 크기에 의해 Library Cache 의 크기가 결정된다.

 

Database Buffer Cache

- 데이터 파일로부터 검색되어진 Data 블록 들이 복사되어 저장된다.

- 데이터를 검색하거나 Update 할 때 좋은 성능을 얻기 위해 존재한다.

- LRU 알고리즘을 통해 관리된다.

- DB_BLOCK_SIZE 가 블록 사이즈를 결정

-> 8i = 2k

-> 9i = 4k

-> 10g,11g = 8k

 

- 독립된 서브 캐쉬로 구성됨

-> DB_CACHE_SIZE – Database buffer cache 전체 크기

-> DB_KEEP_CACHE_SIZE – 중요한 Data 를 보관 (LRU 적용 안함)

-> DB_RECYCLE_CACHE_SIZE – 잘 사용되자 않는 Data

- 다음 붉은 두가지 설정은 권장 사항이 아님

- 유동적으로 크기 변경이 가능

SQL>alter system set DB_CACHE_SIZE = 96M;

- DB_CACHE_ADVICE=on/off 는 buffer cache 의 크기를 변경했을 때의 성능을 예측하는 Advisory 기능을 다음 파라미터로 제공함

- 다음의 다이나믹 퍼포먼스 뷰를 통해 확인가능

-> V$DB_CACHE_ADVICE

'Oracle > Admin' 카테고리의 다른 글

Differences between a Connection and a Session  (0) 2011.10.06
Undo tablespace  (1) 2011.10.05

dDB Link 설정

Step 1: listener.ora (Server 측)

- 다음과 같이 여러 개의 리스너를 설정할 수 있다. 다만 운영중인 DB 의 SID_NAME 은 정확해야 하며, Port 번호는 달라야 한다.

Step 2: tnsnames.ora (Client 측)

- 접속을 시도할 서버측의 정보를 입력해 주면 된다.

- 여기서는 IP 주소는 172.16.7.121 이며 Port 는 1522 이고 서버측 Service_name 즉 ORACLE_SID 는 testdb 이다.

Step 3: Link 생성 (Client 측)

SQL> create database link <LINK 명> ß 임의로 정할 수 있음

2 connect to <username> identified by <Password>

3 using '<별칭>' ßtnsnames.ora 에 설정해 둔 접속할 Server Allias

- 위 tnsnames.ora 설정대로 한다면 using 'centos';

Step4:

SQL>select * from scott.test@<link 명>

Ex à SQL>select * from scott.test@clink;

- Link 확인

SQL> select * from user_db_links;

SQL> select * from all_db_links;

 

'Oracle > Backup&Recover' 카테고리의 다른 글

백업파일이나 아카이브 로그에 문제 있을 때 복구하기  (1) 2011.10.04
SQL Loader  (0) 2011.10.04
Clone DB && DB Link (drop table 복구)  (0) 2011.09.29
Clone DB (drop table 복구)  (0) 2011.09.29
Datapump Expdp (first)  (0) 2011.09.28

실전! 오라클 백업과 복구
국내도서>컴퓨터/인터넷
저자 : 서진수
출판 : 생능출판사 2010.09.06
상세보기

Clone DB && DB Link (drop table 복구)

- drop table 된 Data 를 clone DB 와 DB Link 를 이용하여 복구해 보겠습니다.

- 우선 archive mode 를 확인 합니다.

 

- 오픈 백업을 수행 합니다.

 

- 실습을 위해 다음과 같이 Table 을 생성하고 Data를 삽입 합니다.

SQL> create table scott.ctest01

2 (no number,

3 name varchar2(10),

4 address varchar2(20)) tablespace clone_test;

 

SQL> begin

2 for i in 1..100000 loop

3 insert into scott.ctest01 values(i,dbms_random.string('A;,10),dbms_random.string('A',20));

4 end loop;

5 commit;

6 end;

7 /

 

- 로그 마이어로 확인 하거나 다음과 같이 시간을 기록해 둡니다.

 

- 운영 DB 에서 PFile을 복사하여 CloneDB용 Pfile 을 생성합니다.

- 컨트롤 파일의 경로와 디비 명을 바꿔 주셔야 합니다.

$cp inittestdb.ora initclone1.ora

 

- 그리고 원본 testdb 즉 운영 DB 에서 컨트롤 파일 생성 스크립트를 만듭니다.

- Redo log file 을 이용하여 복구를 할 수 없고 Archive log 를 이요하여야 하기 때문에 Resetlogs 용으로 스크립트를 수정합니다.

$export ORACLE_SID=clone1

- 그리곤 생성한 스크립트를 이용하여 DB 를 Mount 단계까지 올려 줍니다.

- recover database 쿼리를 이용하여 아까 기록한 시간대로 복구를 해주어야 합니다. 물론 controlfile 의 SCN 이 다르기 때문에 using backup controlfile 구문도 추가해 주어야 합니다.

 

SQL>alter database open resetlogs;

- resetlogs 옵션으로 DB 를 Open 시킵니다.

- 그리고 Data 가 복구 되었는지 확인 합니다.

- 복구가 된 것을 확인 할 수 있습니다.

- 운영서버(testdb)에서 clone DB로 DB Link 생성하기

 

- 운영서버의 ORACLE_HOME/network/admin/tnsnames.ora 수정

- 만약 tnsnames.ora 파일이 존재하지 않는다면 netca 를 실행하여 리스너 구성을 해주시기 바랍니다.

- ORACLE_HOME/network/admin/listener.ora

- 운영DB 의 listener.ora 파일에서 Clone DB 의 리스너 정보를 등록 시켜줘야 합니다.

 

 

- 이제 운영서버에서 Clone DB 로 연결하는 DB Link 를 생성합니다.

SQL> create database link clink ß DB Link 명(임의로 지정)

2 connect to scott identified by tiger ß clone DB에 연결할 계정

3 using 'clonedb'; ß 이 이름은 tnsnames.ora 파일에 있는 이름을 사용하여야 합니다.

 

-리스너를 중지 시키고 다시 실행 시키면서 리스너를 테스트 해 봅시다.

- 다음은 리스너를 중지 시키고 연결 되는지 확인해 봅니다.

 

-다시 리스너를 실행 시킵니다. (listener2)

 

- listener2 의 상태를 확인 합니다.

- tnsping clonedb 명령어를 통해 리스너가 제대로 동작하고 통신이 되는지 확인 합니다.

 

- 운영 DB 에서 Clone DB 로 접속할 수 있는지 확인 합니다.

SQL> select count(*) from scott.ctest01@<DBLink명>

- 다음과 같은 방법으로 Clone DB 에서 복구한 Data 를 가져 옵니다.

 




 

'Oracle > Backup&Recover' 카테고리의 다른 글

SQL Loader  (0) 2011.10.04
DB Link 설정  (0) 2011.09.30
Clone DB (drop table 복구)  (0) 2011.09.29
Datapump Expdp (first)  (0) 2011.09.28
Export and Import (특정 Tablespace)  (0) 2011.09.28


Clone DB (drop table 복구)

- 기존 testdb 에서 테이블을 생성하고 실습을 위해 drop 시킵니다.

- 또한 운영중인 DB 의 Redo log file 을 복사할 수는 없기에 Redo log group 의 두배 정도의 횟수만큼 switch 를 일으켜 줍니다. 그래서 아카이브 파일에 정보가 기록되게 하는 것 입니다.

SQL>alter system switch logfile;

- Clone DB 용 파라미터 파일을 testdb 파라미터 파일에서 복사한 후 아래 내용을 수정해 줍니다.

Control_files= '/data/temp2/control01.ctl'

db_name='testdb2'

 

- 예전에 백업해 두었던 데이터 파일을 temp2 로 복사 합니다.

 

- testdb2 를 위한 컨트롤 파일을 생성하기 위해 testdb DB 에서 컨트롤 파일 생성을 위한 Trace 를 생성 합니다.

- Redo log file 이 존재 하지 않기에 resetlogs 모드로 편지을 해줍니다.

(resetctl.sql)

 

$export ORACLE_SID=testdb2

- SID 값을 변경하여 testdb2 DB로 접속할 수 있게 파라미터를 변경해 줍니다.

 

 

- TESTDB2 로 접속한 것을 볼 수 있습니다.

- 그리고 트레이스를 실행시켜 mount 단계까지 올려줍니다.

 

- recover 명령어를 통해 불완전 복구를 수행 시키고 resetlogs 옵션으로 DB 를 open 시킵니다.

- Data가 복구된 것을 확인 할 수 있습니다.

- 이제 운영 DB에 Data를 다시 넣기 위하여 Clone DB 에서 export 를 수행 합니다.

 

 

- 다음은 testdb 즉 운영DB에 다시 import 시키는 화면 입니다. 이 작업 전에

$export ORACLE_SID=testdb 명령어를 주어 운영DB 로 접속할 수 있게 환경을 맞춰줘야 합니다.

$imp scott/tiger file=tt100.dmp ignore=y

명령어만 주게되면 다음과 같은 오류를 볼 수가 있는데 이는 서로 다른 계정으로 imp 를 시킬 때 발생하는 오류입니다.

- 다음과 같이 fromuser=scott touser=scott 옵션을 주어 scott 계정으로 table을 import 시키게 만들어 주어야 합니다.

- 만약 system 계정으로 import 시키면 scott 계정의 table이 아닌 system.tt100 으로 입력되기 때문에 주의 하셔야 합니다.

- 다음과 같이 제대로 데이터가 입력된 것을 확인 할 수 있습니다.


Datapump Expdp

 

1. Datapump 의 장점

- 작업 관리의 편의성

- 필요한 디스크 공간의 예측

- 원격지 DB에 작업 수행 가능

- remapping 기능 지원

 

2. 사용 전 환경 설정

- 디렉토리 생성 및 권한 설정

$mkdir /data/datapump

- scott 에게 datapump 디렉토리에 접근할 수 있는 권한 설정.

SQL> grant read,write on directory datapump to scott;

Grant succeeded.

 

- Datapump 는 기존 export 와 구분하기 위해 expdp 로, import 와 구분하기 위해 impdp 라는 명령을 사용…

 

3. expdp 실행 모드

- Full 모드

- schema 모드

- Tablespace 모드

- Table 모드

 

* Datapump 작업 모니터링

SQL>select owner_name,job_name,job_mode,state from dba_datapump_jobs;

- owner_name : 작업 계정

- job_name : 작업 명칭'

- job_mode : full, table, index, tablespace 등

- state : executing , defining, undefined, not running 등

 

4. 실습 : scott 계정의 emp, dept 테이블만 백업 받기

[oracle@server121 datapump]$ expdp scott/tiger tables=emp,dept \

directory=datapump job_name=t2 dumpfile=emp_dept2

- 주의할 점은 default temporary tablespace 가 정의 되어 있어야 한다. 그렇지 않으면 다음과 같은 오류를 발생시킨다.

- scott 계정으로 expdp 를 실행시킬 때 scott 계정의 default temporary table space 가 지정되어야 한다.

SQL>alter user scott temporary tablespace temp;

5. 실습 : scott schema 전부 백업 받기

[oracle@server121 datapump]$ expdp scott/tiger schemas=scott directory=datapump \

> dumpfile=scott01.dmp

6. 실습 : DB 전체를 백업 받기

[oracle@server121 datapump]$ expdp system/password full=y directory=datapump \

> dumpfile=full01.dmp job_name=a

- 무슨 error 발생 21:14:30 에 ……. 확인해보자

- /data/datapump/export.log 를 확인해 봅니다.

- ora-39139: Data Pump does not support XMLSchema object.

 

ORA-39139: 

Data Pump does not support XMLSchema objects. string will be skipped.

Cause:

Object has XMLSchema-based columns, which are unsupported by Data Pump.

Action:

Use the original exp and imp utilities to move this object. 

 

- 원인은 XMLSchema-based colum 들은 Datapump 를 이용해 옮길 수 없다고 한다. 그래서 export 와 import 를 이용해 옮겨야 한다고 한다.

 

7. 실습 : 일시 중단 후 다시 시작하기

- 실습을 위해 풀백업을 다시 실행

- 실행중에 ctrl +c 키로 중지 시킴

- stauts 로 datapump 의 상태와 잡의 상태를 확인합니다.

 

- sqlplus 에서도 상태를 확인할 수 있습니다.

- stop_job 명령어를 통해 일시적으로 job 을 중지 시킬 수 있습니다.

- expdp system/centos attach=system.a

- attach = owner.job_name

- start_job 명령어를 통해 다시 job 을 실행시킬 수 있습니다.

- 혹은 취소하고 싶다면 kill_job 명령어를 실행하시면 됩니다.

 

- 완료가 되면 작업이 끝난 것을 확인할 수 있습니다.

8. 실습 : 비정상적으로 종료된 job 취소하기

- 실습을 위한 상황을 만듭니다.

- 다음과 같은 오류가 난다면

1. 실제 OS 의 경로에 디렉토리가 있는지 확인

2. grant read,write on directory dp2 to scott; 으로 정확히 주었는지 확인

3. OS 상의 디렉토리 권한을 확인

4. 이것도 안되면

SQL> drop directory dp2

2 ;

Directory dropped.

SQL> create directory dp2 as '/data/dp2';

Directory created.

SQL> grant read,write on directory dp2 to scott;

Grant succeeded.


SQL>

 




- expdp 를 full=y 옵션을 주고 수행한 후 ctrl+c 로 작업을 정지 시킵니다.

- stop 을 하여 빠져 나갑니다.

- 같은 방법으로

directory=dp2 , dp3, dp4

dumpfile=full02.dmp, full03.dmp, full04.dmp

job_name=dp2,dp3,dp4

3번 더 반복해 줍니다.

9. 실습 : 여러 사용자의 테이블 한꺼번에 expdp 받기

- 다음과 같이 여러 다른 사용자들의 테이블을 한번에 받기 위하여 tables 의 인자 값을 여러 사용자의 테이블로 주게되면 다음과 같은 오류를 발생 시킵니다.

위는 scott 계정의 emp 테이블과 dpuser 계정의 tt01 테이블을 복사하려 했지만 하나의 스키마만 expdp 가능하다는 오류를 보여 줍니다.

Solution > 그냥 계정별로 하라고요~~~~~~~~~~~

 

10. 실습 : 병렬 expdp 작업 하기

$expdp system/centos full=y directory=datapump dumpfile=full04.dmp \

>job_name=a parallel=4

- 4개의 프로세스를 이용하여 작업

 

- top 명령어를 통해 확인 할 수 있습니다.

11. 실습 : 파라미터 파일 사용해서 expdp 수행

- 여러 개의 파일로 분할 expdp

$vi expdp_pump.par

Userid=system/oracle

Directory=datapump

Job_name=datapump

Logfile=expdp.log

Dumpfile=expdp_%U.dmp

Filesize=100M

Full=y

:wq

 

$expdp parfile=expdp_pump.par

 


힘들어서 오늘은 여까지 해야겠다....
ㅜㅜ 다음 이시간은 무리고 다음에....

실전! 오라클 백업과 복구
국내도서>컴퓨터/인터넷
저자 : 서진수
출판 : 생능출판사 2010.09.06
상세보기

 

Export and Import

 

- 특정 Tablespace 의 Data 를 추출하는 기능

- 특정 Tablespace 에 문제가 발생하였을 때 클론 DB 에서 복구 후 Export 하여 원본 DB 에 다시 부을 때 자주 사용한다.

 

 

 

- 원본 DB 에 다시 데이터를 IMPORT 합니다.

- fromuser=원 사용자 touser=새로운 사용자

Imcomplete Recovery

 

- 1일에 백업을 받았기에 2일에 생성한 테이블 스페이스와 컨트롤 파일에 대한 백업이 존재하지 않음

- Archive log mode

- Close Backup

- test table 에 대한 tablespace Backup 이 존재하지 않음

- 우선 모든 데이터 파일과 컨트롤 파일, 리두로그 파일을 백업합니다.

- Test 를 위하여 테이블 스페이스를 만들고 데이터를 입력 합니다.

- 현재 test 테이블 스페이스가 있기 때문에 test2 를 만들겠습니다.

 

- 백업이 없는 상태에서 Tablespace 를 drop 을 합니다.

 

- drop tablespace 의 경우 alert_SID.log 파일에서 삭제된 시간을 확인 할 수 있습니다.

 

- 혹은 log miner 를 이용하여도 언제 생성된 테이블이 드롭되었는지도 알 수 있습니다.

 

- 이제 DB를 내리고 Data file 과 Control file 만 Backup 된 것을 가져옵니다.

- Redo log file 은 현재 사용하고 있는 것을 가져와야 합니다.

- 이제 파라미터 파일에서 컨트롤 파일의 경로를 temp2/control_0922.ctl 로 변경해줍니다.

 

- DB 를 mount 상태까지 올린 다음 컨트롤 파일에 기록되어 있는 데이터 파일의 경로를 바꾸어 주어야 합니다.

- 이때 복구가 필요하지 않는 파일은 offline drop 을 이용하여 다시 원래 DB 로 원복 해줄 때 영향이 없도록 해줍니다.

- Redo log 파일의 경로 또한 바꿔줘야 합니다.

-

 

- 이제 복구를 합니다.

SQL>recover database until time '시간' using backup controlfile;

  • 여기서 시간은 alert_SID.log 파일에 기록된 시간 혹은 로그 마이어를 이용하여 찾은 시간을 넣어주시면 됩니다.

     

- 그리고 여기서 현재 current 인 Redo log 파일의 경로를 넣어주시면 됩니다.

 

- 현재 문제가 되는 Tablespace 를 보여 줍니다.

NAME

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

/data/temp2/system01.dbf

/data/temp/test.dbf

/data/temp2/sysaux01.dbf

/data/temp/users01.dbf

/data/temp/example01.dbf

/data/temp/insa.dbf

/data/temp/haksa01.dbf

/data/temp2/undo01.dbf

/home/oracle/product/10g/dbs/UNNAMED00009 <- 새로 생성됨

 

9 rows selected.

 

SQL> alter database create datafile '/home/oracle/product/10g/dbs/UNNAMED00009'

2 as '/data/temp2/test2.dbf';

 

Database altered.

 

SQL>

 

- 다시 한번 복구 명령어를 실행해 줍니다.

 

SQL>alter database open resetlogs; 명령어를 이용하여 DB 를 open 시킵니다.

이 때 주의할 점은 resetlogs 로 open 을 하게되면 redo log 의 scn 이 초기화가 되어 다시는 복구를 위하여 사용할 수가 없습니다. 그렇기 때문에 redo 로그 파일도 오류가 발생한 시점에서 사용하기 전에 다시한번 따로 백업을 하여 올렸을 때 다시 사용할 수 있도록 해야 한다는 것입니다.

 

- 또한 DB 를 resetlogs 로 올리기 전에 복구를 위한 사항들을 모두 확인하고 올리시기를 바랍니다.

 

 

정상적으로 복구가 된 것을 확인 할 수 있습니다.

- 참고도서 -

실전! 오라클 백업과 복구
국내도서>컴퓨터/인터넷
저자 : 서진수
출판 : 생능출판사 2010.09.06
상세보기

'Oracle > Backup&Recover' 카테고리의 다른 글

Datapump Expdp (first)  (0) 2011.09.28
Export and Import (특정 Tablespace)  (0) 2011.09.28
Log Miner 에 Archive log file 등록하는 script  (0) 2011.09.27
Log Miner && Supplemental Logging 설정  (0) 2011.09.27
Open Backup  (0) 2011.09.27

Log Miner 에 Archive log file 등록하는 script

- 원하는 경로의 아카이브 파일이나 redo log 파일을 쉽게 등록할 수 있다.

For i in $(ls 경로);

Do echo "exec dbms_logmnr.add_logfile('archive file 경로/$i')" >> addarc.sql;

Done;



2011/09/27 - [Oracle/Recovery] - Log Miner && Supplemental Logging 설정

+ Recent posts