DataBase/Oracle2011. 6. 2. 11:47

해당 테이블의 컬럼 속성이 무엇인지 확인 후 해당 타입일 때 특정 조건 작업할때 유용



 테이블 조회
select * from user_objects where object_type='TABLE'


 컬럼 조회
select * from cols where table_name='테이블 이름'

Posted by penguindori
DataBase/Oracle2011. 3. 22. 21:07
select SQL_TEXT, FIRST_LOAD_TIME from v$sqlarea
Posted by penguindori
DataBase/Oracle2011. 3. 21. 21:04
SELECT parameter,value FROM nls_database_parameters
Posted by penguindori
DataBase/Oracle2008. 8. 14. 18:18

우선 Trigger을 하계된 계기는 Hynix에서 MDM 장비 통합 작업을 하는데 해당 MDM에서 우리쪽 DB로 데이터를

Insert 혹은 Update를 할 경우 우리쪽 관련 Table의 정보역시 변경혹은 삽입을 해야 할 경우가 발생하여

알게 되었다.


1. 우선 두개의 Table을 만들어 봅시다.

====================================

CREATE TABLE SW_TEST
(
   OK VARCHAR2(10)
)

CREATE TABLE SW_TEST2
(
   OK VARCHAR2(10)
)

====================================


2. Trigger를 만들어 봅시다.
====================================
CREATE OR REPLACE TRIGGER TEST_TRIGGER  -- 트리거를 만들고 이름은 TEST_TRIGGER
AFTER INSERT OR UPDATE                                -- INSERT 또는 UPDATE할때 EVENT 발생
ON SEWOO.S_TEST
REFERENCING NEW AS NEW OLD AS OLD           -- :NEW.   :OLD.  <-- 이거 이름 설정할때..
FOR EACH ROW                                                -- 각각의 행에 대해 실행 한다.
DECLARE                                                         -- 요고 위쪽에 변수 선언 가능 : EX) OK NUMBER;
BEGIN                                                              -- 요고 와 END 사이에 PLSQL 작성
INSERT INTO
S_TEST2
(OK) VALUES (:NEW.OK);
END TEST_TRIGGER;
/
====================================

3. 실행해 봅시다.

INSERT INTO S_TEST (OK) VALUES ('ABC')

4. 확인해 봅시다.

SELECT * FROM S_TEST


ABC   <-- 나온다 ㅎㅎ

짝짝짝 끝이에요;

Posted by penguindori
DataBase/Oracle2008. 8. 6. 21:58


1. 해당 컬럼의 속성 변경 하기
ALTER TABLE midas_usemanagement MODIFY (ITEM01 VARCHAR2(40));

2. 해당 컬럼의 이름 변경하기
ALTER TABLE midas_usemanagement RENAME COLUMN ITEM01 TO IPADDR

3. 신규 컬럼 추가 하기
ALTER TABLE midas_equipment ADD MASTER_KEY VARCHAR(10);

4. 컬럼 삭제 하기
ALTER TABLE midas_equipment DROP COLUMN MASTER_KEY



5. 기본키 추가 하기
ALTER TABLE midas_equipment add constraint pk_midas_equipment primary key (컬럼1, 컬럼2,...);

Posted by penguindori
DataBase/Oracle2008. 7. 31. 13:56
우선 내가 사용 하는 것을 적어 보도록 하자.
게시판에서 글이 등록되면 자동으로 그 글에 대한 번호를 1번 2번 식으로 순서가 매겨지면서 등록이 되도록
하게 할려고 확인하다가 오라클에서는 SEQUENCE를 사용하는 방법이 있다는것을 확인 할 수 있었다.

[예제]
1. 시퀀스 생성
create sequence sw_num
     increment by 1   -- 1씩 증가하라는거고요
     start with 1        -- 1부터 시작이고요 100 시작할려면 100 이라고 쓰시면 됩니다.
     nomaxvalue       -- 최대값 제한이 없다
     nocycle            
     nocache;

2. 실지 활용 예제
Insert into SW_Board (number, username) values (sw_num.nextval, '박세우')

3. 좀더 상세한 정보 오라클클럽 출처 ^^/


 시퀀스란?

유일(UNIQUE)한 값을 생성해주는 오라클 객체입니다.

◈ 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할수 있습니다.

◈ 보통 primary key 값을 생성하기 위해 사용합니다.

◈ 메모리에 Cache되었을 때 Sequence 값의 액세스 효율이 증가 합니다.

◈ Sequence는 테이블과는 독립적으로 저장되고 생성됩니다. 따라서 하나의 sequence를
    여러 테이블에서 쓸 수 있습니다.
 



시퀀스 생성




START WITH : 시퀀스의 시작 값을 지정합니다. n을 1로 지정하면 1부터 순차적으로
                     시퀀스번호가 증가 합니다.

INCREMENT BY : 시퀀스의 증가 값을 말합니다. n을 2로 하면 2씩 증가합니다.
                        START WITH를 1로 하고 INCREMENT BY를 2으로 하면 1, 3, 5,7,.. 이렇게
                       시퀀스  번호가 증가하게 됩니다.

MAXVALUE n | NOMAXVALUE : MAXVALUE는 시퀀스가 증가할수 있는 최대값을 말합니다.                                             NOMAXVALUE는 시퀀스의 값을 무한대로 지정합니다.

MINVALUE n | NOMINVALUE : MINVALUE는 시퀀스의 최소값을 지정 합니다.
                                      기본값은 1이며, NOMINVALUE를 지정할 경우 최소값은 무한대가 됩니다

 


 SQL>CREATE SEQUENCE emp_seq
        START WITH 1
        INCREMENT BY 1
        MAXVALUE 100000 ;

      sequence created.

     시작 값이 1일고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성했습니다.


 SQL>INSERT INTO emp(empno, ename, hiredate ) VALUES(emp_seq.NEXTVAL, ’julia’ , sysdate);

    empno는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여
    자동으로 입력할 수 있습니다.

  현재 값을 반환 합니다. .
   NEXTVAL현재 시퀀스값의 다음 값을 반환 합니다.


 SQL>SELECT emp_seq.CURRVAL FROM DUAL ;

        CURRVAL
        ---------
                  1

 SQL>SELECT emp_seq.NEXTVAL FROM DUAL ;

       NEXTVAL
     ---------
                 2
 
:
 CURRVAL :



사용규칙 

  ◈ NEXTVAL, CURRVAL을 사용할 수 있는 경우
    - subquery가 아닌 select문
    - insert문의 select절
    - insert문의 value절
    - update문의 set절


  ◈ NEXTVAL, CURRVAL을 사용할 수 없는 경우
    - view의 select절
    - distinct 키워드가 있는 select문
    - group by, having, order by절이 있는 select문
    - select, delete, update의 subquery
    - create table, alter table 명령의 default값


시퀀스의 수정 및 삭제




START WITH는 수정할수 없습니다.
START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE와 같습니다.
 


 SQL>ALTER SEQUENCE emp_seq
         INCREMENT BY 2
         CYCLE;

      sequence altered.

      2씩 증가하고, 최대값을 넘으면 다시 처음부터 순환하도록 수정하였습니다.


      DROP 문을로 필요하지 않은 시퀀스는 삭제 할수 있습니다.

 SQL>DROP SEQUENCE PRD_SEQ;
        sequence dropped.
 

Posted by penguindori
DataBase/Oracle2008. 6. 17. 13:22

우선 저런 에러가 발생하고 테이블 스페이스 확장이 안된다!! 라고 나에게 외치고 있다.

알았어.. 그럼 테이블 스페이스 확장 할 수 있도록 내가 할게 ㅎㅎ;

어떻게 해야할까?;;

곰곰이 생각을 하다가 네이버 검색을 하였다..

 //테이블 명과 대비하여 테이블 스페이스 명을 보는거 같다. 아무튼 테이블 정보 본다.
select * from user_tables;  

select e.tablespace_name,e.file_name,e.bytes, (e.bytes-sum(f.bytes)) result
from dba_data_files e, dba_free_space f
where e.file_id = f.file_id
group by e.tablespace_name, e.file_name, e.bytes;

select * from dba_tablespaces

alter database datafile '/data1/oradata/MI/mi_data03.dbf' resize 4000M;
위의 내용은 테이블 스페이스 크기를 늘리는 거다 ㅎㅎ

alter tablespace MI_DATA ADD DATAFILE '/data1/oradata/MI/mi_data04.dbf' SIZE 300M
이거는 새로 생성 하는거 ^^;

ALTER DATABASE DATAFILE '/data1/oradata/MI/mi_data04.dbf' RESIZE 3000m

------------- 추가 정보 --------------

[테이블스페이스 현황 확인]

SELECT  d.tablespace_name , d.bytes "Total(M)" , f.bytes "Free(M)" , e.bytes "Max Extent(M)" , Round(f.bytes/d.bytes*100,0) "Free %"
FROM    ( SELECT tablespace_name , sum(bytes)/1024/1024 as bytes
          FROM   dba_data_files
          GROUP BY tablespace_name ) d ,
        ( SELECT tablespace_name , sum(bytes)/1024/1024 as bytes
          FROM   dba_free_space
          GROUP BY tablespace_name ) f ,
        ( SELECT tablespace_name , max(bytes)/1024/1024 as bytes
          FROM   dba_free_space
          GROUP BY tablespace_name ) e
WHERE   d.tablespace_name = f.tablespace_name (+)
AND     f.tablespace_name = e.tablespace_name;

[특정 테이블스페이스의 데이터파일 확인]

select tablespace_name, file_name, bytes/1024/1024 from dba_data_files
where tablespace_name='테이블스페이스명';

select * from dba_temp_files;
select tablespace_name, file_name, bytes/1024/1024 from dba_temp_files;

[테이블스페이스 생성]

create tablespace 새롭게 생성할 이블스페이스명 datafile '/..데이터파일 위치../데이터파일명.dbf' size 1024m online;

 

[데이터파일 추가]

alter tablespace 테이블스페이스명 add datafile '/..데이터파일 위치../데이터파일명.dbf' size 1024m;


[데이터파일 resizing]

alter database datafile '/../변경할파일명.dbf' resize 2048m;

alter database tempfile '/../변경할파일명.dbf' resize 1024m;


[데이터파일의 자동확장]

alter database datafile '/..데이터파일 위치../데이터파일명.dbf' autoextend on; (비권장)


▣ AUTOEXTEND 확인
 select tablespace_name, file_name, AUTOEXTENSIBLE from dba_data_files;


▣ AUTOEXTEND 의 OFF

 SQL>  ALTER DATABASE DATAFILE ‘C:\ORACLE\ORADATA\app_data02.dbf'
                 AUTOEXTEND OFF;

▣ AUTOEXTEND 사용 예제

SQL> ALTER TABLESPACE storm
          ADD DATAFILE 'C:\ORACLE\ORADATA\app_data02.dbf' SIZE 200M
          AUTOEXTEND ON NEXT 10M
          MAXSIZE 500M;

<출처: http://cafe.naver.com/metanetbts/23 >

 



 

Posted by penguindori
DataBase/Oracle2008. 5. 22. 12:18
//신규 오라클 사용자에게 Table 권한 주기

GRANT SELECT, INSERT, UPDATE, DELETE ON SEWOO.SEWOOTABLE TO SEWOO2

GRANT를 통해서  위의 조작어를  사용하게 한다.   SEWOO의 SEWOOTABLE 을  SEWOO2 한테 권한을 준다.
Posted by penguindori