검색결과 리스트
Oracle Admin에 해당되는 글 10건
- 2015.04.06 사용자 관리
- 2015.04.06 메모리 관리기법
- 2015.04.06 오라클 아키텍쳐
- 2015.04.02 Control File 관리
- 2015.04.02 data file , redo log file , control file 이동 간단정리
- 2015.04.01 Tablespace 와 Data File 관리
- 2015.03.30 pfile , spfile 생성 및 관리
- 2015.03.29 Oracle Background Process
- 2015.03.29 SQL 문장의 실행원리
- 2015.03.29 Oracle Architecture
글
사용자 관리
계정은
1.관리자 계정 - sys , system
2.일반 계정 - scott , HR 등등..
으로 나뉜다.
일반계정을 추가 생성하는 경우는 공식으로 정해진 것은 없지만 보통 새로운 업무가 생성될 때.
User 와 Schema
우리가 Oracle Server 에 접속하기 위해 conn scott/tiger 할 때 scott 이 user 이다.
즉, User는 오라클 서버에 접속하기 위해 사용하는 것.
Schema란 특정 사용자(User) 가 만들어놓은 모든 Object 의 집합이다.
ex) 오라클 설치 시 연습용으로 제공되는 HR schema 를 예로들면 Oracle Server 안에 HR 계정으로 로그인해서 만들어 놓은 모든 것을 다 모으면 그것을 HR schema 라고 하는 것이다. table, index, view, constraint, trigger, dblink, synonym, sequence 등을 통틀어서 HR schema.
새로운 사용자 생성 순서
1. 생성할 사용자의 default tablespace 결정하고 해당 tablespace 생성.
2. 생성할 사용자가 사용하는 temporary tablespace를 결정하고 먼저 생성.
3. 사용자 생성.
4. 적절한 프로파일과 권한, 롤 등을 생성한 후 할당.
실습해보자.
실습1. 사용자 생성
실습2. Password 관련 profile 생성
실습3. Resorce 관련 profile 만들기
실습1. 사용자 생성
신규 서비스로 웹하드 서비스를 런칭했다고 가정.
DBA는 Oracle DB 서버에 해당 서비스를 할 수 있도록 작업.
TS_WEBHARD라는 Tablespace 생성하고 웹하드 관련 테이블은 모두 이곳에 저장하기로.
TS_WEB_IDX Tablespace 에 웹하드 관련 인덱스 저장하기로.
(1) webuser 의 default tablespace 생성하기
create tablespace ts_webhard datafile '/app/oracle/oradata/testdb/ts_web01.dbf' size 100M ;
create tablespace ts_web_idx datafile '/app/oracle/oradata/testdb/ts_web_idx01.dbf' size 10M ;
확인
select tablespace_name , bytes/1024/1024 MB , file_name from dba_data_files ;
(2) Temporary tablespace 생성하기
create temporary tablespace temp_web tempfile '/app/oracle/oradata/testdb/temp_web01.dbf' size 10M ;
(3) 사용자 생성
create user webuser identified by webpwd -> 아이디 패스워드
default tablespace ts_webhard -> 기본 테이블스페이스
temporary tablespace temp_web -> 임시 테이블스페이스
quota unlimited on ts_webhard -> 할당량 지정 여기선 무제한
quota 0m on system ; -> 시스템 테이블스페이스 사용 못하게
(4) 권한 설정
grant resorce , connect to webuser ;
접속확인
conn webuser/webpwd
사용자 정보 확인하기
default tablespace 와 temporary tablespace 정보 확인하기
set line 200
col default_tablespace for a10
col temporary_tablespace for a10
select username , default_tablespace "Default TS" , temporary_tablespace "Temp TS" from dba_users where username='WEBUSER' ;
profile 관리하기
사용자 계정의 행동에 제약사항을 두기 위해 사용하는 경우가 대부분.
ex) 10분 이상 활동 없으면 접속 강제종료. 10일마다 암호 다른것으로 바꾸게 강제 적용.
※ 관련 파라미터
Failed_login_attempts : 로그인 시도 실패 후 계정 잠그기. ex) Failed_login_attempts 5
5번 실패 후 6번째부터는 로그인 못하게.
Password_lock_time : attempts 에서 계정이 잠기면 며칠 동안 잠글것인지. 단위:일.
DBA가 unlock 해서 사용 가능.
Password_life_time : 동일한 암호를 며칠간 사용하게 할 것인지. 단위:일.
Password_grace_time : life_time 에서 만료되어도 이 파라미터에 지정된 값 만큼
더 암호를 변경할 기간을 허용.
Password_reuse_time : 동일한 암호를 다시 사용할 수 없도록 설정하는 기간.
Password_reuse_max : 동일한 암호를 재사용 할 경우 최대 사용 가능 횟수.
Password_verify_function : 암호를 복잡하게 만들기 위해 특정 함수를 적용. 점검.
오라클에서 만들어 둔 기본 함수를 사용할 수도 있고 사용자가 직접 만들기도 가능.
이 함수를 사용할 경우 아래 사항 확인.
-암호는 최소 4글자 이상
-암호는 사용자 계정과 달라야함
-하나의 특수문자나, 알파벳, 숫자가 포함
-이전 암호와 3글자 이상 달라야 함
실습2. Password 관련 profile 생성
조건1. 로그인 시도 5회 실패시 계정 5일동안 사용 못하게
조건2. 계정 암호는 10일에 한 번씩 변경하게
조건3. 동일한 암호는 10일동안 사용 못하게
create profile sample_prof limit
failed_login_attempts 5
password_lock_time 5
password_life_time 10
password_reuse_time 10;
Resorce profile 관련 파라미터
이 profile 사용 위해서는 resorce_limit=true 설정이 되어있어야 함
startup 시 사용되는 파라미터 파일에 위 문장을 적어놓거나
alter system set resorce_limit=true; 실행.(9i 이상 버전)
CPU_PER_SESSION : SESSION 이런 1명의 접속을 의미. 이 파라미터는 하나의 세션이 CPU를 연속적으로 사용할 수 있는 최대 시간을 설정. 무한루프 같은 쿼리가 작동되면 혼자서 CPU를 연속적으로 점유하기 때문에 그런일을 막고자. 1/100초 단위.
SESSIONS_PER_USER : 하나의 사용자 꼐정으로 몇 명의 사용자가 동시에 접속할 수 있는지.
CONNECT_TIME : 하루동안 DB Server에 접속할 수 있는 총 시간 설정.
IDLE_TIME : 연속적으로 휴면 시간이 이 값을 넘으면 접속 해제하고 commit 안된 작업은 모두 rollback한다. 사용자가 서버에 접속하면 서버 프로세스가 생성되고 PGA가 할당되기 때문에.
LOGICAL_READS_PER_SESSION : 한 세션에서 사용 가능한 최대 블락 수.
PRIVATE_SGA : MTS / shared server 일 경우 해당 세션의 SGA 사용량을 bytes 단위로 설정.
CPU_PER_CALL : 하나의 call 당 cpu를 점유할 수 있는 시간. 1/100초 단위.
LOGICAL_READS_PER_CALL : 하나의 call 당 읽을 수 있는 블락 개수 지정.
실습3. Resorce 관련 profile 만들기
alter system set resource_limit=true;
※ Resource profile 사용 위해서는 resorce_limit=true 설정이 되어있어야 함
조건1. 1명당 연속적으로 CPU를 사용할 수 있는 시간을 10초로 제한
조건2. 하루 중 8시간만 DB에 접속 가능하게
조건3. 10분동안 사용하지 않으면 강제로 접속 해제
사용자에게 profile 할당하기
위에서 만든 profile을 webuser 에게 설정
현재 모든 사용자가 적용 받고 있는 profile 확인
set pagesize 50
select username "사용자명" , profile "적용 프로파일" from dba_users where username='WEBUSER';
해당 profile 에 어떤 내용이 있는지 확인하기 (sample_prof 내용 조회)
set line 200
col profile for a13
col resource_name for a30
col resource for a10
col limit for a10
select * from dba_profiles where profile='SAMPLE_PROF' ;
re_sample_prof 내용 조회하기
col profile for a15
select * from dba_profiles where profile='RE_SAMPLE_PROF' ;
사용자에게 profile 적용시키고 확인하기
alter user webuser profile sample_prof;
alter user webuser profile re_sample_prof;
select username,profile from dba_users where username='WEBUSER';
※ 여러 개의 프로파일을 적용시킬 순 없다. 처음부터 원하는 파라미터를 전부 넣고 한꺼번에 만들고 그것을 적용시켜야 함
사용 안하는 profile 삭제하기
현재 사용자에게 할당되어있는 profile은 기본적으로 삭제가 안된다.
그러나 cascade 옵션으로 삭제하면 삭제되고 그 프로파일을 사용하던 사용자는 기본값 프로파일을 사용하게 된다. default profile.
drop profile re_sample_prof cascade;
select username, profile from dba_users where username='WEBUSER';
privilege (권한) 관리
profile -> 하지 못하게 하는 것이라면
privilege -> 할 수 있게 하는 것
권한은 크게 system 관련 : system 전체에 영향을 주는 권한
object 관련 : 특정 object에 관련된 권한 으로 나뉜다.
일반 OS -> 계정,암호
Oracle -> 계정,암호,권한
(1) SYSTEM 관련 주요 권한
(2) SYSOPER / SYSDBA 권한
(3) SYSTEM 관련 권한 할당/해제
(4) 사용자가 가지고 있는 권한 조회
(5) Object 관련 권한
(6) Object 권한 할당/해제
Role 관리
Role 은 권한 꾸러미이다. 여러 권한을 한번에 넘겨줄 수 있다.
(1) Role 생성하기
(2) Role에 create session , create table 권한 할당하기
(3) scott 사용자에게 trole 할당하기
(4) 어떤 사용자가 어떤 role 을 사용하는지 확인하기
(5) 어떤 role에 어떤 권한이 있는지 확인하기
'Oracle Admin' 카테고리의 다른 글
메모리 관리기법 (0) | 2015.04.06 |
---|---|
오라클 아키텍쳐 (0) | 2015.04.06 |
Control File 관리 (0) | 2015.04.02 |
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
글
메모리 관리기법
9i 버전에서의 메모리 관리기법
두가지로 나뉘는 메모리의 구조
SGA (System Global Area) , PGA (Program Global Area)
8i 이전까지는 이 두 메모리를 DBA가 수동으로 관리.
설정값이 변경되면 인스턴스 재시작 해야했다.
9i 부터 Dynamic 기능 (관련 파라미터 변경 후 재부팅 없이 명령어만 쳐서 즉시 적용) 등장.
※ alter system set 명령어
9.0.1 버전에서는 Default Buffer Cache 값을 Dynamic 하게 변경
9.2.0 버전부터 Shared pool , Default Buffer Cache , Large pool , Java pool 값을
10g 버전부터는 Streams pool 추가
※ 위 항목들을 모두 합친 값이 SGA_MAX_SIZE 에 설정된 값보다 클 수 없다.
즉, 전체 SGA의 크기는 SGA_MAX_SIZE 로 지정되고 이 값을 초과할 수 없다.
그래서 파라미터를 수정할 경우 전체 파라미터의 값을 늘린 후 개별 파라미터를 수정해야,
먼저 통을 늘린 후 내용을 늘려야 적용이 되는게 9i Dynamic 의 특징이다.
※ 동적으로 각종 메모리 값을 변경할 때 그래뉼 (Granule) 단위 사용.
1 그래뉼 = 4M (SGA 전체 128M) 또는 16M (128M 초과)
10g -> SGA 128M 에서 1G 로 변경
SGA 총 크기와 그래뉼 사이즈 확인하기
SQL> select name , bytes/1024/1024 MB from v$sgainfo where name='Maximum SGA Size' ;
NAME MB
-------------------------------- ----------
Maximum SGA Size 590.667969
10g 버전에서의 메모리 관리기법
SGA 주요 구성요소들의 크기를 오라클 스스로 변경할 수 있는 기술인
ASMM 기능이 등장한다. (Automatic Shared Memory Management)
Redo log Buffer 를 제외한 나머지 구성요소들의 크기를 상황에 맞도록 스스로 변경.
Shared pool , Default Database Buffer Cache , Large pool , Java pool , Streams pool 자동변경
이 기능을 수행하기 위해 10g부터 새로 등장한 백그라운드 프로세스 -> MMAN (Memory Manager)
ASMM은 MMAN이라는 백그라운드 프로세스가 현재SGA의 Workload 를 보고 메모리의 부족함과
충분함을 판단한 후 충분한 곳에서 메모리를 회수해 부족한 곳으로 재배치 해주는 기능.
이 기능을 위한 필수요소는 현재 SGA 의 Workload.
이 부분은 MMON(Memory Monitor) 라는 백그라운드 프로세스가 SYSAUX 테이블스페이스에 저장
해두는 통계정보와 각종 Advisor 들이 실시간으로 보내주는 정보를 참조함.
MMAN이 SGA의 양을 자동으로 할당하고 관리할 때 기준으로 사용하는 파라미터가
SGA_TARGET 이다. 이 파라미터에 설정된 용량 범위 안에서 메모리 할당, 관리.
SGA_TARGET 역시 SGA_MAX_SIZE 값을 초과할 수 없다.
Auto-Tuned dynamic Parameter :
DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE,
STREAMS_POOL_SIZE
Manual-Tuned dynamic Parameter :
DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE, DB_nK_CACHE_SIZE,
SGA_TARGET
11g 버전에서의 메모리 관리기법
9I 버전의 Dynamic SGA 기능에서 10g 버전의 ASMM 기능으로 SGA의 크기를 스스로 튜닝하는
기술로 발전했고 11g 버전에서는 SGA 뿐 아니라 PGA 까지 한꺼번에 자동으로 관리하는 기술인
Automatic Memory Management (AMM) 으로 발전함.
이 기능은 Linux , Solaris , Windows , HP-UX , AIX 버전의 오라클에서만 작동.
MEMORY_TARGET
이 파라미터로 AMM 기능으로 관리할 메모리의 총량을 지정할 수 있다.
이 파라미터는 SGA와 PGA 모두를 관리.
오라클이 SGA와 PGA의 양을 이 파라미터 범위 안에서 증감하며 관리.
Dynamic parameter 이며 최대 설정값은 MEMORY_MAX_SIZE 값까지 지정 가능.
기본값은 0으로 사용하지 않는다는 의미.
MEMORY_MAX_TARGET
이 파라미터는 MEMORY_TARGET 값이 최대로 증가될 값을 지정하는 용도로 사용.
설정하지 않으면 기본값은 MEMORY_TARGET 값과 동일하게 설정됨.
AMM 기능 사용하게 된다면 SGA_TARGET , PGA_AGGREGATE_TARGET
파라미터 값을 별도로 지정할 필요는 없다. 그러나 지정을 한다면 오라클은 그 값을
최소값으로 인식한다.
권장값은 SGA_TARGET , PGA_AGGREGATE_TARGET 모두 0으로.
AMM 기능 사용시 물리적 메모리가 충분한 여유공간이 있어야하고 부족할 경우 에러 발생.
/dev/shm 공간을 공유 메모리 공간과 매핑시켜서 마치 메모리를 디스크처럼 사용.
기본 크기는 OS 메모리의 50%로 설정되는데 설정값보다 물리메모리 양이 부족할 경우
아래와 같은 에러가 발생하면서 오라클이 시작되지 않는다.
SQL> startup;
ORA-00845: MEMORY_TARGET not supported on this system
'Oracle Admin' 카테고리의 다른 글
사용자 관리 (0) | 2015.04.06 |
---|---|
오라클 아키텍쳐 (0) | 2015.04.06 |
Control File 관리 (0) | 2015.04.02 |
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
글
오라클 아키텍쳐
Architecture = Memory Architecture + Process Architecture
- Oracle Server = Instance + Database
- Intance = SGA Memory + Background Process
- Database = Datafile + Redo Log File + Control File + Parameter File
- SGA Memory = Shared Pool + Data Buffer Cache + Redo Log Buffer + Large Pool + Java Pool + Streams Pool
- Shared Pool = Library Cache + Dictionary Cache + Control Structures
- Process = User Process + Oracle Process
- Oracle Process = Background Process + Server Process
- Background Process = DBWn + LGWR + CKPT + SMON + PMON + RECO + ARCn ...
- Server Process = Shared Server Process + Dedicated Server Process
Introduction to Oracle Memory Structures
Oracle 메모리 구조는 실행 중인 프로그램 코드 정보와 세션정보 등을 저장 하고 사용자들이 공유하는 데이터를 저장합니다.
Oracle의 대표적인 메모리 구조는 시스템 글로벌 영역(System Global Area: SGA)과 프로그램 글로벌 영역(Program Global Area: PGA)이 있습니다.
문서에 대하여
- - 강좌 URL : http://www.gurubee.net/lecture/1883
- - 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- - 구루비의 모든 강좌는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
'Oracle Admin' 카테고리의 다른 글
사용자 관리 (0) | 2015.04.06 |
---|---|
메모리 관리기법 (0) | 2015.04.06 |
Control File 관리 (0) | 2015.04.02 |
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
글
Control File 관리
spfile 의 경우 순서
spfile 내용 변경 명령어 -> alter system set contrl_files='경로1','경로2','경로3' scope=spfile;
※ scope=spfile 옵션은 현재 인스턴스에는 적용하지 않고 재부팅 후 변경하겠다는 옵션이다.
경로 변경작업
-> 인스턴스 종료
-> 디렉토리 생성 및 컨트롤파일 복사
-> 인스턴스 오픈
※ pfile 의 경우 vi로 수정이 가능하다. pfile 의 경우 인스턴스를 먼저 종료 하고 나서
!vi $ORACLE_HOME/dbs/initSID.ora 로
컨트롤 파일의 경로를 수정한 후 해당 디렉토리 생성, 최근 컨트롤파일 복사 후
다시 startup 한다.
자세히 살펴보면
1. select status from v$instance;
현재상태 확인.
2. show parameter spfile;
spfile or pfile 바라보는지 확인
3. select name from v$controlfile;
현재 Controlfile 경로 조회
4. alter system set control_files='/home/oracle/disk1/control01.ctl','/home/oracle/disk2/control02.ctl' scope=spfile ;
spfile 파라미터 변경 후 DB 종료
shutdown immediate;
5. cd /home/oracle
mkdir disk1 disk2
이동시킬 경로로 가서 폴더 생성
생성한 폴더에 컨트롤파일 복사
cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/disk1/control01.ctl
cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/disk1/control02.ctl
DB startup
'Oracle Admin' 카테고리의 다른 글
메모리 관리기법 (0) | 2015.04.06 |
---|---|
오라클 아키텍쳐 (0) | 2015.04.06 |
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
글
data file , redo log file , control file 이동 간단정리
spfile 의 경우 (create spfile from pfile)
1. 컨트롤파일 이동
DB 오픈 상태에서
alter system set control_files='바꿀경로1','바꿀경로2','바꿀경로3' scope=spfile;
경로 변경 후 DB 종료 shutdown immediate;
!cp 원본경로 바꿀경로1
!cp 원본경로 바꿀경로2
!cp 원본경로 바꿀경로3
startup
끝.
2. 데이터파일 이동
DB종료 후 마운트상태로 재시작 shutdown immediate; -> startup mount;
이동시킬 디렉토리로 copy
경로변경
alter database rename
file 경로
to 경로 ;
3. 리두로그 파일 이동
이동시킬 디렉토리로 copy
경로변경
alter database rename
file 경로
to 경로 ;
pfile 의 경우 (create pfile from spfile)
1. 컨트롤파일 이동
DB 오픈 상태에서
!vi $ORACLE_HOME/dbs/initSID.ora
컨트롤파일 경로 변경
이동시킬 디렉토리로 컨트롤파일 복사
DB startup
데이터파일, 리두로그파일은 spfile 과 동일하게
'Oracle Admin' 카테고리의 다른 글
오라클 아키텍쳐 (0) | 2015.04.06 |
---|---|
Control File 관리 (0) | 2015.04.02 |
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
Oracle Background Process (0) | 2015.03.29 |
글
Tablespace 와 Data File 관리
테이블스페이스 이름 , 용량 , 데이터파일 위치 조회
(기본 테이블 스페이스 조회 명령어)
select tablespace_name , bytes/1024/1024 MB , file_name
from dba_data_files ;
◆각 datafile 실제사용량 조회 쿼리
select distinct d.file_id file#,
d.tablespace_name ts_name,
d.bytes /1024 /1024 MB,
d.bytes / 8192 total_blocks,
sum(e.blocks) used_blocks,
to_char( nvl( round( sum(e.blocks)/(d.bytes/8192), 4),0) *100,'09.99') || ' %' pct_used
from dba_extents e , dba_data_files d
where d.file_id = e.file_id(+)
group by d.file_id , d.tablespace_name , d.bytes
order by 1,2 ;
◆ 수동으로 Tablespace 에 Data File 추가하는 명령어
alter tablespace 이름
add datafile '/app/oracle/oradata/testdb/name.dbf' size 20M ;
◆크기 수동 증가
alter database datafile '/app/oracle/oradata/testdb/name.dbf' resize 20M ;
◆ 크기 자동 증가
alter database datafile '/app/oracle/oradata/testdb/name.dbf' autoextend on ;
◆ 체크포인트SCN 조회쿼리
select a.file# , a.ts# , b.name , a.status , a.checkpoint_change#
from v$datafile a , v$tablespace b
where a.ts# = b.ts# ;
◆ Tablespace 이름 , 용량 , Datafile 위치 , 크기자동증가 , 온라인
select tablespace_name , bytes/1024/1024 MB , file_name , autoextensible "Auto" , online_status
from dba_data_files;
★Check Point★
1. 테이블 스페이스 offline 에서 online 변경 시에는
alter system checkpoint; 를 통해 SCN 을 맞춰야한다.
2. 현재 쓰고있는 파일의 경로를 옮기면 안된다.(startup 단계별 쓰이는 파일 확인 점검)
◆ 데이터파일 경로와 온/오프라인 상태 확인 명령어
select file# , name , status from v$datafile;
Tablespace offline
1. alter tablespace haksa offline;
2. alter tablespace haksa offline temporary;
-> dbf 한놈 고장났을때, rm으로 지우면 안된다.
3. alter database datafile '/app/oracle/oradata/testdb/haksa01.dbf' offline (archive log mode)
alter database datafile '/app/oracle/oradata/testdb/haksa01.dbf'
offline drop; (no archive log mode)
※ immediate; 옵션 -> 작업 대기하지않고 오프라인.
※ recover tablespace haksa;
Date File 이동
1. 해당 Tablespace Offline ! 사용하지 않게
2. Data file 을 대상 위치로 복사
3. 컨트롤 파일 내의 해당 Datafile 경로변경
4. 해당 테이블스페이스 온라인 상태로 변경
offline 안되는 데이터파일 옮기기
◆ 오프라인 불가능한 3가지
1. system tablespace
2. 사용중인 undo tablespace
3. default temporary tablespace
◆순서
1. DB종료 shutdown immediate;
2. 마운트 상태로 시작 startup mount;
3. Datafile 복사
4. 컨트롤파일 경로수정
5. DB 오픈
Redo log file 이동하기!
현재상태 먼저 확인
col member for a50
select a.group# , a.member , b.bytes/1024/1024 MB , b.archived , b.status
from v$logfile a , v$log b
where a.group#=b.group#
order by 1,2;
마운트 상태로 스타트업
!mkdir /app/oracle/disk4
!mkdir /app/oracle/disk5
select member from v$logfile;
!cp /app/oracle/oradata/testdb/redo01.log /app/oracle/disk4/redo01_a.log
!cp /app/oracle/oradata/testdb/redo02.log /app/oracle/disk4/redo02_a.log
!cp /app/oracle/oradata/testdb/redo03.log /app/oracle/disk4/redo03_a.log
alter database rename
file '/app/oracle/oradata/testdb/redo01.log'
to '/app/oracle/disk4/redo01_a.log';
alter database rename
file '/app/oracle/oradata/testdb/redo02.log'
to '/app/oracle/disk4/redo02_a.log';
alter database rename
file '/app/oracle/oradata/testdb/redo03.log'
to '/app/oracle/disk4/redo03_a.log';
select member from v$logfile;
alter database add logfile member
'/app/oracle/disk5/redo01_b.log' to group 1,
'/app/oracle/disk5/redo02_b.log' to group 2,
'/app/oracle/disk5/redo03_b.log' to group 3;
select member from v$logfile;
Tablespace 삭제
drop tablespace haksa;
★table 이 하나라도 있으면 삭제 안됨.
drop tablespace haksa including contents and datafiles;
select tablespace_name , bytes/1024/1024 MB , file_name
from dba_data_files;
연습문제) pfile 을 이용하여 다음과같이 이동시키세요
/app/oracle/disk1/control01.ctl , redo01_a.log , redo02_a.log , redo03_a.log
/app/oracle/disk2/control02.ctl , redo01_b.log , redo02_b.log , redo03_b.log
/app/oracle/disk3/control03.ctl , undo01.dbf
/app/oracle/disk4/system01.dbf , sysaux01.dbf
/app/oracle/disk5/users01.dbf , example01.dbf
현재 상태확인 (spfile, pfile)
show parameter pfile;
show parameter spfile;
* VALUE 에 값이 나오면 spfile 사용중인것이다.
spfile 을 삭제하고 DB를 껐다가 켜서 pfile 을 사용하여 오픈되는지 확인한다.
shutdown immediate;
startup
show parameter pfile;
*VALUE 값이 없으면 pfile 사용중인것.
오픈이 잘 된다면 정상적으로 적용된 것이다.
현재 사용중인 컨트롤파일을 조회한다.
select name from v$controlfile;
현재위치는 다음과 같이 확인된다.
NAME
/home/oracle/data/disk1/control01.ctl
/home/oracle/data/disk2/control02.ctl
/home/oracle/data/disk3/control03.ctl
컨트롤파일을 이동을위해 DB를 꺼준다.
shutdown immediate;
vi 에디터로 pfile 을 열어 controlfile 경로를 수정한다.
!vi $ORACLE_HOME/dbs/inittestdb.ora
원하는 경로로 수정 후 현재 사용중인 컨트롤파일을 이동할 경로로 복사해준다.
경로에 폴더가 존재해야한다. (먼저만들기)
cp /home/oracle/data/disk1/control01.ctl /app/oracle/disk1/control01.ctl
cp /home/oracle/data/disk1/control01.ctl /app/oracle/disk2/control02.ctl
cp /home/oracle/data/disk1/control01.ctl /app/oracle/disk3/control03.ctl
startup 후, 정상 오픈되는지 확인한다.
오픈 후 바뀐 경로로 정상 적용되었는지 확인.
select name from v$controlfile;
NAME
/app/oracle/disk1/control01.ctl
/app/oracle/disk2/control02.ctl
/app/oracle/disk3/control03.ctl
여기까지 컨트롤 파일 이동 완료.
다음으로 데이터파일 , 리두로그파일을 이동시키기 위해 마운트상태로 다시 startup 한다.
shutdown immediate;
startup mount;
SYS>select status from v$instance;
STATUS
MOUNTED
1. 데이터파일 옮기기
2. 데이터파일의 현재경로 확인
select name from v$datafile;
NAME
/app/oracle/disk3/system01.dbf
/app/oracle/oradata/testdb/sysaux01.dbf
/app/oracle/oradata/testdb/undotbs01.dbf
/app/oracle/oradata/testdb/users01.dbf
/app/oracle/oradata/testdb/example01.dbf
/app/oracle/oradata/testdb/hakjum01.dbf
이동시킬 디렉토리로 카피
!cp /app/oracle/disk3/system01.dbf /app/oracle/disk4/
!cp /app/oracle/oradata/testdb/sysaux01.dbf /app/oracle/disk4/
!cp /app/oracle/oradata/testdb/undotbs01.dbf /app/oracle/disk3/undo01.dbf
!cp /app/oracle/oradata/testdb/users01.dbf /app/oracle/disk5/
!cp /app/oracle/oradata/testdb/example01.dbf /app/oracle/disk5/
경로수정
alter database rename
file '/app/oracle/disk3/system01.dbf'
to '/app/oracle/disk4/system01.dbf' ;
alter database rename
file '/app/oracle/oradata/testdb/sysaux01.dbf'
to '/app/oracle/disk4/sysaux01.dbf' ;
alter database rename
file '/app/oracle/oradata/testdb/undotbs01.dbf'
to '/app/oracle/disk3/undo01.dbf' ;
alter database rename
file '/app/oracle/oradata/testdb/users01.dbf'
to '/app/oracle/disk5/users01.dbf' ;
alter database rename
file '/app/oracle/oradata/testdb/example01.dbf'
to '/app/oracle/disk5/example01.dbf' ;
바뀐 경로 확인
select name from v$datafile;
NAME
/app/oracle/disk4/system01.dbf
/app/oracle/disk4/sysaux01.dbf
/app/oracle/disk3/undo01.dbf
/app/oracle/disk5/users01.dbf
/app/oracle/disk5/example01.dbf
/app/oracle/oradata/testdb/hakjum01.dbf
리두로그파일 이동시키기
현재위치 : select member from v$logfile;
MEMBER
/app/oracle/disk4/redo03_a.log
/app/oracle/disk4/redo02_a.log
/app/oracle/disk4/redo01_a.log
/app/oracle/disk5/redo01_b.log
/app/oracle/disk5/redo02_b.log
/app/oracle/disk5/redo03_b.log
이동시킬 위치
/app/oracle/disk1 redo01_a.log , redo02_a.log , redo03_a.log
/app/oracle/disk2 redo01_b.log , redo02_b.log , redo03_b.log
파일복사
!cp /app/oracle/disk4/redo01_a.log /app/oracle/disk1/redo01_a.log
!cp /app/oracle/disk4/redo02_a.log /app/oracle/disk1/redo02_a.log
!cp /app/oracle/disk4/redo03_a.log /app/oracle/disk1/redo03_a.log
!cp /app/oracle/disk5/redo01_b.log /app/oracle/disk2/redo01_b.log
!cp /app/oracle/disk5/redo02_b.log /app/oracle/disk2/redo02_b.log
!cp /app/oracle/disk5/redo03_b.log /app/oracle/disk2/redo03_b.log
경로변경
alter database rename
file '/app/oracle/disk4/redo01_a.log'
to '/app/oracle/disk1/redo01_a.log' ;
alter database rename
file '/app/oracle/disk4/redo02_a.log'
to '/app/oracle/disk1/redo02_a.log' ;
alter database rename
file '/app/oracle/disk4/redo03_a.log'
to '/app/oracle/disk1/redo03_a.log' ;
alter database rename
file '/app/oracle/disk5/redo01_b.log'
to '/app/oracle/disk2/redo01_b.log' ;
alter database rename
file '/app/oracle/disk5/redo02_b.log'
to '/app/oracle/disk2/redo02_b.log' ;
alter database rename
file '/app/oracle/disk5/redo03_b.log'
to '/app/oracle/disk2/redo03_b.log' ;
select member from v$logfile;
MEMBER
/app/oracle/disk1/redo03_a.log
/app/oracle/disk1/redo02_a.log
/app/oracle/disk1/redo01_a.log
/app/oracle/disk2/redo01_b.log
/app/oracle/disk2/redo02_b.log
/app/oracle/disk2/redo03_b.log
변경완료!
DB 오픈시켜 확인
SYS>alter database open;
Database altered.
SYS>select name from v$controlfile;
NAME
/app/oracle/disk1/control01.ctl
/app/oracle/disk2/control02.ctl
/app/oracle/disk3/control03.ctl
SYS>select name from v$datafile;
NAME
/app/oracle/disk4/system01.dbf
/app/oracle/disk4/sysaux01.dbf
/app/oracle/disk3/undo01.dbf
/app/oracle/disk5/users01.dbf
/app/oracle/disk5/example01.dbf
/app/oracle/oradata/testdb/hakjum01.dbf
6 rows selected.
SYS>select member from v$logfile;
MEMBER
/app/oracle/disk1/redo03_a.log
/app/oracle/disk1/redo02_a.log
/app/oracle/disk1/redo01_a.log
/app/oracle/disk2/redo01_b.log
/app/oracle/disk2/redo02_b.log
/app/oracle/disk2/redo03_b.log
6 rows selected.
끝!
'Oracle Admin' 카테고리의 다른 글
Control File 관리 (0) | 2015.04.02 |
---|---|
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
Oracle Background Process (0) | 2015.03.29 |
SQL 문장의 실행원리 (0) | 2015.03.29 |
글
pfile , spfile 생성 및 관리
현재 파라미터 확인
ls $ORACLE_HOME/dbs
없다면
원본 파라미터 파일 복사 후 spfile 생성
1. 원본 파라미터 파일의 경로: $ORACLE_BASE/admin/testdb/pfile
init.숫자 형태로 존재한다.
2. 원본 파일을 $ORACLE_HOME/dbs 로 copy 한다.
3. startup 후 확인.
※ 위의 경우 원본 pfile 을 복사해온 것이다.
spfile 을 사용하길 원하는 경우 가져온
pfile을 이용해서 spfile을 생성하면 된다. → create spfile from pfile;
'Oracle Admin' 카테고리의 다른 글
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
---|---|
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
Oracle Background Process (0) | 2015.03.29 |
SQL 문장의 실행원리 (0) | 2015.03.29 |
Oracle Architecture (0) | 2015.03.29 |
글
Oracle Background Process
백그라운드 프로세스?
-오라클 서버가 시작되면 자동으로 시작되어 운영과 유지를 담당하는 프로세스
서버시작 -> 시작
서버종료 -> 종료
그림 출처 : https://docs.oracle.com/cd/B19306_01/server.102/b14220/process.htm
필수 백그라운드 프로세스
1. DBWR (Database Writer)
더티블락을 데이터파일로 저장하는 역할.
버퍼캐시의 더티버퍼 내용을 데이터파일에 내려쓰는 경우는 아래와 같음
1) Checkpoint 신호 발생 시
2) 더티버퍼가 임계값을 지났을 때
3) Time out 발생 시
4) RAC ping 발생 시
5) Tablespace가 Read only 상태로 변경 시
6) Tablespace가 offline 될 때
7) Tablespace가 begin backup 상태가 될 떄
8) Drop table 이나 Truncate table 될 떄
9) Direct Path Read/Write 가 진행될 때
10) 일부 Parallel Query 작업 시
※ DBWn (0~9) / dbw 땡
2. LGWR(Log Writer)
데이터가 변경되면 서버프로세스가 변경 내역(Change Vector)을 리두 로그 버퍼에 기록.
LGWR은 리두 로그 버퍼에 있는 내용을 리두 로그 파일로 저장.
1) 커밋; 발생시
2) 1/3 찼을 때
3) 변경량이 1M 되었을 때
4) 3초마다
5) DBWR이 내려 쓰기 전에
★ Commit 수행하면 디스크로 데이터를 내려쓴다. 라는 건 사실 Commit을 수행하면 저장을
하긴 하지만 데이터를 저장하는 것이 아니라 리두 로그를 저장하는 것이다.
3. PMON(Process Monitor)
모든 서버 프로세스 감시 및 비정상적으로 종료된 프로세스 관련 복구작업.
서버 프로세스에 문제가 생겼을 때 모든 작업을 rollback 하고 뒷처리 담당.
4. SMON(System Monitor)
Instance Crash 상태 (비정상 종료)의 경우 인스턴스를 시작할 때 Clean Up
Instance Recovery 라고 함.
ex)
A 입력
B 입력
commit;
C 입력
정전
이후 startup -> Instance recovery 과정
1) 파라미터 파일 읽은 후 nomount 단계에서 instance 생성
2) mount 단계에서 컨트롤파일 내용 확인 -> instance crash 상황 확인
3) Redo log file 에서 A입력 B입력 commit; C입력 단계를 다시 수행(Roll Forward) 커밋 안된 C입력까지 수행
4) DB 오픈
5) 커밋 안 된 C입력 작업 취소 (Roll Backward)
5. CKPT(Checkpoint Process)
DBWR에게 checkpoint 신호를 전달해주며 컨트롤파일과 데이터파일 헤더에 해당 체크포인트
정보를 기록하는 역할. 로그라이터와 디비라이터와 연관되어있음.
6.MMON , MMNL (Manageability Monitor Process - 10g 이후)
7. RECO(Recoverer Process)
분산 DB 환경에서 트랜잭션 처리도중 장애 발생 경우 해당 트랜잭션 자동 복구.
선택적 백그라운드 프로세스
1. ARCn (Archiver Processes)
2. CJQ0 & Jnnn (Job Queue Processes)
3. FBDA(FlashBack Data Archiver Process)
내용출처 : 오라클 관리실무(서진수)
'Oracle Admin' 카테고리의 다른 글
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
---|---|
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
SQL 문장의 실행원리 (0) | 2015.03.29 |
Oracle Architecture (0) | 2015.03.29 |
글
SQL 문장의 실행원리
1. 사용자가 SQL 문장 수행
2. 유저 프로세스가 SQL문 서버로 전달
ex) SQL developer , Toad , Orange ...
3. 서버쪽에서 작업을 수행하는 서버 프로세스에게 전달.
4. 유저프로세스는 결과가 나올때까지 기다림
전체적인 흐름
Parse(구문분석) -> Bind(값 치환) -> Execute(실행) -> Fetch(인출)
1) Parse (실행계획을 만들거나 찾는 단계. Shared Pool 메모리 공간 사용)
SELECT 문장을 예로들면
첫째, 문법검사
select , from , where
둘쨰, 의미검사
* , emp , empno=7900;
셋째, 권한검사
넷쨰, 실행계획 (파싱 하는 이유)
네비게이션과도 같은 역할을 하는 옵티마이져(계획 세워주는 역할)가 딕셔너리를 보고 작업을 한다.
Shared Pool
-Library Cache
-Dictionary Cache
Hard Parse : SQL과 실행계획을 캐시에서 찾지 못해 최적화 과정을 거치고 나서 실행단계로 넘어가는 경우
Sofr Parse : SQL과 실행계획을 캐시에서 찾아 곧바로 실행단계로 넘어가는 경우
2) Bind
사용자에게 정보를 받아 바꿔치기 하는 것.
ex) 회원 로그인 -> 아이디, 비번 받아서 바꿔치기
3) Execute
하드디스크의 데이터 파일에서 데이터가 들어있는 블락을 찾아 DB 버퍼캐시로 복사해 오는 과정.
작업을 위해서는 해당 테이블이 반드시 DB 버퍼캐시에 존재해야하는데 만약 존재하지 않으면
서버프로세스는 원하는 블락을 찾아 버퍼캐시로 복사 후 작업한다.
무조건 블락 단위로 움직인다. 원하는게 적든 많든 블락 단위로 퍼올려짐.
4) Fetch
블락단위로 올라온 데이터 중에 원하는 데이터만 골라내는 과정.
내용출처 : 오라클 관리실무 책(서진수)
'Oracle Admin' 카테고리의 다른 글
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
---|---|
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
Oracle Background Process (0) | 2015.03.29 |
Oracle Architecture (0) | 2015.03.29 |
글
Oracle Architecture
흔히 컴퓨터의 구성을 이야기 할 때
1. CPU
2. 작업을 하는 장소인 메모리(RAM)
3. 데이터를 저장하는 하드디스크(HDD)
이 세가지로 나눔.
컴퓨터와 오라클 모두 '메모리에서 작업하고 디스크에 저장한다' 는 원리가 중요.
오라클도 컴퓨터와 비슷하게 작업공간과 저장공간이 나뉘어져 있다.
1. 메모리 역할을 하는 INSTANCE
2. 데이터를 저장하는 DATABASE
<사진출처> ORACLE 계의 신성 꼬꼬마님 (http://blog.naver.com/chicken19)
그림으로 간단하게 살펴보면 위와같이 메모리부분, 저장공간부분으로 나뉘어져 있음.
System Global Area (SGA) 라고 하는 부분에서 실제 작업들이 수행되고 백그라운드 프로세스들은
오라클 서버(위의 구조를 Oracle Server 라고 함.) 가 잘 운영되도록 해주는 역할을 한다.
DB에 접속해서 startup 명령어를 치면
초기화 파라미터(pfile , spfile)에 적혀있는 설정을 참고하여 OS kernel에게 공유메모리 요청.
※파라미터 : SGA를 만들때 참조되는 설계도 같은 것.
메모리 요청을 받은 OS Kernel은 자신이 알고있는 OS Kernel 파라미터를 조회해서
그대로 메모리 할당.(리눅스: /etc/sysctl.conf 솔라리스: /etc/system 에서 OS 파라미터 조회)
★ SGA는 Oracle Server Process 가 요청하고 만들지만 만들어진 후에는 OS Kernel이 관리를 한다.
커널에게 SGA 생성을 요청한 오라클 서버 프로세스가 종료되어도 SGA는 종료되지 않고
인스턴스가 종료되어야 SGA가 공유메모리에서 사라진다.
SGA 의 각 구성요소 (빨간부분은 필수 구성요소)
1. Database Buffer Chache
데이터 조회, 변경 등의 실제 작업공간. 작업에 필요한 모든 데이터는 이곳에 있어야 한다.
만약 데이터가 없을 경우 데이터파일에서 해당 블록을 복사해 버퍼캐쉬로 가져와야 함.
버퍼캐쉬 블락의 상태 3가지
1) Pinned Buffer
다른 사용자가 사용하고 있는 블락. 식당으로 치면 현재 손님이 밥을 먹고있는 테이블.
2) Dirty Burffer
작업중은 아니지만 아직 변경된 작업내용을 저장하지 않은 버퍼.
저장이 안 된 상태에서 다른 사용자가 다시 덮어써서 사용한다면 이전 작업한 데이터가 문제가
되기 때문에 사용할 수 없다.
손님이 밥 다먹고 갔지만 테이블 안치움.
3) Free Buffer
애초에 사용이 되지 않았던 블락 또는 더티버퍼 였다가 하드디스크로 저장이 완료되어
재사용이 가능해진 블락.
테이블 치움.
※ 여기서 중요한 것은 저장의 유무이다.
※ 버퍼들의 상태를 관리하기 위해 LRU(Least Recently Used) List 만들어 관리.
가장 최근에 사용된 적이 있는 리스트. 많이 쓰이는 블락만 유지하도록.
LRU List (메인과 보조의 free 버퍼는 중복 안 됨)
-메인 리스트 : free, dirty 섞여있음
-보조 리스트 : free만
LRUW List
-메인 리스트 : dirty 버퍼만 모아놓은 것
-보조 리스트 : DBWR(디비라이터) 에 의해 기록중인 버퍼리스트
2. Redo Log Buffer (장부라고 생각하면 됨)
데이터가 변경될 경우 변경사항을 저장한다.
DDL , DML , TCL 같은 작업 내용.
※ SELECT 제외
3. Shaed Pool
다른 사용자와 어떤 대상을 공유해서 사용하기 위해 만들어진 곳
4. Large Pool
5. Java Pool
6. Streams Pool
10g 이상 버전부터.
7. Fixed Pool
백그라운드 프로세스들이 필요한 DB 전반적인 공유정보 , 프로세스들끼리 공유해야하는
Lock 정보 같은 것들이 저장
※ Dynamic SGA 기능
- 관리자 필요에 의해 SGA 구성요소의 크기 변경 후 인스턴스 재시작 없이 바로 적용할 수 있는 기능
PGA (Program Global Area) 의 주요 구성요소
SGA가 모든 프로세스들의 공유 메모리인 반면에
PGA는 각각의 서버 프로세스들이 개별적으로 사용하는 메모리 공간.
학교를 예로들면 공동으로 쓰는 운동장과 개별적으로 사용하는 사물함 개념.
주로 정렬관련 작업이 이루어진다.
그림출처 : https://docs.oracle.com/cd/E11882_01/server.112/e40540/memory.htm#CNCPT1237
1) Private SQL Area
사용자가 SQL 문장 수행 -> 유저 프로세스 -> 서버 프로세스 -> 작업을 요청한 유저 프로세스의
정보를 세션 메모리 부분에 저장한 후 SQL Parse 작업을 시작.
SQL에 Bind 변수 등이 있을 경우 Private SQL Area 에 보관. 임시로 정보를 저장할때도 사용.
2) SQL Work Area
Sort 관련 작업이나 Hash 관련 작업.
내용출처 : 강남 아이티윌 DB취업반 서진수샘 강의 및 오라클 관리실무 책(서진수)
'Oracle Admin' 카테고리의 다른 글
data file , redo log file , control file 이동 간단정리 (0) | 2015.04.02 |
---|---|
Tablespace 와 Data File 관리 (0) | 2015.04.01 |
pfile , spfile 생성 및 관리 (0) | 2015.03.30 |
Oracle Background Process (0) | 2015.03.29 |
SQL 문장의 실행원리 (0) | 2015.03.29 |