4장. 오라클 실습 1
학습 목표
- 오라클 DBMS 서버 설치와 환경 구성을 이해한다
- 개발 도구의 종류와 사용법을 학습한다
- 사용자 생성과 권한 관리 방법을 익힌다
- 첫 번째 데이터베이스와 테이블 생성을 실습한다
- 오라클의 특징적인 기능들을 파악한다
4.1 설치
오라클 DBMS 서버
- DBMS 시스템은 대규모 소프트웨어이다
- 오라클 데이터베이스 시스템의 버전명인 i, g, c는 각각 internet, grid, cloud를 의미한다
개발 도구
SQL*Plus: a basic command-line interface
- 기본적인 명령줄 인터페이스
Oracle SQL Developer
- GUI 환경을 제공하는 무료 개발 도구
- 데이터베이스 객체 탐색, SQL 문 실행, 스크립트 실행, PL/SQL 편집 및 디버깅 등이 가능
Oracle Application Express (APEX)
- 가장 널리 사용되는 데이터베이스 응용 프로그램 개발 도구
Oracle Forms, Oracle Reports, Oracle JDeveloper
- DBMS 설치 후 컴파일하여 사용하려면 설치 시 제공되는 도구가 필요하다
- SQL*Plus와 Oracle SQL Developer는 SQL 실습에 적합하며, SQL Developer는 GUI 환경으로 사용이 쉽다
- APEX는 데이터베이스 기반의 응용 개발을 지원하는 도구이다
설치 및 DBA 계정
- 오라클의 대표적인 DBA 계정은 system과 sys 두 가지가 있으며, 설치 중에 이들의 비밀번호를 설정해야 한다
- system 계정은 일반적인 DBA 작업을 수행할 수 있다
- sys 계정은 데이터 사전과 관련된 고급 작업을 수행할 수 있으며, 시스템 운영 권한이 있다
- 일반적인 작업은 system 계정을 사용한다
DBA로 사용자 생성하기
**Connect the server as DBA ('sys' account) and do following**:
Create user C##hodori identified by tooshytotell
default TABLESPACE users
temporary TABLESPACE temp;
Grant connect, resource to C##hodori;- DBA 권한을 가진 계정으로 접속한 후 새로운 사용자를 생성하고 필요한 권한을 부여한다
4.2 첫 DB 만들기
테이블 만들기
Create table firstTable (
id char(13) primary key,
name varchar(30),
height numeric(4,1));
Insert into firstTable values ('11', 'Hong Gildong', 165.3);
Insert into firstTable values ('22', 'Lee Chulsoo', 175.4);
Insert into firstTable values ('33', 'Kim Younghee', 167.5);- SQL 문장은 대소문자를 구별하지 않는다. 단, 문자열 리터럴 내부의 문자는 대소문자를 구별한다
- 작성한 SQL 문장은 .sql 확장자를 가진 ASCII 파일로 저장해두면 재사용이 가능하다
외래키와 데이터 입력
Create table temp1 (
deptName char(10) primary key,
address char(20));
Create table temp2 (
name char(10) primary key,
dept char(10),
constraint c1 foreign key (dept) references temp1);- 먼저 temp1 테이블에 데이터를 삽입한 후 temp2 테이블에 데이터를 삽입할 수 있다
- 또는 외래키 제약을 나중에 추가하거나 임시로 비활성화할 수 있다
Alter table temp2 add constraint c1 foreign key (dept) references temp1;
Alter table temp2 disable constraint c1;외래키와 데이터 입력 예제 1
R = (A, B, C, D) S = (B, D, E)
r × s = {t | t ∈ r and t ∈ s}
myCourseCID title deptName credit myPrereq cID prereqCID
BIO-301 Genetics Biology 4 BIO-301 BIO-101
CS-301 DB CS 4 CS-301 CS-101- 자연 조인은 조인 조건을 명시하지 않아도, 두 테이블에서 이름이 동일한 속성을 기준으로 조인이 수행된다
- 동일한 속성 값을 가진 튜플들만 결합된다
자연 조인 예제 2
Retrieve professor names who teach in the Fall semester of 2020 together with the course titles that the professors teach
myCourse ← DeptName=title, title ∩ deptName(Course)(course)
Πname,title(σsemester="Fall" ∧ year = 2020(professor) ⋈ teaches ⋈ myCourse)📝 Note
- 2020년 가을 학기에 강의한 교수 이름과 해당 교과목 제목을 검색하는 예시
- teaches 관계에서 조건을 먼저 필터링한 후 조인을 수행한다
4.3 Oracle SQLs
데이터 사전
- 데이터 사전은 데이터베이스에 대한 메타데이터(테이블, 속성, 인덱스 등)를 관리한다
- 사용자는 데이터 사전을 통해 시스템 정보를 확인할 수 있다
- 오라클은 데이터 사전을 SGA의 dictionary cache에 보관하여 빠른 접근을 제공한다
- 데이터 사전은 DBA가 소유하며, 일반 사용자는 SELECT 문으로만 접근 가능하다
- 시스템 성능 정보를 담은 동적 성능 테이블은 V$ 접두사로 제공되며, 일반 사용자도 접근 가능하다
View prefixes
| prefix | scope |
|---|---|
| USER | 사용자의 스키마에 있는 객체 정보 |
| ALL | 사용자가 접근 가능한 모든 객체 정보 |
| DBA | 모든 사용자의 객체 정보를 포함 (DBA만 접근 가능) |
Select * from user_objects;
Select * from user_tables;
Select * from user_sequences;
Select * from user_indexes;
Select * from user_views;
Select * from user_constraints;
describe user_objects;- 접두사(user, all, dba)에 따라 다른 범위의 객체 정보를 확인할 수 있다
- describe 명령은 테이블 또는 뷰의 스키마 정보를 확인하는 데 사용한다
시퀀스
Create sequence sequ1 start with 10 increment by 10;
Alter sequence sequ1 maxvalue 10000;
Select sequ1.nextval, sequ1.currval from dual;
Create table dept1 (
deptno number(4) primary key,
dname varchar2(30));
Insert into dept1 values(sequ1.nextval, 'Software');
Insert into dept1 values(sequ1.nextval, 'Hardware');
Drop sequence sequ1;- 시퀀스는 여러 사용자가 동시에 유일한 숫자를 생성할 수 있도록 해주는 객체이다
- 시퀀스는 테이블과 직접 연결되지는 않으며, nextval을 통해 값을 생성한다
- 생성된 시퀀스 값은 트랜잭션의 성공 여부와 관계없이 유일성이 유지된다
데이터 타입
- 오라클의 varchar2는 최대 4000바이트까지 저장 가능하다
- 사용자가 varchar로 정의하더라도 오라클은 내부적으로 varchar2로 처리한다
오라클에서의 널 값과 공스트링
Create table myTable (
ID number,
name varchar2(100));
Insert into myTable(ID, name) values (100, null);
Insert into myTable(ID, name) values (200, '');
Select count(*) from myTable where name=''; -- 결과: 0
Select count(*) from myTable where name is null; -- 결과: 2- 오라클에서는 공스트링(’’)도 NULL로 간주한다
- 따라서 name='' 조건으로는 결과가 나오지 않으며, name IS NULL 조건을 사용해야 한다
📝 Note
이 글은 이상호 교수님의 데이터베이스 I 이론 및 실제 교재를 토대로 공부한 내용을 정리한 것입니다.