[DB] 오라클 구조, sqlplus.exe 사용법, 테이블 생성, 레코드 추가

*Oracle 구조

server process : 접속자 관리, 쿼리문 검증. tnslistener(server socket의 일을 한다.) : 1521 port를 열어 놓는다. server instance(Oracle service)

cache : 접속자 session redolog : 로그(메모리상이므로 휘발성) 공유 풀 : 쿼리를 빠르게 실행시키기 위해서 실행계획을 세운다.
 
client process
sqlplus.exe : DB server에 접속, 쿼리작성, 실행 및 결과를 보여준다.
file 영역 : table등이 저장되는 파일
 
*.DBF : 테이블 저장 *.LOG : log *.CTL : schema 파일
 
 
 
*sqlplus.exe 사용법
prompt > set path : Orcle 설치 경로 view
prompt > sqlplus "ID/PW" : sqlplus 접속("/as sysdba" -> sys로 접속. "" -> 공백이 들어있기 때문에 범위를 지정해준 것이다.)
이때 prompt(경로) -> shell(sql)로 전환
conn 계정명 : 계정 전환
show user : 현재 접속중인 계정을 알려준다.
desc 테이블명 : 특정 테이블에 어떤 칼럼이 있는지 조회한다.(Describe)
 
*연습용 계정(scott) 사용하기(ver.11부터는 연습용 계정이 잠겨 있으므로 락 해제 후 사용하여야 한다.)
- 계정 풀기는 관리자 계정만 가능하다.
- alter user 계정명 account unlock;
 
*재가동
- 수동
제어판 - 관리도구 - 서비스 - OracleOrDb11g_home1TNSListener(접속 불량) 시작/중지
제어판 - 관리도구 - 서비스 - OracleServiceORCL(쿼리 불량) 시작/중지
- 관리자 모드
Oracle Service 재가동 : shutdown abort (종료), startup(시작)
tnslistener 재가동 : OS 관리자권한을 가진 유저만 가능하다. lsnrctl.exe 사용한다.
prompt > lsnrctl(listener control) 접속. stop(종료), start(시작)
     *이때, cmd실행시 관리자모드로 실행하기로 해야 한다.(권한문제)
 
+ 이것만은 알고 가
- select tname from tab; 테이블 존재 여부 알아보기
- dos는 single task이다.
- shell > edit 경로/파일명.sql or ed 경로/파일명.sql; 편집기
- -- 한 줄 주석(--' ' <-공백 있음. 이때 주석의 앞, 뒤 모두 주석처리된다.), /*여러 줄 주석*/
- sql문 저장하여 사용하는 법
     edit를 사용하여 저장할 파일 생성 후 파일에 실행할 sql문을 적어준 후 저장한다.
     그 후 shell에서 @파일명;을 입력해주면 파일에 저장되어 있는 sql문이 실행된다.
- 이름 명명은 _로 연결하여 사용한다.
     
 
*테이블 생성

create table 테이블명(Oracle에서는 한글명명 가능)(
     컬럼명 데이터형(크기) constraint 제약사항명 제약사항,  // column 단위(level) 제약사항
     ...
     constraint 제약사항명 제약사항 (적용컬럼),  // 테이블 단위 제약사항
     ...
);

- 생성된 테이블은 DB tablespace에 저장된다.(기본 tablespace -> users)
- queury문은 대소문자를 구분하지 않는다. 하지만 내부 처리는 모두 대문자로 처리된다.
- queury문의 끝에는 ';'을 붙인다.
 
* Data Type
값의 종류  데이터형  기본크기  최대크기  사용 예 
 문자열 char(고정길이)  2000  컬럼명 char(크기) 
varchar2(가변길이)  4000  컬럼명 varchar2(크기) 
 숫자 number  22 정수 : 컬럼명 number(크기) 
실수 : 컬럼명 number(전체 숫자의 수, 실수의 숫자의 수) 
 날짜 date   지정불가 컬럼명 date 
긴 문자열  clob   4Gbyte 컬럼명 clob
긴 숫자 long   2Gbyte 컬럼명 long
파일  blob  4Gbyte 컬럼명 blob 
- 고정길이 : 선언한 크기가 변경되지 않는 데이터형. 검색의 속도가 빠르다. 따라서 키(ex.주민등록번호, 카드번호)로 사용하는 것이 좋다. 그러나 설정한 크기보다 적게 들어가도 설정된 크기를 유지한다. 따라서 메모리 공간의 낭비를 가져올 수 있다.
- 가변길이 : 선언한 크기가 입력된 데이터에 따라 유동적으로 변경된다. 검색의 속도가 느리다. 크기가 다른 문자열 데이터를 저장하기에 좋다. 데이터가 설정한 크기보다 적게 들어가면 그 크기에 맞춰서 줄어든다. 따라서 저장공간의 효율성이 좋다.
 
*레코드 추가
주가하는 컬럼명을 생략할 때
insert into 테이블명 valuse(추가할 값, , ,...);
     └ 문자, 문자열 모두 ''으로 감싸준다,
     └ 현재날짜 : sysdate
     └ 다른날 날짜 : 문자열로 '2014-10-05', 함수 to_date
- 주의 : 테이블 컴럼의 순서대로 값을 추가하여야 한다.
- 담점 : 어떤 컬림에 값이 들어가는지 알기 어렵다.
*추가하는 컬럼명을 명시할 때(명시되지 않은 컬럼에는 null(출력되지 않는다. 값이 있으나 숫자도 문자열도 아닌 사용할 수 없는 값. null은 연산되면 null이 나온다.)이 입력된다.
insert into 테이블명(컬럼명,,,) valuse(추가할 값, , ,...);
 
*내일 할 것
트랜잭션의 처리 : commit, 단순한 select, update, delete(truncate), drop