그림 10 - 22 테이블 스페이스 생성 스크립트 |
---|
{CODE:SQL} |
CREATE TABLESPACE tablespace
DATAFILE filesec , filespce...
[AUTOEXTEND filespec filespec ON
[NEXT integer K]
[MAXSIZE [UNLIMITED | integer K]
DEFAULT Storage storage_clause
[ONLINE | OFFLINE
{CODE} * tablespace : 생성하고자 하는 테이블 스페이스명을 기술한다. * filespec : 시스템 디렉토리에 만들고자 하는 테이터파일명을 기술한다. 데이터파일은 여러 개를 기술할 수 있다. * AUTOEXTEND : 해당 데이터파일의 용량이 모두 사용되면 데이터파일의 크기를 자동으로 증가 시킨다. * STORAGE : 테이블 스페이스의 저장 옵션을 지정한다. * Online / OFFLINE : 테이블 스페이스를 사용할 것인지 사용하지 않을 것인지 지정한다. |
{CODE:SQL}
CREATE TABLESPACE TS_TEST01
DATAFILE '/ORA08/ORADATA/DB1/DF_TEST.dbf' SIZE 500M
DEFAULT STORAGE(
INITIAL 50K
NEXT 50K
MINEXTENTS 10
MAXEXTENTS 50
PCTNCREASE 0);
{CODE}
{CODE:SQL}
SQL> SELECT TABLESPACE_NAME, FILE_NAME, BYTES
2 FROM DBA_DATA_FILES
3 ORDER BY TABLESPACE_NAME, FILE_NAME;
TABLESPACE_NAME FILE_NAME BYTES
TABLESPACE_NAME FILE_NAME BYTES
14 개의 행이 선택되었습니다.
{CODE}
그림 10 - 23 테이블 스페이스 변경 |
---|
{CODE:SQL} |
ALTER TABLESPACE tablespace
DATAFILE filespec , filespec...
[AUTOEXTEND FILESPEC filespec ON]
[NEXT integer K]
{MAXSIZE [UNLIMITED | integer K }
DEFAULT STORAGE storage+clause
ONLINE
{CODE} * tablespace : 변경하고자 하는 테이블 스페이스명을 기술한다. * filespec : 시스템 디렉토리에 만들고자 하는 테이터파일명을 기술한다. 테이터파일은 여러 개를 가술할 수 있다. * filename : 이미 존해하는 데이터파일의 이름을 다른 이름으로 변경한다. |
100M 추가 |
---|
{CODE:SQL} |
ALTER TABLESPACE TS_TEST01T
ADD DATAFILE '/ORA8/ORADATA/DB1/DF_TEST02.dbf' SIZE 100M
DEFAULT STORAGE (INITIAL 10K
NEXT 10K
MINEXTENTS 5
MAXEXTENTS 5
PCTINCREASE 0 )
{CODE} | 변경 |
---|---|
{CODE:SQL} |
ALTER TABLESPACE TS_TEST01
RESIZE DATAFILE '/ORA8/ORADATA/DB1/DF_TEST02.dbf' SIZE 1G
{CODE} |
삭제 |
---|
{CODE:SQL} |
DROP TABLESPACE tablespace
[ INCLUDING CONTENTS CASCADE CONSTRAINTS]
{CODE} * tablespace : 삭제하고자 하는 테이블 스페페이스명을 기술한다. * INCLUDING CONTENTS : 테이블 스페이스 내에 존재하는 모든 ( 테이블, 인덱스 등)도 같이 삭제된다. * CASCADE CONSTRAINTS : 다른 테이블 스페이스와 연결된 참조 무결성도 같이 삭제된다. * DBA_DATA_FILES : 데이터 사전에서 데이터파일이 사용중인 조회한 수 존재하지 않으면 삭제도록한다. 만약 계속 사용중인 데이터파일을 삭제한다면 데이터베이스가 정상적으로 운영된다 하더라도 삭제된 데이터파일에서 데이터를 검색하면 에러가 발생한다. 또한 데이터베이스르 종료시켰다가 다시 기동하면 데이터파일 깨짐 에러가 발생한다. |
테이블 스페이스 삭제 와 데이터파일 삭제 |
---|
{CODE:SQL} |
1) DROP TABLESPACE TS_TEST01;
2) /ORA8/ORADATA/DB1 디렉토리에서 DF_TEST01.DBF 파일 삭제
{CODE} |
테이블 생성 |
---|
{CODE:SQL} |
CREATE TABLE [schema.]table
( { column datatype DEFAULT expr column_constraint ...
table_constraint} [, { column datatype DEFAULT expr column_constraint ... | table_constraint} ]...) [ | PCTFREE integer] PCTUSER integer INITRANS integer MAXTRANS integer TABLESPACE tablespace STORAGE storage_clause [ PARALLEL ( [DEGREE { integer | DEFAULT } ] [ INSTANCES { integer | DEFAULT } ] ) | NOPARALLEL ] [ CACHE | NOCACHE ] | {CLUSTER cluster (column , column ...)] ] [ ENABLE enable_clause | DISABLE disable_clause ] ... { AS subquery] |
{CODE} * table : 생성하고자 하는 테이블명을 기술한다. * column : 컬럼명을 기술한다. * datatype: 컬럼의 데이터타입을 기술한다. * DEFAULT : 기본값을 지정한다. * column_constraint : PK, FK를 기술한다. * STORAGE : 테이블의 저장 옵션을 지정한다. * PARALLEL : CPU가 여러 개인 OS에서 오라클이 쿼리(query)를 실행할 때 초기 파라미터에 PARALLEL_THREADS_PER_CPU 1보다 크게 설정되어 있으면 병렬로 여러 개의 CPU를 이용할것인지 지정한다. 이용할 경우 쿼리 속도는 빨라진다. |
예제 다음 모델을 이용하여 제품 테이블을 생성하는 DDL 문장을 작성하라( PK는 ITEMCD고, 테이블 스페이스는 TS_TEST01, INITIAL : 10M, NEXT: 1M, PCTINCREAS: 0이다.)
그림 10-25( p. 459 ) |
---|
{CODE:SQL} |
1) PRIMARY KEY를 개별 컬럼에서 지정
CREATE TABLE ITEM (
ITEMCD VARCHAR2(10) PRIMARY KEY,
ITEMNM VARCHAR2(20) NULL,
QTY NUMBER(10) NULL,
PRICE NUMBER(10) DEFAULT 0 NULL,
COLOR VARCHAR2(10) NULL,
MADEDATE DATE NULL
) TABLESPACE TS_TEST01
STORAGE( INITIAL 10M NEXT 1M MINEXTENTS 0);
2) PRIMARY KEY를 컬럼 끝에 지정
CREATE TABLE ITEM (
ITEMCD VARCHAR2(10) NOT NULL,
ITEMNM VARCHAR2(20) NULL,
QTY NUMBER(10) NULL,
PRICE NUMBER(10) DEFAULT 0 NULL,
COLOR VARCHAR2(10) NULL,
MADEDATE DATE NULL,
CONSTRAINT ITEM_PK PRIMARY KEY( ITEMCD )
) TABLESPACE TS_TEST01
STORAGE( INITIAL 10M NEXT 1M MINEXTENTS 0);
{CODE} * TABLESPACE, STORAGE를 생략하면 사용자에게 할당한 기본 테이블 스페이스에 테이블이 생성된다. * NULL 허용 여부를 지정하지 않은 경우에는 기본적으로 NULL로 지정한다. |
{CODE:SQL}
1) USER_CODE 테이블 생성
CREATE TABLE USER_CODE (
ITEMCD VARCHAR2(10) NOT NULL,
ITEMNM VARCHAR2(20) NULL
CONSTRAINT ITEM_PK PRIMARY KEY( ITEMCD )
);
2) ITEM 테이블 생성
CREATE TABLE ITEM (
ITEMCD VARCHAR2(10) NOT NULL,
QTY NUMBER(10) NULL,
PRICE NUMBER(10) DEFAULT 0 NULL,
COLOR VARCHAR2(10) NULL,
MADEDATE DATE NULL,
CONSTRAINT ITEM_PK PRIMARY KEY( ITEMCD ),
CONSTRAINT ITEM_FK FOREIGN KEY( ITEMCD ) REFERENCES
USER_CODE( ITEMCD )
);
{CODE}
{CODE:SQL}
ALTER TABLE [schema.]table
[ADD ( { column datatype DEFAULT expr column_constraint ...
table_constraint} | ( { column datatype DEFAULT expr column_constraint ... | table_constraint} [, { column datatype DEFAULT expr column_constraint ... | table_constraint} ] ... ) } ] [MODIFY { column datatype DEFAULT expr column_constraint ... | (column datatype DEFAULT expr column_constraint ... [, column datatype DEFAULT expr column_constraint ...] ...) } ] PCTFREE integer PCTUSED integer INITRANS integer MAXTRANS integer STORAGE storage_clause DROP drop_clause ... [ALLOCATE EXTENT [( [SIZE inter [K | M] ] DATAFILE 'filename' INSTANCE integer )] [ PARALLEL ( [ DEGREE { integer | DEFAULT } ] [ INSTANCES { integer | DEFAULT } ] ) NOPARALLEL [ CACHE | NOCACHE ] [ ENABLE enable_clause DISABLE disable_clause ... |
{CODE}
{CODE:SQL}
1) ITEMNM 컬럼 NOT NULL로 변경
ALTER TABLE ITEM
MODIFY ( ITEMNM VARCHAR2(40) NOT NULL );
2) ITEMCLCD 컬럼 추가
ALTER TABLE ITEM
ADD( ITEMCLCD VARCHAR2(20) DEFAULT '01' NULL );
{CODE}
{CODE:SQL}
1) PRIMARY KEY 삭제( DROP )
ALTER TABLE ITEM
DROP PRIMARY KEY;
2) PRIMARY KEY 추가
ALTER TABLE ITEM
ADD( PRIMARY KEY (ITEMCLCD) );
{CODE}
그림 10-28 테이블 삭제 |
---|
{CODE:SQL} |
DROP TABLE [schema.]table
CASCADE CONSTRAINTS
{CODE} * 테이블만 삭제할 수도 있고, 테이블이 참조되는 참조 무결성 제약을 삭제할 수도 있다. * CASCADE CONSTRAINTS는 자시이참조되는, 즉 FK로 연뎔되어 있는 자식 테이블에 데이터가 있음에도 자신의 테이블을 삭제할 수 있는 것을 말한다. 연결된 자식 테이블의 데이터를 지우거나 자식 테이블을 삭제하지 않을을 기억하자 * 참조되는 테이블의 데이터가 있는데, 'DROP TABLE'만 할 경우 참조 무결성 제약 위반 에러가 발생한다. |
{CODE:SQL}
1) FOREIGN KEY에 참조되지 않을 때
DROP TABLE ITEM;
2) FOREIGN KEY에 참조될 때
DROP TABLE ITEM CASCADE CONSTRAINTS;
{CODE}
그림 10-29 테이블 이름변 경 |
---|
{CODE:SQL} |
RENAME old TO new
{CODE} * old: 변경하고자 하는 오브젝트( 테이블, 뷰, 시퀸스 등)를 기술한다. * new: DBMS에서 사용허지 않고 이미 등록되지 않은 새로운 이르을 지정한다. |
{CODE:SQL}
RENAME ITEM TO ITEM1;
{CODE}
그림 10-30 뷰 생성 |
---|
{CODE:SQL} |
CREATE OR REPLACE FORCE VIEW view
[(alias[alias].)]
AS subsquery
[WITH CHECK OPTIION CONSTRATINT constraint]
WITH READ ONLY
{CODE}
{CODE:SQL}
CREATE VIEW V_ORDER AS
SELECT ORDERNO, ITEMCD, ITEMNM, PRICE, QTY
FROM ORDERITEM
WHERE PRICE > 10000;
{CODE}
{CODE:SQL}
CREATE VIEW V_ORDER AS
SELECT A.ORDERNO, A.ORDERDATE, A.CUSTNM, A.ORDERTYPE
, B.ITEMCD, B.ITEMNM, B.PRICE, B.QTY
FROM ITEM A, ORDERITEM B
WHERE A.ORDERNO = B.ORDERNO
{CODE}
{CODE:SQL}
CREATE VIEW V_ORDERTYPE_SUM AS
SELECT A.ORDERTYPE, SUM( B.PRICE )
FROM ITEM A, ORDERITEM B
WHERE A.ORDERNO = B.ORDERNO
GROUP BY A.ORDERTYPE
{CODE}
그림 10-32 뷰 삭제 |
---|
{CODE:SQL} |
DROP VIEW[SCHEMA.]VIEW
{CODE} |
주문 뷰( V_ORDER )를 삭제하라 |
---|
{CODE:SQL} |
DROP VIEW V_ORDER
{CODE} |
오라클에서 트랜잭셔을 종료시키는 경우 |
---|
{CODE:SQL} |
{CODE} |
그림 10-34 COMMIT |
---|
{CODE:SQL} |
COMMIT WORK
[ COMMENT 'text'
FORCE 'text', integer } |
{CODE} |
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 5건
{CODE}
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 5건
{CODE}
{CODE:SQL}
INSERT INTO ODER VALUES( 2001, '20020901', '이유진', '인터넷' );
{CODE}
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 6건
{CODE}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 5건
{CODE}
{CODE:SQL}
COMMIT;
{CODE}
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 6건
{CODE}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 6건
{CODE}
데이터베이스에 작업 내용을 취소하는 ROLLBACK
ROLLBACK문자으이 구성은 다음과 같다.
{CODE:SQL}
ROLLBACK WORK
[ TO SAVEPOING savepoint
FORCE 'text' ] |
{CODE}
예제 앞의 COMMIT 테스트 (6)에서 ROLLBACK을 실행한다.
{CODE:SQL}
ROLLBACK;
{CODE}
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 5건
{CODE}
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 5건
{CODE}
그림 10-36 SAVEPOINT |
---|
{CODE:SQL} |
SAVEPOINT savepoint
{CODE} |
예제 SAVEPOINT가 트랜젹션을 제어하는 것을 테스트해보자.
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 5건
{CODE}
{CODE:SQL}
INSERT INTO ODER VALUES( 2001, '20020901', '이유진', '인터넷' );
{CODE}
{CODE:SQL}
SAVEPOINT A;
{CODE}
{CODE:SQL}
INSERT INTO ODER VALUES( 2003, '20021201', '김철', '방문' );
{CODE}
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 7건
{CODE}
{CODE:SQL}
ROLLBACK TO A;
COMMIT;
{CODE}
데이터가 한 건 입력된 지점에 SAVEPOINT 'A' 가 지정되어 있었으모로 초기 데이터 건수 5건에 1건을 더하여 6건이 되었다.
{CODE:SQL}
SELECT COUNT(*) FROM ODER;
COUNT(*) : 6건
{CODE}
그림 10-37 SET TRANSACTION |
---|
{CODE:SQL} |
SET TRANSACTION
{ READ ONLY
READ WRITE | USE ROLLBACK SEGMENT rollback_segment } |
{CODE}
예제 오라클 데이터베이스의 PL/SQL 문장을 만들어 테스트해보자.
{CODE:SQL}
DECLARE
RCNT NUMBER;
BEGIN
SET TRANSACTION READ ONLY;
SELECT COUNT(*) INTO RCNT FROM ITEM;
COMMIT;
END;
{CODE}
{CODE:SQL}
DECLARE
RCNT NUMBER;
BEGIN
SET TRANSACTION READ ONLY;
SELECT COUNT(*) INTO RCNT FROM ITEM;
DELETE FROM ITEM;
COMMIT;
END;
{CODE}