오라클 XE 11G 설치
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=1000000
$ sudo mkswap /swapfile
$ sudo chmod 600 /swapfile -c
$ sudo swapon /swapfile
1기가의 스왑 파일을 생성하고 스왑메모리를 추가한다
오라클 XE를 사용하기 위함
$ free
total used free shared buff/cache available
Mem: 1788360 476828 82752 11740 1228780 1144144
Swap: 3097144 0 3097144
scp
CLI 방식으로 업로드
WinScp
GUI 방식으로 업로드
scp나 WinScp로 윈도우에서 vm웨어 리눅스로 업로드해도 되고
wget으로 링크를 이용해 다운로드 받아도 됨
강의에서는 강사님이 미리 다운로드받아두셔서 wget으로 내부서버 url로 다운로드받았음
sudo dnf -y install unzip net-tools bc libnsl
압축해제를 위한 unzip 설치
설치중에 netstat 명령어가 필요하여 net-tools 설치
libnsl도 설치시에 필요한 패키지이다
unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
unzip으로 압축해제
sudo dnf -y install unzip net-tools bc libnsl
압축해제를 위한 unzip 설치
설치중에 netstat 명령어가 필요하여 net-tools 설치
libnsl도 설치시에 필요한 패키지이다
unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
unzip으로 압축해제
sudo rpm -Uvh ./Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm
rpm을 이용하여 설치한다
sudo /etc/init.d/oracle-xe configure
설치후 oracle 설정
9090 포트와 1521 포트를 사용하고 비밀번호를 설정한다
rlwrap
오라클 사용시 sqlplus 프로그램을 편하게 사용할 수 있는 프로그램
wget으로 다운로드받아 /usr/local/bin 폴더에 rlwrap를 복사하고
sudo chmod 755 /usr/local/bin/rlwrap
실행권한 수정
sudo su - oracle
oracle 사용할 사용자(oracle)로 계정을 변경하고
cp /etc/skel/.bash* .
.bash* 파일들 복사해온다
$ cat -n /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
1 export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
2 export ORACLE_SID=XE
3 export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
4 export PATH=$ORACLE_HOME/bin:$PATH
cat << EOF >> .bashrc
source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
alias sqlplus='rlwrap sqlplus'
EOF
.bashrc 파일에 오라클 env 쉘파일 경로와 alias 설정 추가
source .bashrc
.bashrc 리로드, 오라클 env 쉘파일 내의 환경변수들이 설정됨
set | grep -i oracle
해당 명령어로 환경변수들 확인 가능
삭제
sudo /etc/init.d/oracle-xe stop # 서비스 데몬 중지
sudo rpm -e oracle-xe # 패키지 삭제
sudo userdel -r oracle # oracle 사용자 삭제
sudo rm -rf /u01 # oracle 설치 디렉터리 삭제
sudo swapoff /swapfile # swapfile 을 메모리에서 제거하고 스왑파일 삭제
sudo rm -f /swapfile
설치 스크립트를 만들때 oracle로 변경하여 진행하여야 하는 코드는 넣을 수 없음에 주의.
oracle 계정으로
scott.sql.txt 를 다운로드 받아온다
( DEPT, EMP, BONUS, SALGRADE 등 테이블 생성과 레코드 생성 등등이 담긴 실습용 스크립트 파일 )
sqlplus system/oracle
관리자로 접속
@scott.sql.txt
해당 파일을 실행(@)해준다
conn scott/TIGER
scott 사용자로 변경하고
show user
USER is "SCOTT"
현재 사용자 확인가능
jdbc 오라클 버전 드라이버를 설치하기
리눅스의 드라이버 위치 (오라클XE 깔 때 같이 다운로드됨)
/u01/app/oracle/product/11.2.0/xe/jdbc/lib/ojdbc6.jar
(윈도우일 경우 C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6.jar )
cp /u01/app/oracle/product/11.2.0/xe/jdbc/lib/ojdbc6.jar ~tomcat/lib/
복사
해당 드라이버가 있어야 db에 접근 가능
복사후 systemctl restart tomcat.service 재실행
( * 오라클11g는 se리눅스 이전버전이라, sudo setenforce 0 로 se리눅스를 비활성화해야 정상실행된다
SE리눅스 확인 : getenforce 가 Disabled거나 Permissive면 비활성화
sestatus에서 Current mode가 Disabled거나 Permissive면 비활성화 )
DB 설계
- 제약 조건 설정 형식
1) 인라인 : 컬럼명 데이터타입 제약조건
ex)
CREATE TABLE [테이블명] (
number NUMBER(4) CONSTRAINT jumsu_no_pk PRIMARY KEY
name VARCHAR2(30) NOT NULL
(...)
);
2) 아웃오브라인 : 컬럼명 데이터타입,
CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명) -- PRIMARY KEY
CONSTRAINT 제약조건명 FOREIGN KEY(자식 테이블의 적용할 컬럼명) REFERENCES 참조테이블(부모 테이블의 참조할 컬럼명) -- FOREIGN KEY
ex)
CREATE TABLE [테이블명] (
number NUMBER(4)
name VARCHAR2(30) NOT NULL
(...)
CONSTRAINT jumsu_no_pk PRIMARY KEY ([number]),
);
Oracle SQL Developer
통합개발환경IDE
오라클 데이터베이스와 상호작용하고 관리하는 데 사용하는 프로그램
실습에서는 비설치형으로 사용 sqldeveloper-23.1.1.345.2114-x64.zip
JAVA 11 버전으로 되어있고 비설치형은 JAVA 11이 내장되어 있음
기능
1) SQL 편집기
2) 쿼리, 스크립트 실행
3) 데이터베이스 객체 관리
4) 데이터 모델링
5) 팀 협업 및 버전 관리
6) 보고서 및 데이터 시각화
7) 플러그인 지원
포트는 netstat -na|findstr 1521 등으로 cmd에서 체크하여 비어있는 포트로 설정
윈도우에서 리눅스 서버의 db로 터널링으로 접속할 예정
터널링 사용자 : tunneluser
cmd
ssh -L 1523:localhost:1521 tunneluser@192.168.100.10 -f -N
-L은 로컬포트포워딩을 의미한다 1521은 리눅스 서버 포트
만들어놓은 사용자를 통해 접속하면
리눅스 서버에 만들어놓은 db가 보인다
오라클 데이터베이스
유닉스 환경에서 가장 널리 사용됨
관계형 데이터베이스 모델
현대에 가장 많이 사용하는 관계형 데이터베이스의 바탕
데이터를 테이블 형식으로 구조화하고 테이블 간의 관계를 정의
Oracle, DB2, MSSQL, MySQL, MariaDB, SQLite, Cubrid 등
비 관계형 데이터베이스 모델
NoSQL(Not Only SQL) 데이터베이스 시스템으로 구현
키(Key)와 값(Value)형태로 저장되고 키를 사용해 데이터 관리 및 접근
MongoDB, Cassandra, Redis, HBase 등
언어
데이터 정의 언어(DDL, Data Definition Language) : 데이터베이스 구조 정의, 테이블 생성수정삭제 등
데이터 조작 언어(DML, Data Manipulation Language) : 데이터 조작
데이터 제어 언어(DCL, Data Control Language) : 보안, 무결성, 복구 등 보안과 권한설정 관리
Oracle https://www.oracle.com/
MySQL https://www.oracle.com/kr/mysql/
MariaDB https://mariadb.org/
문자데이터
VARCHAR2 : 일정하지 않은 값(가변길이) 최대 4000byte (앞에 N이 붙으면 유니코드)
CHAR : 일정한 값(고정길이) 최대 2000byte (앞에 N이 붙으면 유니코드)
LONG 최대 2GB 가변길이
CLOB 대용량 최대 4GB (앞에 N이 붙으면 유니코드)
한글1글자는 utf-8일 경우 3Byte
숫자형 데이터
NUMBER 최대 22Byte
FLOAT NUMBER의 하위타입. 최대 22Byte
날짜데이터
DATE 연월일시분초
TIMESTAMP 연월일치분초 + 밀리초
기본지식
테이블
생성 CREATE TABLE 테이블명
구조확인 DESC 테이블명
삭제 DROP TABLE 테이블명
데이터
데이터저장 INSERT INTO 테이블명 VALUES(값 [, ...])
데이터조회 SELECT 컬럼명 FROM 테이블명
데이터삭제 DELETE FROM 테이블명
데이터수정 UPDATE 테이블명 SET 컬럼명=값
모든테이블확인
SELECT * FROM TAB;
윈도우의 SQL Developer에서
데이터를 저장, 삭제, 수정 등 작업을 한뒤 COMMIT 해야 리눅스의 DB에 반영된다.
오라클 10G부터 휴지통recyclebin이 존재하며 show recyclebin 명령어로 볼 수 있다
show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
------------- ------------------------------ ----------- -------------------
EMP2 BIN$I8skKbVqCGzgYAB/AQATKA==$0 TABLE 2024-10-06:16:49:17
복원형식
flashback table 테이블명 to before drop;
휴지통으로 넣지 않고 바로 완전삭제하는 방법
drop table 테이블명 purge;
휴지통의 삭제된 테이블 완전삭제
purge recyclebin;
+ 리눅스에서 확인시 sql 데이터가 많아서 가로줄이 잘릴때 늘릴수있다
set linesize 200;
복습
JdbcTest2의 내용은 오라클 드라이버를 로딩하는 것이다
Class.forName("oracle.jdbc.driver.OracleDriver");
java -cp .:/usr/share/tomcat/lib/ojdbc6.jar JdbcTest2
=> . 현재디렉터리와 드라이버파일의 위치로 설정한다 구분은 콜론:으로 한다
java JdbcTest2
현재디렉터리에서 드라이버파일을 찾는다
-cp는 --class-path의 축약어이다
외부라이브러리를 포함하려면 lib(라이브러리명)으로 포함한다
export CLASSPATH=.::/usr/share/tomcat/lib/ojdbc6.jar
환경변수에 세팅해주면 현재디렉터리에 드라이버 파일이 없어도 java JdbcTest2 로 실행가능