태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

프로젝트중 다국어 사이트가 포함되어 설정하던중

DB에서 중국어와 일본어를 불러올때 일부 문자가 깨져버렸다..

기존데이터를 살리고 인코딩을 변경하느라 하루를 버렸네..

DB 초기셋팅때 미리 설정만 해두었더라면..  이래서 많이알아야 몸이 고생을 안한다니깐..



$ sqlplus "sys/manager as sysdba"
 
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Aug 19 23:38:38 2010
 
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
 
 
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options
 
SQL>
SQL>
SQL> SELECT * FROM nls_database_parameters
WHERE parameter='NLS_CHARACTERSET' or parameter='NLS_LANGUAGE'  2  ;
 
PARAMETER
------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
AMERICAN
 
NLS_CHARACTERSET
KO16KSC5601
 
 
SQL>
SQL>
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
 
Total System Global Area 1610612736 bytes
Fixed Size                  2084400 bytes
Variable Size             654311888 bytes
Database Buffers          939524096 bytes
Redo Buffers               14692352 bytes
Database mounted.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
 
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
 
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
 
SQL> ALTER DATABASE OPEN;
Database altered.
 
SQL> update sys.props$ set value$='UTF8' where name='NLS_CHARACTERSET';
1 row updated.
 
SQL> update sys.props$ set value$='UTF8' where name='NLS_NCHAR_CHARACTERSET';
1 row updated.
 
SQL> update sys.props$ set value$='KOREAN_KOREA.UTF8' where name='NLS_LANGUAGE';
1 row updated.
 
SQL> commit;
 
Commit complete.
 
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
 
Total System Global Area 1610612736 bytes
Fixed Size                  2084400 bytes
Variable Size             654311888 bytes
Database Buffers          939524096 bytes
Redo Buffers               14692352 bytes
Database mounted.
Database opened.
SQL>

Oracle 9i Database Release 2 이상버전에서 Flashback 데이터 복구 사용
 
SELECT ...  AS OF ....
최대 360분 이전데이터까지 조회가 가능하다한다..


ex) SELECT * FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '분' MINUTE) WHERE ~~

ex2) insert into 복구 테이블명
      select * from 기존데이터 테이블명 as of timestamp(systimestamp-interval '40' minute) where 1=1



Oracle 9i Database Release 1 버전에서는 DBMS_FLASHBACK 프로시저를 이용해서 데이터를 복구해야한단다..
DB JOIN [ORACLE & ANSI]
from D.B./Oracle 2010/08/03 13:54


Oracle Joins
Version 11.1

Demo Tables & Data

Join Demo Tables
CREATE TABLE person (
person_id     NUMBER(10),
first_name    VARCHAR2(25) NOT NULL,
last_name     VARCHAR2(25) NOT NULL,
title_1       VARCHAR2(5),
title_2       VARCHAR2(5))
PCTFREE 20;

ALTER TABLE person
ADD CONSTRAINT pk_person
PRIMARY KEY (person_id)
USING INDEX
PCTFREE 5;

CREATE TABLE person_role (
role_id   VARCHAR2(1),
role_name VARCHAR2(20) NOT NULL);

ALTER TABLE person_role
ADD CONSTRAINT pk_role
PRIMARY KEY (role_id)
USING INDEX
PCTFREE 5;

CREATE TABLE person_role_ie (
person_role_id NUMBER(10),
person_id      NUMBER(10) NOT NULL,
role_id        VARCHAR2(1) NOT NULL);

ALTER TABLE person_role_ie
ADD CONSTRAINT pk_person_role_ie
PRIMARY KEY (person_role_id)
USING INDEX
PCTFREE 5;

CREATE TABLE title (
title_abbrev VARCHAR2(5),
title_name   VARCHAR2(20))
PCTFREE 0;

ALTER TABLE title
ADD CONSTRAINT pk_title
PRIMARY KEY (title_abbrev)
USING INDEX
PCTFREE 0;

ALTER TABLE person_role_ie
ADD CONSTRAINT fk_person_role_ie_person
FOREIGN KEY (person_id)
REFERENCES person(person_id);

ALTER TABLE person_role_ie
ADD CONSTRAINT fk_person_role_ie_role
FOREIGN KEY (role_id)
REFERENCES person_role(role_id);

ALTER TABLE person
ADD CONSTRAINT fk_person_title1
FOREIGN KEY (title_1)
REFERENCES title(title_abbrev);

ALTER TABLE person
ADD CONSTRAINT fk_person_title2
FOREIGN KEY (title_2)
REFERENCES title(title_abbrev);

Demo Table Data Load
INSERT INTO title VALUES
('BA', 'Bachelor of Arts');

INSERT INTO title VALUES
('BS', 'Bachelor of Science');

INSERT INTO title VALUES
('MS', 'Master of Science');

INSERT INTO title VALUES
('PhD', 'Doctor of Philosophy');

INSERT INTO title VALUES
('MD', 'Doctor of Medicine');

INSERT INTO person
(person_id, first_name, last_name, title_1)
VALUES
(1, 'Daniel', 'Morgan', 'BS');

INSERT INTO person
(person_id, first_name, last_name, title_1)
VALUES
(2, 'Jack', 'Cline', 'BA');

INSERT INTO person
(person_id, first_name, last_name, title_1)
VALUES
(3, 'Muriel', 'Dance', 'PhD');

INSERT INTO person
(person_id, first_name, last_name, title_1)
VALUES
(4, 'Elizabeth', 'Scott', 'MS');

INSERT INTO person
(person_id, first_name, last_name)
VALUES
(5, 'Jacqueline', 'Stough');

INSERT INTO person_role VALUES (1, 'Administrator');
INSERT INTO person_role VALUES (2, 'Professor');
INSERT INTO person_role VALUES (3, 'Instructor');
INSERT INTO person_role VALUES (4, 'Employee');
INSERT INTO person_role VALUES (5, 'Student');
INSERT INTO person_role VALUES (9, 'Alumni');

CREATE SEQUENCE seq_pr_id START WITH 1;

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 1, 2);

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 1, 9);

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 2, 3);

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 1, 5);

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 3, 1);

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 3, 9);

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 4, 4);

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 5, 5);

INSERT INTO person_role_ie VALUES
(seq_pr_id.NEXTVAL, 5, 9);

COMMIT;
 
Traditional Joins

Two Table Inner Join
SELECT <column_name>, <column_name>
FROM <table_name alias>, <table_name alias>
WHERE <alias.column_name> = <alias.column_name>
SELECT p.last_name, t.title_name
FROM person p, title t
WHERE p.title_1 = t.title_abbrev;

Three Table Inner Join
SELECT <column_name>, <column_name>
FROM <table_name alias>, <table_name alias>
WHERE <alias.column_name> = <alias.column_name>
AND <alias.column_name> = <alias.column_name>;
SELECT p.last_name, r.role_name
FROM person p, person_role_ie i, person_role r
WHERE p.person_id = i.person_id
AND i.role_id = r.role_id
ORDER BY p.person_id;

Left Outer Join
SELECT <column_name>, <column_name>
FROM <table_name alias>, <table_name alias>
WHERE <alias.column_name = <alias.column_name>
AND <alias.column_name> = <alias.column_name> (+);
SELECT p.last_name, t.title_name
FROM person p, title t
WHERE p.title_1 = t.title_abbrev(+);

Right Outer Join
SELECT <column_name>, <column_name>
FROM <table_name alias>, <table_name alias>
WHERE <alias.column_name> (+) = <alias.column_name>;
SELECT p.last_name, t.title_name
FROM person p, title t
WHERE p.title_1(+) = t.title_abbrev;

Self Join
SELECT <column_name>, <column_name>
FROM <table_name alias>, <table_name alias>, <table_name alias>
WHERE <alias.column_name> = < alias.column_name>
AND <alias.column_name> = <alias.column_name>;
UPDATE person
SET title_2 = 'PhD'
WHERE person_id = 1;
COMMIT;

SELECT p.last_name, t1.title_name, t2.title_name
FROM person p, title t1, title t2
WHERE p.title_1 = t1.title_abbrev
AND p.title_2 = t2.title_abbrev;
 
ANSI Joins

Inner Join
SELECT <column_name>, <column_name>
FROM <table_name alias> INNER JOIN <table_name alias>
ON <alias.column_name> = <alias.column_name>
SELECT p.last_name, t.title_name
FROM person p INNER JOIN title t
ON p.title_1 = t.title_abbrev;

Left Outer Join
SELECT <column_name>, <column_name>
FROM <table_name alias> LEFT OUTER JOIN <table_name alias>
ON <alias.column_name> = <alias.column_name>
SELECT p.last_name, t.title_name
FROM person p LEFT OUTER JOIN title t
ON p.title_1 = t.title_abbrev;

Right Outer Join
SELECT <column_name>, <column_name>
FROM <table_name alias> RIGHT OUTER JOIN <table_name alias>
ON <alias.column_name> = <alias.column_name>
SELECT p.last_name, t.title_name
FROM person p RIGHT OUTER JOIN title t
ON p.title_1 = t.title_abbrev;

Full Outer Join
SELECT <column_name>, <column_name>
FROM <table_name alias> FULL OUTER JOIN <table_name alias>
ON <alias.column_name> = <alias.column_name>
SELECT p.last_name, t.title_name
FROM person p FULL OUTER JOIN title t
ON p.title_1 = t.title_abbrev;

Natural Join
SELECT <column_name>, <column_name>
FROM <table_name alias> NATURAL JOIN <table_name alias>
CREATE TABLE parents (
person_id  NUMBER(5),
adult_name VARCHAR2(20),
comments   VARCHAR2(40))
PCTFREE 0;

CREATE TABLE children (
parent_id    NUMBER(5),
person_id    NUMBER(5),
child_name   VARCHAR2(20),
comments     VARCHAR2(40))
PCTFREE 0;

INSERT INTO parents VALUES (1, 'Dan', 'So What');
INSERT INTO parents VALUES (2, 'Jack', 'Who Cares');
INSERT INTO children VALUES (1, 2, 'Anne', 'Who Cares');
INSERT INTO children VALUES (1, 1, 'Julia', 'Yeah Right');
INSERT INTO children VALUES (2, 1, 'Marcella', 'So What');
COMMIT;

SELECT adult_name, child_name
FROM parents NATURAL JOIN children;

Self Join
SELECT <column_name>, <column_name>
FROM <table_name alias> INNER JOIN <table_name alias>
ON <alias.column_name> = <alias.column_name>,
   <table_name alias> INNER JOIN <table_name alias>
ON <alias .column_name> = <alias.column_name>;
SELECT p1.last_name, t1.title_name, t2.title_name
FROM person p1 INNER JOIN title t1
ON p1.title_1 = t1.title_abbrev,
     person p2 INNER JOIN title t2
ON p2.title_2 = t2.title_abbrev;

EXPLAIN PLAN FOR
SELECT p1.last_name, t1.title_name, t2.title_name
FROM person p1 INNER JOIN title t1
ON p1.title_1 = t1.title_abbrev,
   person p2 INNER JOIN title t2
ON p2.title_2 = t2.title_abbrev;

SELECT * FROM TABLE(dbms_xplan.display);

-----------------------------------------------------------------------
| Id |            Operation            |   Name   | Rows | Cost (%CPU)|
-----------------------------------------------------------------------
|  0 | SELECT STATEMENT                |          |    1 |   16    (0)|
|  1 |  NESTED LOOPS                   |          |      |            |
|  2 |   NESTED LOOPS                  |          |    1 |   16    (0)|
|  3 |    MERGE JOIN CARTESIAN         |          |    1 |   15    (0)|
|  4 |     NESTED LOOPS                |          |      |            |
|  5 |      NESTED LOOPS               |          |    1 |   10    (0)|
|  6 |       TABLE ACCESS FULL         | PERSON   |    5 |    5    (0)|
|  7 |       INDEX UNIQUE SCAN         | PK_TITLE |    1 |    0    (0)|
|  8 |      TABLE ACCESS BY INDEX ROWID| TITLE    |    1 |    1    (0)|
|  9 |     BUFFER SORT                 |          |    5 |   14    (0)|
| 10 |      TABLE ACCESS FULL          | PERSON   |    5 |    5    (0)|
| 11 |    INDEX UNIQUE SCAN            | PK_TITLE |    1 |    0    (0)|
| 12 |   TABLE ACCESS BY INDEX ROWID   | TITLE    |    1 |    1    (0)|
-----------------------------------------------------------------------

Alternative Syntax Joining on commonly named column in both tables
SELECT <column_name>, <column_name>
FROM <table_name alias> <join_type> <table_name alias>
USING (<common_column_name>);
-- does not work
SELECT s.srvr_id, s.status, i.location_code
FROM servers s INNER JOIN serv_inst i
USING (s.srvr_id)
WHERE rownum < 11;

-- does not work either
SELECT s.srvr_id, s.status, i.location_code
FROM servers s INNER JOIN serv_inst i
USING (srvr_id)
WHERE rownum < 11;

-- works
SELECT srvr_id, s.status, i.location_code
FROM servers s INNER JOIN serv_inst i
USING (srvr_id)
WHERE rownum < 11;
 
Cartesian Join
Table And Data For Cartesian
Product (Cross-Join) Demo
CREATE TABLE cartesian (
join_column NUMBER(10));

CREATE TABLE product (
join_column NUMBER(10));

Load Demo Tables
BEGIN
  FOR i in 1..1000
  LOOP
    INSERT INTO cartesian VALUES (i);
    INSERT INTO product VALUES (i);
  END LOOP;
  COMMIT;
END;
/

Inner Join
SELECT COUNT(*)
FROM cartesian c, product p
WHERE c.join_column = p.join_column;

EXPLAIN PLAN FOR
SELECT COUNT(*)
FROM cartesian c, product p
WHERE c.join_column = p.join_column;

SELECT * FROM TABLE(dbms_xplan.display);

--------------------------------------------------------------------
| Id | Operation           |    Name   | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------
|  0 | SELECT STATEMENT    |           |    1 |    26 |   11   (10)|
|  1 |  SORT AGGREGATE     |           |    1 |    26 |            |
|  2 |   HASH JOIN         |           | 1000 | 26000 |   11   (10)|
|  3 |    TABLE ACCESS FULL| CARTESIAN | 1000 | 13000 |    5    (0)|
|  4 |    TABLE ACCESS FULL| PRODUCT   | 1000 | 13000 |    5    (0)|
--------------------------------------------------------------------

Not Inner Join
SELECT COUNT(*)
FROM cartesian c, product p
WHERE c.join_column != p.join_column;

EXPLAIN PLAN FOR
SELECT COUNT(*)
FROM cartesian c, product p
WHERE c.join_column != p.join_column;

SELECT * FROM TABLE(dbms_xplan.display);

--------------------------------------------------------------------
| Id |      Operation      |    Name   | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------
|  0 | SELECT STATEMENT    |           |    1 |    26 | 3076    (2)|
|  1 |  SORT AGGREGATE     |           |    1 |    26 |            |
|  2 |   NESTED LOOPS      |           |  999K|    24M| 3076    (2)|
|  3 |    TABLE ACCESS FULL| CARTESIAN | 1000 | 13000 |    5    (0)|
|  4 |    TABLE ACCESS FULL| PRODUCT   |  999 | 12987 |    3    (0)|
--------------------------------------------------------------------

Cartesian (Cross-Join) Product
SELECT COUNT(*)
FROM cartesian, product;

EXPLAIN PLAN FOR
SELECT COUNT(*)
FROM cartesian c, product p;

SELECT * FROM TABLE(dbms_xplan.display);

----------------------------------------------------------------
| Id |       Operation       |    Name   | Rows | Cost (%CPU)|
----------------------------------------------------------------
|  0 | SELECT STATEMENT      |           |    1 | 3076    (2)|
|  1 |  SORT AGGREGATE       |           |    1 |            |
|  2 |   MERGE JOIN CARTESIAN|           | 1000K| 3076    (2)|
|  3 |    TABLE ACCESS FULL  | CARTESIAN | 1000 |    5    (0)|
|  4 |    BUFFER SORT        |           | 1000 | 3071    (2)|
|  5 |     TABLE ACCESS FULL | PRODUCT   | 1000 |    3    (0)|
----------------------------------------------------------------

Intentional Cartesian (Cross-Join) Product
SELECT <alias.column_name>, <alias.column_name>
FROM <table_name alias> CROSS JOIN <table_name alias>;
SELECT s.srvr_id, i.location_code
FROM servers s CROSS JOIN serv_inst i
WHERE rownum < 1001;

 
 
Join Related Queries

Column Join Usage
conn / as sysdba

set linesize 121

desc col_usage$

SELECT *
FROM col_usage$
WHERE obj# IN (
  SELECT object_id
  FROM dba_objects
  WHERE owner = 'UWCLASS');

출처 : http://psoug.org/reference/joins.html


 


-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-- 분류코드와 코드를 이용해 코드명을 가져온다.
-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


CREATE OR REPLACE
FUNCTION GET_CODE_NAME (
      p_cl_code IN VARCHAR2                --입력되는 인자값1
    , p_code     IN VARCHAR2                --입력되는 인자값2
)RETURN VARCHAR2 IS
    v_return VARCHAR2(50);

BEGIN
    SELECT CODE_NM1 
         INTO v_return
        FROM CMM_CODE_INFO
      WHERE CL_CODE = p_cl_code
           AND CODE = p_code;
    RETURN v_return;
   
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            RETURN '';
        WHEN OTHERS THEN
            RETURN '';
END GET_CODE_NAME;


[startup]

- DBMS 기동
$ ./sqlplus '/as sysdba'
SQL*Plus: Release 9.2.0.4.0 - Production on Wed Jul 1 09:56:38 2009
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.

SQL> startup
ORACLE instance started.

- 리스너 기동

$ ./lsnrctl start
LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 01-JUL-2009 09:57:34
Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.
Starting /home/oracle/oracle/product/9.2.0.4/bin/tnslsnr: please wait...

- 리스너 정지   
$ ./lsnrctl stop


[shutdown]

출처 : http://blog.naver.com/gaeean/60020826347


oracle 계정으로 접속
$ ./sqlplus '/as sysdba'
SQL*Plus: Release 9.2.0.4.0 - Production on Wed Jul 1 09:56:38 2009
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.

SQL> shutdown [ABORT|IMMEDIATE|NORMAL|TRANSACTIONAL [LOCAL]]

데이터베이스 닫힘
데이터베이스 마운트 해제
ORACLE 인스턴스가 종료


shutdown 옵션 설명



  • NORMAL
    • 새로운 데이터베이스 CONNECTION은 더이상 허락하지 않는다.
    • 현재 USER들이 맺고 있는 CONNECTION은 그 사용자들이 DISCONNECT할때까지 기다린다.
    • 현재 처리중인 트랜잭션이 있다면, 그 트랜잭션이 끝날 때까지 기다린후 서버를 종료한다.
    • 다음 DATABASE STARTUP할시 어떤 INSTANCE RECOVERY 절차도 필요하지 않는다.
  • TRANSACTIONAL
    • 모든 클라이언트가 특정 인스턴스에서 새로운 트랜잭션을 시작할 수 없다.
    • 클라이언트의 진행중인 트랜잭션을 모두 끝마치면 서버를 종료한다.
    • 모든 트랜잭션이 끝나는 즉시 종료되며, 이후 시작시 인스턴스 복구가 필요없다.
  • IMMEDIATE
    • 현재 처리중인 SQL STATEMENT가 있다면, 모두 STOP시킨다.
    • UNCOMMITTED TRANSACTIONS가 있다면, 모두 ROLLBACK시킨다.
    • USER들이 DISCONNECTION할때까지 기다리지않고 DB를 CLOSE & DISMOUNT해서
      오라클 인스턴스를 깨끗이 SHUTDOWN한다.
  • ABOART
    • 현재 처리중인 SQL STATEMENTS를 모두 ABORT시키고 ROLLBACK도 시키지않는다.
    • USER들을 모두 끊고 CLOSE & DISCONNECT 도 하지 않는다.
    • 이후 시작시 인스턴스가 자동 복구된다.

 


▣ 테이블스페이스의 생성
   - 옵션절을 생략할 경우 밑줄친 옵션이 디폴트 값입니다.
   - tablespace_name : 생성할 테이블 스페이스 명
   - DATAFILE : 새로 생성하는 테이블스페이스가 사용할 데이터 파일
   - filespec : 디렉토리 경로명을 포함한 파일명
   - size : 새로 생성되는 데이터 파일의 크기

   - ONLINE/OFFLINE
       ONLINE : 새로 생성되는 테이블 스페이스를 활성화 시키며, 생성 후 바로 사용할 수 있게 함
       OFFLINE : 테이블 스페이스를 비활성화 시키며, 생성 후 바로 사용할 수 없음

   - PERMANT/TEMPORARY : TEMPORARY 옵션을 사용하면 생성하는 테이블스페이스는
                                         임시 테이블스페이스가 됩니다. 

 
- DEFAULT STORAGE
     * INITIAL : 테이블 스페이스의 맨 첫번째 Extents의 크기
     * NEXT : 다음 Extents의 크기
     * MINEXTENTS : 생성할 Extents의 최소 값
     * MAXEXTENTS : 생성할 Extents의 최대 값
     * PCTINCREASE : Extents의 증가율, Default값은 50 입니다

테이블 스페이스 생성 예제

-- sysdba권한으로 접속을 합니다.
SQL> conn sys/manager as sysdba

-- 테이블스페이스 생성
SQL>CREATE TABLESPACE storm
         DATAFILE 'C:\ORACLE\ORADATA\app_data.dbf' SIZE 100M
         DEFAULT STORAGE
             (INITIAL    10K
              NEXT      10K
              MINEXTENTS 2
              MAXEXTENTS 50
              PCTINCREASE 50)

▣ 테이블스페이스의 자동 확장

▣ 생성한 데이터파일이 다 채워졌을 경우 자동으로 데이터 파일을 확장하는 방법 입니다.

AUTOEXTEND 옵션을 사용 하시면 됩니다.

▣ AUTOEXTEND 옵션 사용법
   - ON 아니면 OFF
   - CREATE DATABASE, CREATE TABLESPACE, ALTER TABLESPACE에서
     사용 할 수 있습니다.

▣ AUTOEXTEND 사용 예제

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

storm 테이블스페이스에 200M 데이터 파일을 추가 했는데요, 
이 데이터 파일의 크기인 200M를 전부 사용하게 되면 500M이 될 때까지 자동으로  10M 증가합니다.



▣ AUTOEXTEND 의 OFF

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

App_data02.dbf파일의 자동확장을 중지 시킵니다.



개발계정을 생성 및 권한 부여

  sqlplus system/oracle

CREATE USER dosudev   // dosudev 계정생성/
IDENTIFIED BY oracle   // Password를 oracle로 설정
DEFAULT TABLESPACE prjdosu  // prjdosu 의 테이블 스페이스를 사용한다.
QUOTA unlimited ON prjdosu   // prjdosu 테이블스페이스의 내용을 모두 쓸수 있다.
TEMPORARY TABLESPACE temp ;  // 임시영역


▣ 계정에 대한 권한 설정.
GRANT  CREATE SESSION     ,CREATE TABLE  //  로그인, 테이블 생성 권한
 ,CREATE SEQUENCE   ,CREATE VIEW  // 등등.. '_';
TO dosudev ;


▣ Tablespace 생성.   
    CREATE TABLESPACE TS_NAME
    DATAFILE  '/dev/vx/rdsk/dg_01/TS_NAME_FILE01.dbf' SIZE modifyM
    DEFAULT STORAGE (INITIAL 512K   NEXT 1M   MINEXTENTS 1   MAXEXTENTS 2147483645   PCTINCREASE 0) ;   

▣ 데이터 파일 추가
    ALTER TABLESPACE TS_NAME ADD DATAFILE 'C:\OHome\Data11.dbf' SIZE 1M;

▣ 데이터 파일 크기변경.
    ALTER DATABASE DATAFILE/TMMPFILE 'C:\OHome\Data11.dbf' RESIZE 3M;   

▣ 데이터 파일 속성변경 : 자동 확장
    ALTER DATABASE DATAFILE 'C:\OHome\Data11.dbf' AUTOEXTEND ON/OFF;   
    Alter Tablespace TS_NAME offline/online;   

▣ Tablespace 삭제
    Alter tablespace TS_NAME  offline;
    Drop tablespace TS_NAME  including contents and datafiles;

-----------------------------------------------------------------------------------------
▣ Tablespace 삭제
 
  - Tablespace가 더이상 필요없는 경우 Tablespace와 내용을 삭제
 
  - Drop Tablespace 권한 필요
 
  - Tablespace 삭제시 주의 사항
     1. Tablespace를 삭제하면 데이터 복구가 불가능하므로 삭제할 Tablespace에 있는 데이터가 나중에 필요없는지 여부를 판단한 후 삭제
     2. Tablespace삭제 전과 후 데이터베이스 Full backup필요 => 나중에 문제 발생시 복구가 가능하도록 하기 위해
    
  - Tablespace를 Oracle에서 삭제한 후 OS명령어(Del,rm)로 삭제된 Tablespace의 데이터파일을 삭제해야 함
 
  - 사용중인 세그먼트가 들어 있는 Tablespace삭제불가(Tablespace의 테이블 현재 사용중인 경우, Tablespace에 사용중인 Rollback Segment가 포함된 경우)
    => Tablespace를 Offline상태로 변경한 후에만 삭제 가능
   
  - Tablespace삭제한 후 Tablespace에 대한 정보는 데이터딕셔너리에 남아 있으나 Tablespace상태가 INVALID
 
  - ex) DROP TABLESPACE sp_test INCLUDING CONTENTS
    => INCLUDING CONTENTS : Tablespace내에 데이터가 존재하는 경우
    => CASCADE CONSTRAINTS : Primary key, Foreign Key 등의 Constraint조건을 연속으로 삭제하는 경우



[참고자료 사용 예제]

CREATE TABLESPACE DB_DATA
DATAFILE '/oradata/test/db_data.dbf' SIZE 500M
AUTOEXTEND ON NEXT 50M
DEFAULT STORAGE( INITIAL 500K
                 NEXT 500K
                 MINEXTENTS 10 
                 MAXEXTENTS 121
                 PCTINCREASE 50);

CREATE USER dbuser
IDENTIFIED BY dbpassword
DEFAULT TABLESPACE DB_DATA
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON DB_DATA;

GRANT CREATE SESSION, DBA TO dbuser;




출처 : http://blog.naver.com/hi30000/120026607959
         http://demo.initech.com/?document_srl=539
         http://javaiyagi.tistory.com/entry/oracle-TABLESPACE-생성
         http://blog.naver.com/cosmosb612/80038885233


Sequence 란?

  • Oracle 내부에서 순차적으로 증가되는 값을 가지는 유일(Unique) 객체임.
  • 시퀀스를 생성하게 되면 이것을 이용하여 순차적으로 증가되는 관리번호같은 것등을 자동생성함.
  • 메모리에 cache되었을때에 Sequence 값의 액세스 효율이 증가함.
  • 테이블과 독립적으로 생성되므로 여러테이블에서 사용될수 있음.

---------------------------------------------------------------------------
SEQUENCE 생성 구문:
---------------------------------------------------------------------------

CREATE SEQUENCE [시퀀스이름]
START WITH
[n]
INCREMENT BY [n]
MAXVALUE    [n] |     NOMAXVALUE
MINVALUE     [n] |     NOMINVALUE
CYCLE                 |      NOCYCLE


  • START WITH [n] - n으로 시퀀스 시작값을 설정한다.
  • INCREMENT BY [n] - n 만큼 시퀀스가 증가한다.
  • MAXVALUE, MINVALUE - 지정된 숫자만큼 최대값 최소값이 정해진다.
---------------------------------------------------------------------------

테이블을 운영하다보면 어떠한 필드가 1씩 증가해야 하는 상황이 필요하다. 이러한 경우 사용하는 방식으로 sequence 를 만들어서 사용하는 방식이 있다.

다음은 1 부터 시작하여 한번에 1씩 증가하는 sequence 를 생성한다.

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

 간단하게 1부터 1씩 증가를 원하면 다음과 같이 사용해도 된다.

create sequence friend_seq;

--> 기본적으로 1부터 시작하여 1씩 증가하게 된다.

 접근:

-- 시퀀스명.nextval

-- 시퀀스명.curval

 

insert into friend values(friend_seq.nextval,'박신양','노래');
insert into friend values(friend_seq.nextval,'장동건','수영');

 

유의할 사항은
- 시퀀스명.Nextval 하면 전에 값으로 되돌릴수 없습니다.
                       └> 해결책: 삭제하고 다시 만들어줘야 함!

 

SEQUENCE 삭제(필요시)
drop sequence
member_seq;
drop sequence friend_seq;



참조 : http://opensourceforge.tistory.com/264

#. Toad 에 Oracle 10g XE 버전 TNS 설정하기

(오라클 설치경로)\app\oracle\product\10.2.0\server\NETWORK\ADMIN\tnsnames.ora

위의 경로 파일을 에디터로 연다..

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = JH-VAIO-NOTE)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )


기본사항으로 위의 내용이 있다..(나의 노트북 기준)

첫번째 구문 아래에 아래내용 추가(접속사항에 맞게 수정후 사용)

# 주석(어쩌구저쩌구)
(데이터베이스이름) =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 호스트IP)(PORT = 포트번호))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 서비스명)
    )
  )

Toad의 연결설정에서 TNS탭 선택후

User / Schema : 에 유저명 입력, Password : 에 비밀번호 입력,

Database : 부분에서 위의 데이터베이스 이름을 찾아서 선택후 Connect...


Tag // OracleXE, Toad
오라클 내장 함수
from D.B./Oracle 2007/11/05 15:37
오라클 내장 함수
오라클의 함수에는 단일행 함수복수행 함수(그룹함수)가 있다.


숫자 함수(number function)
ABS ACOS ASIN ATAN
ATAN2 BITAND CEIL COS
COSH EXP FLOOR LN
LOG MOD POWER ROUND(number)
SIGN SIN SINH SQRT
TAN TANH TRUNC(number) WIDTH_BUCKET

문자 함수(character function)
CHR CONCAT INITCAP LOWER
LPAD LTRIM NLS_INITCAP NLS_LOWER
NLSSORT NLS_UPPER REPLACE RPAD
RTRIM SOUNDEX SUBSTR TRANSLATE
TREAT TRIM UPPER ASCII
INSTR LENGTH, LENGTHB, LENGTHC, LENGTH2, LENGTH4

날짜와 날짜 처리함수(date, datetime function)
ADD_MONTHS CURRENT_DATE CURRENT_TIMESTAMP DBTIMEZONE
EXTRACT(datetime) FROM_TZ LAST_DAY LOCALTIMESTAMP
MONTHS_BETWEEN NEW_TIME NEXT_DAY NUMTODSINTERVAL
NUMTOYMINTERVAL ROUND(date) SESSIONTIMEZONE SYS_EXTRACT_UTC
SYSDATE SYSTIMESTAMP TO_DSINTERVAL TO_TIMESTAMP
TO_TIMESTAMP_TZ TO_YMINTERVAL TRUNC(date) TZ_OFFSET

데이터 형변환 함수(conversion function)
ASCIISTR BIN_TO_NUM CAST CHARTOROWID
COMPOSE CONVERT DECOMPOSE HEXTORAW
NUMTODSINTERVAL NUMTOYMINTERVAL RAWTOHEX RAWTONHEX
ROWIDTOCHAR ROWIDTONCHAR TO_CHAR(character) TO_CHAR(datetime)
TO_CHAR(number) TO_CLOB TO_DATE TO_DSINTERVAL
TO_LOB TO_MULTI_BYTE TO_NCHAR(character) TO_NCHAR(datetime)
TO_NCHAR(number) TO_NCLOB TO_NUMBER TO_SINGLE_BYTE
TO_YMINTERVAL TRANSLATE ... USING UNISTR
참조로 형변환 관계표를 참조하면 편리하다.
기타함수(miscellaneous single row function)
BFILENAME COALESCE DECODE DEPTH
DUMP EMPTY_BLOB
EMPTY_CLOB
EXISTSNODE EXTRACT(XML)
EXTRACTVALUE GREATEST LEAST NLS_CHARSET_DECL_LEN
NLS_CHARSET_ID NLS_CHARSET_NAME NULLIF NVL
NVL2 PATH SYS_CONNECT_BY_PATH SYS_CONTEXT
SYS_DBURIGEN SYS_EXTRACT_UTC SYS_GUID SYS_TYPEID
SYS_XMLAGG SYS_XMLGEN UID UPDATEXML
USER USERENV VSIZE XMLAGG
XMLCOLATTVAL XMLCONCAT XMLFOREST XMLSEQUENCE
XMLTRANSFORM XMLELEMENT CASE

그룹함수 집계(Aggregate) 함수
AVG CORR COUNT COVAR_POP
COVAR_SAMP CUME_DIST DENSE_RANK FIRST
GROUP_ID GROUPING GROUPING_ID LAST
MAX MIN PERCENTILE_CONT PERCENTILE_DISC
PERCENT_RANK RANK REGR function STDDEV
STDDEV_POP STDDEV_SAMP SUM VAR_POP
VAR_SAMP VARIANCE GROUPING SETS
분석(Analytic) 함수
AVG CORR COUNT COVAR_POP
COVAR_SAMP CUME_DIST DENSE_RANK FIRST
FIRST_VALUE LAG LAST LAST_VALUE
LEAD MAX MIN NTILE
PERCENT_RANK PERCENTILE_CONT PERCENTILE_DISC RANK
RATIO_TO_REPORT REGR_(linear regression) function ROW_NUMBER STDDEV
STDDEV_POP STDDEV_SAMP SUM VAR_POP
VAR_SAMP VARIANCE TOP_N 분석

윈도우(windowing) 분석 함수

윈도우 분석함수부분 합을 계속 더해 나감, sum은 전체 합계를 구함


객체 참조 함수
DEREF MAKE_REF REF REFTOHEX VALUE
PseudoColumn을 의미하는 것
ROWIDEach row in the database has an address
ROWNUM테이블에서 select 되어진 행의 순서번호
LEVEL테이블에서 행(row)의 계층관계를 가리키는 일련번호 순서


출처 : http://radiocom.kunsan.ac.kr/lecture/oracle/function/function_start.html


ERROR 1016: Can`t open file:[Tablename].MYD (errno: 145) 


☆. 하드웨어의 오류 및 기타 이유로 table file이 손상된 경우
     Myisamchk 나 check table명령어를 사용하여 수동으로 복구

     # myisamchk -r [Tablename].MYI  

 

☆. 자동복구 방법

    이 기능은 MySQL기동시 table 이 crash marking이 되어 있는지 혹은 적절히
    close 되지 않았는지 체크하는 기능으로 mysqld 의 파라메터로 지정해주도록 되어 있다.

    --myisam-recover = {default | backup | force | quick }

    DEFAULT : 이 옵션은 아무 옵션도 주지 않은 것과 동일한 의미로 자동 복구를
         사용하지 않는다는 의미

    BACKUP : 추천하는 옵션으로 복구중 변경되는 테이블은 BAK확장자를 붙여서
         백업을 해놓고 복구에 들어가는 옵션

    FORCE : 복구시 테이타 손실이 무시하고 강제로 복구
 
    QUICK: 테이블에 어떠한 삭제된 블락도 없다면 table에 row를 점검하지 않는다.
        속도는 빠르지만 완벽한 복구는 보장할 수 없다.

    /etc/rc.d/init.d/mysql 같은 startup script에 아래 부분을 수정해주시고 MySQL을 재시작
    .
    case \$mode\ in
    \start\)
    # Start daemon
    if test -x $bindir/safe_mysqld
    then
    $bindir/safe_mysqld --myisam-recover=backup (수정할 부분)
    ~~~~~~~~~~~~~~~~~~~~~~~
    .
   
    service mysql stop (MySQL중단)
    service mysql start (MySQL재시작)  
 
 
☆. mysql 서버의 중지 없이 하는방법
    mysql에 접속하여 check table,repair table명령문으로 해결할수도 있습니다. 



출처 : http://www.mysqlkorea.co.kr/gnuboard4/bbs/board.php?bo_table=community_03&wr_id=1490&page=2