Database/SQL
-
[SQL] 명령어2023.03.17
-
[SQL] SQL문 실행 원리2023.03.13
-
[SQL] DDL / DML / DCL2023.03.10
[SQL] 명령어
1. 유저 조회
1. 현재 유저 조회
SQL> SHOW USER;
2. DBA 권한으로 현재 유저들의 리스트를 확인
SQL> select username from dba_users;
3. 생성 된 계정 확인
> select * from dba_users;
> select * from all_users;
1.1 Role 조회
select role from dba_roles;
1.2 유저 생성 및 테이블스페이스 지정
create user 유저명 identified by 패스워드 default tablespace 테이블스페이스명;
GRANT 권한명 TO 유저명;
ex) grant DBA, RESOURCE, CONNECT to test2;
2. 테이블스페이스
1. 유저의 테이블스페이스 변경
ALTER USER 유저 DEFAULT TABLESPACE 변경할 테이블스페이스;
2. 생성 된 테이블 리스트 조회
> select table_name from tabs;
'Database > SQL' 카테고리의 다른 글
[SQL] SQL문 실행 원리 (0) | 2023.03.13 |
---|---|
[SQL] DDL / DML / DCL (0) | 2023.03.10 |
[SQL] SQL문 실행 원리
1. Parsing 파싱
- SQL문에는 처리 방법이 적혀 있지 않기 때문에 처리 방법을 생성할 필요가 있음
- 처리 방법을 공유 풀에 캐시 해두고 재활용 하기 위함
- SQL문 처리 횟수와 처리 시간을 줄여 성능을 향상 시키기 위함
- 오라클은 해시 알고리즘을 사용해 SQL문 마다 ID를 생성
- SQL 문을 문자열로 해시 함수에 입력하고 출력된 해시 값을 SQL문의 ID로 사용
- 문자열로 입력 받기 때문에 대문자와 소문자를 구별하여 해시 값이 달라짐
1. Syntax Check (문법 검사)
: 키워드(SELECT, FROM, WHERE..) 검사
2. Semantic Check (의미 검사)
: 테이블, 컬럼등의 사용자마다 다른 부분 검사
-> 다른 부분이 없다면 오류
3. Shared Pool Check (lib. 캐시 확인)
: SQL 또는 PL/SQL 문장 결과가 Lib. cache* 내에 있는지 조회
-> 있으면 Soft Parse → Execution, 없으면 Hard Parse → Optimization
3.1 Optimization (≒ 네비)
: Data Dictionary 등을 참조해서 실행계획 생성
3.2 Row Source Generation
: 3.1 단계에서 가장 좋은 계획 선택
4. Execution (수행)
+ Optimizer
= Parser(파서) / SQL문을 분석하고 최적의 '실행계획' 을 생성하는 기능
조인에서 어느 테이블을 먼저 읽어야 하는지, 어떤 인덱스를 실행시켜야 좋은지 등을 판별 (척도 RBO(Rule Base Optimizer) / CBO(Cost Based Optimizer*)
*RBO - Server Process가 실행 계획을 세워달라고 요청이 오면 미리 정해놓은 규칙 사용
CBO - Data Dictionary 내용 참고하여 판별 / 10g 하위 버전은 Data Dictionary 자동으로 업데이트 X
* Library Cache - 해시구조로 관리 - SQL 쿼리마다 해시값을 매핑해서 저장 |
2. 처리 단계
- Parse(구문 분석) : 실행계획을 세우고 가장 좋은 실행계획을 선택하기 위한 과정
- Bind(값 치환) : 같은 쿼리문을 줄이는 과정
Hard Parse를 줄여주어서 성능 향상에 도움
cf) PGA에서 Bind 변수 저장 하는 곳 = Persistent Area
- Execute(실행) : Data File에서 원하는 데이터를 Buffer Cache로 복사해오는 과정 (∵ Server Process가 데이터 조회 가능)
- Fetch(인출) : Block 단위로 복사된 데이터에서 원하는 데이터만 뽑아 가는 과정
+ DML - UPDATE (SELECT 제외한 DML)
Parse -> Bind → Redo Log Buffer에 기록 → Undo Segment에 기록 → DB Buffer Cache의 실제 데이터 변경
1. Execute 과정에서 서버프로세스는 데이터의 변경 내역을 Redo Log Buff.에 기록
2. Undo Segment에 이전 데이터 기록
3. Data Buffer Cache의 내용 변경
'Database > SQL' 카테고리의 다른 글
[SQL] 명령어 (0) | 2023.03.17 |
---|---|
[SQL] DDL / DML / DCL (0) | 2023.03.10 |
[SQL] DDL / DML / DCL
DDL (Data Definition Language)
: 데이터 정의어 - 데이터 구조 or 스키마 변경
- 테이블과 같은 데이터 구조(스키마)를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함.
CREATE | 객체 생성 | |
ALTER | 구조 변경 테이블 수정 (컬럼추가/수정, 제약조건 추가/삭제/활성화/비활성화) |
> ALTER TABLE 테이블명 ADD (..); > ALTER TABLE 테이블명 MODIFY (..); |
DROP | 객체 삭제 테이블 구조 및 모든 행 삭제 |
> DROP TABLE 테이블명 [CASCADE CONSTRAINTS]; --제약조건 삭제 |
TRUNCATE | 테이블의 구조는 남기고 안의 데이터만 삭제 테이블 초기화 |
|
RENAME | 객체 이름 변경 | |
COMMENT | 테이블 또는 컬럼에 주석 추가 |
- 실행 시 자동 commit
- DDL은 데이터 구조 변경 / DML은 데이터 조작(DELETE...)
- 컬럼이 NULL이거나 테이블에 데이터가 없을 때, 컬럼의 크기 축소 및 데이터 타입 변경 가능
- 컬럼에 NULL이 없을 때만 NOT NULL 제약 조건 추가 가능
⭐ DML (Data Manipulation Language)
: 데이터 조작어 - 데이터 값 변경
- 입력, 수정, 삭제
SELECT | 데이터 조회 | - ALL : 기본 옵션. 중복되는 데이터도 모두 출력 - DISTINCT : 중복된 데이터가 있는 경우 1건만 출력 |
INSERT | 데이터 삽입 | |
UPDATE | 데이터 수정 | |
DELETE | 데이터 삭제 | |
MERGE | UPSERT(UPDATE + INSERT) 작업 데이터가 테이블에 존재하지 않으면 INSERT / 존재하면 UPDATE를 수행 |
|
LOCK TABLE | 테이블 잠금 |
DCL (Data Control Language)
: 데이터 제어어 - 접속 권한 변경
GRANT | 특정 작업에 대한 수행 권한 부여 |
REVOKE | 특정 작업에 대한 권한 회수 |
TCL (Transaction Control Language)
: DCL에서 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어
COMMIT | |
ROLLBACK | ROLLBACK TO [savepoint] ) |
SAVEPOINT | (≒ base line, > SAVEPOINT [ ];) |
'Database > SQL' 카테고리의 다른 글
[SQL] 명령어 (0) | 2023.03.17 |
---|---|
[SQL] SQL문 실행 원리 (0) | 2023.03.13 |