티스토리 툴바


블로그 이미지
콩닥소년

태그목록

공지사항

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

오라클페이지나누기

2008/01/18 09:28 | Posted by 콩닥소년
SELECT * FROM SP_BOARD board_num WHERE board_num IN
( SELECT board_num FROM ( SELECT board_num, rownum AS sq
  FROM ( SELECT board_num FROM SP_BOARD
  ORDER BY board_num DESC ) )
  WHERE sq > 0 AND sq <= 10 )
  ORDER BY board_num DESC;


board_num 오토 넘이다.. 즉 자동 증가 값임... 1에서 부터 시작 됨...

기본은 이것임...


위와 같은 TABLE을 가정하여 페이지 나누는것을 테스트한다.

-- id를 기준으로 페이지 나누는 것은 무리가 있다.
SELECT id, title FROM TempTextT
 ORDER BY id DESC;


-- rownum이라는 시스템이 제공하는 필드가 일련번호를
 제공하고 있다.
SELECT rownum, id FROM TempTextT;


-- id기준으로 정렬하니 rownum도 같이 흩어진다.
SELECT rownum, id FROM TempTextT
  ORDER BY id DESC;


-- 서브쿼리를 이용하여 먼저 id로 정렬한 뒤에 그 결과에
  rownum을 붙여주었다.
SELECT id, rownum FROM ( SELECT
 id FROM TempTextT
  ORDER BY id DESC );


-- 그 rownum을 하나의 필드로 만들어서 ( 서브쿼리 이용 )
 5개의 단위로 이루어진 첫 페이지를 나누기
SELECT id FROM ( SELECT id, rownum AS sq
 FROM ( SELECT id FROM TempTextT
 ORDER BY id DESC ) )
 ORDER BY sq DESC;

SELECT id FROM ( SELECT id, rownum AS sq
  FROM ( SELECT id FROM TempTextT
  ORDER BY id DESC ) )
  WHERE sq > 0 AND sq <= 5;


-- 그 rownum을 하나의 필드로 만들어서 ( 서브쿼리 이용 )
 5개의 단위로 이루어진 두번째 페이지를 나누기
SELECT id FROM ( SELECT id, rownum AS sq
  FROM ( SELECT id FROM TempTextT
  ORDER BY id DESC ) )
  WHERE sq > 5 AND sq <= 10;


-- 최종적으로 첫번째 페이지에 해당하는 글 레코드를
  SELECT 해 오는 문장은 아래와 같다.
SELECT * FROM TempTextT WHERE id IN
( SELECT id FROM ( SELECT id, rownum AS sq
  FROM ( SELECT id FROM TempTextT
  ORDER BY id DESC ) )
  WHERE sq > 5 AND sq <= 10 )
  ORDER BY id DESC;

오라클 백업

2008/01/18 09:28 | Posted by 콩닥소년

exp pmis2/pmis2@orcl full="Y" file="백업할 위치및 파일 "

imp pmis2/pmis2 fromuser="pmis2" touser="pmis2" ignore="Y" file="파일 위치 및 네임"

fromuser/ 백업한 기존 사용자 계정      touser/ import 할 사용자 계정


사용자는 기존의 사용자와 동일하게 만들어서 사용하면됨

테이블 TABLESPACE 또한 동일하게 적용해서 임포트 하면됨


등록된 사용자 아이뒤/ 페스/오라클 네임

EXP 는 저장  IMP 는 불러오는것 ?임포트는 밀어넣기



imp pms/pms123 file=pms041231.dmp fromuser=pms touser=pms

Import: Release 9.2.0.1.0 - Production on Fri Dec 31 14:33:31 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to: Oracle9i Enterprise Edition Release 9.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

Export file created by EXPORT:V09.02.00 via conventional path
IMP-00013: only a DBA can import a file exported by another DBA
IMP-00000: Import terminated unsuccessfully

이렇게...import했는데.....위의 에러가 뜨네요...................
이곳저곳 찾아보니 role을 dba권한으로 부여해야 한다고 하는거 같은데..
어떻게 부여해야할지....


해결::
권한주기
system, sys유저로 로긴한 다음 다음과 같이
grant dba to pms;

imp pms/pms123 file=pms041231.dmp fromuser=pms touser=pms

Import가 완료되면 다음과 같이 하여 DBA권한을 회수한다.
revoke dba to pms;

오라클자동증가값 시퀀스

2008/01/18 09:26 | Posted by 콩닥소년
** 시퀀스
CREATE SEQUENCE sequence_name
[INCREMENT BY int]
[START WITH int]
[MAXVALUE int | NOMAXVALUE]
[MINVALUE int |  NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE int | NOCACHE];
* 시퀀스 생성
DEPT 테이블의 기본 키에 대해 사용되는 DEPT_DEPTNO 시퀀스를
생성한다.
CYCLE 옵션을 사용해서는 안된다.
SQL> CREATE SEQUENCE dept_deptno_seq
INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCACHE
NOCYCLE;

* 시퀀스 확인
USER_SEQUENCES 데이터 사전 테이블에서 시퀀스 값을 검사한다.
SQL> SELECT sequence_name, min_value, max_value
increment_by, last_number
FROM user_sequences;
LAST_NUMBER 열은 다음 이용 가능한 시퀀스 넘버를 디스플레이
한다.
NEXTVAL과 CURRVAL 의사열
NEXTVAL은 다음 사용 가능한 시퀀스 값을 반환한다. 시퀀스가 참조
될 때마다, 다른 사용자에게 조차도 유일 값을 반환한다.
CURRVAL은 현재 시퀀스 값을 얻는다. CURRVAL이 참조되기 전에
NEXTVAL이 이용되어야 한다.
SQL> SELECT dept_deptno_seq.NEXTVAL FROM dual;
SQL> SELECT dept_deptno_seq.CURRVAL FROM dual;
 
* 시퀀스 사용
샌디에고에 “MARKETING”이라는 새로운 부서를 삽입한다.
SQL> INSERT INTO dept(deptno, dname, loc)
VALUES (dept_deptno_seq.NEXTVAL,
‘MARKETING’, ‘SAN DIEGO’);
DEPT_DEPTNO 시퀀스에 대한 현재 값을 본다.
SQL> SELECT dept_deptno_seq.CURRVAL
FROM dual;

* 시퀀스 수정
증가값, 최대값, 최소값, 사이클 옵션 또는 캐쉬 옵션을 변경한다.
SQL> ALTER SEQUENCE dept_deptno_seq
INCREMENT BY 1
MAXVALUE 999999
NOCACHE
NOCYCLE;
시퀀스 수정 지침
시퀀스에 대한 ALTER 권한을 가지거나 소유자여야 한다.
이후의 시퀀스 번호만 영향을 받는다.
시퀀스는 다른 번호에서 시퀀스를 다시 시작하기 위해서는
제거하고 다시 생성되어야 한다.
( 즉 ,start with 값은 변경할 수 없고 변경 필요시 시퀀스를
다시 만든다)
유효한 검사를 수행한다.

* 시퀀스 제거
DROP SEQUENCE 문장을 사용하여 데이터 사전에서 시퀀스를 제
거한다.
한번 제거되었다면 시퀀스는 더 이상 참조될 수 없다.
SQL> DROP SEQUENCE dept_deptno_seq;
 
** 인덱스란?
* 스키마 객체
포인터를 사용하여 행의 검색을 촉진하기 위해 오라클 서버가 사용 한다.
빠르게 데이터를 찾기 위해 빠른 경로 액세스 방법을 사용하여 디스크 I/O를 경감시킨다.
인덱스하는 테이블에 대해 독립적이다.
오라클 서버에 의해 자동적으로 사용되고 유지된다.

* 인덱스를 생성하는 방법은?
자동으로
- 유일 인덱스는 테이블 정의의 PRIMARY KEY 또는 UNIQUE KEY
제약조건을 정의할 때 자동으로 생성된다.
수동으로
- 사용자는 행에 대한 액세스 시간을 향상 시키기 위해 열에서 유일
하지 않은 인덱스를 생성할 수 있다.

* 인덱스 생성
하나 이상의 열의 인덱스를 작성한다.
CREATE INDEX index
ON table (column[, column]…);
EMP 테이블의 ENAME 열의 질의 액세스 속도를 향상시킨다.
SQL> CREATE INDEX emp_ename_idx
ON emp(ename);

* 인덱스 생성 지침
열이 WHERE 절이나 조인 조건에서 자주 사용된다.
열이 광범위한 값을 포함한다.
열이 많은 수의 null 값을 포함한다.
둘 또는 이상의 열들은 WHERE 절 또는 조인 조건에서 자주 함께 사용된다.
테이블이 대형이며 대부분의 질의들이 행의 2-4%보다 적게 읽어들 일 것으로 예상된다.
인덱스 생성 지침
아래 경우라면 인덱스를 생성하지 마시오.
테이블이 작다.
열이 질의의 조건으로 자주 사용되지 않는다.
대부분의 질의들이 행의 2-4% 이상을 읽어들일 것으로 예상된다.
테이블이 자주 갱신된다.

* 인덱스 확인
USER_INDEXES 데이터 사전 뷰는 인덱스의 이름과 그것의 유일성을 포함한다.
USER_IND_COLUMNS 뷰는 인덱스명, 테이블명, 열명을 포함한다.
SQL> SELECT ic.index_name, ic.column_name,
ic.column_position col_pos, ix.uniqueness
FROM user_indexes ix, user_ind_column ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = ‘EMP’;

* 인덱스 제거
데이터 사전에서 인덱스를 제거한다.
SQL> DROP INDEX index;
데이터 사전에서 EMP_ENAME_IDX 인덱스를 제거한다.
SQL> DROP INDEX emp_ename_idx;
인덱스를 제거하기 위해, 인덱스의 소유자이거나 DROP ANY
INDEX 권한을 가지고 있어야 한다.
 

** 동의어
동의어(객체의 다른 이름)를 생성하여 객체에 대한 액세스를 단순화 한다.
다른 사용자가 소유한 테이블을 참조한다.
객체이름의 길이를 단축한다.
CREATE [PUBLIC] SYNONYM synonym
FOR object;
* 동의어 생성과 제거
DEPT_SUM_VU뷰에 대해 단축명을 생성한다.
SQL> CREATE SYNONYM d_sum
FOR dept_sum_vu;
동의어를 제거한다.
SQL> DROP SYNONYM d_sum;
 

** 사용자 접근 제어
사용자 생성
DBA는 CREATE USER 문장을 사용하여 사용자를 생성한다.
CREATE USER user
IDENTIFIED BY passwd;
SQL> CREATE USER scott
IDENTIFIED BY tiger;
*** 사용자 생성시 반드시 default tablespace와
이전 1 2 3 4 다음