Export와 Import는 가장 유용하게 그리고 자주 사용되는 백업관련 DBA ToolKit 입니다.


SQL*Loader는 외부 데이터를 오라클 서버로 업로드 하는 역할을 수행 하지만 Export/Import는 오라클 서버의 데이터를 다른 오라클 서버(이때 플랫폼과는 무관하다. 예를 들어 윈도우용 오라클에서 Export 받은 파일을 Unix/Linux 서버 기반의 오라클로 Import 하는것이 가능하다) 또는 같은 서버의 다른 사용자로 Import 하는 것이 가능 하다.
먼저 Export부터 그 사용법에 대해 알아 보기로 하자.

1. Export
- EXport는 데이터베이스의 논리적인 백업을 제공 한다. 즉 테이블, 데이블스페이스, 데이터를 포함한 사용자, 그리고 사용자가 만든 스키마 오브젝트(Index, View, Synonym, Trigger, DataBase Link, sequence, stored code 등등)등을 백업 받을 수 있는 것이다.

- Export 유틸리티의 Output은 export dump 파일 이다. 이 파일은 import Utility를 통해 읽혀져 다른 데이터베이스등으로 복구 되는 것이다.

- Export 파라미터
많은 파라미터중 UserID라는 파라미터는 꼭 가져야 한다는 것을 기억 하자. Exp 명령 입력하고 아무 파라미터도 주지 않는 경우 기본(Default) 값을 제공하면서 입력을 위한 프롬프트를 보여준다.(이때 사용자 ID와 ORD)는 반드시 입력해야 한다.

USERID : username/password를 값으로 입력 한다. 반드시 입력해야 한다. 만약 전체 데이터베이스를 백업 받기 위해 서는 기술된 User는 명시적으로 exportfull database 롤(Role)을 부여 받아야 한다.




FILE : 출력 파일의 이름(Export후 생기는 dump 파일 이름)




ROWS : Export Dump 파일에 테이블 행(데이터) 포함 여부 표시: (Y)es/(N)o 만약 여러분이 테이블 구조만 export하고 실제 row data는 백업을 원하지 않는 경우에는 rows=n 이라고 명시 해야 한다.(default값은 y)




Query : 테이블의 특정 부분만을 Export 하기 위해서 사용 한다.
(exp userid=scott/tiger tables=emp query=\"where sal \> 2000 \
-----------------------------------------
Export Mode와 관련된 파라미터

FULL : DataBase 레벨의 Export를 수행할지 여부를 표시, 전체 데이터베이스 익스포트 여부를 표시: (Y)es/(N)o
(exp userid=system/manager full=y)




OWNER : Schema Level의 EXport를 수행 할지의 여부를 표시 Export를 원하는 사용자이름을 기술 한다.
(exp userid=system/manager owner=(scott)
TABLES : export할 테이블 테이블 리스트 또는 (Y)es/(N)o
(exp userid=system/manager tables=(emp, dept, salgrade)
(exp userid=system/manager tables=(scott.emp%)
TABLESPACE : export를 원하는 테이블스페이스(TableSpace)를 기술
(exp yserid=system/manager tablespaces = (users) )
-----------------------------------------------------------------------------
INDEXES, CONSTRAINTS, GRANTS, TRIGGERS : Index, Constraints, grant,
triggers등을 export할지의 여부를 지정 (Y)es/(N)o, 기본적으로 앞 4개의 스
키마 오브젝트는 Export 됨
(exp userid=scott/tiger indexes=n constraints=n grants=n triggers=n)

DIRECT : Direct 모드 익스포트 유무 (Y)es/(N)o
INCTYPE : 익스포트 레벨 유형
PARFILE : 파라미터가 명시된 파일의 이름, Export인자들이 많을 경우 별도의 파일로
서 관리 가능
HELP : 대화식 모드에서 익스포트 파라미터 디스플레이 (Y)
LOG : 로깅 메시지를 위한 파일이름을 기술 한다.
CONSISTENT : 익스포트 동안 데이터 갱신시 데이터베이스의 읽기 일관성 뷰 제공
유무: (Y)es/(N)o
BUFFER : 바이트로된 데이터 버퍼 크기: (정수)
COMPRESS : 하나의 익스텐트(Extent)에 모든 데이터를 포함시킬지 명시, (Y)es/(N)o

* Direct Path 익스포트 개념
Direct Path 기능을 사용함으로써 데이터를 훨씬 더 빨리 export할 수 있다.

* Direct-Path 익스포트의 구조
export시 direct 모드의 사용은 파라미터 DIRECT=Y라고 기술함으로써 설정될 수 있다
Direct Path 익스포트는 인스턴스의 다른 자원들과 경쟁하지 않으며 세션에 의해 사용
되는 private area로 데이터베이스 블록을 읽어 들인다.
행들은 전송을 위해 Two-Task Command(TTC) 버퍼로 직접 이동되며 이 TTC 버퍼
내의 데 이터는 Export의 형식으로 되어 있다.

[출처] oracle exp/imp|작성자 빠드루가

'먹고살기 > Oracle' 카테고리의 다른 글

사용자 세션의 강제 종료  (0) 2011.04.05
oracle JOIN  (0) 2011.04.05
Tablespace  (0) 2011.03.30
OCP  (0) 2011.03.18
Oracle Instance  (0) 2011.03.17
Tablespace 먹고살기/Oracle 2011. 3. 30. 16:43

1)TABLESPACE 조회

> SELECT TABLE_NAME,TABLESPACE_NAME

> FROM USER_TABLE;

2) TABLESPACE 만들기

TABLESPACE는 SYS 계정 이상에서만 생성이 가능하므로 SCOTT계정에서 생성할수 없다

SCOTT에서 SYS로 접속 하기

> CONN SYS/ORACLE AS SYSDBA

SYS계정에서 TABLESPACE 생성하기

> CREATE TABLESPACE 테이블스페이스명 DATAFILE'경로(ORCLE설치 파일안에 ORADATA안에)\테이블스페이스명.DBF' SIZE (원하는 크기)M ;

3) SCOTT 계정으로 돌아오기 ( CONN SCOTT/TIGER)

4) TABLESPACE변경하기

> ALTER TABLE 테이블명 MOVE TABLESPACE 테이블스페이스명;

5) 다량의 TABLE을 다른 TABLESPACE로 옮기기

ACCEPT USERNAME PROMPT ' 이동시킬 사용자 계정명 입력 :'

ACCEPT TBS PROMPT '옮길 테이블 스페이스명 입력:'

SET HEADING OFF

SET FEEDBACK OFF

SPOOL M1.SQL

> SELECT 'ALTER TABLE '||'&USERNAME'||','|| TABLE_NAME ||

> ' MOVE TABLESPACE '||'&TBS'||';'

>FROM DBA_TABLES

> WHERE OWNER = UPPER('&USERNAME');

SPOOL OFF

SET HEADING ON

SET FEEDBACK ON

@ M1.SQL

'먹고살기 > Oracle' 카테고리의 다른 글

사용자 세션의 강제 종료  (0) 2011.04.05
oracle JOIN  (0) 2011.04.05
oracle exp/imp  (0) 2011.04.05
OCP  (0) 2011.03.18
Oracle Instance  (0) 2011.03.17
OCP 먹고살기/Oracle 2011. 3. 18. 17:39
Case-multipulation 함수

lower  :  대문자를 소문자로 바꿔준다

    ->last_name이 'Fay'인 사람의 이름을 모두 소문자로 출력하기 (Fay - fay)
       SQL> select employee_id, lower(last_name)
       from employees
                   where last_name='Fay';

'먹고살기 > Oracle' 카테고리의 다른 글

사용자 세션의 강제 종료  (0) 2011.04.05
oracle JOIN  (0) 2011.04.05
oracle exp/imp  (0) 2011.04.05
Tablespace  (0) 2011.03.30
Oracle Instance  (0) 2011.03.17

-------------------------------
Oracle Instance란...
-------------------------------

DataBase가 시작될때 Oracle은 시스템글로벌영역(SGA)
이라는 메모리 영역을 할당하여 하나 이상의 Oracle Process를 시작합니다.
SGA와 Process를 합쳐 DataBase Instance라고 합니다.
Instance의 memory와 process들은 database의 data를 효율적으로 관리하기 위해서 사용되며 관련
database에 대하여 하나의 user 또는 여러 user들에 의해서 이용된다.

[SGA ---> DataBase Buffer Cache, Redo Log Buffer, Share Pool등으로 구성]
자세한 부분별 설명은 다은 강좌에 이어 집니다.

Instance를 시작한다음 인스턴스에 DataBase를 Mount합니다.
다중 인스턴스가 동시에 자신의 물리적 DataBase를 Access하면서
동일한 Computer에서 실행될수 있습니다.
Oracle병렬서버를 사용하면 다중인스턴스에 단일 데이터베이스를
마운트할수있습니다.

Oracle 프로세스 구조는 다중 작업이 발생하는 방법과 다중 작업이 수행되는 방식을 정의 하므로
매우 중요합니다.
A.단일 프로세스 Oracle Instance :단일 사용자 Oracle은 하나의 프로세스가 모든 Oracle Code를
실행하는 시스템입니다. Oracle의 일부분과 Client응용프로그램을 분리하여 실행하는데 다른
프로세스를
사용하지 않습니다.대신 Oracle의 모든 코드와 단일사용자의 데이터베이스 응용 프로그램은 단일
프로세스에 의해 실행됩니다.

B.다중 프로세스 Oracle Instance : 다중사용자 Oracle은 여러 개의 프로세스가 Oracle의 각기
다른 부분을 실행하고 접속한 각사용자들은 개별 프로세스를 실행합니다.

C.다중 사용자 환경에서의 Oracle 프로세스
1. 데이터베이스 기록자(DBWR)
- DataBase Buffer의 내용을 데이터 파일에 기록하는 역할을 하며 DataBase Buffer Cache를
관리하는 Oracle BackGround 프로세스임
- DataBase Buffer Cache에 있는 내용이 수정되면 해당 버퍼는 'Dirty'로 표시되는데 이
Dirty Buffer를 Disk에 기록하여 Buffer Cache를 깨끗한 상태로 유지하는 역할을 함
- LRU 알고리즘에 의해 최근에 사용된 데이터블록을 메모리에 유지합니다.
- Buffer Cache는 Multi Latch를 자지는데 래치는 공유 데이터구조를 보호하는 자동내부
잠금입니다. DB_BLOCK_LRU_LATCHES라는 Parameter는 시스템에 구성되는 래치수
와 기본적으로 CPU에 설정되는 Latch 수를 제어합니다.
- 서버프로세스가 Buffer를 Dirty목록으로 이동시킨후 Dirty목록이 임계길이에 도달했음을
발견하면 Server 프로세스는 DBWR에 신호를 보냅니다.
- 체크포인트가 발생하면 LGWR(로그기록자)는 DBWR에 신호를 보냅니다. 즉 Check Point가
발생하면 LGWR는 디스크에 기록되어야 하는 수정된 Buffer 목록을
지정합니다. DBWR는 디스크에 지정된 Buffer의 내용을 기록합니다.

2. 로그기록자(LGWR)
- Redo Log Buffer를 디스크에 있는 Redo Log File에 등록합니다.
- 사용자 프로세스가 Transaction을 Commit할때의 Commit Record및 매3초 마다의 Redo Log
buffer, DBWR가 수정된 버퍼를 디스크에 기록할때의 Redo Buffer의 내용등을 기록합니다.

- 사용자가 Commit명령을 발생시키면 LGWR는 Commit Record를 즉시 Redo Log Buffer에 넣지만
해당 데이터 버퍼의 변경은 변경사항을 데이터 파일에 기록하는 것이
더 효율적일때까지 지연됩니다.

3 체크포인트(CKPT)
- Check Point가 발생하면 Oracle은 모든 DataFile의 Header를 갱신하여 체크포인트임을
나타내야 합니다. 보통 LGWR가 이러한 작업을 수행하지만 체크포인트가 시스템 Performance를
저하 시킨다면 CKPT를 활성화하여 체크포인트 수행작업을 LGWR가 수행하는 다른 작업과 분리할
수 있습니다.
- 체크포인트가 모든 응용프로그램에 꼭 필요한 것은 아니며 DataFile의 수가 많아 Check
Point중에 LGWR프로세스 성능이 저하되면 CKPT프로세스를 활성화 할수있다.
- 초기화 Parameter CHECK_POINT_PROCESS는 CKPT프로세스를 활성화 하거나 비활성화 합니다.

4. 시스템모니터(SMON)
- 인스턴스 시작시에 인스턴스의 복구를 수행, 더 이상 사용하지 않는 임시 Segment를 삭제하며
사용 가능한 빈영역을 더 큰 블록으로 만들기위해 인법한 빈 확장영역을 하나로 통합합니다.

5. 프로세스모니터(PMON)
- 사용자 프로세스에 장애가 발생하면 프로세스 복구를 수행,Cache를 비우고 해당 프로세스가
사용한 자원을 해제하며,활성 Transaction의 Table상태를 재설정하고 Lock을 해제하며 Active
Process목록에서 ID를 제거한다.
- 주기적으로 Dispatch와 서버 프로세스의 상태를 점검하고 활동중이 아니면 재시작합니다.
6. 복구자(RECO)
- 분산 Transaction을 포함한 장애를 자동으로 해결하는 분산 Option과 함께 사용되는 프로세스,
시스템이 분산 트랜잭션을 허용하고 DISTRIBUTED_TRANSACTIONS가 0보다 클때만 존재합니다.

7. 아카이브(ARCH)
- Online Redo Log File이 꽉차면 이를 지정된 저장장소에 저장,Redo Log가 Archive Mode에서
운영되고 자동 Archiving기능이 활성화 되어 있을 때만 존재합니다.

8. 잠금(LcKn)
- 병렬서버 옵션에서 최대 10개 까지의 잠금Process(LCK0~LCK10)가 인스텀스의 Lock을 제공합니다.
그러나 대부분의 병렬서버 시스템에서는 하나의 LCK프로세스(LCK0)만
으로도 충분합니다.

9. 스냅샷갱신(SNPn)
- 분산 옵션에서 최대 10갸 까지의 스냅샷갱신프로세스(SNP0~SNP10)가 자동으로 Table SnapShot을
화면에 다시 표시합니다.

10. 디스패쳐(Dnnn)
- 디스패쳐 프로세스를 사용하면 사용자 프로세스는 제한된 수의 서버 프로세스를 공유할 수
있습니다. 디스패쳐가 없다면 각 사용자 프로세스는 하나의 전용(Dedicated)서
버 프로세스를 필요로 합니다. 그러나 Multi Thread Server에서는 동일한 수의 사용자에
대해 더 적은 수의 공유서버 프로세스를 필요로 합니다.
- 단일 DataBase Instance에 대해 다중 Dispatcher 프로세스를 생성할 수 있습니다. Oracle을
사용하는 시스템의 Network Protocol에 대해 적어도 하나의 디스페처가 생성되어야 합니다. DBA는
프로세스당 접속수에 대한 OS의 한계에 따라 가장 적합한수의 디스패처를 시작해야 하며
인스턴스가 실행되는 동안 디스패처 프로세스를 추가또는 삭제할수 있다.

- 인스턴스가 시작되면 Listener는 사용자를 Oracle과 접속시키는 통신경로를 설정하며,
각 디스패처는 리스너에 접속 요구사항을 수신할 수 있는 주소를 부여합니다.
사용자 프로세스가 접속을 요구하면 리스너는 요구사항을 점검하고 사용자가 디스패처를 사용할 수
있을지에 대해 결정합니다. 사용할 수 있을 경우 리스너는 로드할 양이 가장적은 디스패처 주소를
돌려주며 사용자 프로세스는 디스패처에 직접 접속됩니다.


[메모리와 Process]SGA란?
SGA는 DataBase Buffer Cache,Redo Log Buffer, Shared Pool등으로 구성된다.
1.DataBase Buffer Cache
- DataFile로 부터 읽어들인 Data Block의 복사본을 가지고 있습니다.
- Cache내의 Buffer에는 수정되었지만 디스크에 기록되지 않은 Dirty Buffer와
빈버퍼,고정된버퍼,아직 더티목록으로 이동되지 않은 더티목록등으로 구성되는
LRU목록등이 있다.
- Oracle은 사용자 프로세스가 빈버퍼를 찾지 못하고 버퍼의 임계점에 도달하면
프로세스는 LRU목록 검색을 중지하고 Dirty Buffer를 Disk에 기록하도록 DBWR에
신호를 보낸다.
- 초기 Parameter DB_BLOCK_BUFFERS는 DB의 DataBase Buffer Cache의 Buffer수를 지
정합니다. Cache의 Buffer는 하나의 Oracle Data Block과 동일하며,Cache는 제한된
크기이므로 Cache가 가득찬후 Cache실패가 발생하면 Oracle은 Cache에 있는 Data를
디스크에 기록한다.
- size가 작으므로 발생 할 수 있는 현상은 빈번한 디스크 I/O이다. 크기는 db_block_buffers로
지정하며 buffer의 갯수를 지정한다.
byte 산정은 db_block_buffers * db_block_size로 산출된다.       

2.Redo Log Buffer
- DataBase의 변경사항 정보를 유지하는 SGA에 있는 원형 Buffer
- BackGround 프로세스인 LGWR는 Redo Log Buffer를 디스크상에서 사용중인 Online
Redo Log File Group에 기록한다.
- Redo Log Buffer의 크기는 Parameter LOG_BUFFER로 결정한다
큰 값을 가질경우 Log File의 I/O가 감소하며,트랜잭션이 길고 수가 많은 경우에 특히 더감소한다.
기본크기는 OS DataBlock의 4배임.

3.공유풀(Shared Pool)
A. Library Cache
- 공유 SQL영역, 전용SQL영역,PL/SQL Procedure와 Package, 잠금장치나 Library
Cache Handle과 같은 제어구조를 포함한다.
- 공유 SQL영역은 단일 SQL명령문에 대한 구문분석 트리와 실행계획을 가지는 영
역이며, 전용SQL영역은 바인드정보나 실행 시간 버퍼(SQL이 실행되는 동안 사용
되는 정보, Insert/Update/Delete보다 Select가 많음) 같은 데이터를 가지는 영역
- 전용SQL여역을 관리하는 것은 사용자 프로세스이고,사용자 프로세스가 할당할수
있는 전용SQL영역의 수는 OPEN_CURSORS(Default 50)로 제한 되지만 전용SQL
영역할당 또는 해제는 사용자가 사용하는 응용프로그램 도구에 의해 좌우됨
B. Dictionary Cache
- Data Dictionary(Table/View의 이름,Column이름과유현,Oracle사용자 권한)는 자주
Access되므로 메모리에 두개의 특별한 위치를 지정하여 Dicitonary Data를 저장

- 공유풀에서 메모리 할당 및 재사용
공유풀에 있는 항목은 수정된 LRU 알고리즘에 의해 지워질 때 까지 남아있다.
Oracle은 공유풀을 확인하여 동일한 명령문이 공유풀에 있는지 확인한다.
이때 같은 Query라도 대순자를 틀리게하여 Query하는 경우에는 틀린것으로 인식하여
또다른 공유풀의 영역을 할당한다.(즉 SELECT * FROM EMP와 select * from emp는 다르게 인식)
이렇게 함으로서 메모리를 절약하며,수행능력이 향상된다.
- ANALYZE명령어를 사용하여 Table/Cluster/Index의 통계를 할경우 분석된 개체를 참조하는
명령문을 포함하는 모든 공유 SQL영역이 공유풀에서 지워진다.
- SGA의 크기는 Instance 시작시에 결정되며 대부분의 시스템에서 성능을 최적화 하려면 전체
SGA의 크기가 실제 Memory 크기에 맞아야 한다.가상메모리를 사용하면 OS가 SGA의 일부를
Page 하므로 시스템 성능이 급격히 떨어진다.

- SGA의 크기에 영향을 주는 Parameter
DB_BLOCK_SIZE : 하나의 Data Block과 DataBase Buffer크기를 Byte 단위로 나타낸 것
DB_BLOCK_BUFFERS : DB_BLOCK_SIZE인 데이터베이스 Buffer수를 나타냄
LOG_BUFFER : 리두로그 버퍼에 대한 할당된 바이트수
SHARED_POOL_SIZE : 공유SQL영역과 PL/SQL명령문에 할당된 영역의 크기를 Byte
단위로 나타낸 것

[메모리와 Process]PGA란?
PGA(프로그램 글로벌영역,프로세스 글로벌영역)
- 단일 프로세스(서버,백그라운드)에 대한 데이터와 제저정보를 저장하는 메모리 영역
- 사용자 프로세스가 접속되고 세션이 형성되면 Oracle이 PGA를 할당한다.
- 각 서버프로세스에 하나의 PGA가 할당되며,PGA는 서버프로세스에 대해 배타적이며
항상 프로세스에 대해 실행되는 Oracle Code만을 읽거나 쓸수있슴
- PGA의 크기는 운영체제마다 정적이며, OPEN_LINKS,DB_FILES,LOG_FILES등의
Parameter는 PGA의 크기에 영향을 준다. 사용자가 일단 접속되면 사용자는 PGA영
역을 초과하여 실행할수 없슴.

1. 스택영역
- PGA는 세션변수,배열 및 다른 정보를 저장하기위해 할당된 메모리인 스택 영역을 포


2. 세션정보
- 다중스레드 서버없이 실행되는 인스턴스의 PGA는 전용SQL영역이나 다른 정보와 같
은 사용자 세션에 대한 추가 메모리가 필요하고 인스턴스가 다중스레드 서버를 실행하
는 경우 이추가 메모리는 PGA에 있지 않고 SGA내에 할당된다.

3. 공유SQL영역
- 다중스레드 서버와 함께 수행되는지의 여부에 관계없이 공유 SQL영역은 항상 PGA가
아닌 SGA의 공유 메모리에 존재합니다.

'먹고살기 > Oracle' 카테고리의 다른 글

사용자 세션의 강제 종료  (0) 2011.04.05
oracle JOIN  (0) 2011.04.05
oracle exp/imp  (0) 2011.04.05
Tablespace  (0) 2011.03.30
OCP  (0) 2011.03.18