盡人事待天命

미디어협동조합 국민TV
  select distinct column_name, comments
  from user_col_comments
  where table_name = upper('tb_mngt_index')
Posted by 톰켓 Trackback 0 Comment 0


ROLLUP operator 


  - ROLLUP구문은 GROUP BY절과 같이 사용 되며, GROUP BY절에 의해서 그룹 지어진
    집합결과에 대해서 좀 더 상세한 정보를 반환하는 기능을 수행합니다.

  - SELECT절에 ROLLUP을 사용함으로써 보통의 select된 데이터와 그 데이터의
    총계를 구할 수 있습니다.


※ 우선 아주 간단한 예제부터 살펴 보겠습니다.
   (scott유저의 emp테이블을 가지고 테스트 했습니다.)


-- Group By를 사용해서 직업별로 급여 합계를 구하는 예제 입니다.

SELECT job, SUM(sal)
FROM emp
GROUP BY job 


JOB          SUM(SAL)
---------- ----------
ANALYST          600
CLERK              3200
MANAGER        33925
PRESIDENT      5000
SALESMAN      4000



-- 아래 SQL문은 위의 예제에 ROLLUP구문을 사용해서 직업별로 급여 합계를 구하고
   총계를 구하는 예제 입니다.


SELECT job, SUM(sal)
FROM emp
GROUP BY ROLLUP(job)

 

JOB          SUM(SAL
---------- ----------
ANALYST          6000
CLERK              3200
MANAGER        33925
PRESIDENT       5000
SALESMAN       4000
                       52125   --> 급여 합계에 대한 총계가 추가 되었습니다.




우선 간단하게 ROLLUP  Operator의 예제를 살펴보았습니다.
조금더 복잡한(?) 예제를 하나더 해보면은요..

-- 부서의 직업별로 인원수와 급여 합계를 구하는 예제를 하나더 해보겠습니다.

-- 일반적인 Group By절을 사용해서 SQL문을 구현해보면은요.. 아래와 같이 하면 되겠죠..

SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY b.dname, a.job


DNAME       JOB               SAL  EMP_COUNT
----------  ---------- ---------- ----------
ACCOUNTING  CLERK               1300          1
ACCOUNTING  MANAGER          2450          1
ACCOUNTING  PRESIDENT        5000          1
RESEARCH    ANALYST            6000          2
RESEARCH    CLERK                1900          2
RESEARCH    MANAGER           2975          1
SALES       MANAGER              28500          1
SALES       SALESMAN             4000          3



-- 결과를 보면은요..  부서별로 인원이 몇명이고, 또 급여합계가 얼마가 되는지 한눈에 보이지 않죠...
   일일이 부서에 해당하는 직업별 급여와 사원수를 일일이 더해야 되죠..

-- 이런 경우 ROLLUP  Operator를 적용해서 구현을 하면은 부서별 급여합계와 사원 총수를
   쉽게 볼 수 있습니다...

SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job)


DNAME      JOB               SAL  EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK              1300          1
ACCOUNTING MANAGER          2450          1
ACCOUNTING PRESIDENT        5000          1
ACCOUNTING                         8750          3  -->  ACCOUNTING 부서의 급여합계와 전체 사원수..
RESEARCH   ANALYST            6000          2
RESEARCH   CLERK                1900          2
RESEARCH   MANAGER           2975          1
RESEARCH                            10875          5 -->  RESEARCH 부서의 급여합계와 전체 사원수..
SALES      MANAGER              28500          1
SALES      SALESMAN             4000          3
SALES                                  32500          4 -->  SALES부서의 급여합계와 전체 사원수..
                                            52125         12 ->  전체 급여 합계와 전체 사원수


위와 같이 ROLLUP Operator을 일반적인 누적에 대한 총계를 구할때 사용하면 아주 편리하게
사용 할 수 있습니다.
 
 
- goguy [2004-05-08]
SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_co
unt
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY b.dname, a.job

분석해 볼까여
1.select;
2.from
3.where
4.group

2.테이블 두개가 메모리에 적제가 되겠죠
3.조건에 의해 deptno 을 기준으로 하나의 테이블로 정리 되겠죠
그다음은 4. 가 계산되는데
여기서 4.가 없다고 가정하면
1.로 가서 결국 하나의 행이 결과값으로 도출될 것입니다. 그룹함수에 의해서
총합과 행의 총갯수가 반환되겠죠
그럼 다시 되돌아가서
4.group by 절이 계산을 하게 되는데 우선 b.dname만 있다면 몇개의 레코드가 반환될까여 부서명이
4개라면.. 4개의 레코드가 반환되겠죠(단 4개의 부서가 데이타에 존재한다면)
그 다음에 a.job 까지(직업은 3개라고 가정하면) 두개의 조건이 주어졌습니다.
그럼 몇개의 레코드가 반환될까여 12개의 레코드가 반환될까여????

이번에는 문장을 분석해서 SQL을 작성해 볼까여 (위 강의가 기준)
부서의 직업별로 인원수와 급여 합계를 구하라

키포인트 인원수와 급여합계입니다.
여기서 그룹함수가 사용된다는 것을 알수 있고 GROUP BY절을 사용해야 된다는 것도 알수가 있습니다.
형식은
1.SELECT
2.TABLE
3.WHERE
4.GROUP BY
로 형식이 가추어 지고
1. 컬럼은 4개가 되고 그룹함수 SUM()가 COUNT()가 들어가고여
2. 테이블은 위 강의가 기준이니까 2개이고여
3. 자연스럽게 JOIN 이 일어나겠네여 무슨 조인일까여????
4. GROUP BY절에서 부서와 직업이 GROUP으로 묶여지겠네여...
SQL을 작성하면 위와 같겠지여


누접합 예제..

SELECT empno, SUM(sal) OVER (ORDER BY empno) "누적합"
FROM emp;

 


CUBE operator 


 ※ CUBE강좌를 보시기 전에 바로 위에 있는 ROLLUP강좌를 꼭 봐주세요..
 
 ROLLUP 강좌예제 중에서 아래 SQL문 예제를 가지고 CUBE강좌를 진행 하려고 합니다.

====================  ROLLUP 강좌의 예제입니다.  ======================= 

SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job)


DNAME      JOB               SAL  EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK              1300          1
ACCOUNTING MANAGER          2450          1
ACCOUNTING PRESIDENT        5000          1
ACCOUNTING                         8750          3  -->  ACCOUNTING 부서의 급여합계와 전체 사원수..
RESEARCH   ANALYST            6000          2
RESEARCH   CLERK                1900          2
RESEARCH   MANAGER           2975          1
RESEARCH                            10875          5 -->  RESEARCH 부서의 급여합계와 전체 사원수..
SALES      MANAGER              28500          1
SALES      SALESMAN             4000          3
SALES                                  32500          4 -->  SALES부서의 급여합계와 전체 사원수..
                                            52125         12 ->  전체 급여 합계와 전체 사원수

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


위의 SQL의 결과를 보면 부서별로 각 직업에 해당하는 급여와 사원수를 볼 수 있습니다.

하지만 부서별로 각 직업의 급여와 사원수, 그리고 또 각 직업별로 급여 합계와 사원수
보기 위해서는 두개의 ROLLUP을 사용해서 SQL문을 작성해야 합니다.

아래와 같이 되겠죠..
 

SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job)
UNION
SELECT ' ', job, SUM(sal) sal, COUNT(empno) emp_count
FROM emp
GROUP BY ROLLUP(job)
 
DNAME      JOB               SAL  EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK               1300          1
ACCOUNTING MANAGER          2450          1
ACCOUNTING PRESIDENT        5000          1
ACCOUNTING                         8750          3
RESEARCH    ANALYST           6000          2
RESEARCH    CLERK               1900          2
RESEARCH    MANAGER          2975          1
RESEARCH                           10875          5
SALES          MANAGER         28500          1
SALES          SALESMAN         4000          3
SALES                                 32500          4   => 요기 까지는 첫 번째 ROLLUP를 이용해서 구하고요
                   ANALYST          6000          2
                   CLERK              3200          3
                   MANAGER         33925          3
                   PRESIDENT        5000          1
                   SALESMAN         4000          3
                                           52125         12  => 요 부분은 두 번째 ROLLUP을 이용해서 구했습니다.

 


CUBE Operator를 사용하면 편하게 하나의 SQL문으로 위의 결과를 얻을 수 있습니다.
직접 SQL문을 실행시켜 보면 쉽게 이해가 갑니다.


SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY CUBE(b.dname, a.job)

DNAME      JOB               SAL  EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK               1300          1
ACCOUNTING MANAGER          2450          1
ACCOUNTING PRESIDENT        5000          1
ACCOUNTING                         8750          3 =>ACCOUNTING 부서의 직업별 급여의 총계와 사원수.
RESEARCH    ANALYST           6000          2
RESEARCH    CLERK               1900          2
RESEARCH    MANAGER          2975          1
RESEARCH                           10875          5=>RESEARCH 부서의 직업별 급여의 총계와 사원수.
SALES          MANAGER         28500          1
SALES          SALESMAN         4000          3
SALES                                 32500          4=>SALES 부서의 직업별 급여 총계와 사원수.
                   ANALYST          6000          2
                   CLERK              3200          3
                   MANAGER         33925          3
                   PRESIDENT        5000          1
                   SALESMAN         4000          3   
                                           52125         12  => 직업별로 급여의  총계와 사원수를 보여줍니다.



CUBE를 어느 경우에 사용 할 수 있는지 이해 되셨죠..
CUBE Operator는 Cross-Tab에 대한 Summary를 추출하는데 사용 됩니다
ROLLUP에 의해 나타내어지는 Item Total값과 Column Total값을 나타 낼 수 있습니다.


너무 어렵게 설명했나요... 응용해서 테스트 해보세요..



GROUPING() 함수


GROUPING Function은 ROLLUP, CUBE Operator에 모두 사용할 수 있습니다.

GROUPING Function는 해당 Row가 GROUP BY에 의해서 산출된 Row인 경우에는 0을 반환하고,
ROLLUP이나 CUBE에 의해서 산출된 Row인 경우에는 1을 반환하게 됩니다.

따라서 해당 Row가 결과집합에 의해 산출된 Data인지,
ROLLUP이나 CUBE에 의해서 산출된 Data인지를 알 수 있도록 지원하는 함수입니다.


SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count,
       GROUPING(b.dname) "D", GROUPING(a.job) "S"
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY CUBE(b.dname, a.job)


DNAME        JOB               SAL  EMP_COUNT    D    S
----------   ----------    ------- ---------- ---- ----
ACCOUNTING CLERK            1300          1    0    0
ACCOUNTING MANAGER       2450          1    0    0
ACCOUNTING PRESIDENT     5000          1    0    0
ACCOUNTING                      8750          3    0    1
RESEARCH    ANALYST        6000          2    0    0
RESEARCH    CLERK            1900          2    0    0
RESEARCH    MANAGER       2975          1    0    0
RESEARCH                        10875          5    0    1
SALES          MANAGER      28500          1    0    0
SALES          SALESMAN      4000          3    0    0
SALES                              32500          4    0    1
                   ANALYST         6000          2    1    0
                   CLERK             3200          3    1    0
                   MANAGER      33925          3    1    0
                   PRESIDENT     5000          1    1    0
                   SALESMAN      4000          3    1    0
                                       52125         12    1    1

 

<출처 : http://www.oracleclub.com/ >

Posted by 톰켓 Trackback 0 Comment 2
Some Examples of Storing Dates in SQL
DATE 타입의 값에 대한 입력 예제
다양한 종류의 DATE 타입의 컬럼을 가지는 테이블을 생성하였다.

create table DATE_TEST
(a date vms,
b date ansi,
c time(0)
default TIME '06:00:00',
d timestamp(2),
e interval year(4)
CHECK(e > INTERVAL '10' YEAR)
not deferrable,
f interval day(3) to minute,
g char(16));

ANSI/ISO SQL-92 는 date/time 문자열 (DATE VMS, DATE, TIME, TIMESTAMP and
INTERVAL)이 date/time columns에 첨부될 수 있도록 하고 있다. date/time 구문
을 사용하는 INSERT, DELETE, UPDATE, SELECT 그리고 CREATE, ALTER 등의
문장에서 date/time 문자열을 볼 수 있다.

insert into DATE_TEST (a) value (DATE VMS'2-APR-1957');
insert into DATE_TEST (b) value (DATE '1993-2-23');
insert into DATE_TEST (c) value (TIME '12:20:00');
insert into DATE_TEST (d) value (TIMESTAMP '1993-2-23 12:20:00.00');
insert into DATE_TEST (e) value (INTERVAL '35' YEAR(4));
insert into DATE_TEST (f) value (INTERVAL '365:10:21' DAY(3) TO MINUTE);

DATE VMS 컬럼은 EDIT STRING을 정의하여 다양한 형식으로 표현할 수 있지만,
ANSI/ISO date/time 값은 다음과 같이 CAST 연산자를 이용하여 DATE VMS로
바꾸지 않는 이상 계속 ANSI/ISO 형식으로 볼 수 밖에 없다.

SQL> select d, CAST(d as DATE VMS)
cont> from DATE_TEST
cont> where d is not null;
D
1993-02-23 12:20:00.00 23-FEB-1993 12:20:00.00
1 row selected
SQL>

Rdb는 DATE VMS에 대한 내부 형식을 제공한다. 이 형식은 TIMESTAMP 형식과
비슷하지만 "-", ":" 의 구두점이 없다.
다음의 예에서는 DATE VMS 컬럼에 CHAR 컬럼을 할당한다. 애플리캐이션에서
CHAR 컬럼은 호스트 변수나 module language 파라미터가 될 수 있다.

SQL> insert into DATE_TEST (g) value ('1957020100000000');
1 row inserted
SQL>
SQL> update DATE_TEST
cont> set a = g
cont> where g is not null;
1 row updated
SQL>
SQL> select a, g
cont> from DATE_TEST
cont> where g is not null;
A G
1-FEB-1957 00:00:00.00 1957020100000000
1 row selected

출처 : 오라클 고객센터

Posted by 톰켓 Trackback 0 Comment 0

1). Table A와 Table B 가 있는데. A의 내용을 B로 복사하는 방법
SQL>INSERT INTO b SELECT * FROM a;

2). Table A가 있고 Table B를 생성하면서 복사하는 방법
SQL>CREATE TABLE b AS SELECT * FROM a;

3). Table A가 있고 Table A와 구조가 같고 내용은 복사하지 않는 Table B 생성 방법
SQL>CREATE TABLE b AS SELECT * FROM a WHERE 1 = 2;

Posted by 톰켓 Trackback 0 Comment 0
출처 귀를 기울이면~~~ | 불량학상
원문 http://blog.naver.com/westminstor/80006598013

머리가 나뻐 외우지 못하고

할때마다 검색해서 매번 다시 하는 내가 싫어져서

오늘은 정리 좀 할려고 합니다...^^


오라클은 사용자 마다 데이터베이스상에 서로 다른 영역을 가지게 하기 위해서

테이블 스페이스(Table space) 라는 개념을 사용한다.

데이터베이스 사용자 간에 독립적인 작업이 가능하게 해주기 위해서는

사용자 마다 테이블 스페이스를 마련해주는 것이 좋다.

다른 사용자가 같은 테이블 스페이스를 사용하더라도 스키마의 개념을 적용해 테이블 명 앞에

사용자의 스키마를 적용하여 구분 가능하다.

즉, 같은 스페이스를 갖는 user1, user2가 같이 testTable이라는 테이블을 생성한다면

오라클은 user1.testTable, user2.testTable 의 형태로 테이블 명에 사용자 스키마 접두어를 두어 구분하게 된다.

하지만 실습용으로 일시에 여러 사용자를 생성해야하는 경우가 아니라면은

사용자 마다 테이블 스페이스를 따로 지정해주는 것이 좋다.


따라서 오라클에서는 데이터 베이스 사용자를 추가하려면은 그 사용자만의 테이블 스페이스를

추가해주고 그 다음에 사용자 계정을 추가하여 사용 테이블 스페이스를 앞서 생성한 테이블 스페이스로 지정해 주어야 한다.


테이블 스페이스와 사용자 생성에는 상당히 많은 옵션이 존재하지만

어설프게 알고 옵션을 너무 많이 난무하면 자칫 돌이킬 수 없는 상황이 되어버리기 때문에

꼭 필요한 옵션 몇가지만을 가지고 테이블 스페이스를 생성하고

사용자 계정을 생성한다.

디폴트 값이라는게 괜히 있는게 아니라고 생각한다.

오랜 연구끝에 알아낸 확률상 최적의 값이다... ^^ㅋ



테이블 스페이스 생성

CREATE tablespace TS_USER1 
DATAFILE '/oracle/oradata/test/TS_TESTDS.dbf'  SIZE 50M
AUTOEXTEND ON
NEXT 1M
MAXSIZE 100M

;


임시 테이블 스페이스 생성

// 인덱싱이나 클러스터링 등 부수적인 작업을 위해서 사용된다.

CREATE temporary tablespace TS_USER1_TEMP

TEMPFILE '/oracle/oradata/test/TS_USER1_TEMP.dbf' size 100M

EXTENT management local uniform size 128k

;


//사용자 계정 생성

//계정명은 user1이고 테이블 스페이스는 TS_USER1을 사용하며

//임시 테이블 스페이스는 TS_USER1_TEMP를 사용한다.

CREATE USER user1 IDENTIFIED BY passwduser1

DEFAULT TABLESPACE TS_USER1

TEMPORARY TABLESPACE TS_USER1_TEMP

;


//권한 지정

Grant connect, resource to USER1

;


이렇게 하면 USER1 이라는 사용자 계정을 위해서

TS_USER1이라는 테이블 스페이스를 생성하고

TS_USER_TEMP라는 템포러리 테이블 스페이스를 생성하여 맵핑 시켜주게 된다.

아..물론.. 오라클에 관리자 계정 (system 혹은 sys)으로 로그인해서 sqlplus를 실행하여야

하는건 당빠일꺼다.... ^^ㅋ

Posted by 톰켓 Trackback 0 Comment 0
출처 공부하자 | 미나
원문 http://blog.naver.com/alpsgirl2000/120014642555
SHOW DATABASES는 데이터 베이스 현황을 보는건가요~?

흠 그렇담.. SELECT * FROM USER_TABLES 라는 명령어를 함 쳐보세요...
그 유저에 관련된 이렇게 하심.. 지금 사용하시는 사용자 계정에 들어있는 테이블들과.. 상세 정보/데이터들이 출력될거에요..


그리고 두번째 질문에 대한 답변입니다..

오라클의 기본적인 테이블들.. EMP, DEPT, SALGRADE, BOUNS...
이 기본적인 테이블들은.. 간단히 얘기하면 테스트용이죠...
우선 EMP라는 테이블에는 회사에 관련된 정보 즉, 한 회사에 근무자와 그 상위직책, 연봉, 입사날짜, 보너스, 부서번호를 토대로 SQL문법에 대해 공부할수 있구요.. 그와 연관된 JOIN이나.. DELETE, ALTER, INSERT등으로 연관된 쿼리문을 짤수 있도록 가벼운 테이블들이 있죠.. DEPT, SALGRADE, BOUNS등요...
이 4가지 테이블을 저는 테스트용으로 썼거든요.. ^^;;
원래는 ORACLE 8i에서 유저 테스트용 기본테이블로 많이 사용했었죠..
각 테이블들의 유용성을 찾아보시면 될듯해요..
SELECT * FROM EMP..., DESC EMP...
이런식으로 하나씩 검사해보구요.. 데이터 타입이라든가 칼럼.. 그안의 데이터들을 살펴보시면 이게 왜 나와있는지, 어떤 식으로 사용해야 하는지 알게 될듯하네요.. ^^*


자자.. 마지막 세번째 질문에 대한 답변입니다..

흐음.. 가장 곤란하면서도 쉬운 질문인데요.. ^^:;
지금 사용하시는 SCOTT / TIGERS 는 흔히 SCOTT 유저(계정)이라고 부르는데요.. 오라클을 처음 사용하는 유저들이 제일 먼저 접하게 되는 유저(계정)이죠.. 허나 SCOTT 계정은 권한에 대한 제약이 있기때문에 보통은 새로운 사용자를 많이 생성해서 쓰는 편이죠..

- 사용자의 생성에 대한 설명입니다. -

새로운 USER를 생성하기 위해서는 CREATE USER문을 이용하면 됩니다.
USER를 생성하기 위해서는 USER생성 권한이 있는 사용자로 접속해야 합니다.

- user_name : 사용자 이름

- BY password : 사용자가 데이터베이스에 의해 인증되도록 지정하며, 데이터베이스 유저 로그온시 사용하는 비밀번호 입니다.

- EXTERNALLY : 사용자가 운영 체제에 의해서 인증되도록 지정합니다.

- DEFAULT TABLESPACE는 사용자 스키마를 위한 기본 테이블 스페이스를 지정 합니다.

- TEMPORARY TABLESPACE는 사용자의 임시 테이블 스페이스를 지정합니다.

- QUOTA절을 사용하여 사용자가 사용할 테이블 스페이스의 영역을 할당합니다.

- PASSWORD EXPIRE : 사용자가 SQL*PLUS를 사용하여 데이터베이스에 로그인할 때 암호를 재설정하도록 합니다.(사용자가 데이터베이스에 의해 인증될 경우에만 적합한 옵션입니다.)

- ACCOUNT LOCK/UNLOCK : 사용자 계정을 명시적으로 잠그거나 풀 때 사용할 수 있습니다.(UNLOCK이 기본값입니다.)

- PROFILE: 자원 사용을 제어하고 사용자에게 사용되는 암호 제어 처리 방식을 지정하는데 사용됩니다.

※ 여기선 간단한 유저생성에 대해서만 알아보고 자세한 유저관리와 PROFILE 관리는 어드민에서 설명 하겠습니다.

※ 참고 1

- 임시 테이블스페이스를 지정해 주지 않으면 시스템 테이블스페이스가 기본으로 지정 되지만 시스템 테이블스페이스에 단편화가 발생할 수 있으므로 사용자를 생성할때 임시테이블스페이스를 따로 지정해 주는 것이 좋습니다.

- 또한 DEFAULT TABLESPACE도 사용자를 생성할때 지정해 주지 않으면 기본적으로 시스템 테이블스페이스가 지정이 됩니다. 하지만 사용자를 생성할때 DEFAULT TABLESPACE를 지정을 해서 사용자가 소유한 데이터와 객체들의 저장 공간을 별도로 관리를 해야 합니다.

시스템 테이블스페이스는 본래의 목적(모든 데이터 사전 정보와, 저장 프로시저, 패키지, 데이터베이스 트리거등을 저장)을 위해서만 사용되어져야 하지 일반사용자의 데이터 저장용으로 사용 되어서는 안됩니다.


※ 참고 2

테이블 스페이스란 ?

- 오라클 서버가 테이터를 저장하는 논리적인 구조입니다.
- 테이블스페이스는 하나 또는 여러개의 데이터파일로 구성되는 논리적인 데이터 저장 구조입니다.

테이블 스페이스에 대한 자세한 내용는 오라클 어드민의 테이블스페이스 강좌에서 학습하겠습니다.


사용자 생성 예제

SQL PLUS를 실행시키고 SCOTT/TIGER로 접속을 합니다.
.
SQL>CREATE USER TEST IDENTIFIED BY TEST;

1행에 오류:
ORA-01031: 권한이 불충분합니다

※ SCOTT USER는 사용자 생성 권한이 없어서 사용자를 생성할 수 없습니다.

SQL>CONN SYSTEM/MANAGER -- DBA Role이 있는 유저로 접속합니다.

SQL>CREATE USER TEST IDENTIFIED BY TEST; -- USER를 다시 생성합니다.
사용자가 생성되었습니다.


새로 생성한 USER로 접속해 볼까요..

SQL> CONN TEST/TEST

ERROR:
ORA-01045: 사용자 TEST는 CREATE SESSION 권한을 가지고있지 않음; 로그온이
거절되었습니다

- 새로 생성한 TEST USER는 권한이 없어서 접근할 수가 없습니다.
- 모든 USER는 권한이 있고 권한에 해당하는 역할만 할 수 있습니다.
- TEST라는 USER를 사용하기 위해서도 권한을 부여해주어야 합니다.


SQL> CONN SYSTEM/MANAGER
연결되었습니다.

SQL> GRANT connect, resource TO TEST ;
권한이 부여되었습니다.

SQL> CONN TEST/TEST
연결되었습니다.





- 다음은 USER의 변경 및 삭제에 대한 설명입니다. -

USER 변경하기 위해서는 ALTER USER문을 사용합니다..

● ALTER USER문으로 변경 가능한 옵션

- 비밀번호
- 운영체제 인증
- 디폴트 테이블 스페이스
- 임시 테이블 스페이스
- 테이블 스페이스 분배 할당
- 프로파일 및 디폴트 역할


사용자 수정 예제
SQL>CONN SYSTEM/MANAGER -- SYSTEM USER로 접속합니다.
SQL>ALTER USER scott IDENTIFIED BY lion; -- scott USER의 비밀번호를 수정합니다.
사용자가 변경되었습니다.
SQL>conn scott/lion -- scott USER의 비밀번호가 바낀걸 확인할 수 있습니다.
접속되었습니다.
SQL>conn system/manager
접속되었습니다.
SQL>ALTER USER scott IDENTIFIED BY tiger; -- scott USER의 비밀번호를 처음처럼 수정합니다.
사용자가 변경되었습니다.

사용자 삭제
※ CASCADE를 사용하게 되면 사용자 이름과 관련된 모든 데이터베이스 스키마가 데이터 사전으로부터
삭제되며 모든 스키마 객체들 또한 물리적으로 삭제 됩니다.


사용자 정보의 확인
데이터베이스에 등록된 사용자를 조회하기 위해서는 DBA_USERS라는 데이터사전을 조회하면 됩니다.
SQL*Plus를 실행시켜 system/manager로 접속을 합니다.
SQL>SELECT username, default_tablespace, temporary_tablespace
FROM DBA_USERS;

USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLES
---------------- ------------------- ----------------
SYS SYSTEM TEMP
SYSTEM TOOLS TEMP
OUTLN SYSTEM SYSTEM
DBSNMP SYSTEM SYSTEM
ORDSYS SYSTEM SYSTEM
ORDPLUGINS SYSTEM SYSTEM
MDSYS SYSTEM SYSTEM
CTXSYS DRSYS DRSYS
SCOTT SYSTEM SYSTEM
TEST TEST SYSTEM
STORM STORM SYSTEM
KJS SYSTEM SYSTEM
OEM OEM_REPOSITORY TEMP

위와 같이 유저와 테이블 스페이스에 대한 정보가 화면에 나옵니다.


- 오라클 시스템 권한에 대한 설명입니다. -

오라클에서 권한(Privilege)은 특정 타입의 SQL문을 실행하거나 데이터베이스나 데이터 베이스
객체에 접근할 수 있는 권리입니다.


SYSTEM PRIVILEGES
- 시스템 권한은 사용자가 데이터베이스에서 특정 작업을 수행 할 수 있도록 합니다
- 약 126개의 시스템 권한이 있으며 그 수는 계속 증가하고 있습니다.
- 권한의 ANY 키워드는 사용자가 모든 스키마에서 권한을 가짐을 의미 합니다.
- GRANT 명령은 사용자 또는 Role에 대해서 권한을 부여 합니다.
- REVOKE 명령은 권한을 삭제 합니다.

시스템 권한의 종류 몇가지
- CREATE SESSION : 데이터 베이스를 연결할 수 있는 권한
- CREATE ROLE : 오라클 데이터베이스 역할을 생성할 수 있는 권한
- CREATE VIEW : 뷰의 생성 권한
- ALTER USER : 생성한 사용자의 정의를 변경할 수 있는 권한
- DROP USER : 생성한 사용자를 삭제시키는 권한
- system_privilege : 부여할 시스템 권한의 이름
- role : 부여할 데이터베이스 역할의 이름
- user, role : 부여할 사용자 이름과 다른 데이터 베이스 역할 이름
- PUBLIC : 시스템 권한, 또는 데이터베이스 역할을 모든 사용자에게 부여할 수 있습니다.
- WITH ADMIN OPTION : 권한을 부여 받은 사용자도 부여 받은 권한을 다른 사용자 또는 역할로
부여할 수 있게 되며, 만약 사용자가 WITH ADMIN OPTION과 같이 역할을 부여 받는다면
부여된 역할은 그 사용자에 의해 변경 또는 삭제 될 수 있습니다.


시스템 권한 부여 예제
SQL>GRANT CREATE USER, ALTER USER, DROP USER TO scott
WITH ADMIN OPTION.
권한이 부여되었습니다.

*설명 : scott 사용자에게 사용자를 생성, 수정, 삭제 할 수 있는 권한을 부여하고,
scott 사용자도 다른 사용자에게 그 권한을 부여 할 수 있습니다.


시스템 권한 철회 예제
SQL>REVOKE CREATE USER, ALTER USER, DROP USER
FROM scott
권한이 회수되었습니다.

*설명 : scott 사용자에게 부여한 생성, 수정, 삭제 권한을 회수합니다,



WITH ADMIN OPTION을 사용하여 시스템 권한 취소
WITH ADMIN OPTION을 사용하여 시스템 권한을 부여했어도 시스템 권한을 취소 할 때는 연쇄적으로 취소 되지 않습니다.


시나리오
1. DBA가 STORM에게 WITH ADMIN OPTION을 사용하여 CREATE TABLE 시스템 권한을 부여 합니다.
2. STORM이 테이블을 생성 합니다.
3. STORM이 CREATE TABLE 시스템 권한을 SCOTT에게 부여 합니다.
4. SCOTT가 테이블을 생성 합니다.
5. DBA가 STORM에게 부여한 CREATE TABLE 시스템 권한을 취소 합니다.

결과

- STORM의 테이블은 여전히 존재하지만 새 테이블을 생성할 수 있는 권한은 없습니다.
- SCOTT는 여전히 테이블과 새로운 테이블을 생성 할 수 있는 CREATE TABLE권한을 가지고 있습니다.

위의 예문들은 제가 공부할때 자주 사용하는 사이트(http://www.oracleclub.com/)에서 가져온 것들입니다.. 그곳은 오라클에 대한 지식이 다양한 방법으로 기술되어 있습니다.. 처음 공부하시는데에는 많은 도움 될듯하네요...
Posted by 톰켓 Trackback 0 Comment 0
출처 희웅이 가족 | 하늘
원문 http://blog.naver.com/arron1/20020443627
 create tablespace : 오라클 데이터베이스내에서 생성되고 처리될 테이블들의 레코들들이

   실제로 존재할 영역을 디스크 상에 물리적으로 생성시키는 명령어이다.


- tablespace_name : 생성될 테이블 스페이스의 이름이다.


-  datafile : 데이터베이스내에서 사용되는 레코드들이 실제로 디스크상에 파일로 존재하게

   되는데, 이때의 파일의 위치와 이름을 지정하는 곳이다.

 

- data_file : 데이터베이스내에서 사용되는 레코드들이 실제로 디스크상에 파일로 존재하게

   되는데, 이때의 파일의 위치와 이름을 지정하는 곳이다.


- data_full_file_name : 레코드들이 실제로 존재할 디렉토리(절대패스사용)와 파일의 이름이다.

 

- size : 테이블 스페이스내의 레코드들을 저장할 디스크상의 파일의 최대 코기를 지정해

  줄 수 있다.

- datafilesize : 레코드들을 저장할 파일의 크기를 k(킬로바이트), M(메가바이트)의 단위를

  사용하여 나타낼 수 있다.

-initial : 테이블 생성시 해당 테이블에 할당되어 있는 영역의 크기를 지정해 줄 수 있다.


- datafilesize_min : 테이블생성시 사용할 수 있는 공간의 크기로, 예를 들어 10m로 지정되면

  생성된 임의의 테이블에 입력되는 데이터들을 10m의 영역에 저장한다는 의미이다.

 

- next : 처음에 저장될 데이터의 영역인 initial만큼을 다 쓰고 더 이상의 공간이 없을 때,

  사용할 수 있는 영역을 할당 시켜 준다.


- datafilesize_max : 추가로 테이블에 데이터가 입력될 때, 사용할 수 있는 여역의 크기이다.

  예를 들어 5M를 할당하여 두면, 임의의 테이블이 사용한 영역이 10M (위의 initial영역의

  크기이다)를 넘을 경우, 주가로 5M만큼의 영역을 더 사용할 수 있게 된다. 따라서 총

  사용공간은 15M가 된다.


- minextents minuum : next 영역으로 할당할 수 있는 최소의 갯수를지정해 줄 수 있다.

- maxextents maxnum : next 영역으로 할당할 수 있는 최대의 갯수를 지정해 줄 수 있다.

- picincrease num : next를 지정하여 추가로 사용할 영역을 확장하고자 할 때, 늘어날 영역의

  크기를 '%'로 나타낸 값이다. pct는 '%'를 의미한다. 예를 들어 picincrease 5라고 지정해 두면,

  next로 추가로 작업할 영역을 늘여 줄때, 처음에는 next롤 설정된 영역만을 확장시켜 주나,

  두 번째부터는 next영역의 크기에서 5%만큼 더 크게 확장시켜 주게 되는 것이다.

- online/offline : 테이블 스페이스 생성시 online이나 offline 중 택일하여 쓸 수 있으며, 생략하면

  online을 의미한다.
  online으로 설정하여 테이블 스페이스를 생성하면, 테이블스페이스를 생성함과 동시에 데이터베

  이스 사용자들이 사용가능하다는 것을 의미하며, 일반적으로 online으로 설정하여 사용한다.

 

-- 테이블스페이스생성
  create tablespace info_data
  datafile '/oracle/infodata/infodata.dbf'
  size 200m
  default storage(
     initial     80k
     next        80k
     minextents  1
     maxextents  121
     pctincrease 80
     )online;


-- 테이블스페이스 online / offline
 > alter tablespace tablespace_name offline;
 > alter tablespace tablespace_name online;

 

-- 생성된 테이블 스페이스의 추가하기 공간 늘여주기
  alter tablespace info_data
  add datafile '/oracle/infodata/infodata/dbf'
  size 100m;

 

-- 생성된 테이블 스페이스 크기 변경하기
  alter database datafile '/oracle/infodata/infodata/dbf'
  RESIZE 200M;

 

-- 테이블스페이스 변경하기
  alter tablespace tax2110
  default storage(
     initial        1024k
     next           2048k
     minextents     1
     maxextents     5
    )online ;
  pctincrease 기본이 50%이다

 

-- 테이블스페이스 자동확장 추가 (Automatic Extension)
  alter tablespace tax2110
  add datafile 'd:\tablespace\tax2110_03.dbf'
  size 50m
  autoextend on next 10m
  maxsize 100m;
(* maxsize 를 지정할때 데이터 화일보다 크거나 같아야함.)

 

-- 기존테이블스페이스에 자동확장 변경하기
  alter database datafile 'd:\tablespace\tax2110_03.dbf'
  autoextend on next 10m
  maxsize 100m; 

 

-- 테이블스페이스 삭제
drop tablespace tablespace_name
including contents    --> 테이블스페이스의 모든 세그먼트를 삭제

( 데이터가 있는 테이블스페이스는 삭제할수 없다)
cascade constraints;  --> 삭제된 테이블스페이스 내의 테이블의 기본키와 유일키를 참조하는

다른 테이블스페이스의 테이블로부터 참조무결성 제약 조건을 삭제합니다.
$ rm kit.dbf    -- Drop한 tablespace명의 Datafile이 kit.dbf일때.

 

-- 오프라인 테이블스페이스
  alter tablespace tax2110 offline;
 
-- 데이터베이스 사용자 아이디 생성 및 수정
  create user 사용자아이디
  identified by 비밀번호(새비밀번호)

Posted by 톰켓 Trackback 0 Comment 0
 

1. oracle의 현재 설정된 processes 를 확인한다.

 

SQL> show parameter processes

NAME                                 TYPE                  VALUE
--------------------------------------------------------

aq_tm_processes                      integer             1
db_writer_processes                  integer            1
job_queue_processes                  integer         10
log_archive_max_processes            integer        2
processes                            integer             150
SQL>

 

2. alter system set 명령으로 spfile 을 수정합니다.

주의) 이 명령으로 동적으로 DB에 반영되지는 않습니다. DB를 다시 오픈 시켰을때 반영됩니다.

 

SQL> alter system set processes=200 scope=spfile ;

System altered.

SQL>

 

3.spfile 에서 process수가 200 으로 바뀐지를 확인합니다.

  참조)굳이 확인할 필요는 없으며 spfile은 binary 파일이므로 vi로 편집이 불가능 합니다.

 

[oracle@angka dbs]$ pwd
/oracle/app/oracle/product/9.2.0/dbs
[oracle@angka dbs]$ more spfileORA92.ora


.....

.....
*.job_queue_processes=10
*.large_pool_size=16777216
*.open_cursors=300
*.pga_aggregate_target=33554432
*.processes=200
*.query_rewrite_enabled='TRUE'
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=83886080
*.sort_area_size=1048576
.....

.....

 

4. DB를 shutdown 시킵니다.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

 

5. DB를 다시 올리고 process수가 200으로 바뀐지를 확인합니다.

SQL> startup
ORACLE instance started.

Total System Global Area  219223120 bytes
Fixed Size                   451664 bytes
Variable Size             201326592 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.

 

SQL> show parameter processes

NAME                                 TYPE                  VALUE
--------------------------------------------------------

aq_tm_processes                      integer             1
db_writer_processes                  integer            1
job_queue_processes                  integer         10
log_archive_max_processes            integer        2
processes                            integer             200
SQL>

 

참고) pfile 로 DB를 오픈해서 쓰고 있는 시스템에서는 initORA.ora 파일의 processes를 직접수정하고 DB를 다시 올리시면 됩니다.

출처 : [기타] 인터넷 : 오라클 교육원 교육부

Posted by 톰켓 Trackback 0 Comment 0

SQL SERVER와 ORACLE개체의 차이점.

 

분류

Microsoft SQL Server

Oracle

컬럼 수

1024

254

행 크기

8060 바이트와 각 텍스트 또는 이미지 컬럼을 가리키기 위해 16바이트

무제한 (각 행에 하나의 long 또는 long raw 허용)

최대 행 수

무제한

무제한

Blob 유형의 저장 영역

각 행과 저장된 16바이트 포인터. 다른 데이터 페이지에 저장된 데이터

각 테이블에 하나의 long 또는 long raw, 행의 끝에 있어야 함, 행과 같은 블록에 저장된 데이터

클러스터된 테이블 인덱스

각 테이블에 1

각 테이블에 1 ( 색인으로 구성된 테이블)

클러스터되지 않은 테이블 인덱스

각 테이블에 249

무제한

하나의 인덱스에서 최대 컬럼 수

16

16

인덱스에서 컬럼 값의 최대 길이

900 바이트

½ 블록

테이블 명명 규칙

[[[Server.]database.]owner.]table_name

[schema.]table_name

 

SQL SERVER와 ORACLE 개체식별자를 다루는방법

Oracle

Microsoft SQL Server

1-30개의 문자 길이.
데이터베이스 이름: 최대 8개 문자
데이터베이스 링크 이름: 최대 128개 문자

1-128 유니코드 문자 길이
임시 테이블 이름: 최대 116개 문자

식별자 이름은 영문자로 시작해야 하고 영숫자 문자 또는 _, $, # 문자를 포함해야 합니다.

식별자 이름은 영숫자 문자 또는 _로 시작해야 하고 실제로 어떠한 문자라도 사용할 수 있습니다.

식별자가 공백으로 시작되거나 _, @, #, or $ 이외의 문자가 포함될 경우, 식별자 이름 둘레에 [ ] (구분자)를 사용해야 합니다.

개체가 @ 로 시작할 경우,
이것은 지역 변수입니다.
# 지역 임시 개체입니다.
## 전역 임시 개체입니다.

테이블 공간 이름은 유일해야 합니다.

데이터베이스 이름은 유일해야 합니다.

사용자 계정(스키마)에서 식별자 이름은 유일해야 합니다.

데이터베이스 사용자 계정에서 식별자 이름은 유일해야 합니다.

테이블 및 보기에서 컬럼 이름은 유일해야 합니다.

테이블 및 보기에서 컬럼 이름은 유일해야 합니다.

사용자 스키마에서 인덱스 이름은 유일해야 합니다.

데이터베이스 테이블 이름에서 인덱스 이름은 유일해야 합니다.

 

테이블과 인덱스 저장 매개변수

Oracle

Microsoft SQL Server

CREATE TABLE DEPT_ADMIN.DEPT (
DEPT                   VARCHAR2(4) NOT NULL,
DNAME   VARCHAR2(30) NOT NULL,
CONSTRAINT DEPT_DEPT_PK
                           PRIMARY KEY (DEPT)
USING INDEX TABLESPACE USER_DATA
PCTFREE 0 STORAGE (INITIAL 10K NEXT 10K
MINEXTENTS 1 MAXEXTENTS UNLIMITED),
CONSTRAINT DEPT_DNAME_UNIQUE
                           UNIQUE (DNAME)
USING INDEX TABLESPACE USER_DATA
PCTFREE 0 STORAGE (INITIAL 10K NEXT 10K
MINEXTENTS 1 MAXEXTENTS UNLIMITED)
)
PCTFREE 10         PCTUSED 40
TABLESPACE USER_DATA
STORAGE (INITIAL 10K NEXT 10K
MINEXTENTS 1 MAXEXTENTS UNLIMITED
FREELISTS 1)

CREATE TABLE USER_DB.DEPT_ADMIN.DEPT (
DEPT                   VARCHAR(4) NOT NULL,
DNAME   VARCHAR(30) NOT NULL,
CONSTRAINT DEPT_DEPT_PK
             PRIMARY KEY CLUSTERED (DEPT),
CONSTRAINT DEPT_DNAME_UNIQUE
             UNIQUE NONCLUSTERED (DNAME)
)

출처 : [기타] 개인소장 학습용자료. Programming Guide 2000.05.15 (출처. HWP파일)

Posted by 톰켓 Trackback 0 Comment 1
* 본 문서는 HP-UX 11.0 (64bit)에서 Oracle 9i를 설치하기 위한 바로 전 단계까지를 설명한 문서입니다...

솔직히 설치하는거야 GUI환경으로 나오는 것을 그대로 따라하면 되는 것이지만 그 전의 단계가 선행되지 않으면
설치가 난감할 때가 한두번이 아닐겁니다...

이런 준비 과정이 준비되어 있고 빠르게 끝난다면 실제 오라클 설치에 걸리는 시간은 얼마 되지 않을 거라고 생각됩니다..^^

저도 실제 아래의 문서대로 하기 위해서 3일이 걸렸으니 많이 걸린거죠...그 만큼의 준비과정을 거쳤으니까요...

다른 분들은 저같은 고생하지 마시라고 정리해서 올립니다. 참고가 되었으며 좋겠구요...혹시 틀린 부분이 있거나 하면 댓글로 올려주셔도 무방합니다...^^

< HPUX 11.00(64bit)에 Oracle 9i를 설치하는 데 필요한 전제 조건 >

(1) Memory

- 최소 256MB이상의 메모리 필요

# /usr/sbin/dmesg | grep "Physical"

- 이 명령어로 현재 시스템에 설치된 물리 메모리를 확인해 볼수 있음

(2) Swap Space

- 물리 메모리의 두배 정보이거나 적어도 400MB이상.

# /usr/sbin/swapinfo -a 추가할swap용량

(3) Disk Space

- Oracle 설치를 위해서는 2.5G의 용량이 필요하고 DB를 설치하기 위해 다시 1G 이상이 필요
- 총 3.5G이상이 필요

(4) Temporary Disk Space

- /tmp에 400MB 이상이 필요
- 만약 /tmp에 400MB가 되지 않으면 다음과 같은 방법으로 oracle을 위한 tmp를 잡아준다.

* Bourne/Korn Shell

# mkdir /u03/tmp
# TEMP=/u03/tmp; export TEMP
# TMPDIR=/u03/tmp; export TMPDIR


* C Shell

% mkdir /u03/tmp
% setenv TEMP/u03/tmp
% TMPDIR TMPDIR/u03/tmp

(5) HP-UX에서 Oracle 9i는 OS가 64bit인 환경에서만 지원된다.

- OS가 64bit인 경우에는 Oracle이 32bit와 64bit로 설치해서 사용이 가능하지만 (HP 11.0 버전 이상)
- OS가 32bit인 경우 Oracle 9i의 설치는 불가능.(HP-UX 10.X)

* 만약 OS가 32bit에서 Oracle을 설치했을시 다음과 같은 에러가 발생.

./oracle : Exec format error. Wrong Architecture.

* OS의 커널이 64bit 모드인지 확인하는 명령어

# /bin/getconf KERNEL_BITS

* 현재 OS의 버전정보를 보여주는 명령어

# uname -a

(6) OS Patch 버전의 확인


HP-UX 11.0 (64 bit) Operating System Patches Status
------------------------------------------------------------------------------------
Dec 2000 patch bundle Required
------------------------------------------------------------------------------------
PHCO_23092 Required
------------------------------------------------------------------------------------
PHCO_23770 Required
------------------------------------------------------------------------------------
PHCO_23919 Required
(Required for Oracle Real Application Clusters and
Oracle Parallel Fail Safe)
------------------------------------------------------------------------------------
PHKL_23226 Required
------------------------------------------------------------------------------------
PHNE_23249 Required
(Note: refer to the special installation instructions to
install any additional required patches)
------------------------------------------------------------------------------------
PHSS_23377 until July 200l. Required
Patch PHSS_23377 is an interim patch. It is available
until July 2001 at the following FTP site:
ftp://hprc.external.hp.com/
(192.170.19.51) log in as jag42757, password winding5.
This patch will be supeseded by general release patch
PHSS_23440, which is available at the HP individual
patch site at the end of June, 2001.
------------------------------------------------------------------------------------
hyperfabric driver: 11.00.12 (HP-UX 11.0) Required only if your
system has an older
hyperfabric driver version

* 현재 설치된 패치를 확인하는 방법

# /usr/sbin/swlist -l patch

* Patch번호를 통해 설치된 패치를 확인하는 방법

# /usr/sbin/swlist -l patch patch_number

* 어떤 bundle이 설치되어 있는지 확인

# /usr/sbin/swlist -l bundle



(7) JRE 버전 확인

JRE : 1.1.8이상

(8) JDK버전 확인

JDK 1.2.2.05 이상

# java -version


(9) Oracle 9i Install을 위해 해야 할 중요한 작업

- HP 버그로 인해서 HP 11.00 64bit버전에서 X-Library links를 생성하지 못함.
- super-user가 수동으로 이 링크를 다시 걸어주어야 함.

# cd /usr/lib
# ln -s /usr/lib/libX11.3 libX11.sl
# ln -s /usr/lib/libXIE.2 libXIE.sl
# ln -s /usr/lib/libXext.3 libXext.sl
# ln -s /usr/lib/libXhp11.3 libXhp11.sl
# ln -s /usr/lib/libXi.3 libXi.sl
# ln -s /usr/lib/libXm.4 libXm.sl
# ln -s /usr/lib/libXp.2 libXp.sl
# ln -s /usr/lib/libXt.3 libXt.sl
# ln -s /usr/lib/libXtst.2 libXtst.sl


(10) Shell을 통한 파일 사이즈 크기의 선정

- 기본적으로 Oracle 9i는 2G이상의 파일을 생성할수 있으나 OS는 그렇지 못하다.
- OS가 2G이상의 파일을 생성할수 있게 하기 위해서는 다음의 작업이 필요하다.

# ulimit -f
--> unlimited

- 결과가 unlimited로 나오면 상관없지만 그 이하의 값이 나올경우 재설정을 해주어야 한다.

ex) # ulimit -f
--> 2097148
위의 결과대로라면 OS의 block의 크기는 512byte이므로 1G크기의 파일만 생성가능하다.

--> ulimit명령을 사용해서 수정이 필요함

(11) Review Kernel Parameter

- Oracle 9i는 Unix의 리소스를 Shared Memory, swap memory, semaphores 통해서 사용.
- 커널 파라미터 설정이 충분하지 못하면 Oracle 9i설치시 시스템에 다운되는 상태가 된다.
- 충분한 파라미터 설정을 통해야 Oracle 9i의 설치가 가능하다.

다음의 절차를 통해서 Kernel Parameter를 설정 가능하다.

SAM -> Kernel Configuration -> Configurable Parameters

다음의 수치를 Oracle 9i에 맞게 설정한다.

-----------------------------------------------------------------------------------------
Kernel Parameter setting purpose
-----------------------------------------------------------------------------------------
KSI_ALLOC_MAX (NPROC * 8)

-----------------------------------------------------------------------------------------
MAXDSIZ 1073741824 bytes

-----------------------------------------------------------------------------------------
MAXDSIZ_64 2147483648 bytes

-----------------------------------------------------------------------------------------
MAXSSIZ 134217728 bytes
-----------------------------------------------------------------------------------------
MAXSSIZ_64BIT 1073741824
-----------------------------------------------------------------------------------------
MAXSWAPCHUNKS (available memory)/2
-----------------------------------------------------------------------------------------
MAXUPRC (NPROC + 2) Defines maximum number of user
processes.
------------------------------------------------------------------------------------------
MSGMAP (NPROC + 2) Defines the maximum number of
message map entries.
------------------------------------------------------------------------------------------
MSGMNI NPROC Defines the number of message queue
identifiers.
------------------------------------------------------------------------------------------
MSGSEG (NPROC * 4) Defines the number of segments
available for messages.
------------------------------------------------------------------------------------------
MSGTQL NPROC Defines the number of message headers.
------------------------------------------------------------------------------------------
NCALLOUT (NPROC + 16) Defines the maximum number of
pending timeouts.
------------------------------------------------------------------------------------------
NCSIZE ((8 * NPROC + 2048) + VX_NCSIZE)
Defines the Directory Name Lookup
Cache (DNLC) space needed for inodes.
VX_NCSIZE is by default 1024.
------------------------------------------------------------------------------------------
NFILE (15 * NPROC + 2048) Defines the maximum number of open
files.
------------------------------------------------------------------------------------------
NFLOCKS NPROC Defines the maximum number of files
locks available on the system.
------------------------------------------------------------------------------------------
NINODE (8 * NPROC + 2048) Defines the maximum number of open
inodes.
------------------------------------------------------------------------------------------
NKTHREAD (((NPROC * 7) / 4) + 16) Defines the maximum number of kernel
threads supported by the system.
------------------------------------------------------------------------------------------
NPROC 4096 Defines the maximum number of
processes.
------------------------------------------------------------------------------------------
SEMMAP ((NPROC * 2) + 2) Defines the maximum number of
semaphore map entries.
------------------------------------------------------------------------------------------
SEMMNI (NPROC * 2) Defines the maximum number of
semaphore sets in the entire system.
------------------------------------------------------------------------------------------
SEMMNS (NPROC * 2) * 2 Sets the number of semaphores in the
system. The default value of SEMMNS
is 128, which is, in most cases, too low
for Oracle9i software.
------------------------------------------------------------------------------------------
SEMMNU (NPROC - 4) Defines the number of semaphore undo
structures.
------------------------------------------------------------------------------------------
SEMVMX 32768 Defines the maximum value of a
semaphore.
------------------------------------------------------------------------------------------
SHMMAX Available physical memory Defines the maximum allowable size of
one shared memory segment.
The SHMMAX setting should be large
enough to hold the entire SGA in one
shared memory segment. A low setting
can cause creation of multiple shared
memory segments which may lead to
performance degradation.

SHMMNI 512 Defines the maximum number of shared
memory segments in the entire system.
SHMSEG 32 Defines the maximum number of shared
memory segments one process can attach.
VPS_CEILING 64 Defines the maximum System-Selected
Page Size in kilobytes.



(12) Oracle 설치를 위한 유저 및 그룹 생성

- SAM으로 생성

Oracle DBA Group : dba (id : 5000)
Oracle User : oracle (id : 501)

(13) Oracle유저의 환경변수 설정

다음과 같은 환경 변수들을 설정해야 한다. 이 값들은 사용하는 쉘 종류에 맞게
oracle 계정의 홈 디렉토리에 있는 .profile이나 .cshrc 등에 기록하도록 한다.

ORACLE_HOME : 현재 설치하고자 하는 버전을 저장할 디렉토리
LD_LIBRARY_PATH : 오라클 제품을 사용할 때 사용되는 Shared Library들의 위치 경로.

LD_LIBARARY_PATH가 $ORACLE_HOME/lib 를 포함하게 지정한다.

ORACLE_SID : Oracle 서버 인스턴스의 이름인 Oracle System Identifier(SID)를 지정한다.

PATH : 다음을 포함하게 한다.
$ORACLE_HOME/bin, /bin, /usr/bin

NLS_LANG : Oracle 데이터베이스와 관련하여 언어 종류와 캐릭터 셋을 지정한다.

DISPLAY : Oracle Universal Installer 가 구동하기 위해서 Servername name 이나
IP address ,X Server, Screen을 지정한다

ex) 환경 변수 설정 예


다음은 환경변수 파일에 오라클 설치 및 사용을 위해 설정한 환경변수들의 예이다.
자신의 디렉토리에 맞게 고쳐다 쓰자.

## Environment variables for Oracle
export ORACLE_HOME=/oracle
export NLS_LANG=japanese_japan.ja16euc
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export ORACLE_SID=ORCL

##CLASSPATH must include the following JRE locations:
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib

export CLASSPATH


(14) CD-ROM 마운트

HP에 Oracle설치시 Oracle CD가 iso규격으로 되어 있기 때문에 일반 mount명령어로는 안되며
다음과 같은 방법으로 마운트를 실시한다.

root에서 다음과 같이 마운트 실행

# nohup /usr/sbin/pfs_mountd &
# nohup /usr/sbin/pfsd &
# /usr/sbin/pfs_mount ?t rrip ?x unix /dev/dev/c0t0d0(CD롬디바이스이름) /SD_CDROM


Oracle 1번 CD의 설치가 끝나고 다음 CD로 교체시 다음과 같은 작업을 해야 한다.

[주의] Oracle runInstaller 실행 시 반드시 root(/) 디렉토리에서 절대경로로 실행할것
그렇지 않으면 pfs_umountd로 언마운트시 CD가 빠지지 않음

(15) Oracle Java runInstaller 실행

# /SD_CDROM/runInstaller
……..
……..
오라클 자바 인스톨러 기동(OUI)...


---------------------------------------
http://info1.yeungjin.ac.kr

출처 : [기타] 오라클공인교육센터(WWW.IT-SESANG.COM)

Posted by 톰켓 Trackback 0 Comment 0