#title 오라클의 기동과 종료 [[TableOfContents]] ==== 기본적인 사항들 ==== 시작이 반이다라는 말이 있습니다. 오라클의 시작과 종료과정을 정확히 이해한다면 데이타베이스에 대한 기본적인 지식이 있다고 봐도 상관없을 것입니다. 일단 오라클을 시작하려면 명령어가 필요합니다. 그 명령어를 사용하기 위해서는 오라클에 대한 만땅권한을 가진 사용자의 계정과 패스워드가 필요합니다. 이 만땅 권한을 가진 사용자는 sys 입니다. 오라클 셋업시 변경하지 않으셨다면 change_on_install 이 암호입니다. 셋업과정도 8i 버전하고는 약간 다른 면을 보이고 있습니다. 정확히 말하자면 데이타베이스 생성하는 과정이지요.. 암튼 8i에서는 이러한 암호관리가 데이타베이스 생성 후에나 가능했으나 9i 버전에서는 생성과정에서 암호관리를 할 수 있습니다. 오라클을 기동하는 명력어는 startup 입니다. 여러가지 옵션이 있습니다. 이거는 SQL이라고는 볼 수 없고, 그냥 오라클을 시작하는 명령어..또는 SQL*Plus의 명령어라고 생각하시면 되겠습니다. SQL*Plus는 단순한 클라이언트 툴이 아니라는 것만 알아두시기 바랍니다..여러가지로 통합이 된 툴이기 때문에... 명령어 형식은 다음과 같습니다. {{{ STARTUP options | migrate_options }}} 옵션은 다음과 같습니다. {{{ <일반옵션> FORCE] [RESTRICT] [PFILE=filename] [QUIET] [ MOUNT [dbname] | [ OPEN [open_options] [dbname] ] | NOMOUNT ] READ {ONLY | WRITE [RECOVER]} | RECOVER [PFILE=filename] MIGRATE [QUIET] }}} 아~ 시작부터 너무나도 난감한 옵션들이 많이 있습니다..이거..일일이 다 설명못함돠..정말이지 노가다임돠..메뉴얼을 참고해야만 함돠...저두 이거 정리하는거 메뉴얼 참고하면서 하는 검니당...안되는 영어...으~ 영어..몇가지만 해보도록 하겠습니다. 처음에 오라클을 시작하려면 명령프롬프트로 가야 합니다..물론 리눅스나 유닉스에서는 기냥 터미널로 들어가서리 하면되지만요..암튼...가서 startup 하면 됩니당..다음은 윈도우 명령프롬프트에서 실행한 것입니다. {{{ Microsoft Windows 2000 [Version 5.00.2195] (C) Copyright 1985-2000 Microsoft Corp. C:\Documents and Settings\Administrator.YASICOM>sqlplus /nolog -- SQL*Plus를 띄운다.. SQL*Plus: Release 9.2.0.1.0 - Production on 금 Aug 9 02:49:36 2002 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect sys/change_on_install as sysdba 휴지 인스턴스에 접속되었습니다. SQL> startup ORACLE 인스턴스가 시작되었습니다. Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 데이터베이스가 마운트되었습니다. 데이터베이스가 열렸습니다. SQL> }}} 머..다들 아시겠지만..8i버전에서는 connect internal로 접속을 하면 만땅권한을 가진 사용자로 외부에서 접속한거 말구.. 내부에서 즉, 오라클이 설치된 컴퓨터에 앉아서 connect internal로 하면 되었었슴다...물론 svrmgrl이라는 명령어로 서버매니저라는 툴을 이용해서 오라클을 기동시켰구요..지금은 SQL*Plus로 통합되었지만요..암튼...이전버전들의 오라클하고 틀린게 이겁니당..저는 첨에 이거를 몰라서리..한참 고생했슴다..헐헐~ 결국은 메뉴얼 보구 알았지만요.. 위에 보면 "휴지 인스턴스에 접속되었습니다" 라는 말이 나옵니다. 이것은 오라클에게 필요한 프로세스와 메모리를 시스템에서 아직 할당하지 않고, 사용자를 받아들일 준비가 되지 않았다는 뜻이겠죠? 짧게 야그하면 오라클 서비스가 시작되지 않고, 잠시 쉬는중..암튼...startup명령어를 통해서 오라클을 시작합니다..오라클의 시작은 단계적으로 이루어지는 것이 보입니다. 1. ORACLE 인스턴스가 시작되었습니다. --> NOMOUNT 라고함 2. 데이터베이스가 마운트되었습니다. --> MOUNT 라고함 3. 데이터베이스가 열렸습니다. --> OPEN 라고함 이렇게 단계적으로 이루어지는 이유는 관리차원에서의 문제입니다. 만약 데이타베이스에 이상이 생겨서 복구를 하거나 또는 백업을 할때, 다른 사용자가 접근하거나 서비스가 기동 중이라면 이러한 관리작업을 하지 못할 것입니다. 암튼..다 이유가 있는 것이죠.. 1번과 2번단계 사이에 이상한 영어가 있습니다. 이것은 메모리를 얼마나 할당했는가에 대한 표시입니다. 즉, NOMOUNT단계에서는 오라클의 인스턴스를 시작하는 단계입니다. 인스턴스는 오라클의 메모리와 백그라운드 프로세스를 말하는 것입니다. 1번단계에서는 오라클에게 사용할 메모리를 할당하고, 프로세스를 생성하는 단계입니다. MOUNT 단계는 리눅스나 오라클에서의 마운트의 개념과 유사합니다. 물론 윈도우도 마운트를 하겠지만요..암튼..마운트라는 것이 사용할 준비가 되었다는 것을 의미하는 것입니다. 즉, 마운트 단계에서는 오라클에서 사용하는 파일들에 대한 문제가 있는지를 살펴보고 문제가 없다면 사용해도 좋다는 검사를 하기 위한 단계입니다. 당연히 관련 파일에 문제가 있다면 마운트는 다음단계로 넘어가서는 안돼겠지요...복구를 하던가 무슨 조치를 해야 사용자에게 개방할 수 있겠죠.. 마지막으로 OPEN 단계는 메모리 할당과 프로세스가 생성되고, 파일등의 검사가 이루어져 사용자가 문제없이 사용해도 된다는 단계입니다. 단계적으로도 수행할 수 있습니다. 한번 해보도록 하겠습니다.. {{{ SQL> shutdown 데이터베이스가 닫혔습니다. 데이터베이스가 마운트 해제되었습니다. ORACLE 인스턴스가 종료되었습니다. SQL> startup nomount ORACLE 인스턴스가 시작되었습니다. Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes SQL> alter database mount; 데이타베이스가 변경되었습니다. SQL> alter database open; 데이타베이스가 변경되었습니다. SQL> }}} 머..이렇슴당..옵션들은 메뉴얼을 참고하시기 바랍니다...종료도 나왓지요?? 종료 명령은 shutdown 입니다...이것도 몇가지 옵션이 붙습니다..이 옵션들은 설명하도록 하겠습니다..설명을 하는 이유는 옵션이 몇가지 안되는 이유도 있기는 하지만 이 종료옵션 에 대한 이해를 함으로써 오라클에 대해서 감을 잡을 수 있기 때문입니다.. {{{ SQL> shutdown 데이터베이스가 닫혔습니다. --> CLOSE 데이터베이스가 마운트 해제되었습니다. --> DISMOUNT ORACLE 인스턴스가 종료되었습니다. --> DISCONNECT }}} 위의 예에서 볼 수 있듯이 오라클의 종료는 오라클의 시작에 반대의 과정을 가지게 됩니다. CLOSE 단계에서는 더 이상 오라클에 대한 사용자의 접속을 막고, 일반 사용자들로부터 모든 데이타 파일을 비공개로 합니다. DISMOUNT 단계는 데이타베이스의 상태정보를 저장하고 종료합니다. 마지막으로 DISCONNECT 단계는 오라클이 사용하던 자원을 (메모리영역, 프로세스 즉, CPU 사용등)을 OS에게 반환하고 접속을 해제합니다.. 이것은 일반적인 단계입니다..SHUTDOWN에는 4가지 옵션이 있는데...하나씩 살펴보도록 하겠습니다... 다음은 그 종류와 설명입니다... NORMA : 모든 사용자의 접속이 해제될때까지 기다렸다가 오라클 종료 TRANSACTIONAL : 모든 사용자의 트랜잭션이 종료(COMMIT 또는 ROLLBACK)될때 까지 기다렸다가 모든 트 랜잭션이 종료되면 오라클 종료 IMMEDIATE :모든 트랜잭션(DML문)을 롤백시킨후 오라클 종료시킴 ABORT : 무조건 종료 --> 비정상적인 종료임..백업/복구 또는 비상시 사용.. ==== 삽질 해보기 ==== 이러한 것에 대한 실습을 해보도록 하겠슴당..먼저...리눅스나 유닉스이건...윈도우 운영체제이건..SQL*PLUS 를 두개씩 띄움니다...여기서는 A와 B로 나누겠습니다..A는 오라클을 시작/종료할 수 있는 만땅권한의 사용자 즉, SYS 사용자로 접속합니다..B는 SCOTT 사용자로 접속합니다.. A - SQL*PLUS - NORMAL TEST.. {{{ SQL> CONNECT SYS/CHANG_ON_INSTALL AS SYSDBA 연결되었습니다. SQL> SHUTDOWN NORMAL; <-------- 엔터를 치면 여기에 커서가 있고, 대기하고 있는것이 보인다.. }}} B - SQL*PLUS - NORMAL TEST.. {{{ SQL> CONNECT SCOTT/TIGER 연결되었습니다. SQL> EXIT --> A - SQL*PLUS 에서 SHUTDOWN 명령후 입력한다... }}} 여기서 B - SQL*PLUS - NORMAL TEST.. 창에서 EXIT 명령어로 접속을 해제해 보자..그럼 즉시 오라클이 종료되는 것을 볼 수 있습니다.. 다시 오라클을 기동한다..먼저 B - SQL*PLUS에서 간편한 테스트를 하기 위해서 테이블 을 만들고, 데이타를 집어넣는 트랜잭션을 만들어 보자..그 다음..SYS 사용자로 SHUTDOWN TRANSACTIONAL 명령을 때려봅니다.. A - SQL*PLUS - TRANSACTIONAL TEST.. {{{ SQL> CONNECT SYS/CHANG_ON_INSTALL AS SYSDBA 연결되었습니다. SQL> SHUTDOWN TRANSACTIONAL; <-------- 엔터를 치면 여기에 커서가 있고, 대기하고 있는것이 보인다.. }}} B - SQL*PLUS - TRANSACTIONAL TEST.. {{{ SQL> CONNECT SCOTT/TIGER 연결되었습니다. SQL> CREATE TABLE TEST(NAME VARCHAR(10)); 테이블이 생성되었습니다. SQL> INSERT INTO TEST VALUES ('YASI'); 1 개의 행이 만들어졌습니다. SQL> COMMIT; <-- SHUTDOWN TRANSACTIONAL; 명령후 입력 해본다.. }}} 다시 오라클을 시작합니다..다시 아까와 같은 상황을 만들어 봅니다.. 아까 테스트를 위한 테이블을 생성했으므로 B - SQL*PLUS 에는 데이타를 집어 넣는 트랜잭션 하나만 만들어 봅니다..그런후 SHUTDOWN IMMEDIATE 명령을 수행해 봅니다.. A - SQL*PLUS - IMMEDIATE TEST.. {{{ SQL> CONNECT SYS/CHANG_ON_INSTALL AS SYSDBA 연결되었습니다. SQL> SHUTDOWN TRANSACTIONAL; --> 이전과는 달리 그냥 종료가 된다.. }}} B - SQL*PLUS - IMMEDIATE TEST.. {{{ SQL> CONNECT SCOTT/TIGER 연결되었습니다. SQL> INSERT INTO TEST VALUES ('YASI'); 1 개의 행이 만들어졌습니다. SQL> SELECT * FROM TEST; NAME -------------------- YASI YASI }}} 이제 다시 오라클을 기동하고 SCOTT 사용자로 접속해서 TEST 테이블을 살펴보면 삽입한 데이타가 없어졌을 것입니다..이것은 트랜잭션이 롤백되었기 때문입니다..참고로 INSERT, UPDATE, DELETE 문을 사용하고, ROLLBACK 또는 COMMIT 문을 날리지 않았어도 세션을 종료하면 오라클에서는 AUTO COMMIT을 시킵니다.. {{{ SQL> SELECT * FROM TEST; NAME -------------------- YASI }}} SHUTDOWN ABORT는 트랜잭션이 롤백이 되는거 없이 그냥 오라클을 종료해 버립니다..비정상적인 종료이므로 오라클은 다음에 시작할때 비정상적인 종료에 대한 복구를 하게 됩니다...그러므로 PC의 경우 사양이 좋다면 못느끼실 테지만 꾸진 컴이라면 아까 위에 서보다 오라클 기동하는 시간이 오래걸린다는 것을 느낄 수 있을 것입니다. 헐~ 잼있나요?? 트랜잭션에 대한 개념과 오라클이 무언지 대충은 알고 있어야 정확히 알 수 있는 것이였습니다..아마도 이 부분이 이해가 안가시는 분이 계신다면..그것은 개념이 부족한 탓일 것입니다...트랜잭션이 무엇인가를 찾아보고, 오라클의 기초적인 개념을 잘 살펴보면 알 수 있을 것입니다...