Dev Note/DB2010. 6. 24. 03:31
오라클 초기 작업시 Tablespace를 생성하고, User 생성 그리고, User 권한을 설정하게 된다.
이 일련의 과정에 처리하기 위해 간단하게 알아본다.

* 테이블스페이스 생성
    CREATE TABLESPACE [이름]
    DATAFILE [데이터 파일 경로] SIZE [파일 사이즈][K | M]
    AUTOEXTEND [ON | OFF]
    [ONLINE | OFFLINE]
    [PERMANENT | TEMPORARY]
    EXTENT MANAGEMENT [DICTIONARY | LOCAL [AUTOALLOCATE | UNIFORM]]
    BLOCKSIZE [사이즈][K | M]
    * 테이블스페이스 생성 옵션 설명

        - TABLESPACE : 테이블스페이스의 이름을 지정한다.
        - DATAFILE : 테이블스페이스를 저장 할 데이터 파일의 이름과 경로를 지정한다.
        - SIZE : 데이터 파일의 용량을 지정한다. 단위는 K(키로바이트) 또는 M(메가바이트) 사용
        - AUTOEXTEND : 공간이 부족할 때 자동으로 확장할지 여부를 지정한다.
        - ONLINE | OFFLINE : 테이블스페이스를 즉시 사용할 지 여부를 지정한다. (Default : ONLINE)
        - PERMANENT | TEMPORARY : 저장 할 정보가 영구적인지 임시인지 여부를 지정한다. (Default : PERMANENT)
        - EXTENT MANAGEMENT DICTIONARY | LOCAL
            ◈ DICTIONARY : 테이블스페이스 내의 EXTENT들이 DICTIONARY TABLE에서 관리된다. (기본값)
            ◈ LOCAL : 테이블스페이스 내의 EXTENT들이 각 DATAFILE 내에서 BITMAP으로 관리된다.
                ⊙ AUTOALLOCATE : 시스템에서 관리 함. 사용자가 EXTENT SIZE를 지정할 수 없음.
                ⊙ UNIFORM : 사용자가 지정한 일정한 사이즈로 생성 됨. (Default : 1M)
            LOCAL 절을 사용하면서 AUTOALLOCATE 또는 UNIFORM을 명시하지 않으면 AUTOALLOCATE이 기본값
        - BLOCKSIZE : 인스턴스를 구성하는 블록의 사이즈를 지정한다.

* 테이블스페이스 생성 예
    CREATE TABLESPACE USER_DATA_TS01 
    DATAFILE '/export/home/oracle/ts/user_data_ts01.dbf' SIZE 100M;
    
    CREATE TEMPORARY TABLESAPCE USER_TEMP_TS01 
    TEMPFILE '/export/home/oracle/ts/user_temp_ts01.dbf' SIZE 30M
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K;

* 테이블스페이스 관리 쿼리
    - 테이블스페이스 목록 조회
        SELECT tablespace_name, status FROM dba_tablespace;
    - 테이블스페이스 데이터파일 목록 조회
        SELECT file_name, bytes, status FROM dba_data_files;
    - 테이블스페이스의 사용 가능 공간 조회
        SELECT tablespace_name, bytes, blocks FROM dba_free_space;

* 삭제 쿼리
    DROP TABLESPACE [이름] 
   
* 사용자 생성
    CREATE USER [사용자 이름]
    IDENTIFIED [BY [패스워드] | EXTERNALLY]
    DEFAULT TABLESPACE [테이블스페이스 이름]
    TEMPORARY TABLESPACE [템포러리 테이블스페이스 이름]
    QUOTA [[사이즈][K | M] | UNLIMITIED] ON [테이블스페이스 이름]
    PASSWORD EXPIRE
    ACCOUNT [LOCK | UNLOCK]
    PROFILE [프로파일 경로 | DEFAULT]
    
* 사용자 생성 옵션 설명
        - EXTERNALLY : 사용자가 운영체제에 의해서 인증되도록 지정한다.
        - DEFAULT TABLESPACE : 사용자 스키마를 위한 기본 테이블스페이스를 지정한다.
        - TEMPORARY TABLESPACE : 사용자의 임시 테이블스페이스를 지정한다.
        - QUOTA : 사용자가 사용할 테이블스페이스의 영역을 지정한다.
        - PASSWORD EXPIRE : 사용자가 SQL*PLUS를 사용하여 DB에 로그인할 때 재설정하게 지정한다.
        - ACCOUNT [LOCK | UNLOCK] : 사용자 계정을 잠그거나 풀때 사용한다.

* 사용자 생성 예
    CREATE USER ukzzang IDENTIFIED BY '1234'
    DEFAULT TABLESPACE USER_DATA_TS01
    TEMPORARY TABLESPACE USER_TEMP_TS01 

* 사용자 삭제
    DROP USER [사용자 이름]

* SYSTEM PRIVILEGE 또는 ROLE 부여
    GRANT [SYSTEM_PRIVILEGE | ROLE] TO [USER | ROLE | PUBLC]
    WITH ADMIN OPTION
    * 옵션 설명
        - SYSTEM_PRIVILEGE : 부여할 시스템 권한 이름
        - ROLE : 부여할 데이터베이스 역할 이름
        - USER | ROLE | PUBLC : 권한 또는 역할을 부여할 대상
            ◈ USER : 사용자 이름
            ◈ ROLE : 역할 이름
            ◈ PUBLIC : 모든 사용자에게 부여
        - WITH ADMIN OPTION : 부여 받은 권한을 다른 사용자 또는 역할에게 부여할수 있게 된다.

* 대표적인 시스템 권한과 역할
    * 권한
        - CREATE SESSION : 데이터베이스를 연결 할 수 있는 권한
        - CREATE ROLE : 데이터베이스 역할을 생성 할 수 있는 권한
        - CREATE VIEW : 뷰를 생성 할 수 있는 권한
        - ALTER USER : 사용자의 정의를 변경 할 수 있는 권한
        - DROP USER : 사용자를 삭제 할 수 있는 권한
    * 역할 (기본적으로 사용자를 생성하면 CONNECT, RESOUCE 역할을 준다.)
        - CONNECT ROLE : 세션생성 및 테이블 생성, 조회 등의 가장 일반적인 권한들로 이루어진다.
        - RESOURCE ROLE : Store Procedure 또는 Trigger와 같은 PL/SQL을 사용할 수 있는 권한들로 이루어진다.
        - DBA ROLE : 모든 시스템 권한이 부여 된 역할이다.

Posted by as.wind.914
Dev Note/DB2010. 4. 7. 15:57
테이블 사용 중 'ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다.'
의 오류 메세지가 있는 경우.. 대부분이 테이블 락으로 인한 것이다.
테이블 락이 걸린 세션을 찾아서 죽이는 방법은 아래와 같다.

SELECT
    A.SID, A.SERIAL#
FROM
    V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE
    A.SID=B.SID AND B.ID1=C.OBJECT_ID AND B.TYPE='TM'
    AND C.OBJECT_NAME='테이블 이름'

결과는 해당 테이블에 락이 걸려있는 세션에 대한 정보 조회가 가능하다.
SID SERIAL#
--- -------
25     12345 

alter system kill session '25, 12345';
로 해당 세션을 죽이면 된다.
Posted by as.wind.914
Dev Note/DB2009. 10. 5. 20:02
MySql에서 지원하는 날짜(Date) 관련 함수를 알아보자 ...
Data 값을 기대하는 함수들은 일반적으로 DATETIME 값을 수용하고, TIME 부분은 무시한다. TIME 값을 기대하는 함수들은 일반적으로 DATETIME 값을 수용하고, DATE 부분은 무시한다.

* ADDDATE(date, INTERVAL expr type), ADDDATE(expr, days)
ADDDATE()는 두번째 인자에서 INTERVAL과 함께 사용되면 DATE_ADD()의 별칭이 된다. 마찬가지로 SUBDATE()는 DATE_SUB()의 별칭이 된다.INTERVAL 인자에 관해서는 DATE_ADD() 설명을 참조.
    mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
            -> '1998-02-02'
    mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
            -> '1998-02-02'
MySQL 4.1.1 버전부터 두번째 문법이 허용되었다. expr 가 DATE 또는 DATETIME 형식일 때, daysexpr 에 추가되는 일수이다.
    mysql> SELECT ADDDATE('1998-01-02', 31);
            -> '1998-02-02'
Posted by as.wind.914