카테고리 없음

오라클 startup, shutdown

boangod 2025. 10. 15. 16:39

파라미터파일은 읽을 친구가 없어서 위치랑 이름이 정해져 있다.

파라미터 파일에는 컨트롤파일에 대한것들이 있다.

 

NOMOUNT = 메모리에 인스턴스만 떠있는 상태 → 파라미터 파일을 읽어야 인스턴스가 뜬다. 파라미터 파일이 정상이 아니면 노마운트단계로 못감.( 파라미터 수정, 데이터베이스를 새로 만드는 작업을 할수있다. )

 

MOUNT = 컨트롤파일만 읽는거. (컨트롤 파일 = 데이터,니드로그 파일,위치등 모든것들이 들어있음.) 물리적인 작업을 할수있음.(위치옮기기, 수정 ,백업등.) 관리작업 하기 좋은 단계.

ㄴ 데이터베이스를 관리작업 할수있는 모드

 

OPEN = 데이터파일 니드로그파일이 열림.

 

 

shutdown 옵션

종료 모드

• A = ABORT → 인스턴스를 메모리에서 없애버림. 장애를 발생시키면서 강제로 죽여버리는것. • I = IMMEDIATE → TRANSACTIONAL있음 롤백시킴, 접속해어있는 사용자는 강제종료한다. • T = TRANSACTIONAL → 짧아야 한다.(정상적인 데베 종료) • N = NORMAL → 접속 종료가 모두 되는걸 기다린후 종료.(정상적인 데베 종료)

 

 

 

 

실습

 

SQL> SELECT STATUS FROM V$INSTANCE;

  • DB의 상태를 확인한다.
  • STATUS 칼럼의 값은 DB의 상태를 나타낸다

SQL> STARTUP NOMOUNT

 

SQL> SELECT status FROM v$instance;

 

SQL> ALTER DATABASE MOUNT;

 

SQL> SELECT status FROM v$instance;

 

SQL> ALTER DATABASE OPEN;

 

SQL> SELECT status FROM v$instance;

 

SHUTDOWN 종료

. NORMAL: 현재 사용 중인 모든 접속이 종료되길 기다린다.(default 값)

. TRANSACTIONAL : 진행 중인 transaction은 기다려주지만 transaction이 진행 중이지 않은 세션은 강제 종료시킨다.

.  IMMEDIATE : 모든 transaction과 접속을 강제로 종료한다.

. ABORT : DB의 상태와는 상관없이 메모리에서 instance를 해제한다.

 

 

Readonly 상태의 이해

 

SQL> STARTUP OPEN READ ONLY;

  • 종료 상태의 DB를 읽기전용으로 OPEN

SQL> ALTER DATABASE OPEN READ ONLY;

  • MOUNT 상태의 DB를 읽기 전용으로 OPEN

SQL> SELECT OPEN_MODE FROM V$DATABASE;

  • 데이터베이스의 상태를 조회한다.
  • READ ONLY와 READ WRITE 상태가 있다.

 

sqlplus / as sysdba

 

SQL> SHUTDOWN IMMEDIATE

 

SQL> STARTUP MOUNT;

 

SQL> ALTER DATABASE OPEN READ ONLY;

 

SQL> SELECT open_mode FROM v$database;

 

세션_2 일반 사용자 터미널

sqlplus hr/hr

 

SQL> SELECT count(*) FROM employees;

 

SQL> UPDATE employees SET salary = salary * 1.2;

 

read only라 update불가능

 

 

 

 

실습 사용자 세션의 확인과 제한 모드를 위한 사용자의 강제 종료

 

SQL> ALTER SYSTEM [ ENABLE | DISABLE ] RESTRICTED SESSION;

  • 제한 모드 상태를 활성화/비활성화 한다.
  • ALTER SYSTEM 시스템 설정할때 사용

SQL> SELECT LOGINS FROM V$INSTANCE;

  • 제한모드의 활성화 상태를 조회한다.
  • restriced는 제한모드 상태, allowed는 일반 모드 상태(평상시)를 나타낸다.

SQL> SELECT SID, SERIAL#, USERNAME, STATUS FROM V$SESSION;

  • DB에 접속 중인 세션을 확인한다.
  • 각 세션은 SID(세션ID 넘버)와 SERIAL#를 이용 구별된다.

SQL> ALTER SYSTEM KILL SESSION <'SID번호, SERIAL번호'>;

  • 지정한 세션을 강제 종료한다.

SQL> SELECT * FROM DBA_SYS_PRIVS;

  • 사용자나 role에 부여된 시스템 권한을 조회한다.

SQL> GRANT <시스템 권한> TO <user명>;

  • 어떤 사람한테권한을 할당한다.

SQL> REVOKE <시스템 권한> FROM <user명>;

  • 권한을 해제한다.

오라클은 소급해서 적용하지 않는다.

 

그랜티 권한 받은사람

그랜터 권한 준사람

 

세션 1 dba 세션

sqlplus / as sysdba

 

STARTUP

 

SELECT logins FROM v$instance;

 

세션 2 user 세션

sqlplus hr/hr

 

세션 1 dba 세션

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

 

SQL> SELECT logins FROM v$instance;

 

세션 2 user 세션

SQL> SELECT count(*) FROM tab;

ㄴ 작동은 잘됨. 이미 로그인이 되어있었기 때문.

 

세션 3 user 세션

sqlplus hr/hr

ERROR: ORA-01035: ORACLE only available TO users with RESTRICTED SESSION privilege

 

세션 1 dba 세션

SQL> SELECT sid, serial#, username, status FROM v$session 2 WHERE username like '%HR%';

   SID           SERIAL#   USERNAME        STATUS
   ---------- ---------- --------------- ---------
   271         19074       HR             INACTIVE

SQL> ALTER SYSTEM KILL SESSION '271,19074';

 

세션 2 user 세션

SQL> SELECT count(*) FROM tab;

 

ORA-00028: your session has been killed

ㄴ 이 세션이 죽었다고 뜸.

 

세션 1 dba 세션

SQL> SELECT * FROM dba_sys_privs 2 WHERE privilege LIKE '%RESTRICT%';

 

GRANT restricted session TO hr;

 

SQL> SELECT * FROM dba_sys_privs 2 WHERE privilege LIKE '%RESTRICT%';

 

세션 2 user 세션

SQL> CONNECT hr/hr

Connected.

ㄴ 권한이 있기 때문에 연결 가능

 

세션 1 dba 세션

SQL> REVOKE restricted session FROM st;

Revoke succeeded.

 

SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;

System altered.