최신 버전 oracle23 깔고 virtual box 깔면 맥북 m1,m2에서도 편하게 oracle 사용이 가능하다.
1️⃣ START WITH
시퀀스 번호의 시작 값을 지정할 때 사용된다. 1부터 시작되는 시퀀스를 생성하려면 START WITH 1이라고 기술하면 된다.
2️⃣ INCREMENT BY
연속적인 시퀀스 번호의 증가치를 지정할 때 사용된다. 만일 1씩 증가하는 시퀀스를 생성하려면 INCREMENT BU 1이라고 기술하면 된다.
3️⃣ MAXVALUE n | NOMAXVALUE
MAXVALUE는 시퀀스가 가질 수 있는 최대값을 지정한다. 만일 NOMAXVALUE를 지정하게 되면 ASCENDING 순서일 경우에는 10^27승이고, DESCENDING 순서일 경우에는 -1로 설정됩니다.
4️⃣ MINVALUE n | NOMINVALUE
MINVALUE는 시퀀스가 가질 수 있는 최소값을 지정한다. 만일 NOMINVALUE을 지정하게 되면 ASCENDING 순서일 경우에는 1이고, DESCENDIGN 순서일 경우에는 10^26승으로 설정됩니다.
5️⃣ CYCLE | NOCYCLE
CYCLE은 지정된 시퀀스 값이 최대값까지 증가가 완료되게 되면 다시 START WITH 옵션에 지정한 시작 값에서 다시 시퀀스를 시작하도록 한다. NOCYCLE은 증가가 완료되게 되면 에러를 유발시킨다.
6️⃣ CACHE n | NOCACHE
CACHE는 메모리상의 시퀀스 값을 관리하도록 하는 것인데 기본 값은 20이다. NOCA-CHE는 원칙적으로 메모리 상에서 시퀀스를 관리하지 않는다.
-- 시퀀스 객체 생성하기
create sequence dept_deptno_seq
start with 10
increment by 10;
-- user_sequences의 테이블 구조 살피기
desc user_sequences;
-- 시퀀스 객체 정보 살피기
select sequence_name, min_value, max_value, increment_by, cycle_flag
from user_sequences;
-- 시퀀스 객체로부터 새로운 값 생성하기
select dept_deptno_seq.nextval from dual;
-- 시퀀스 객체로부터 현재 값 알아내기
select dept_deptno_seq.currval from dual;
-- 시퀀스 객체로부터 새로운 값 생성하기
select dept_deptno_seq.nextval from dual;
-- 시퀀스 객체 생성하기
create sequence sample_seq;
-- 시퀀스 객체로부터 현재 값 알아내기
select sample_seq.currval from dual;
-- 시퀀스 객체로부터 새로운 값 생성하기
select sample_seq.nextval from dual;
-- 시퀀스 객체로부터 현재 값 알아내기
select sample_seq.currval from dual;
-- 사원 번호를 자동으로 부여하기 위한 시퀀스 객체 생성하기
create sequence emp_seq
start with 1
increment by 1
maxvalue 100000;
-- 사원 정보 추가하기
insert into emp01
values(emp_seq.nextval, '홍길동', SYSDATE);
-- 사원 번호를 자동으로 부여하기 위한 시퀀스 객체 생성하기
create sequence emp_seq
start with 1
increment by 1
maxvalue 100000;
-- 사원 테이블 제거하기
drop table emp01;
-- 사원 테이블 생성하기
create table emp01(
empno number(4) primary key,
ename varchar(10),
hiredate date
);
-- 제약 조건 확인하기
select constraint_name, constraint_type, table_name
from user_constraints
where table_name in('EMP01');
-- 제약 조건이 부여된 컬럼 확인하기
select constraint_name, column_name, table_name
from user_cons_columns
where table_name in ('EMP01');
-- 사원 정보 추가하기
insert into emp01
values(emp_seq.nextval, '홍길동', SYSDATE);
insert into emp01
values(emp_seq.nextval, '강감찬', SYSDATE);
-- 사원 정보 조회하기
select * froom emp01;
-- 시퀀스 객체 정보 살피기
select sequence_name, min_value, max_value, increment_by, cycle_flag
from user_sequences;
-- 시퀀스 객체 제거하기
drop sequence dept_deptno_seq;
-- 시퀀스 객체 정보 살피기
select sequence_name, min_value, max_value, increment_by, cycle_flag
from user_sequences;
-- user_ind_dolumns 데이터 딕셔너리로 인덱스 확인하기
select index_name, table_name, columns_name
from user_ind_columns
where table_name in('EMP', 'DEPT');
-- 사원 테이블 제거하기
drop table emp01;
-- 사원 테이블 생성하기
create table emp01
as
select * from emp;
-- user_ind_columns 데이터 딕셔너리로 인덱스 확인하기
select table_name, index_name, column_name
from user_ind_columns
where table_name in ('EMP', 'EMP01');
create unique index index_name
on table_name (column_name);
-- 부서 테이블 제거하기
drop table dept01;
-- 빈 부서 테이블 생성하기
create table dept01
as
select * from dept where 1=0;
-- 부서 테이블에 데이터 추가하기
insert into dept01 values(10, '인사과', '서울');
insert into dept01 values(20, '총무과', '대전');
insert into dept01 values(30, '교육팀', '대전');
-- 부서 테이블에 데이터 조회하기
select * from dept01;
-- 고유 인덱스 지정하기
create UNIQUE index IDX_DEPT01_DEPNO
on dept01(deptno);
-- 이미 존재하는 고유 인덱스를 생성할 경우 오류가 발생하는 예
create UNIQUE index IDX_DEPT01_LOC
on dept01(loc);
-- 비고유 인덱스 생성하기
create index IDX_DEPT01_LOG
on dept01(loc);
-- 결합 인덱스 생성하기
create index idx_dept01_com
on dept01(deptno, dname);
-- user_ind_coluns 테이블로 인덱스가 지정된 컬럼 확인하기
select index_name, column_name
from user_ind_columns
where table_name in('dept01');
-- 함수 기반 인덱스 생성하기
create index idx_emp01_annsal
on emp01(sal*12);
-- user_ind_columns 테이블로 인덱스가 지정된 컬럼 확인하기
select index_name, column_name
from user_ind_columns
where table_name in('emp01');
create user tester2
identified by 1234;
grant connect, resource to tester2;
sys
-- 권한부여
grant connect, resource to tester2;
-- 권한 회수
revoke connect, resource from tester2;
-- 권한 부여
grant create session to tester2;
tester2
show user;
-- 테이블 생성하기
create table emp01(
empno number(4),
ename varchar2(10),
job varchar2(9),
depno number(2)
);
sys
grant create table to tester2;
-- sys로 접속하기
-- 사용자 생성과 권한 부여하기
create user tester3 identified by 1234;
grant create session to tester3
with admin option;
-- tester3 사용자로 접속하기
-- 권한 부여하기
grant create session to tester2;
-- sys로 접속하기
-- 사용자 생성과 권한 부여
create user tester4 identified by 1234;
grant create session to tester4;
-- tester4 사용자로 접속하기
-- 권한 부여하기
grant create session to tester2;
-- tester2 사용자로 접속하기
-- 테이블 조회하기
select * from dept;
-- tester1 사용자로 접속하기
-- 객체 권한 부여하기
grant select on dept to tester2;
-- 테이블 조회하기
show user
select * from dept;
-- tester1 사용자로 접속하기
-- tester 사용자가 다른 사용자에게 부여한 권한 정보 조회하기
select * from USER_TAB_PRIVS_MADE;
-- SELECT 권한을 철회하기
revoke select on dept from tester2;
-- tester1 사용자가 다른 사용자에게 부여한 권한 정보 조회하기
select * from USER_TAB_PRIVS_MADE;
-- 테이블 조회하기
select * from teester1.dept;
-- tester1 사용자로 접속하기
-- 권한 부여하기
grant select on tester1.dept to tester3
with grant option;
-- tester3 사용자로 접속하기
-- 권한 부여하기
grant select on tester1.dept to tester2;
-- tester1 사용자로 접속하기
grant select on tester1.dept to tester4;
-- 사용자 접속하기
-- 권한 부여하기
grant select on tester1.dept to tester2;
사용자가 데이터베이스에 접속 가능하도록 하기 위해서 다음과 같이 가장 기본적인 시스템 권한 8가지를 묶어 놓았다.
사용자가 객체(테이블, 뷰, 인덱스)를 생성할 수 있도록 하기 위해서 시스템 권한을 묶어 놓았다.
사용자들이 소유한 데이터베이스 객체를 관리하고, 사용자들을 작성하고 변경하고 제거할 수 있도록 하는 모든 권한을 가진다. 시스템 자원을 무제한적으로 사용하며, 시스템 관리에 필요한 모든 권한을 부여할 수 있는 강력한 건한을 보유한 롤이다.
-- sys로 접속하기
-- 사용자가 생성하여 접속하기
create user tester5 identified by 1234;
conn tester5@pdborcl/1234
-- sys로 접속하기
-- 권한 부여하기
grant connect, resource to tester5;
-- 테이블 조회하기
select * from tester1.dept;
-- sys로 접속하여 롤 생성하기
show user
-- 롤에 권한 부여하기
grant create session, create table, create view to mrole;
-- 사용자를 생성하여 롤 부여하기
create user tester6 identified by 1234;
grant mrole to tester6;
-- tester6 사용자로 접속해서 부여된 롤 확인하기
select * from user_role_privs;
-- sys로 접속하여 롤 생성하기
show user
alter session set container=PDBORCL;
create role mrole2;
-- 롤에 객체 권한 부여하기
grant select on dept to mrole2;
-- tester6에게 롤 부여하기
grant mrole2 to tester6;
-- tester6에게 부여된 롤 확인하기
select * from user_role_privs;
-- 테이블 조회하기
select * from tester1.dept;
-- 롤 확인하기
column role format A10
column owner format A10
column column_name format A15
column privilege format A15
select *
from role_tab_privs
where table_name in ('dept');
-- 부여된 롤 권한 확인하기
select * from user_role_privs;
-- 부여된 롤 회수하기
revoke mrole2 from tester6;
-- 부여된 롤 권한 확인하기
select * from user_role_privs;
-- 롤 확인하기
select * from user_role_privs
where granted_role like '%mrole%';
-- 롤 제거하기
drop role mrole2;
select * from user_role_privs
where granted_role like '%mrole%';
-- 롤 생성하기
CREATE ROLE DEF_ROLE;
-- 롤에 권한 부여하기
GRANT CREATE SESSION TO DEF_ROLE;
GRANT CREATE TABLE TO DEF_ROLE;
-- 롤에 객체 권한 부여하기
GRANT UPDATE ON dept TO DEF_ROLE;
GRANT DELETE ON dept TO DEF_ROLE;
GRANT SELECT ON dept TO DEF_ROLE;
-- 사용자 생성하기
CREATE USER USERA1 IDENTIFIED BY A1234;
CREATE USER USERA2 IDENTIFIED BY A1234;
CREATE USER USERA3 IDENTIFIED BY A1234;
-- 롤 부여하기
show user
GRANT DEF_ROLE TO USERA1;
GRANT DEF_ROLE TO USERA2;
GRANT DEF_ROLE TO USERA3;
-- 데이터 딕셔너리로 롤 확인하기
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE='DEF_ROLE';
SELECT * FROM ROLE_TAB_PRIVS WHERE ROLE='DEF_ROLE';
-- 롤 확인하기
SELECT * FROM USER_ROLE_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
-- 롤 부여하기
CREATE USER USERA4 IDENTIFIED BY A1234;
GRANT DEF_ROLE TO USERA4;
-- sys로 접속하기
show user
-- 테이블 생성하기
create table systbl(
ename varchar2(20)
);
-- 테이블 생성하기
INSERT INTO SYSTBL VALUES('전수빈');
INSERT INTO SYSTBL VALUES('정원지');
SELECT * FROM SYSTBL;
-- 객체 권한 부여하기
GRANT SELECT ON. SYSTBL TO tester1;
-- 테이블 조회하기
SELECT * FROM SYSTBL;
-- 테이블 조회하기
SELECT * FROM sys.SYSTBL;
-- 동의어 생성하기
CREATE SYSNONYM PRISYSTBL FOR sys.SYSTBL;
SELECT * FROM FRISYSTBL;
-- 동의어 생성하기
alter session set container=PDBORCL;
GRANT CREATE SYNONYM TO tester1;
-- 동의어 생성하기
CREATE SYNONYM PRISYSTBL FOR sys.SYSTBL;
SELECT * FROM PRISYSTBL;
-- 롤을 생성하여 권한 부여하기
CREATE ROLE TEST_ROLE;
GRANT CONNECT, RESOURCE, CREATE SYNONYM TO TEST_ROLE;
GRANT SELECT ON tester1.DEPT TO TEST_ROLE;
-- 사용자 생성하기
CREATE USER USERB1 IDENTIFIED BY B1234;
CREATE USER USERB2 IDENTIFIED BY B1234;
-- 롤 부여하기
GRANT TEST_ROLE TO USERB1;
GRANT TEST_ROLE TO USERB2;
-- 공개 동의어 생성하기
alter session set container=PDBORCL;
CREATE PUBLIC SYNONYM PubDEPT FOR tester1.DEPT;
-- USERB1과 USERB2 계정으로 접속하여 DEPT로 테이블 조회한다.
CONN USERB1@pdborcl/B1234
SELECT * FROM PUBDEPT;
CONN USERB2@pdborcl/B1234
SELECT * FROM PUBDEPT;
-- 비공개 동의어의 제거 실피
CONN USERB2@pdborcl/B1234
DROP SYNONYM DEPT;
-- 비공개 동의어의 제거 실패
alter session set container=PDBORCL;
DROP SYNONYM DEPT;
-- 비공개 동의어의 제거
CONN USERB1@pdborcl/B1234
DROP SYNONYM DEPT;
-- 공개 동의어의 제거 실패
CONN USERB1@pdborcl/B1234
DROP SYNONYM PUBDEPT;
-- 공개 동의어의 제거 실패
alter session set container=PDBORCL;
DROP SYNONYM PUBDEPT;
-- 공개 동의어의 제거
DROP PUBLIC SYNONYM PUBDEPT;
SQL> STARTUP
→ PARAMETER FILE (initSID.ora) READ
SGA 구성. BACKGROUND PROCESS를 생성.
→ CONTROL FILE READ
일반적인 DATABASE 정보 확인 DATAFILE, REDOLOG FILE의 위치와 상태 동기화 정보(SCN) 확인
DATABASE READ, WRITE 가능
SELECT 주문일자, 상품, 수량 FROM 주문 WHERE 주문일자 = ‘20070101’ AND 수량 > 1000 ;
주문일자와 수량 컬럼에 각각 인덱스가 걸려있는 경우
SELECT 주문일자, 상품, 수량 FROM 주문 WHERE 주문일자 = ‘20070101’ AND 수량 > 1000 ;
주문일자와 수량 컬럼에 각각 인덱스가 걸려있는 경우