[오라클] 오라클 시작, 종료 실습 및 팁
시작->종료 한 줄 요약:
1. sqlplus -> 2. CONNECT -> 3. STARTUP -> 4. MOUNT -> 5. OPEN -> 6. CLOSE -> 7. DISMOUNT -> 8. SHUTDOWN -> 9. DISCONNECT -> 10. EXIT
위 과정 요약을 보면 각각의 시작과 종료 단계가 매핑됨을 확인할 수 있다. 정상적인 데이터베이스 작업은 인스턴스가 시작되고 데이터베이스가 마운트되어 열려 있음을 의미한다. 특정 모드를 사용하면 모든 유효한 사용자가 데이터베이스에 연결하고 데이터 액세스 작업을 수행할 수 있다.
특정 명령으로 인스턴스를 시작하고 기본 위치에서 초기화 매개변수를 읽은 다음 데이터베이스를 마운트하고 열 수 있다. (선택적으로 PFILE 절을 지정할 수 있다.) ( https://docs.oracle.com/cd/B19306_01/server.102/b14231/start.htm )
- 인스턴스와 세션 비교: 인스턴스는 데이터에 액세스할 수 있도록 하기 위해 데이터베이스 서버에서 사용할 수 있어야 하는 프로세스 및 메모리로 정의된다.
데이터베이스를 시작할 때 실제로 인스턴스를 시작하는 것이다. 인스턴스를 시작하는 작업은 서버에서 여러 프로세스를 시작하고 데이터베이스 인스턴스에 대한 메모리를 할당한다. 인스턴스가 종료될 때 데이터베이스는 파일에 남아 있다.
세션은 하나 이상의 사용자가 인스턴스와 상호 작용하는 것에 해당한다.
사용자가 새 데이터베이스 세션을 시작하면 서버에서 프로세스가 시작되고, 사용자의 응용 프로그램은 인스턴스와 상호 작용하는 이 프로세스(전용 서버 프로세스라고 함)와 상호 작용한다.
SHUTDOWN 과정:
DB CLOSE -> DB DISMOUNT -> INSTANCE SHUT DOWN
SHUTDOWN VS. DISCONNECT 차이:
SQL> SELECT OPEN_MODE FROM V$DATABASE;
SP2-0640: Not connected
SQL> CONNECT / AS SYSDBA
Connected.
SQL> SELECT OPEN_MODE FROM V$DATABASE;
OPEN_MODE
--------------------
READ WRITE
SQL> SHUTDOWN
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SELECT OPEN_MODE FROM V$DATABASE;
SELECT OPEN_MODE FROM V$DATABASE
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0
SQL> DISCONNECT
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> SELECT OPEN_MODE FROM V$DATABASE;
SP2-0640: Not connected
각 명령의 대상 (주체):
오라클 인스턴스를 SHUTDOWN하는 것이고, 연결은, SQL*Plus 같은 클라이언트 프로그램으로 오라클 데이터베이스에 CONNECT하는 것임.
[참고] 순서: CONNECT -> STARTUP
올바른 순서는 오라클에 SYSDBA나 다른 계정으로 연결 후 인스턴스를 STARTUP한다.
의문: [oracle@enp0s3 ~]$ rlwrap sqlplus /nolog SQL*Plus: Release 19.0.0.0.0 - Production on Wed Nov 24 13:13:48 2021 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. SQL> SELECT OPEN_MODE FROM V$DATABASE; SP2-0640: Not connected SQL> CONNECT / AS SYSDBA Connected. SQL> SELECT OPEN_MODE FROM V$DATABASE; OPEN_MODE -------------------- READ WRITE ... ... 여러 가지 테스트 후 SQL> CONNECT / AS SYSDBA Connected to an idle instance. SQL> SELECT OPEN_MODE FROM V$DATABASE; SELECT OPEN_MODE FROM V$DATABASE * ERROR at line 1: ORA-01034: ORACLE not available Process ID: 0 Session ID: 0 Serial number: 0 의문은 첫번째에서는 OPEN_MODE가 READ WRITE로 확인됨. 두 번째는 ORA-01034 에러 발생.
1) OPEN_MODE 출력 종류, 의미
데이터베이스 OPEN_MODE 확인:
오라클의 동적 성능 (V$) 뷰중에 V$DATABASE가 있다. 이것은 컨트롤 파일로부터 데이터베이스에 대한 정보를 표시한다. 그중에는 VARCHAR2(10)의 OPEN_MODE라는 컬럼이 존재한다. 말 그대로 오픈 모드 정보를 표시하는데 종류로는,
- MOUNTED
- READ WRITE
- READ ONLY
가 있다.
[참고]
https://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1073.htm#REFRN30047
V$DATABASE
SWITCHOVER_STATUS VARCHAR2(20) Indicates whether switchover is allowed: NOT ALLOWED - Either this is a standby database and the primary database has not been switched first or this is a primary database and there are no standby databases. SESSIONS ACTIVE -
docs.oracle.com
2) 두가지 케이스 모두 CONNECT 후 OPEN_MODE 출력인데 하나는 되고 안된 이유? 첫 번째 CONNECT 이후 단계별로 OPEN_MODE 출력해보며 언제 처음으로 01034 에러 출력한 건지 찾기
[참고] 순서: SHUTDOWN -> DISCONNECT -> EXIT
SQL> EXIT
[oracle@enp0s3 ~]$ rlwrap sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Nov 24 13:30:28 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
SQL> SELECT OPEN_MODE FROM V$DATABASE;
SP2-0640: Not connected
SQL> STARTUP
SP2-0640: Not connected
SQL> CONNECT / AS SYSDBA
Connected to an idle instance.
SQL> SELECT OPEN_MODE FROM V$DATABASE;
SELECT OPEN_MODE FROM V$DATABASE
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0
위의 첫번째와 동일하게 SQL*PLUS 실행 후 CONNECT 직후 OPEN_MODE 했음. 이번엔 또 출력 안되고 위 두 번째처럼 01034 에러 출력
테스트: STARTUP, (DISCONNECT,SHUTDOWN없이) EXIT, 다시 SQL*PLUS 실행, CONNECT
원인: STARTUP하고 DISCONNECT나 SHUTDOWN 없이 EXIT 하면 SQL*PLUS 재실행 후 (혹은 재실행 없이) CONNECT 했을 때도 여전히 STARTUP 상태라 OPEN_MODE 확인 가능
[참고]
SQL> EXIT
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL*PLUS에서 EXIT 명령하면 DISCONNECT 후 종료한다.
SQL*PLUS 명령 중 EXIT와 QUIT가 있다. EXIT는 보류 중인 모든 변경 사항을 커밋 또는 롤백하고, Oracle Database에서 로그아웃하고, SQL*Plus를 종료하고, 운영 체제에 제어를 반환한다. QUIT은 EXIT의 동의어이다.
( https://docs.oracle.com/database/121/SQPUG/ch_twelve023.htm#SQPUG044 )
CONNECT, (DISCONNECT 생략) EXIT, SQL*PLUS 재실행하면 당연히 OPEN_MODE 확인할 수 없다.
[에러]
SQL> CONNECT / AS SYSDBA
Connected.
SQL> STARTUP
ORA-01081: cannot start already-running ORACLE - shut it down first
이전 SQL*PLUS 종료 시 SHUTDOWN하지 않고 EXIT 하여서 01081 에러 발생함. 내용은 이미 오라클 실행 중이라서 (또다시) 시작할 수 없고, 먼저 오라클 종료해야 한다는 내용임.
[STARTUP]
SQL> STARTUP
ORACLE instance started.
Total System Global Area 1207958960 bytes
Fixed Size 8895920 bytes
Variable Size 738197504 bytes
Database Buffers 452984832 bytes
Redo Buffers 7880704 bytes
Database mounted.
Database opened.
보다시피 STARTUP 뒤에 아무것도 안 붙이면 MOUNT, OPEN 둘 다 같이 진행한다.
SHUTDOWN 종류, 차이:
1. 출력 모양:
SQL> SHUTDOWN
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SHUTDOWN NORMAL
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SHUTDOWN TRANSACTIONAL
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SHUTDOWN ABORT
ORACLE instance shut down.
ABORT 외 3개는 동일하다.
SHUTDOWN 뒤에 아무 옵션도 안붙이면 기본으로 NORMAL 옵션이 적용된다.
2. 표
NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT | |
추가 접속 허용 | 허용 안함 | 허용 안함 | 허용 안함 | 허용 안함 |
접속 중인 세션 | 종료까지 대기 | 강제 종료 | 강제 종료 | 강제 종료 |
수행 중인 작업 | 수행 | 수행 | 강제 종료 | 강제 종료 |
취소된 작업 롤백 | - | - | 수행 | 수행 안함 |
체크 포인트 수행 | 수행 | 수행 | 수행 | 수행 안함 |
SHUTDOWN 소요 시간 | 오래 소요 | 오래 소요 | 짧음 | 매우 짧음 |
특별한 경우를 제외하고 ABORT 옵션을 사용해선 안된다. 정합성에 오류가 발생할 수 있기 때문이다.
STARTUP 종류, 차이:
1. 출력 모양:
SQL> STARTUP
ORACLE instance started.
Total System Global Area 1207958960 bytes
Fixed Size 8895920 bytes
Variable Size 738197504 bytes
Database Buffers 452984832 bytes
Redo Buffers 7880704 bytes
Database mounted.
Database opened.
SQL> STARTUP NOMOUNT
ORACLE instance started.
Total System Global Area 1207958960 bytes
Fixed Size 8895920 bytes
Variable Size 738197504 bytes
Database Buffers 452984832 bytes
Redo Buffers 7880704 bytes
SQL> STARTUP MOUNT
ORACLE instance started.
Total System Global Area 1207958960 bytes
Fixed Size 8895920 bytes
Variable Size 738197504 bytes
Database Buffers 452984832 bytes
Redo Buffers 7880704 bytes
Database mounted.
SQL> STARTUP OPEN
ORACLE instance started.
Total System Global Area 1207958960 bytes
Fixed Size 8895920 bytes
Variable Size 738197504 bytes
Database Buffers 452984832 bytes
Redo Buffers 7880704 bytes
Database mounted.
Database opened.