1. SQL초보에서 Schema Objects까지
2. SQL*Plus
2-1. 개요, 시작, 종료
SQL*Plus는 SQL및 PL/SQL문장을 인식하고 이를 대화식으로 실행하고 결과를 확인 시켜주는
Oracle Client 도구(Tools)로 Oracle 데이터베이스와 사용자가 상호작용을 위한 사용자 인터페이스
이다. 또한 SQL*Plus에는 SQL Buffer가 있는데, 가장 최근에 사용된 SQL 문장 또는 PL/SQL Block
이 저장되어 있고 이때, SQL명령문의 끝에 사용된 세미콜론(;)은 슬래시(/)로 변경되어 저장된다.
Oracle에서는 SQL*Plus를 이용하여 기본적인 데이터베이스 관리자의 역할 뿐 아니라 인스턴스
의 시작, 종료 등과 같은 역할도 실행이 가능하다.
GUI 형태로 SQL*Plus를 시작하기 위해서는 시작 메뉴 프로그램 Oracle - OraDB 11g 응용
프로그램개발 SQL Plus를 클릭하여 SQL*Plus를 실행 하며, 콘솔창 형태로 실행 하기 위해서는
명령 프롬프트을 실행(시작 실행 “cmd”) 후 sqlplus 라고 입력을 하면 된다. 사용자 ID는
scott, Password는 tiger로 접속을 하기 바란다. (scott계정은 Oracle 실습을 위한 계정으로서
Oracle 설치시 자동으로 생성되는 계정으로 데모용 Table 등이 존재한다.)
아래는 SQL*Plus 최초 접속화면이다. SQL*Plus 종료시 에는 quit또는 exit를 입력하면 된다.
[시작메뉴를 통한 실행]
2. [시작 실행 cmd로 SQL*Plus 실행 시 모습]
2-2. 데이터베이스 시작, 종료
윈도우 환경의 오라클 이라면 제어판의 관리도구, 서비스 메뉴를 이용하여 오라클서버 및 리스
너를 실행할 수 있겠지만 다른 환경에서는 SQL*Plus를 이용하여 DB를 시작, 종료해야 한다.
DataBase 종료
- shutdown (normal) : 자주 사용되지 않는 방법으로 사용자의 접속이 끊어질 때 까지 기다려야
한다. 즉 모든 사용자가 자신의 트랜잭션을 끝내고 로그오프 해야만 DB종료가 가능하다.
- shutdown immediate : 가장 자주 사용되는 방법으로 실행중인 SQL문장을 중지하고, 실행중인
트랜잭션이 있으면 RollBack, 사용자의 새로운 로그인을 막고 DB에 변경된 사항을 데이터파일에
기록한다. 사용자들이 로그아웃 할 때까지 기다리지 않고 DB를 종료 한다.
- shutdown abort : 현재 처리중인 모든 명령을 종료, RollBack 하지 않는다. 사용자의 접속을 다
끊고 DB종료, 다음 오라클 시작 시 모든 것들이 복구된다. 그러므로 DB를 abort 옵션으로 종료했
다면 정상 시작 후 다시 한번 shutdown immediate로 종료하는 것이 필요하다.
SQL> shutdown abort
SQL> startup
SQL> shutdown immediate
3. DataBase 시작
- startup nomount : 오라클 인스턴스(백그라운드 프로세스 + SGA) 시작, 데이터베이스생성 또는
컨트롤파일 생성시 이용
- startup mount : 컨트롤파일을 읽고 데이터베이스를 마운트(데이터파일 이름변경, 아카이브로그모
드 변경, 데이터베이스 복구등)
- startup open : 사용자 접속가능
- startup restrict : 제한된 모드로 오라클 시작, DB를 정상적으로 시작하지만 User들은 접속불가
하며 SQL*Loader로 데이터 로드를 수행, DB upgrade, 데이터의 import, export 수행 시에 주로 이
용한다.
- startup force : DB가 시작된 상태라면 자동으로 DB를 종료한 후 다시 시작, 오라클 서버의 비정
상적인 종료로 일부 프로세스들이 기동중인 경우 오라클 정상 시작이 안 되는 경우 강제적으로
오라클을 기동하는 시작 옵션.
- alter database mount[open] : 데이터베이스 오픈 상태를 변경
4. C:Documents and SettingsA>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 일 9월 7 09:45:50 2015
Copyright (c) 1982, 2010, Oracle. All rights reserved.
다음에 접속됨:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> startup nomount
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 778387456 bytes
Fixed Size 1374808 bytes
Variable Size 285214120 bytes
Database Buffers 486539264 bytes
Redo Buffers 5259264 bytes
-- 현재 DB가 인스턴스만 시작된 nomount 상태임
-- DB를 mount 상태로 변경
SQL> alter database mount;
SQL> alter database open;
SQL> shutdown normal;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
-- 이번에는 한번에 DB를 오픈모드까지
SQL> startup open
ORACLE 인스턴스가 시작되었습니다.
5. Total System Global Area 778387456 bytes
Fixed Size 1374808 bytes
Variable Size 285214120 bytes
Database Buffers 486539264 bytes
Redo Buffers 5259264 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
2-2. SQL*Plus 명령어
SQL*Plus의 명령어를 사용하여 주로 Table의 구조를 표시, SQL*Plus 실행환경을 제어, SQL 명령어
실행, SQL 문장 편집, SQL 문장을 파일에 저장, 저장된 SQL 파일을 실행, SQL 파일의 내용을 버퍼
에 저장, 보고서 출력 등의 일을 할 수 있다.
SQL*Plus에는 SQL 버퍼라는 임시 기억장소가 있어 최근 수행한 명령이나 명령어의 블록을 기억
하고 있으며 편집하거나 파일로 저장 등이 가능하다.
2.2.1 주요 명령어
Desc[ribe] Table명[View명|Synonym명] : 테이블의 칼럼 리스트를 나타내며 칼럼에 대한 구조를 나
타낸다. 예)Desc Table명[View명|Synonym명]
EXIT[QUIT] : SQL*Plus를 종료
Conn[ect] uid/pwd[@alias] : 데이터베이스에 대한 연결을 한다. Alias는 원격 데이터베이스에 대한
별명을 나타낸다. 데이터베이스가 로컬에 설치 되어 있는 경우 생략한다.
예)conn scott/tiger
Spo[ol] [filename.ext|OFF] : 기술한 파일에 SQL 문장 및 그 결과 등을 저장, OFF는 스풀 파일을 닫
는다.
HOST : SQL*Plus를 종료하지 않고 운영체제 명령을 실행 한다. 윈도우인 경우 DOS 환경으로 빠져
나간다.
6. Run, ‘/’(슬래쉬) : 버퍼에 저장된 SQL문장을 실행
‘;’(세미콜론) : 버퍼에 입력과 동시에 실행
C:Documents and SettingsA>sqlplus scott/tiger
SQL> show user
USER은 "SCOTT"입니다
SQL> select empno, ename from emp where rownum < 3;
EMPNO ENAME
---------- ----------
353 Onj5
9701 1001길동
SQL> /
EMPNO ENAME
---------- ----------
353 Onj5
9701 1001길동
-- list 명령은 현재 버퍼의 내용을 출력하는 명령
SQL> list
1* select empno, ename from emp where rownum < 3
SQL> run
1* select empno, ename from emp where rownum < 3
EMPNO ENAME
---------- ----------
353 Onj5
9701 1001길동
SQL> /
EMPNO ENAME
---------- ----------
353 Onj5
7. 9701 1001길동
-- 위 run, / 명령의 차이는 실행할 버퍼에 있는 SQL명령문을 보여 주느냐, 아니냐 차이
SQL> desc emp
이름 널? 유형
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
연결되었습니다.
SQL> spool spool.txt
SQL> select count(*) from emp;
COUNT(*)
----------
40
SQL> spool off
SQL> host
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:Documents and SettingsA>dir
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 1CBD-FB79
C:Documents and SettingsA 디렉터리
2015-09-07 오전 10:07 <DIR> .
2015-09-07 오전 10:07 <DIR> ..
2015-09-07 오전 10:08 468 spool.txt
2015-08-17 오후 01:03 <DIR> 바탕 화면
8. 2015-06-05 오후 07:20 <DIR> 시작 메뉴
C:Documents and SettingsA>type spool.txt
SQL> select count(*) from emp;
COUNT(*)
----------
40
SQL> spool off
C:Documents and SettingsA>exit
SQL> show user
USER은 "SCOTT"입니다
SQL> exit
2.2.2 편집 명령어
버퍼에 입력된 내용을 편집하기 위해 사용하는 명령들이다.
I[NPUT] text : 새로운 라인을 삽입
D[EL] : 현재 버퍼 라인의 내용을 삭제
D[EL] n : 버퍼에 있는 n번째 라인 삭제
D[EL] n1 n2: 버퍼에 있는 n1 부터 n2까지의 라인 삭제
L[IST] : 버퍼에 있는 모든 내용을 화면에 표시
L[IST] n : 버퍼의 라인 중 n라인의 내용을 화면에 표시
L[IST] n1 n2 : 버퍼의 라인 중 n1 라인부터 n2 라인까지를 화면에 표시
C[HANGE] : 현재 버퍼 라인의 내용을 교체(형식 : C/old문자열/new문자열)
N text : 라인n의 내용을 text로 변경
0 text : 첫번째 라인 앞에 한 라인을 삽입
Cl[ear] Buff[er] : 버퍼의 내용을 전부 지움
SQL> select ename as 사원명 , sal as 급여
from emp
where ename = 'SMITH';
9. 사원명 급여
---------- ----------
SMITH 800
SQL> run
1 select ename as 사원명 , sal as 급여
2 from emp
3* where ename = 'SMITH'
사원명 급여
---------- ----------
SMITH 800
SQL> list
1 select ename as 사원명 , sal as 급여
2 from emp
3* where ename = 'SMITH'
SQL> list 1
1* select ename as 사원명 , sal as 급여
SQL> list 1 2
1 select ename as 사원명 , sal as 급여
2* from emp
SQL> list 3
3* where ename = 'SMITH'
SQL> i or ename = 'WARD'
SQL> /
사원명 급여
---------- ----------
SMITH 800
WARD 1250
SQL> list
1 select ename as 사원명 , sal as 급여
2 from emp
3 where ename = 'SMITH'
4* or ename = 'WARD'
SQL> list 4
4* or ename = 'WARD'
SQL> c/WARD/FORD
4* or ename = 'FORD'
SQL> /
사원명 급여
---------- ----------
10. SMITH 800
FORD 3000
SQL> list
1 select ename as 사원명 , sal as 급여
2 from emp
3 where ename = 'SMITH'
4* or ename = 'FORD'
SQL> del 4
SQL> list
1 select ename as 사원명 , sal as 급여
2 from emp
3* where ename = 'SMITH'
SQL> /
사원명 급여
---------- ----------
SMITH 800
SQL> 3 where sal > 2000
SQL> /
사원명 급여
---------- ----------
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
……
SQL> list
1 select ename as 사원명 , sal as 급여
2 from emp
3* where sal > 2000
SQL> del
SQL> list
1 select ename as 사원명 , sal as 급여
2* from emp
SQL> list 1
1* select ename as 사원명 , sal as 급여
SQL> del
SQL> list
1* from emp
SQL> clear buffer
11. buffer 소거되었습니다.
SQL> list
SP2-0223: SQL 버퍼에 줄이 없습니다.
2.2.3 파일관련 명령어
파일과 관련된 SQL*Plus 명령어들 이다. 사용법을 확인 후 실습을 통해 이해하자.
SAVE test : 버퍼의 내용을 test.sql로 저장
SAVE test RE[LACE] : 버퍼의 내용을 기존 파일인 test.sql에 덮어 쓴다.
APP[END] test : 버퍼의 내용을 test.sql에 추가 한다.
GET test : test.sql의 내용을 버퍼로 불러오며 화면에 출력한다.
EDIT test : test.sql의 내용을 버퍼로 불러오지 않으며 편집을 위해 로딩한다.
EDIT : 현재 버퍼의 내용을 편집을 위해 로딩 한다.
START test : test.sql의 내용을 실행 한다.
@test : test.sql의 내용을 실행 한다.
SQL> select ename as "사원명" , sal as "급여"
from emp
where ename = 'SMITH'
/
사원명 급여
---------- ----------
SMITH 800
SQL> save test
file test.sql(이)가 생성되었습니다
SQL> select count(*) from emp;
COUNT(*)
----------
14
SQL> list
1* select count(*) from emp
SQL> get test
1 select ename as "사원명" , sal as "급여"
12. 2 from emp
3* where ename = 'SMITH'
SQL> list
1 select ename as "사원명" , sal as "급여"
2 from emp
3* where ename = 'SMITH'
SQL> edit test
edit test 명령 후 새 창에서 test.sql 파일의 내용이 로딩되며 파일의 형태는 다음과 같다.
select ename as "사원명" , sal as "급여"
from emp
where ename = 'SMITH'
/
[test.sql 의 내용]
-- Test.sql의 3번째줄의 내용을 where ename=’WARD’로 바꾼 후 저장, 종료하자.
SQL> edit test
SQL> @test
사원명 급여
---------- ----------
WARD 1250
SQL> start test
사원명 급여
---------- ----------
WARD 1250
SQL> run
1 select ename as "사원명" , sal as "급여"
2 from emp
3* where ename = 'WARD'
사원명 급여
---------- ----------
WARD 1250
SQL> run test
1 select ename as "사원명" , sal as "급여"
2 from emp
3* where ename = 'WARD'