일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Oracle RAC
- oracle install
- Network
- prompt
- mariaDB
- oracle
- patch
- command & perl
- perl + 정규표현식
- sqlplus
- MySQL
- 연산자
- rac
- solaris
- grid
- SQL
- perl string
- bash
- solaris network
- RHEL4
- perl one-liner
- Linux
- PERL
- 오라클
- fdisk
- php5
- dba
- memory
- Unix
- cygwin
Archives
- Today
- Total
DATA 전문가로 가는 길
[Admin][Oracle] 오라클 시작과 종료(shutdown, no mount, mount, open) 본문
Data Architecture/Admin
[Admin][Oracle] 오라클 시작과 종료(shutdown, no mount, mount, open)
EstenPark 2016. 2. 29. 10:591. 오라클 시작및 종료 개념
시작 단계 : 종료(shutdown) -> 노마운트(nomount) -> 마운트(mount) -> Open(시작)
종료 단계 : Open(시작) -> 마운트(mount) -> 노마운트(nomount) -> 종료(shutdown)
각 단계별 오라클 수행하는 작업
* 종료(shutdown)
- 데이터베이스에 대한 엑세스를 수행할 수 없는 상태, DB를 중지한 상태입니다.
단, 데이터베이스를 오픈 하기위해서 SYS 유저로 SYSDBA, SYSOPER을 권한이 있어야 합니다.
- 관련된 작업 : B&R에서 물리적인 백업을 보면 운영체제의 cp명령어를 이용하여
cold-backup을 하거나 되돌려 줄 수 있습니다.(파일을 대상)
* 노마운트(nomount) - Instance
- 파라미터 파일 읽기, SGA 할당,
alertSID.log 파일과 추적파일(Trace) 기록을 시작, 백그라운드 프로세스 기동
- 관련된 작업 : 컨트롤 파일 재성성, 데이터베이스 생성
* 마운트(mount)
- 컨트롤 파일을 읽은 후 데이터 파일과 리두 로그파일을 인지 합니다.
- 관련된 작업 : 데이터 파일 이름/위치 변경, 데이터베이스 복구, 아카이브 로그 모드 적용 및 해제
* 시작(Open)
- 온라인 데이터 파일과 온라인 리두 로그 파일의 존재 및 정합성을 확힌한 후 해당 파일들을 열어
실제 데이터베이스를 사용할 수 있는 상태로 만듭니다.
- 관련된 작업 : 온라인 데이터 파일 확인, 온라인 리두 로그 파일 확인, hot-backup
종료 단계 : Open(시작) -> 마운트(mount) -> 노마운트(nomount) -> 종료(shutdown)
각 단계별 오라클 수행하는 작업
* 종료(shutdown)
- 데이터베이스에 대한 엑세스를 수행할 수 없는 상태, DB를 중지한 상태입니다.
단, 데이터베이스를 오픈 하기위해서 SYS 유저로 SYSDBA, SYSOPER을 권한이 있어야 합니다.
- 관련된 작업 : B&R에서 물리적인 백업을 보면 운영체제의 cp명령어를 이용하여
cold-backup을 하거나 되돌려 줄 수 있습니다.(파일을 대상)
* 노마운트(nomount) - Instance
- 파라미터 파일 읽기, SGA 할당,
alertSID.log 파일과 추적파일(Trace) 기록을 시작, 백그라운드 프로세스 기동
- 관련된 작업 : 컨트롤 파일 재성성, 데이터베이스 생성
* 마운트(mount)
- 컨트롤 파일을 읽은 후 데이터 파일과 리두 로그파일을 인지 합니다.
- 관련된 작업 : 데이터 파일 이름/위치 변경, 데이터베이스 복구, 아카이브 로그 모드 적용 및 해제
* 시작(Open)
- 온라인 데이터 파일과 온라인 리두 로그 파일의 존재 및 정합성을 확힌한 후 해당 파일들을 열어
실제 데이터베이스를 사용할 수 있는 상태로 만듭니다.
- 관련된 작업 : 온라인 데이터 파일 확인, 온라인 리두 로그 파일 확인, hot-backup
- 시작 단계에서는 차례대로 이행이 가능 하나 종료 단계에서는 이행이 불가능 합니다.
- 예) startup nomount -> alter database mount -> alter database open 차례로 시작 가능하며 종료 시에는 종류에 따라서 바로 종료 처리가 가능 합니다.
2. 종료 단계
* 종료 단계는 데이터베이스를 이용하여 어떠한 작업도 수행할 수 없는 단계이다.
3. 노마운트 단계
노마운트 단계에서 수행하는 작업을 확인
# 인스턴스 상태를 확인 해본 결과 아직 데이터베이스를 기동하지 않았습니다.
SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-01034: ORACLE not available
# 노마운트 단계 시작
SQL> set line 150
SQL> set pagesize 2000
SQL> startup nomount;
ORACLE instance started.
# 파라미터 파일 읽기 시작
Total System Global Area 289406976 bytes
Fixed Size 1279820 bytes
Variable Size 79694004 bytes
Database Buffers 205520896 bytes
Redo Buffers 2912256 bytes
# 파라미터 파일 확인
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ---------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 2
processes integer 200
# 기본적으로 파라미터 파일의 존재 확인 순서는 spfileSID.ora -> spfile.ora -> initSID.ora
# 파일이 존재 해야 하며 없을 경우에는 에러가 발생 됩니다.
SQL> !
bash-3.00$ ls
hc_testdb.dat init.ora orapwtestdb
initdw.ora lkTESTDB spfiletestdb.ora
bash-3.00$ grep '^\*\.processes' spfiletestdb.ora
*.processes=200
# SGA 할당(인스턴스 상태 확인)
SQL> SELECT status FROM v$instance;
STATUS
------------------------
STARTED
SQL> !
# alert_SID.log 파일과 추적(trace) 파일 기록 시작
bash-3.00$ pwd
/export/home/oracle/product/10g/admin/testdb/bdump
bash-3.00$ ls -alt *.trc
-rw-r----- 1 oracle dba 716 11월 10일 04:01 testdb_mmon_1164.trc
-rw-r----- 1 oracle dba 706 11월 10일 04:01 testdb_lgwr_1154.trc
-rw-r----- 1 oracle dba 765 11월 9일 00:23 testdb_lgwr_1029.trc
-rw-r----- 1 oracle dba 706 11월 5일 16:24 testdb_lgwr_1207.trc
-rw-r----- 1 oracle dba 678 11월 5일 16:20 testdb_lgwr_1162.trc
-rw-r----- 1 oracle dba 678 11월 5일 15:26 testdb_lgwr_1014.trc
-rw-r----- 1 oracle dba 655 11월 5일 00:01 testdb_mmon_1329.trc
-rw-r----- 1 oracle dba 706 11월 5일 00:01 testdb_lgwr_1319.trc
-rw-r----- 1 oracle dba 706 11월 4일 23:46 testdb_lgwr_1264.trc
-rw-r----- 1 oracle dba 706 11월 4일 00:52 testdb_lgwr_1102.trc
-rw-r----- 1 oracle dba 765 11월 4일 00:45 testdb_lgwr_1057.trc
-rw-r----- 1 oracle dba 678 11월 4일 00:20 testdb_lgwr_1145.trc
-rw-r----- 1 oracle dba 793 11월 4일 00:19 testdb_lgwr_1086.trc
bash-3.00$ pwd
/export/home/oracle/product/10g/admin/testdb/bdump
bash-3.00$ ls -alt alert_*.log
총 156
-rw-r----- 1 oracle dba 66364 11월 10일 02:59 alert_testdb.log
bash-3.00$ tail -f alert_testdb.log
# 백그라운드 프로세스 기동 (alert_testdb.log에서 백그라운드 프로세스 참고)
bash-3.00$ ps -ef |grep -v grep |grep 1152
oracle 1152 1 0 03:05:37 ? 0:00 ora_dbw0_testdb
bash-3.00$ ps -ef |grep -v grep |grep 1154
oracle 1154 1 0 03:05:37 ? 0:00 ora_lgwr_testdb
[참고사항] alter_SID.log파일을 확인해보면 백그라운드 프로세스가 보입니다. 그 중에 마지막 id는 실제 OS에서 사용하는 프로세스를 의미하므로 위와 같이 조회하면 됩니다. 또한 자세히 살펴보면 프로세스 이름의 패턴이 ora_백그라운드 프로세스_SID로 정의 되어 있어서 Perl을 이용하여 정규표현식을 간단하게 사용하면 모두 출력됩니다.
bash-3.00$ ps -ef |grep -v grep |perl -ne 'print if /ora_.+_testdb/'
oracle 1168 1 0 03:05:38 ? 0:00 ora_d000_testdb
oracle 1156 1 0 03:05:37 ? 0:00 ora_ckpt_testdb
oracle 1150 1 0 03:05:37 ? 0:00 ora_mman_testdb
oracle 1146 1 0 03:05:37 ? 0:00 ora_pmon_testdb
oracle 1148 1 0 03:05:37 ? 0:00 ora_psp0_testdb
oracle 1152 1 0 03:05:37 ? 0:00 ora_dbw0_testdb
oracle 1154 1 0 03:05:37 ? 0:00 ora_lgwr_testdb
oracle 1166 1 0 03:05:37 ? 0:00 ora_mmnl_testdb
oracle 1162 1 0 03:05:37 ? 0:00 ora_cjq0_testdb
oracle 1164 1 0 03:05:37 ? 0:00 ora_mmon_testdb
oracle 1160 1 0 03:05:37 ? 0:00 ora_reco_testdb
oracle 1158 1 0 03:05:37 ? 0:00 ora_smon_testdb
oracle 1170 1 0 03:05:38 ? 0:00 ora_s000_testdb
# 인스턴스 상태를 확인 해본 결과 아직 데이터베이스를 기동하지 않았습니다.
SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-01034: ORACLE not available
# 노마운트 단계 시작
SQL> set line 150
SQL> set pagesize 2000
SQL> startup nomount;
ORACLE instance started.
# 파라미터 파일 읽기 시작
Total System Global Area 289406976 bytes
Fixed Size 1279820 bytes
Variable Size 79694004 bytes
Database Buffers 205520896 bytes
Redo Buffers 2912256 bytes
# 파라미터 파일 확인
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ---------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 2
processes integer 200
# 기본적으로 파라미터 파일의 존재 확인 순서는 spfileSID.ora -> spfile.ora -> initSID.ora
# 파일이 존재 해야 하며 없을 경우에는 에러가 발생 됩니다.
SQL> !
bash-3.00$ ls
hc_testdb.dat init.ora orapwtestdb
initdw.ora lkTESTDB spfiletestdb.ora
bash-3.00$ grep '^\*\.processes' spfiletestdb.ora
*.processes=200
# SGA 할당(인스턴스 상태 확인)
SQL> SELECT status FROM v$instance;
STATUS
------------------------
STARTED
SQL> !
# alert_SID.log 파일과 추적(trace) 파일 기록 시작
bash-3.00$ pwd
/export/home/oracle/product/10g/admin/testdb/bdump
bash-3.00$ ls -alt *.trc
-rw-r----- 1 oracle dba 716 11월 10일 04:01 testdb_mmon_1164.trc
-rw-r----- 1 oracle dba 706 11월 10일 04:01 testdb_lgwr_1154.trc
-rw-r----- 1 oracle dba 765 11월 9일 00:23 testdb_lgwr_1029.trc
-rw-r----- 1 oracle dba 706 11월 5일 16:24 testdb_lgwr_1207.trc
-rw-r----- 1 oracle dba 678 11월 5일 16:20 testdb_lgwr_1162.trc
-rw-r----- 1 oracle dba 678 11월 5일 15:26 testdb_lgwr_1014.trc
-rw-r----- 1 oracle dba 655 11월 5일 00:01 testdb_mmon_1329.trc
-rw-r----- 1 oracle dba 706 11월 5일 00:01 testdb_lgwr_1319.trc
-rw-r----- 1 oracle dba 706 11월 4일 23:46 testdb_lgwr_1264.trc
-rw-r----- 1 oracle dba 706 11월 4일 00:52 testdb_lgwr_1102.trc
-rw-r----- 1 oracle dba 765 11월 4일 00:45 testdb_lgwr_1057.trc
-rw-r----- 1 oracle dba 678 11월 4일 00:20 testdb_lgwr_1145.trc
-rw-r----- 1 oracle dba 793 11월 4일 00:19 testdb_lgwr_1086.trc
bash-3.00$ pwd
/export/home/oracle/product/10g/admin/testdb/bdump
bash-3.00$ ls -alt alert_*.log
총 156
-rw-r----- 1 oracle dba 66364 11월 10일 02:59 alert_testdb.log
bash-3.00$ tail -f alert_testdb.log
# 백그라운드 프로세스 기동 (alert_testdb.log에서 백그라운드 프로세스 참고)
bash-3.00$ ps -ef |grep -v grep |grep 1152
oracle 1152 1 0 03:05:37 ? 0:00 ora_dbw0_testdb
bash-3.00$ ps -ef |grep -v grep |grep 1154
oracle 1154 1 0 03:05:37 ? 0:00 ora_lgwr_testdb
[참고사항] alter_SID.log파일을 확인해보면 백그라운드 프로세스가 보입니다. 그 중에 마지막 id는 실제 OS에서 사용하는 프로세스를 의미하므로 위와 같이 조회하면 됩니다. 또한 자세히 살펴보면 프로세스 이름의 패턴이 ora_백그라운드 프로세스_SID로 정의 되어 있어서 Perl을 이용하여 정규표현식을 간단하게 사용하면 모두 출력됩니다.
bash-3.00$ ps -ef |grep -v grep |perl -ne 'print if /ora_.+_testdb/'
oracle 1168 1 0 03:05:38 ? 0:00 ora_d000_testdb
oracle 1156 1 0 03:05:37 ? 0:00 ora_ckpt_testdb
oracle 1150 1 0 03:05:37 ? 0:00 ora_mman_testdb
oracle 1146 1 0 03:05:37 ? 0:00 ora_pmon_testdb
oracle 1148 1 0 03:05:37 ? 0:00 ora_psp0_testdb
oracle 1152 1 0 03:05:37 ? 0:00 ora_dbw0_testdb
oracle 1154 1 0 03:05:37 ? 0:00 ora_lgwr_testdb
oracle 1166 1 0 03:05:37 ? 0:00 ora_mmnl_testdb
oracle 1162 1 0 03:05:37 ? 0:00 ora_cjq0_testdb
oracle 1164 1 0 03:05:37 ? 0:00 ora_mmon_testdb
oracle 1160 1 0 03:05:37 ? 0:00 ora_reco_testdb
oracle 1158 1 0 03:05:37 ? 0:00 ora_smon_testdb
oracle 1170 1 0 03:05:38 ? 0:00 ora_s000_testdb
4. 마운트 단계
마운트 단계에서 수행하는 작업을 확인
# mount 시작
SQL> ALTER DATABASE mount;
Database altered.
SQL> SELECT status FROM v$instance;
STATUS
------------
MOUNTED
# alert_testdb.log파일에서 control_files 경로의 컨트롤 파일을 확인
SQL> !
bash-3.00$ pwd
/export/home/oracle/product/10g/oradata/testdb
bash-3.00$ ls -alt
총 1887396
-rw-r----- 1 oracle dba 7061504 11월 10일 03:50 control01.ctl
-rw-r----- 1 oracle dba 7061504 11월 10일 03:50 control02.ctl
-rw-r----- 1 oracle dba 7061504 11월 10일 03:50 control03.ctl
-rw-r----- 1 oracle dba 5251072 11월 9일 01:40 users01.dbf
-rw-r----- 1 oracle dba 251666432 11월 9일 01:40 sysaux01.dbf
-rw-r----- 1 oracle dba 26222592 11월 9일 01:40 undotbs01.dbf
-rw-r----- 1 oracle dba 503324672 11월 9일 01:40 system01.dbf
-rw-r----- 1 oracle dba 52429312 11월 9일 01:40 redo03.log
-rw-r----- 1 oracle dba 52429312 11월 9일 00:23 redo02.log
-rw-r----- 1 oracle dba 52429312 11월 9일 00:23 redo01.log
-rw-r----- 1 oracle dba 20979712 11월 4일 23:47 temp01.dbf
bash-3.00$ date
2010년 11월 10일 수요일 오전 03시 51분 42초
# alert_testdb.log 파일에서 컨트롤 파일 내의 데이터 파일 및 리두 로그 파일 인지 확인하지 않고 상태 정보만 확인 하는 것입니다. 그래서 mount 단계에서 리두 로그 파일과 데이터 파일이 없어도 정상 작동 되고 오픈 단계에서 에러가 발생 됩니다.
# mount 시작
SQL> ALTER DATABASE mount;
Database altered.
SQL> SELECT status FROM v$instance;
STATUS
------------
MOUNTED
# alert_testdb.log파일에서 control_files 경로의 컨트롤 파일을 확인
SQL> !
bash-3.00$ pwd
/export/home/oracle/product/10g/oradata/testdb
bash-3.00$ ls -alt
총 1887396
-rw-r----- 1 oracle dba 7061504 11월 10일 03:50 control01.ctl
-rw-r----- 1 oracle dba 7061504 11월 10일 03:50 control02.ctl
-rw-r----- 1 oracle dba 7061504 11월 10일 03:50 control03.ctl
-rw-r----- 1 oracle dba 5251072 11월 9일 01:40 users01.dbf
-rw-r----- 1 oracle dba 251666432 11월 9일 01:40 sysaux01.dbf
-rw-r----- 1 oracle dba 26222592 11월 9일 01:40 undotbs01.dbf
-rw-r----- 1 oracle dba 503324672 11월 9일 01:40 system01.dbf
-rw-r----- 1 oracle dba 52429312 11월 9일 01:40 redo03.log
-rw-r----- 1 oracle dba 52429312 11월 9일 00:23 redo02.log
-rw-r----- 1 oracle dba 52429312 11월 9일 00:23 redo01.log
-rw-r----- 1 oracle dba 20979712 11월 4일 23:47 temp01.dbf
bash-3.00$ date
2010년 11월 10일 수요일 오전 03시 51분 42초
# alert_testdb.log 파일에서 컨트롤 파일 내의 데이터 파일 및 리두 로그 파일 인지 확인하지 않고 상태 정보만 확인 하는 것입니다. 그래서 mount 단계에서 리두 로그 파일과 데이터 파일이 없어도 정상 작동 되고 오픈 단계에서 에러가 발생 됩니다.
5. 시작(Open) 단계
데이터베이스 오픈 단계에서 수행하는 작업을 확인
# 데이터베이스 open 시작
SQL> ALTER DATABASE open;
Database altered.
SQL> SELECT status FROM v$instance;
STATUS
------------
OPEN
# 온라인 데이터 파일 확인
# 온라인 리두 로그 파일 확인
# alert_testdb.log 파일을 이용하여 기록된 로그 확인
# 리두 로그 그룹 검색 결과를 통해서 log sequence 4 맞는지 확인
SQL> SELECT GROUP#, SEQUENCE#, MEMBERS,
2 BYTES/1024/1024 "SIZE", STATUS
3 FROM V$LOG;
GROUP# SEQUENCE# MEMBERS SIZE STATUS
---------- ---------- ---------- ---------- ----------------
1 2 1 50 INACTIVE
2 3 1 50 INACTIVE
3 4 1 50 CURRENT
[참고사항] 컨트롤 파일을 확인하여 새로운 리두 로그 그룹을 CURRENT 상태표시 합니다. 이전 리두 로그 그룹은 ACTIVE로 표시하며, 이전 리두 로그 파일에 대한 체크포인트를 수행한다. 체크포인트가 완료되면 INACTIVE로 표시 합니다.
# 데이터베이스 open 시작
SQL> ALTER DATABASE open;
Database altered.
SQL> SELECT status FROM v$instance;
STATUS
------------
OPEN
# 온라인 데이터 파일 확인
# 온라인 리두 로그 파일 확인
# alert_testdb.log 파일을 이용하여 기록된 로그 확인
# 리두 로그 그룹 검색 결과를 통해서 log sequence 4 맞는지 확인
SQL> SELECT GROUP#, SEQUENCE#, MEMBERS,
2 BYTES/1024/1024 "SIZE", STATUS
3 FROM V$LOG;
GROUP# SEQUENCE# MEMBERS SIZE STATUS
---------- ---------- ---------- ---------- ----------------
1 2 1 50 INACTIVE
2 3 1 50 INACTIVE
3 4 1 50 CURRENT
[참고사항] 컨트롤 파일을 확인하여 새로운 리두 로그 그룹을 CURRENT 상태표시 합니다. 이전 리두 로그 그룹은 ACTIVE로 표시하며, 이전 리두 로그 파일에 대한 체크포인트를 수행한다. 체크포인트가 완료되면 INACTIVE로 표시 합니다.
'Data Architecture > Admin' 카테고리의 다른 글
[Admin][MariaDB] JSON 테이블에 적재(Json Table Type) (0) | 2016.04.18 |
---|---|
[Admin][Oracle] User Process 파라미터 지정 (0) | 2016.02.29 |
[Admin][Oracle] tnsnames.ora Setup (1) | 2015.02.17 |
[Admin][Oracle] SELECT, UPDATE, COMMIT 실행되는 과정 (0) | 2011.04.17 |
[Admin][Oracle] Archive log mode와 No Archive log mode 개념과 설정 방법 (0) | 2011.02.10 |
Comments