RAC용 점검 스크립트

RAC 1노드에서 양쪽 노드 모두 확인하는 점검 스크립트입니다.



엔지니어 분들이 고객사 점검에 사용하면 좋게 만들었습니다.

운영하시는 분들도 일일 상태 체크나 DB관련 정보 확인을 위해 사용 할 수 있습니다.

11g 기준으로 작성 되었습니다.


check_RAC.sql


'ORACLE > Operation & Admin' 카테고리의 다른 글

RAC용 점검 스크립트  (0) 2018.12.25
무료 오라클 성능진단 툴 Mumbai 3.1.1  (0) 2018.12.25
Table 또는 인덱스의 사이즈를 확인 하는 쿼리  (0) 2018.11.01
CURSOR_SHARING  (0) 2018.10.31
ASM 용량 확인  (0) 2018.10.28
Datafile Resize 계산하기  (0) 2018.10.18

무료 오라클 성능진단 툴 Mumbai 3.1.1

오라클 성능 진단 툴인 Mumbai 3.1.1





일단 AWR, Statspack, ASH 등을 이툴로 DB에 접속해 직접 추출 할 수 있으며, 무엇보다 좋은것은 시각화를 가능하게 해주는 점입니다.


실시간 모니터링 보다는 성능진단시 더 유용합니다. 시각화를 통한 보고서 작성이나 성능에 관련한 다양한 내용을 확인 할 수 있기 때문에 좋습니다.


아래 출처에 가시면 다운받을수 있습니다.


링크 : https://marcusmonnig.wordpress.com/2016/09/21/mumbai-version-3-1-1-available/



'ORACLE > Operation & Admin' 카테고리의 다른 글

RAC용 점검 스크립트  (0) 2018.12.25
무료 오라클 성능진단 툴 Mumbai 3.1.1  (0) 2018.12.25
Table 또는 인덱스의 사이즈를 확인 하는 쿼리  (0) 2018.11.01
CURSOR_SHARING  (0) 2018.10.31
ASM 용량 확인  (0) 2018.10.28
Datafile Resize 계산하기  (0) 2018.10.18

Netbackup 연동 RMAN 복원 테스트

현업에서는 서버를 관리하는데 있어서 대부분 백업 솔루션이 들업갑니다.


중소규모의 회사나 서버가 몇대 없는 회사의 경우, RMAN 스크립트를 만들어서 crontab 이나 작업스케줄러에 등록하여 백업을 받기도 하지만, 대규모의 기업이나 많은 수의 서버를 가진 업체의 경우 Netbackup 같은 백업 솔루션이 들어갑니다.


백업 솔루션은 Netbackup만 있는 것은 아니고 많은 회사들이 출시한 다양한 제품이 있지만, 국내에서 가장 많이 사용하는 백업 솔루션은 Netbackup 입니다. 백업 솔루션은 Acronis 같은 제품도 있고, 다양하게 있습니다.


Netbackup 같은 백업 솔루션은 단순 DB 백업 뿐 아니라 서버 자체를 백업 한다거나 다른 어플리케이션 백업도 가능합니다.

그렇기 때문에 Netbackup 엔지니어들은 Netbackup 설치나 OS 복구 정도는 할 수 있습니다. 


하지만, 오라클은 DB를 Netbackup을 이용해서 백업 할 줄 알아도, DB를 복구 하는 방법을 모르는 경우가 대부분 입니다. Netbackup을 다루는 회사마다 복구 메뉴얼이 있고, 메뉴얼 대로 복구 하는 경우가 많지만, 왜 그렇게 복구를 해야 하는지?, 복구하다 막혔을때 어떻게 해야 하는지 모르는 경우가 많아 DB 엔지니어나 DBA의 도움을 필요로 합니다. Netbackup 엔지니어들은 오라클을 집중적으로 공부한 경우가 많지 않기 때문이죠.


백업 계약이라는 것은 백업만 해주는게 아니고 장애시 복구가 포함 되는 것인데 백업 엔지니어가 DBA가 없으면 복구를 못하는 경운가 많다는 것이죠. 개인적으로 봤을때는 말이 안되는 상황이라고 봅니다. 업체측에서 restore 까지만 계약 되어 있다고 하는 경우도 있는데, 일반적으로 백업 복구는 recovery 후 시스템 정상화까지가 복구입니다. 


DBA와 백업 엔지니어가 협력해야 하는게 맞고, 서로서로 좋은게 좋은것이지만, 기본적으로 혼자 복구 할 줄 알아야 한다고 생각합니다. 어떤 회사는 들어가보면 DB는 있는데 DBA도 없고, DB 유지보수 계약도 없는 경우도 많거든요.




시나리오


● RAC 2노드 (ASM) -> Single DB (ASM Standalone)


 - RAC는 라이센스도 비싸고, 장비 세팅이나 준비사항이 많습니다. 

   그렇기 때문에 DR서버를 구축하거나 복구를 위한 테스트 서버를 RAC로 구축하는것은 낭비입니다.

 - 오라클 DB의 버전은 동일하게 맞춥니다. 원본이 11.2.0.4 라면 복구도 11.2.0.4

 - 파일 시스템은 일반 파일시스템이나 Raw Device 이어도 상관 없지만, 복구 과정 중에 Rename 작업이 필요하며, 

   ASM의 경우는 Rename 작업이 필요가 없습니다.

 - Netbackup에서 원본 서버의 RMAN 백업과 Archive 파일을 백업 받습니다.

 - 복구 서버에도 Netbackup 에이전트를 설치하고, RMAN의 저장 경로를 Netbackup으로 인식 시켜줍니다.



1. pfile 설정


 - pfile을 Netbackup에 있는 RMAN 백업에서 내려 받아도 상관 없지만, 그냥 원본에서 spfile을 pfile로 백업해서 드래그로 긁어 오는게 편합니다.


 원본서버

 SQL> create pfile='init<SID>.ora' from spfile;


 $ORACLE_HOME/dbs 밑에 가면 init<SID>.ora 파일이 생성 되어 있는데, 복구서버의 동일한 디렉토리에 복사해 주거나, vi로 만들어서 안의 내용을 복사해서 붙여 넣습니다.


rac2.__db_cache_size=1526726656

rac1.__db_cache_size=1459617792

rac2.__java_pool_size=16777216

rac1.__java_pool_size=16777216

rac2.__large_pool_size=33554432

rac1.__large_pool_size=33554432

rac1.__oracle_base='/app/oracle'#ORACLE_BASE set from environment

rac2.__oracle_base='/app/oracle'#ORACLE_BASE set from environment

rac2.__pga_aggregate_target=1258291200

rac1.__pga_aggregate_target=1342177280

rac2.__sga_target=2097152000

rac1.__sga_target=2013265920

rac2.__shared_io_pool_size=0

rac1.__shared_io_pool_size=0

rac2.__shared_pool_size=486539264

rac1.__shared_pool_size=469762048

rac2.__streams_pool_size=0

rac1.__streams_pool_size=0

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

*.audit_trail='db'

*.cluster_database=true

*.compatible='11.2.0.4.0'

*.control_files='+DATA/rac/controlfile/current.260.923661671','+RECO/rac/controlfile/current.256.923661671'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='rac'

*.db_recovery_file_dest='+RECO'

*.db_recovery_file_dest_size=7423918080

*.diagnostic_dest='/app/oracle'

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

rac1.instance_number=1

rac2.instance_number=2

*.log_archive_dest_1='LOCATION=/archive'

*.log_archive_format='arch_rac_%t_%s_%r.arc'

*.memory_target=3348103168

*.open_cursors=300

*.processes=350

*.remote_listener='rac-cluster-scan:1521'

*.remote_login_passwordfile='exclusive'

*.sessions=390

rac2.thread=2

rac1.thread=1

rac2.undo_tablespace='UNDOTBS2'

rac1.undo_tablespace='UNDOTBS1'

 


파라미터 파일을 수정해야 합니다.

rac 관련되 부분을 삭제 혹은 주석 처리하고, cluster_database는 ture에서 false로 변경해 줍니다.


수정 후


rac.__db_cache_size=1459617792

rac.__java_pool_size=16777216

rac.__large_pool_size=33554432

rac.__oracle_base='/app/oracle'#ORACLE_BASE set from environment

rac.__pga_aggregate_target=1342177280

rac.__sga_target=2013265920

rac.__shared_io_pool_size=0

rac.__shared_pool_size=469762048

rac.__streams_pool_size=0

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

*.audit_trail='db'

*.cluster_database=false

*.compatible='11.2.0.4.0'

*.control_files='+DATA/rac/controlfile/current.260.923661671'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='rac'

*.db_recovery_file_dest='+DATA'

*.db_recovery_file_dest_size=7423918080

*.diagnostic_dest='/app/oracle'

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

rac.instance_number=1

#rac2.instance_number=2

*.log_archive_dest_1='LOCATION=/archive'

*.log_archive_format='arch_rac_%t_%s_%r.arc'

*.memory_target=3348103168

*.open_cursors=300

*.processes=350

#*.remote_listener='rac-cluster-scan:1521'

*.remote_login_passwordfile='exclusive'

*.sessions=390

#rac2.thread=2

rac.thread=1

#rac2.undo_tablespace='UNDOTBS2'

rac.undo_tablespace='UNDOTBS1'


수정하고 diag 경로를 생성하고, archive 경로가 맞는지 확인해줍니다.


$ mkdir -p /app/oracle/admin/rac/adump

$ mkdir -p /archive

# chown oracle.oinstall /archive


수정이 완료 되면 DB가 nomount 상태까지 올라갑니다.


$ sqlplus / as sysdba

SQL> startup nomount;


그러면 DB쪽은 Restore 준비가 끝난 상태입니다.



2. Netbackup 에서 Controlfile 내려 받기


 - DB가 nomount 상태가 되면 Netbackup 에이전트 설치 및 Netbackup RMAN 연동이 가능합니다. (Netbackup 엔지니어 작업)

 - Netbackup과 RMAN이 연결되면, RMAN에서 list backup 명령시 백업 파일들이 나옵니다.


RMAN> 


RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=<넷백업 서버명>, NB_ORA_CLIENT=<복구서버 클라이언트 명>';

RESTORE CONTROLFILE FROM 'ctrl_dracDB_udnrljheg_s439_p1_t928630224';

RELEASE CHANNEL ch00;

}


빨간색으로 된 부분은 콘트롤 파일의 백업인데, 백업마다 이름이 다르고, 서버마다 다르니 맞는 걸 찾아서 복원하면 됩니다.


콘트롤 파일이 복원디면 DB mount가 가능해집니다.


RMAN> alter database mount;



3. Restore


 - controlfile이 복원되면 restore가 가능해집니다.

 - ASM의 경우 datafile의 끝에 랜덤 숫자로 고유번호가 붙는데, 원본 DB와 복구DB의 번호가 다릅니다.

 - Restore 시 바뀐 번호로 자동 적용됩니다.


restore 명령을 실행 해봅니다.


RMAN>


RUN {

ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';

SEND 'NB_ORA_SERV=<넷백업 서버명>, NB_ORA_CLIENT=<복구서버 클라이언트 명>';

RESTORE DATABASE;                                   

RELEASE CHANNEL ch00;

}


그러면 진행 상황이 나오며, restore가 진행됩니다.


Starting restore at 23-OCT-16

using channel ORA_DISK_1


channel ORA_DISK_1: starting datafile backup set restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_DISK_1: restoring datafile 00001 to +DATA/rac/datafile/system.256.923661571

channel ORA_DISK_1: restoring datafile 00002 to +DATA/rac/datafile/sysaux.257.923661571

channel ORA_DISK_1: restoring datafile 00003 to +DATA/rac/datafile/undotbs1.258.923661573

channel ORA_DISK_1: restoring datafile 00004 to +DATA/rac/datafile/users.259.923661573

channel ORA_DISK_1: restoring datafile 00005 to +DATA/rac/datafile/example.264.923661707

channel ORA_DISK_1: restoring datafile 00006 to +DATA/rac/datafile/undotbs2.265.923661973

channel ORA_DISK_1: restoring datafile 00007 to +DATA/rac/datafile/test01.269.924548909

channel ORA_DISK_1: reading from backup piece /work/rman/0qrijlsp_1_1_20161017.bkp

channel ORA_DISK_1: piece handle=/work/rman/0qrijlsp_1_1_20161017.bkp tag=TAG20161017T161729

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:18:05

Finished restore at 23-OCT-16


RMAN>



4. Recovery


 - recover database 명령을 날려보면 필요한 archive log 파일 리스트가 나옵니다.


RMAN> recover database;


Starting recover at 23-OCT-16
using channel ORA_DISK_1

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=2 sequence=473
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=239
channel ORA_DISK_1: reading from backup piece /work/rman/0srijm73_1_1_20161017.bkp
channel ORA_DISK_1: ORA-19870: error while restoring backup piece /work/rman/0srijm73_1_1_20161017.bkp
ORA-19504: failed to create file "/archive/arch_rac_2_473_923661675.arc"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 13: Permission denied
Additional information: 1

failover to previous backup
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 10/23/2016 17:28:31
RMAN-20506: no backup of archived log found
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of archived log for thread 1 with sequence 239 and starting SCN of 4539696 found to restore
RMAN-06025: no backup of archived log for thread 2 with sequence 473 and starting SCN of 4539693 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 238 and starting SCN of 4539695 found to restore
RMAN-06025: no backup of archived log for thread 2 with sequence 472 and starting SCN of 4539692 found to restore
RMAN-06025: no backup of archived log for thread 1 with sequence 237 and starting SCN of 4539694 found to restore
RMAN-06025: no backup of archived log for thread 2 with sequence 471 and starting SCN of 4539691 found to restore

thread 1은 1번 노드, thread 2는 2번 노드의 아카이브 파일입니다.
빨간색으로 된 부분에서 sequence 넘버를 잘 보면 맨 위에가 최신이고, 아래쪽이 오래된 시퀀스 넘버입니다.
해당 시퀀스 번호를 가진 아카이브 로그가 필요하다는 뜻 입니다.

그러면 Netbackup에서 아카이브 로그를 복구 합니다.

RUN {
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
SEND 'NB_ORA_SERV=<넷백업 서버명>, NB_ORA_CLIENT=<복구서버 클라이언트 명>';
RESTORE ARCHIVELOG FROM SEQUENCE 237 UNTIL SEQUENCE 239 THREAD 1;
RESTORE ARCHIVELOG FROM SEQUENCE 471 UNTIL SEQUENCE 473 THREAD 2;
RELEASE CHANNEL ch00;
}


그 후에

RMAN> recover database;

RMAN> alter database open resetlogs; 

하면 완료가 됩니다.


  1. 도움이 되는 내용 잘 읽었습니다.
    다만, 조금 잘 못 알고 계신 부분이 있는데요..
    보통의 S/W유지보수 계약 시, 장애복구 내용은 해당하는 S/W의 정상화지
    Application 단위 장애의 정상화가 아닙니다....
    그런 계약이라면 아마 엄청난 유지보수 비용을 요구하리라 생각됩니다.

    오라클 DB의 장애인데, 백업업체가 모든걸 처리하면 오라클 유지보수 업체는 어떤 일을 하시나요?
    오라클 업체야 말로 계약한 DB시스템의 장애 시 복구 Role 이 있는 것이지요??
    복구 Role 이 누가 더 큰지 잘 생각해 보시기 바랍니다.

    님의 논리대로라면,
    백업엔지니어는
    MSSQL, Oracle, DB2, Exchange, SAP 기타 등등 현존하는 거의 모든 Application을 다룰 줄 알아야 한다는 것인데
    그런 인력이 과연 존재는 할까요?? ^^;


DBMS 기본 데이터 타입

● 문자 데이터 타입


데이터 타입 

설명 

 CHAR(크기[BYTE|CHAR])

 고정길이 문자, 최대 2000byte, 디폴트 값 1byte 

 VARCHAR2(크기[BYTE|CHAR])

 고정길이 문자, 최대 4000byte, 디폴트 값 1byte 

 NCHAR (크기)

 고정길이 유니코드 문자 (다국어 입력 가능), 최대 2000BYTE, 디폴트 값 1byte

 NVARCHAR2 (크기)

 고정길이 유니코드 문자 (다국어 입력 가능), 최대 4000BYTE, 디폴트 값 1byte

 LONG

 최대 2GB 크기의 가변길이 문자형, 잘 사용하지 않음



● 숫자 데이터 타입


 데이터 타입 

 설명 

 NUMBER[(p,[s])]

 가변숫자, p(1~38, 디폴트 38) s(-84~127, 디폴트 0) 십진수 기준, 최대 22byte

 FLOAT[(p)]

 NUMBER의 하위 타입, p는 1~128, 디폴트 128, 이진수 기준, 최대 22byte

 BINARY_FLOAT

 32비트 부동소수점 수, 최대 4byte 

 BINARY_DOUBLE

 64비트 부동소수점 수, 최대 8byte 


- 4가지가 있지만 주로 NUMBER를 많이 사용합니다. 다른 DBMS는 INTEGER와 같은 정수형, DECIMAL과 같은 실수형을 제공합니다. 오라클도 INTEGER과 DECIMAL로 생성이 가능 하지만, 내부적으로는 NUMBER 형으로 변환되어 생성됩니다.



● 날짜 데이터 타입


데이터 타입 

 설명 

 DATE

 BC 4712년 1월 1일부터 9999년 12월 31일, 

 연,월,일,시,분,초까지 입력가능

 TIMESTAMP[(fractional_seconds_precision)]

 연도, 월, 일, 시, 분, 초는 물론 밀리초 까지 입력 가능

 fractional_seconds_precision은 0~9까지 입력할 수 있고 디폴트는 6



● LOB 데이터 타입 (Large OBject의 약자)


데이터 타입

 설명 

 CLOB

 문자형 대용량 객체. 고정길이와 가변길이 문자 집합 지원, 

 최대크기 (4GB-1)x(데이터베이스 블록 사이즈)

 NCLOB

 유니코드(다국어 지원)를 포함한 문자형 대용량 객체. 

 최대크기 (4GB-1)x(데이터베이스 블록 사이즈)

 BLOB

 이진형 대용량 객체, 최대 크기 (4GB-1)x(데이터베이스 블록 사이즈)

 BFILE

 대용량 이진 파일에 대한 로케이터(위치, 이름)저장. 최대 저장 크기는 4GB



● NULL


 - NULL은 '값이 없음'을 의미하면 테이블을 생성할 때 컬럼 속성에 기술한다. 디폴트 값이 NULL이므로 별도 지정 없으면 해당 컬럼은 NULL을 허용한다. NOT NULL로 명시한 컬럼에 데이터를 넣지 않으면 해당 로우 INSERT가 불가능하다.



'ORACLE > Oracle DBMS' 카테고리의 다른 글

DBMS 기본 데이터 타입  (0) 2018.11.02
데이터베이스 객체의 종류  (0) 2018.11.02
SCN과 Checkpoint  (0) 2014.06.12
Redo Log  (0) 2014.06.12
Control File  (0) 2014.06.11
Oracle Character set 에 관하여  (0) 2014.06.10

Table 또는 인덱스의 사이즈를 확인 하는 쿼리

개별 단위로 테이블 사이즈가 알고 싶을때 조회 하는 쿼리


select owner,segment_name,segment_type,sum(bytes)/1024/1024 as MB

from dba_segments

where OWNER='APP_USER'

GROUP BY owner,segment_name,segment_type;

'ORACLE > Operation & Admin' 카테고리의 다른 글

RAC용 점검 스크립트  (0) 2018.12.25
무료 오라클 성능진단 툴 Mumbai 3.1.1  (0) 2018.12.25
Table 또는 인덱스의 사이즈를 확인 하는 쿼리  (0) 2018.11.01
CURSOR_SHARING  (0) 2018.10.31
ASM 용량 확인  (0) 2018.10.28
Datafile Resize 계산하기  (0) 2018.10.18

CURSOR_SHARING

CURSOR_SHARING


어플리케이션이 리터럴SQL을 사용해서 만들어졌거나 패키지 어플리케이션이 바인드 변수를 사용하지 않는 경우, 이런 상황에서 성은이 나빠진다면 CURSOR_SHARING 파라미터를 이용해서 어플리케이션을 크게 변경하지 않고 튜닝하는 것이 가능합니다.


CURSOR_SHARING 파라미터는 EXACT, FORCE, SIMILAR 라는 값을 가지고 있고, FORCE 또는 SIMILAR로 설정한 경우, 사용자가 리터럴 SQL을 수행하여도 오라클이 리터럴값을 바인드 변수로 치환합니다.


실제 수행구문

SQL> select count(col1) from test where col2 = 10;


오라클이 Parse 한 SQL문

SQL> select count(col1) from test where col2 = :"SYS_B_0" ;


● FORCE 

 - 리터럴 값에 상관없이 한 개의 공유 커서를 공유합니다. 바인드 피크와 같이 특이한 값에 최적화될 위험이 있습니다.

 - Shared Pool 사용량을 줄이는 효과 및 경합을 줄이는 효과가 큽니다.


● SIMILAR

 - 실행 계획이 확실히 같을 때에만 한 개의 공유 커서를 공유합니다. 최적의 실행 계획이 같지 않을 가능성이 있는 경우에는 동일 문장에 여러 개의 공유 커서를 만듭니다.

 - 옵티마이저 통계를 수집한 경우 범위 조건을 지정하거나, 히스토그램을 수집했을때의 '=' 조건 등은 리터럴값에 따라 최적인 실행 계획이 달라질수 있으므로 다른 리터럴 값마다 자식 커서를 생성합니다.

 - 옵티마이저 통계가 없고 다이나믹 샘플링도 꺼져있다면, 내부 기본값에 의해 실행 계획이 결정되므로 같은 공유 커서를 사용합니다. 컬럼 통계가 최소값과 최대값만 있을 경우 (히스토그램 없음), '=' 조건은 선택도가 항상 1/NDV가 되기 때문에 같은 공유 커서를 사용합니다.


'CURSOR_SHARING=SIMILAR'일 때는 경우에 따라 Shared Pool 사용량을 줄이는 효과가 거의 없으며 경합도 줄이지 못하는 경우가 있습니다. SIMILAR를 사용할 때는 테스트를 하고 V$SQLAREA.VERSION_COUNT를 조사하여 값이 적은지에 대한 여부 (커서의 공유되고 있는지)를 확인해야 합니다.


SQL> select sql_text, version_count from v$sqlarea

   2  where sql_text like 'select /* TEST%';


SQL_TEST                                                VERSION_COUNT

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

select count(col1) from test where col2 = :"SYS_B_0" ;              5  


VERSION_COUNT = 5 는  같은 SQL문의 자식 커서가 5개 있다는 뜻

'ORACLE > Operation & Admin' 카테고리의 다른 글

무료 오라클 성능진단 툴 Mumbai 3.1.1  (0) 2018.12.25
Table 또는 인덱스의 사이즈를 확인 하는 쿼리  (0) 2018.11.01
CURSOR_SHARING  (0) 2018.10.31
ASM 용량 확인  (0) 2018.10.28
Datafile Resize 계산하기  (0) 2018.10.18
Listener password  (0) 2018.10.14

ASM 용량 확인

오라클 ASM DG 용량 확인


col name format a10

col USABLE_FILE_GB format 999,999.00

col TOTAL_GB       format 999,999.00

col FREE_GB        format 999,999.00

col USABLE_CALC_GB format 999,999.00


select group_number "Group#",

       name,

       total_mb/1024 TOTAL_GB,

   round((total_mb - USABLE_FILE_MB)/1024,2) USED_GB,

       USABLE_FILE_MB/1024 USABLE_FILE_GB,    

   free_mb/1024 FREE_GB,

       100-round(free_mb/total_mb*100) "usgae(%)",

        ((FREE_MB - REQUIRED_MIRROR_FREE_MB))/1024 USABLE_CALC_GB,

       type, state

from v$asm_diskgroup;


실제 사용하는 ASM의 용량을 확인 할 수 있습니다.


Free 와 Usable의 차이는 

Exadata의 경우, 남은 디스크 용량이 있으나 오라클 측에서 판매시 용량 제한을 위해 걸어둔 락이 있을시 사용 할 수 있는 공간의 이 FREE와 USABLE_FILE_DB 컬럼의 차이로 나타납니다.



    Group# NAME TOTAL_GB    USED_GB USABLE_FILE_GB FREE_GB   usgae(%) USABLE_CALC_GB TYPE STATE

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

1 DATA    119.99      37.87       82.12   82.12 32     82.12 EXTERN CONNECTED

2 RECO     60.00 1.34       58.65   58.65 2     58.65 EXTERN CONNECTED



일반적인 RAC ASM의 경우 DG를 RECO나 DATA만을 설정하기도 하고, DATA에 모두 넣는 경우도 있습니다.

OCR_VOTE 부분만 따로 빼서 설정하는 경우도 있습니다.



ASM을 모델링 할때


OCR, DATA, RECO, ACFS, FRA 등을 구성 할 수 있습니다.

FRA를 자주 활용 한다면 FRA DG를 크게 구성해서 FRA를 활용하는 방법도 있습니다.


'ORACLE > Operation & Admin' 카테고리의 다른 글

Table 또는 인덱스의 사이즈를 확인 하는 쿼리  (0) 2018.11.01
CURSOR_SHARING  (0) 2018.10.31
ASM 용량 확인  (0) 2018.10.28
Datafile Resize 계산하기  (0) 2018.10.18
Listener password  (0) 2018.10.14
CBO 와 바인드 변수, 바인드 피크  (0) 2018.05.17

Datafile Resize 계산하기

- maxshrink.sql - 


set verify off 

column file_name format a50 word_wrapped 

column smallest format 999,990 heading ""Smallest|Size|Poss."" 

column currsize format 999,990 heading ""Current|Size"" 

column savings format 999,990 heading ""Poss.|Savings"" 

break on report 

compute sum of savings on report 


column value new_val blksize 

select value from v$parameter where name = 'db_block_size' 


select file_name, 

ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest, 

ceil( blocks*&&blksize/1024/1024) currsize, 

ceil( blocks*&&blksize/1024/1024) - 

ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings 

from dba_data_files a, 

( select file_id, max(block_id+blocks-1) hwm 

from dba_extents 

group by file_id ) b 

where a.file_id = b.file_id(+) 


column cmd format a75 word_wrapped 


select 'alter database datafile '''||file_name||''' resize ' || 

ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd 

from dba_data_files a, 

( select file_id, max(block_id+blocks-1) hwm 

from dba_extents 

group by file_id ) b 

where a.file_id = b.file_id(+) 

and ceil( blocks*&&blksize/1024/1024) - 

ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0 



테이블 스페이스에 공간이 부족해서 여유공간을 확보하려고 테이블에 데이터를 지우고 축소를 하려면?


해당 Tablespace가 automatic segment management 가 되어있어야 하고


해당 Table은 row movement가 enable 되어있어야 합니다


되어있다면 


SQL> alter table [table_name] shrink space;


SQL> alter table [table_name] shrink space cascade;


Shrink 작업으로 HWM를 당긴 다음에 Resize 작업을 진행해야 합니다.


Shrink는 온라인 상태에서 가능하나 시간이 오래 걸리고,


HWM 당길 테이블들을 기존에 담고 있는 Tablespace로 Move 명령을 하면 Reorg 작업이 가능합니다.


단, Tablespace를 offline 상태에서 해야합니다.

'ORACLE > Operation & Admin' 카테고리의 다른 글

CURSOR_SHARING  (0) 2018.10.31
ASM 용량 확인  (0) 2018.10.28
Datafile Resize 계산하기  (0) 2018.10.18
Listener password  (0) 2018.10.14
CBO 와 바인드 변수, 바인드 피크  (0) 2018.05.17
Oracle 8i Startup, shutdown  (0) 2018.04.09