ORACLE/ADMIN2009. 4. 10. 17:28
반응형

출처 : http://www.oracleclub.com/article/24469

[ DB Server의 dba group 아닌 다른 Unix 계정에 대해서 sqlplus 및 TNSNAMES.ORA 참조 환경 구성 ]

단계 1. DB Server의 dba group 아닌 Unix 계정에 대해서 sqlplus 등을 실행 권한 부여하기

단계 2. DB Server의 dba group 아닌 Unix 계정에 대해서 tnsnames.ora Lookup 권한 부여하기

단계 1) 실행 화일 권한 부여하기

예제    : Oracle DBMS 가 설치된 UNIX/LINUX 에 다른 계정(dba group)이 아닌 경우,
          $ORACLE_HOHE/bin 에 존재하는 화일(거이 여기 존재 sqlplus, tkprof, exp, imp) 에 권한 부여하기
         
Summary : Oracle Database 가 설치된 곳에서 Oracle_Home 아래의 Bin(실행화일 sqlplus 등) 에 대한 퍼미션이
          Oracle Patch 중 제한적으로 바뀌면 이것을 허용(덜 보안적으로) 하기 위해서는 아래 쉘을 실행 한다.
          $ cd $ORACLE_HOME/install  $ ./changePerm.sh

출처 : 메타링크
문서 번호 : 공지:438676.1
The script is located in the ORACLE_HOME/install directory on Unix and Linux systems (there is no equivalent for Windows).
This script ships with Oracle Database versions 9.2.0.8 and Oracle 10g releases.
Output when the changePerm.sh script is executed:

$ cd $ORACLE_HOME/install
$ ./changePerm.sh
-------------------------------------------------------------------------------
Disclaimer: The purpose of this script is to relax permissions on some of the
files in the database Oracle Home so that all clients can access them.
Please note that Oracle Corporation recommends using the most restrictive file
permissions as possible for your given implementation. Running this script
should be done only after considering all security ramifications.
-------------------------------------------------------------------------------

Do you wish to continue (y/n) : y
Finished running the script successfully

Please see /tmp/changePerm_err.log for errors and /tmp/changePerm.log for the log of events

This script should be run by Oracle Software owner to relax the permission and can be run while database processes are active.

단계 2 ) TNSNAMES.ORA 공유하기
 
 UNIX 환경에서 ORACLE 과 다른 그룹에서 SQLPLUS / EXPORT / TNSPING 을 사용하기 위해서는
 changePerm.sh을  수행 하여 화일 Permission 을 부여 하고, PATH 를 지정하면 가능하다.
 그렇다면 이제 TNSNAMES.ORA 를 공유 하기 위해서는 어떻게 해야 할까?
 답은 TNS_ADMIN 을 통해서 가능하다.
 주의 사항 : tnsnames.ora 화일에 대한 퍼미션이 있어야 한다.
 tnsnames.ora 를 Lookup 할 필요가 있는 계정의 .profile 에 아래와 같이 설정한다.
 $ id
 testuser
 $ more .profile
 # Setting PATH for sqlplus / tnsping / exp / imp
 export ORACLE_BASE=/app/oracle
 export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
 export PATH=$ORACLE_HOME/bin:$PATH:
 # Setting PATH for tnsnames.ora
 export TNS_ADMIN=$ORACLE_HOME/network/admin

반응형
Posted by [PineTree]
ORACLE/ADMIN2009. 4. 8. 16:07
반응형
1. SID 란

A name that identifies a specific instance of a running pre-release 8.1 Oracle database.
For any database, there is at least one instance referencing the database.

For pre-release 8.1 databases, SID is used to identify the database.
The SID is included in the connect descriptor of a tnsnames.ora file and
in the definition of the listener in the listener.ora file. 

쉽게 이야기해서 SID 란 Oracle Instance 라고 생각하면 된다.
  ( 3 NODE 일 경우 SID 와 DB 와의 관계 )
  SID ---|
  SID ------- DB
  SID ---|

2. SID 확인 방법
select THREAD#,INSTANCE,STATUS from v$thread;
1    TG2010D    OPEN
--> Single DB 일 경우 Return 되는 Row 가 하나
1    TG2010D1    OPEN
2    TG2010D2    OPEN
--> RAC (2Node) 일 경우 Return 되는 Row 는 두개 이다.

3. DB_NAME 이란 ?
DB_NAME 은 8자리로 제한되는 Database 구분자이다.
이 파라미터는 CREATE DATABASE 일때 지정된다.
하나의 System 에 다수의 Database 가 운영되는 환경이라며,
SID(Oracle Instance Identifier) 와 DB Name 을 Matching 시켜 줘야 한다.
일반적으로 Single Database 일 경우 SID 와 DB Name 을 동일 하게 운영한다.
SID 지정을 통해서 접속 하고자 하는 DB NAME 을 지정한다고 생각하면 된다.
알파벳, _(Underscore), #(Number Signe), $(Dollar Singe) 만 가능하다.

EX) A(A), B(B), C(C)  -- DB_NAME ( SID )순서
    상기와 같은 구성 이라면 C 에 접속 하고자 한다면
    EXPORT ORACLE_SID=C [ UNIX, LINUX ]
    SET $ORACLE_SID=C   [ NT ]
    를 통해서 SID 지정 후 접속하면 원하는 DATABASE 에 접속이 가능하다.


4. DB_NAME 확인
select NAME, DB_UNIQUE_NAME from v$database ;
NAME      DB_UNIQUE_NAME
--------- ------------------------------
TG2010D   TG2010D

5. RAC 일 경우 INIT 파라미터 예제
*.cluster_database_instances=2
*.cluster_database=true
*.db_domain=''
*.db_name='TG2010D'
TG2010D1.instance_number=1
TG2010D2.instance_number=2

6. 기타
   일반적으로 SID 변경이란 SID 및 DB_NAME 을 변경 한다구 생각하면 된다.
   SID(INSTACNE) 만 변경 할 일은 극히 드물다..
   전 해본적이 없음


7. Global_Name
 네트워크 환경에서 데이타베이스 이름이 동일하여 구분하기 어려울 때,
 사용하는 전역 데이터베이스 이름을 사용할 것인지를 결정하는 파라미터이다.
 DB_NAME.DB_DOMAIN 이름으로 구성된다.
 INIT PARAMETER 화일 예제 )
  *.db_domain=''
  -- DB_DOMAIN 은 128 자 까지 가능, Default 값은 WORLD
  *.db_name='TG2010T'
 
8. Global_Name 관련 파라미터
8.1 GLOBAL_NAMES
SYS>show parameters global_names
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     FALSE
==> Default 는 FALSE 값이다.
    DB LINK 를 통해서 접속 시에 GLLBAL_NAME 과 일치해야 하는지,
    FALSE 이면 DB LINK 값과 GLOBAL_NAME 이 달라도 접속이 된다.
    GLOBAL_NAME 의 효과(10번항목) 같이 생각하면
    GLOBAL_NAME 을 TRUE 로 설정하고, 같은 DOMAIN NAME 을 사용한다면
    같은 DOMAIN 내에서만 DB LINK 사용이 가능할것으로 예상된다.

8.2 GLOBAL_NAMES 변경
  SYS> ALTER SESSION SET global_names = TRUE;
  SYS> ALTER SYSTEM SET global_names = FALSE;

8.3 DB_DOMAIN    
SYS>show parameter domain
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_domain                            string
==>  DB_DOMAIN 은 128 자 까지 가능, Default 값은 WORLD

8.4 DB_NAME
SYS>show parameters db_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------
db_name                              string      TG2010T
==> GLOBAL_NAME = DB_NAME.DB_DOMAIN 이니 TG2010T 가 GLOBAL_NAME 이고
    GLOBAL_NAME 의 설정은 FALSE 이다.


9. Global_Name 확인 및 변경
SYS>ALTER DATABASE RENAME GLOBAL_NAME TO TG2010Z ;
Database altered.

SYS>select * from global_name ;
GLOBAL_NAME
--------------------------------------------------------------------------------
TG2010Z

SYS>ALTER DATABASE RENAME GLOBAL_NAME TO TG2010T ;
Database altered.

SYS>select * from global_name ;

GLOBAL_NAME
--------------------------------------------------------------------------------
TG2010T

10. Global_Name의 효과 
10. 1 Global_Name 효과
 DB LINK 에 영향을 준다.
 DB LINK 생성 시에 DB_DOMAIN 값이 아닌, GLOBAL_NAME 의 접미사 부분이
 자동으로 DBA_DB_LINKS.DB_LINK 에 붙는다.
 예제) 일반적으로 .WORLD 를 붙이지 않는다.
       테스트로 구별이 쉽게 하기 위해서 .WORLD 로 설정
      
 SYS> SELECT GLOBAL_NAME  FROM GLOBAL_NAME ;
 TG.WORLD
 SYS> CREATE DATABASE LINK JT USING 'JT' ;
 SYS> SELECT OWNER,DB_LINK,HOST FROM DBA_DB_LINKS  ;
 SYS    JT2010D.WORLD   JT010d
 ==> 이런식으로 LOCAL DATABASE 의 아래의 값이 DB LINK 생성 시 자동으로 할당된다.
     예제에선 .WORLD
 ( SELECT GLOBAL_NAME  FROM GLOBAL_NAME ) - ( SELECT INSTANCE_NAME FROM V$INSTANCE )
 
10.2  DB_DOMAIN 확인 방법
 SYS> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME = 'db_domain';

출처 : http://www.oracleclub.com/article/23879
반응형
Posted by [PineTree]
ORACLE/ADMIN2009. 4. 6. 09:17
반응형
결론 :
1. Oracle 에서 칼럼 단위로 권한 부여가 가능한것은 Insert , Update 에 대해서다
2. Delete 의 경우 Row의 구성 Column 전체에 대한 작업이니 칼럼 단위 권한 부여 자체가 불가능한것으로 생각된다.
3. select 의 경우 View 를 통한 대체가 가능하다.
         

SYS> create table myemp as select * from scott.emp ;

SYS> grant select on myemp to scott ;

SYS> grant update ( sal ) on myemp to scott ;

SYS> create public synonym myemp for myemp ;

SCOTT> select * from myemp ;
==> 조회 가능

SCOTT>delete myemp ;
delete myemp
       *
ERROR at line 1:
ORA-01031: insufficient privileges
==> 삭제 불가능

SCOTT>insert into myemp ( empno, ename) values ( 9999, ’TG’);
insert into myemp ( empno, ename) values ( 9999, ’TG’)
            *
ERROR at line 1:
ORA-01031: insufficient privileges
==> 입력 불가능

SCOTT>update myemp  set ENAME=’TG’ where empno=7369 ;
update myemp  set ENAME=’TG’ where empno=7369
       *
ERROR at line 1:
ORA-01031: insufficient privileges
==> 권한 없는 칼럼 Update 불가능

SCOTT>update myemp  set sal = sal*2 where EMPNO=7369;
1 row updated.
==> 권한 있는 칼럼 Update 가능

SYS>grant update (job) on myemp to scott ;
Grant succeeded.
==> 다른 칼럼에 대한 Update 권한 추가적으로 부여

-- 칼럼에 대한 선택적인 권한 부여가 가능하다.

[ 추가 테스트 ]
1. 선택적 Column 에 대한 Select 권한 부여
SYS>grant select ( empno, ename ) on emp to scott ;
grant select ( empno, ename ) on emp to scott
             *
ERROR at line 1:
ORA-00969: missing ON keyword


SYS>grant select ( empno ) on emp to scott ;
grant select ( empno ) on emp to scott
             *
ERROR at line 1:
ORA-00969: missing ON keyword

==> Select 권한에 대해서는 칼럼 단위로 권한을 부여 할수 없다.

2. 선택적 Column 에 대한 Insert 권한 부여
SYS>grant insert ( empno, ename ) on myemp to scott ;
Grant succeeded.

SCOTT>insert into myemp ( empno,ename) values (9999,’TG’);
1 row created.
==> 권한 있는 칼럼에 대한 Insert 가능
SCOTT>insert into myemp ( empno,ename,job) values (9998,’TG2’,’Clerk’);
insert into myemp ( empno,ename,job) values (9998,’TG2’,’Clerk’)
            *
ERROR at line 1:
ORA-01031: insufficient privileges
==> 권한 없는 칼럼에 대한 Insert 불가능

3. 권한 체크

SYS>select GRANTEE, TABLE_NAME, PRIVILEGE from dba_Tab_privs where table_name =’MYEMP’;
no rows selected

SYS> select GRANTEE, TABLE_NAME, COLUMN_NAME, PRIVILEGE
     from dba_col_privs where table_name =’MYEMP’
     order by TABLE_NAME, PRIVILEGE,COLUMN_NAME, GRANTEE ;

GRANTEE      TABLE_NAME    COLUMN_NAME  PRIVILEGE
------------ ------------- ------------ ----------
SCOTT        MYEMP         ENAME        INSERT
SCOTT        MYEMP         EMPNO        INSERT
SCOTT        MYEMP         SAL          UPDATE
SCOTT        MYEMP         JOB          UPDATE

출처 : http://www.oracleclub.com/article/24483
반응형
Posted by [PineTree]
ORACLE/SQL2009. 4. 2. 17:18
반응형
오라클 데이터베이스  scott유저의 emp테이블을 보면 empno와 mgr컬럼이 있습니다. 


mgr 컬럼의 데이터는 해당 사원의 관리자의 empno를 의미 합니다.


예를 들어서 아래의 데이터를 보면은..


EMPNO ENAME SAL MGR
------ --------- ------- ----------
7369 SMITH 800 7902
7902 FORD 3000 7566


empno 7369사원의 관리자는 7902의 empno를 가진 사원이며
empno 7902사원의 관리자는 7566의 empno를 가진 사원입니다.


이런 상위 계층과 하위계층의 관계를 오라클에서는 START WITH와 CONNECT BY를 이용해서
쉽게 가져올 수 있습니다.

상품의 카테고리(대분류,중분류,소분류...)를 조회 할때 START WITH와 CONNECT BY를 이용하면
트리 구조로 편리하게 조회 할 수 있습니다.


게시판에서의 일반글과 답변글 과의 관계에서도 사용 할 수 있습니다



START WITH와 CONNECT BY를 이용해 데이터를 계층적인 순서로  조회할 수 있습니다.

 
START WITH

- 계층 질의의 루트(부모행)로 사용될 행을 지정 합니다..
- 서브쿼리를 사용할 수도 있습니다.


CONNECT BY

- 이 절을 이용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정 합니다.
- 보통 PRIOR 연산자를 많이 사용 합니다..
- 서브쿼리를 사용할 수 없습니다..



CONNECT BY의 실행순서는 다음과 같습니다.

- 첫째 START WITH절
- 둘째 CONNECT BY 절
- 세째 WHERE 절 순서로 풀리게 되어있습니다.


-- 테스트를 위해서 scott유저로 접속을 합니다.
SQLPLUS scott/tiger


예제1)상위계층과 하위 계층 관계의 순서대로 쿼리해 옴


-- LEVEL 예약어를 사용하여  depth를 표현 할 수 있습니다.
-- 직업이 PRESIDENT을 기준으로 계층 구조로 조회합니다.

SQL>SELECT LEVEL,empno,ename, mgr
       FROM  emp
       START WITH job = 'PRESIDENT'   -- 직업이 PRESIDENT를 기준으로
       CONNECT BY PRIOR  empno = mgr; -- 사원(empno)과 관리자(mgr)의  관계를 계층 구조로 조회
   
   LEVEL      EMPNO ENAME                       MGR
--------- ---------- -------------------- ----------
       1       7839      KING
       2       7566      JONES                      7839
       3       7788      SCOTT                     7566
       4       7876      ADAMS                     7788
       3       7902      FORD                       7566
       4       7369      SMITH                       7902
       2       7698      BLAKE                       7839
       3       7499      ALLEN                       7698
       3       7521      WARD                       7698
       3       7654      MARTIN                     7698
       3       7844      TURNER                     7698
       3       7900      JAMES                       7698
       2       7782      CLARK                       7839
       3       7934      MILLER                      7782


--  LEVEL컬럼은 depth를 나타냅니다.
-- JONES의 관리자는 KING을 나타냅니다.
--  SCOTT의 관리자는 JONES를 나타냅니다.
--  예제와 같이 상/하의 계층 구조를 쉽게 조회 할 수 있습니다.



예제2) 사원성명을 계층 구조로 보여 줌


SQL>SET LINESIZE 100
SQL>SET PAGESIZE 100
SQL>COL ename FORMAT A20

-- 예제1의 결과를 가지고 LPAD함수를 이용해서 ename왼쪽에 공백을 추가 했습니다.
SQL>SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno, mgr, job
      FROM emp
      START WITH job='PRESIDENT'
      CONNECT BY PRIOR empno=mgr;

ENAME                     EMPNO        MGR JOB
-------------------- ---------- ---------- ---------
KING                        7839                   PRESIDENT
   JONES                  7566       7839      MANAGER
       SCOTT             7788       7566      ANALYST
           ADAMS         7876       7788      CLERK
       FORD               7902       7566      ANALYST
           SMITH          7369       7902      CLERK
   BLAKE                  7698       7839      MANAGER
       ALLEN               7499       7698     SALESMAN
       WARD               7521       7698     SALESMAN
       MARTIN             7654       7698     SALESMAN
       TURNER            7844       7698     SALESMAN
       JAMES              7900       7698     CLERK
   CLARK                  7782       7839     MANAGER
       MILLER              7934       7782     CLERK


예제3) 레벨이 2까지만 쿼리해서 가져오는 예제
 
SQL>SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno, mgr, job
       FROM emp
       START WITH job='PRESIDENT'
      CONNECT BY PRIOR empno=mgr
       AND LEVEL <=2 ;
   
ENAME                     EMPNO        MGR JOB
-------------------- ---------- ---------- ---------
KING                        7839                   PRESIDENT
   JONES                  7566       7839      MANAGER
   BLAKE                  7698       7839      MANAGER
   CLARK                  7782       7839      MANAGER  

예제4) 각 label별로 급여의 합과 인원수를 구하는 예제

SQL> SELECT LEVEL, SUM(sal) total,COUNT(empno) cnt
       FROM emp
       START WITH job='PRESIDENT'
       CONNECT BY PRIOR empno=mgr      
       GROUP BY LEVEL
       ORDER BY LEVEL;

    LEVEL      TOTAL        CNT
---------- ---------- ----------
        1       5000          1
        2       8275          3
        3      13850          8
        4       1900          2



데이터가 많아질 경우....

-
첫째로 풀리는 START WITH job='PRESIDENT' job 컬럼에 index가 생성되어 있지 않는다면 속도를 보장할 수 없습니다.

- 그리고 둘째로 풀리는 CONNECT BY PRIOR empno = mgr 역시 PRIOR 쪽의 컬럼값이 상수가 되기 때문에 MGR컬럼에 index를 생성하여야 CONNECT BY의 속도를 보장할 수 있습니다.
 
- 계층구조를 CONNECT BY, START WITH로 풀면 부분범위 처리가 불가능하고 Desc으로 표현하기가 어렵 습니다.


참고..

http://dblab.changwon.ac.kr/oracle/sqltest/hierarchical.html/
http://www.en-core.com/




출처
  ================================================
    * 데이터베이스 정보공유 커뮤니티 oracleclub.com
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
  ================================================
※ oracleclub 강좌를 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
※ oracleclub 강좌는 개인의 학습용으로만 사용 할 수 있습니다. 학원 홍보용이나 수익을 얻기 위한 용도로
    사용을 하시면 안됩니다. ^^
반응형

'ORACLE > SQL' 카테고리의 다른 글

Oracle sum() over() - 누적계산  (0) 2009.06.12
Oracle 관리 및 SQL Plus 정리  (0) 2009.06.10
SQL 실행순서  (0) 2009.02.24
다중 행(Multiple-Row) 서브쿼리 IN, NOT IN, ANY, ALL, EXISTS  (0) 2009.02.24
Oracle 내부함수  (0) 2009.02.24
Posted by [PineTree]
ORACLE/11G2009. 4. 2. 15:31
반응형

Oracle Advanced Compression

 

 

도입

 

효과적인 사업 운영에 필요한 데이터 용량의 폭발적 증가로 기업이 골치를 앓고 있 습니다. 이런 데이터 증가 추세의 원인으로 몇 가지 중대한 요인을 들 수 있습니다. 우선, 사베인스 옥슬리와 HIPP 등 최근에 분 규제 환경의 변화가 이런 추세를 일으 키고 있습니다. 그러면서 방대한 정보를 장기간 보유하도록 기업에 요구하고 있습니 다. 광대역 기술의 발전으로 가능해진 리치 멀티미디어 컨텐츠의 인터넷 대량 배포 역시 전체 데이터 용량의 증가에 한몫 하고 있습니다. 기하급수적인 데이터 증가 추 세를 더욱 촉발시킨 것은 웹 2.0의 도래입니다. 웹 2.0에서는 협업 애플리케이션이 엄청난 양의 사용자 생성 컨텐츠(UGC)를 선전합니다. 여러 자료를 살펴 보면 데이 터 용량이 2-3년마다 거의 두 배로 증가하고 있습니다.

 

이같은 데이터 용량의 급격한 증가는 IT 관리자에게 위협적인 관리 문제를 던져줍 니다. 무엇보다 가장 큰 문제는 스토리지 비용의 상승입니다. MB당 스토리지 비용 이 지난 몇 년간 큰 폭으로 떨어지고 있긴 하지만, 온라인에 보관해야 하는 데이터 용량이 엄청나게 증가하면서 스토리지가 IT 예산의 최대 지출 항목이 되었습니다. 게다가 데이터 용량이 급증하는데 따른 애플리케이션의 확장성과 성능도 지속적으 로 사업상 요구에 맞춰 증가해야 합니다.

 

Oracle Database 11g는 Advanced Compression 옵션을 도입하여 고객이 이 문제 에 대처할 수 있게 지원합니다. 오라클 압축 기술의 혁신 덕택에 고객은 대량의 데이 터 관리에 따르는 자원과 비용을 절감할 수 있습니다. 한때는 신기하게 생각했던 테 라바이트 규모의 데이터베이스가 기업 데이터 센터에 널리 확산되고 있어 이같은 신기술의 도입은 시기 적절합니다.

 

Oracle Advanced Compression

 

Oracle Database 11g의 Advanced Compression 옵션은 고객이 자원 활용을 극대 화하고 비용을 절감할 수 있게 지원하는 광범위한 압축 기능 세트를 가지고 있습니 다. 정규 관계형(체계화) 데이터, 비체계화 데이터 (문서, 스프레드시트 등), 백업 데 이터를 비롯한 모든 데이터 유형의 압축을 지원하므로 IT 관리자는 전체 데이터베 이스 저장 용량을 크게 줄일 수 있습니다. 그리고 사람들은 압축의 가장 확실한 이점 이 스토리지 비용의 감소라고 생각하지만, Advanced Compression 옵션에 포함된 혁신적인 기술들은 메모리와 네트워크 대역폭을 비롯하여 IT 인프라의 모든 구성요 소에 대한 자원 요구와 기술 비용을 낮출 수 있게 고안되어 있습니다.

 

관계형 데이터의 압축

 

오라클은 데이터베이스 압축 기술 도입의 선구자 중 하나입니다. Oracle Database 9i는 Direct path loading 과 CREATE TABLE AS SELECT…(CTAS) 등의 대량 로딩 작업 중에 데이터를 압축할 수 있게 해주는 테이블 압축을 여러 해 전에 도입했 습니다. 이런 압축 형태는 일괄 처리를 통해 데이터베이스에 대부분의 데이터를 로 딩하는 데이터웨어하우징 환경에 가장 적합했습니다. Oracle Database 11g는 OLTP 테이블 압축이라는 새로운 기능을 도입하고 있는데, 이는 INSERT, UPDATE, DELETE와 같이 전통적인 DML (데이터 조작어)을 포함하여 모든 유형 의 데이터 조작 작업 중에 데이터를 압축할 수 있는 기능입니다. 또한 이 기능은 쓰 기 작업의 오버헤드를 낮춰서 성능을 크게 향상시키기 때문에 데이터웨어하우징 환 경이나 OLTP 환경에도 적합합니다. 이 획기적인 신기능은 모든 애플리케이션 작업 에 압축의 이점을 제공합니다.

 

Oracle Database 9i에 도입된 테이블 압축 기능이Enterprise Edition (EE)의 기본 기능이며 Database 11g에서도 기본 기능이라는 데 주목할 필요가 있습니다. 하지만 새로운 OLTP 테이블 압축 기능은 엔터프라이즈 에디션에 추가로 라이센스를 받아 야 하는 Oracle Advanced Compression 옵션의 일부입니다.

 

혁신적인 알고리즘

 

오라클은 관계형 데이터와 함께 실행할 수 있게 특별 설계된 고유한 압축 알고리즘 을 사용합니다. 이 알고리즘을 실행하면 데이터베이스 블록 내부에서, 그것도 여러 줄(column)을 가로지르며 중복 값을 제거합니다. 압축 블록에는 압축 메타데이터를 보존하는 심볼 테이블(symbol table)이란 구조가 있는데, 블록을 압축할 때 제일 먼 저 중복 값의 복사본 하나를 심볼 테이블에 추가하여 중복 값을 제거합니다. 그런 다 음 각 중복 값을 심볼 테이블의 해당 항목에 대한 짧은 참조로 대체합니다. 압축 데 이터를 원상태로 바꾸는 데 사용하는 메타데이터가 블록 내부에 들어 있기 때문에, 이 혁신적 설계의 압축 데이터는 데이터베이스 블록 내부에 독립적으로 존재합니다. 전역 데이터베이스 심볼 테이블을 유지하는 경쟁 압축 알고리즘과 비교할 때, 압축 데이터 이용 시 추가 I/O를 도입하지 않는 오라클의 고유한 방식이 이롭습니다.

 

 

그림 1. 압축 블록 對비압축 블록

 

테이블 압축의 이점

 

일정 환경에서 추출한 압축비는 압축하는 데이터의 성향, 특히 데이터의 개체 수에 따라 달라집니다. 일반적으로, 테이블 압축 기능을 이용하여 고객이 압축 데이터의 저장 공간 사용을 2-3배 줄일 수 있다고 예상할 수 있습니다. 즉, 비압축 데이터가 사용하는 공간 용량이 압축 데이터의 그것보다 2-3배 많아지게 됩니다. 압축의 이 점은 단순히 디스크 저장 공간의 절약에 그치지 않습니다. 처음에 블록의 압축을 해 제하지 않고도 오라클이 압축 블록을 직접 읽을 수 있다는 것이 한 가지 중요한 장점 입니다. 그래서 압축 데이터를 이용해도 눈에 띄는 성능 저하가 없습니다. 사실, 많 은 경우 이용하는 블록 수가 줄기 때문에 I/O 감소로 인해 성능이 향상될 수도 있습 니다. 게다가, 메모리 공간을 늘리지 않고도 캐시에 더 많은 데이터를 저장할 수 있 어 버퍼 캐시의 효율성이 높아질 수 있습니다.

 

최소 성능 오버헤드

 

앞서 설명했듯이, 테이블 압축 기능은 읽기 작업에 악영향을 끼치지 않습니다. 그러 나 데이터 작성 시에는 쓰기 작업에 대한 성능 오버헤드가 제거되는 것이 불가피한 반면 압축 시에는 추가 작업이 필요합니다. 하지만 오라클은 OLTP 테이블 압축에 대한 오버헤드를 최소화하기 위해 많은 연구를 했습니다. 오라클은 쓰기 작업이 발 생할 때마다 데이터를 압축하기보다는 일괄 방식으로 블록을 압축합니다. 새롭게 초 기화된 블록은 블록의 데이터가 내부에서 통제되는 임계에 도달할 때까지 압축되지 않고 그대로 있습니다. 트랜잭션으로 인해 블록 내 데이터가 이 임계에 도달하면, 해 당 블록의 모든 컨텐츠가 압축됩니다. 이후 더 많은 데이터가 블록에 추가되어 다시 임계에 도달하면 블록 전체가 재압축되면서 압축 수준이 최고 수준에 이르게 됩니 다. 더 이상 압축하면 블록에 이로울 수 없다고 오라클이 판단할 때까지 이 프로세스 가 반복됩니다. 블록의 압축을 유발하는 트랜잭션만 압축 오버헤드가 최소화 됩니 다. 때문에 압축된 블록에 있는 대부분의 OLTP 트랜잭션이 압축되지 않은 블록의 트랜잭션과 동일한 성능을 갖게 되는 것입니다.

 

그림 2. 블록 압축 프로세스

 

비체계화 데이터의 압축

 

Oracle Database 11g의 새로운 기능인 SecureFiles는 문서, 스프레드시트 및 XML 파일과 같은 비체계화 컨텐츠의 저장에“두 세계의 최고 장점”을 지닌 아키텍처를 지원합니다. SecureFiles 은 오라클 데이터베이스의 장점을 모두 갖고 있으면서 전 통적인 시스템과 비교하여 파일 데이터에 대해 뛰어난 성능을 구현하도록 특별 설 계되어 있습니다. SecureFiles는 ANSI 표준 대형 객체(LOB)의 수퍼세트 용으로, 기존의 LOB나 베이직 파일 (BasicFiles)에서 수월하게 마이그레이션할 수 있게 지 원합니다. 이제 IT 조직들은 SecureFiles 로 오라클의 관계형 데이터와 관련 파일 데이터 모두를 관리할 수 있습니다. Oracle Database 11g의 Advanced Compression 옵션에는 SecureFiles 데이터의 저장 공간을 크게 감소시키는 기술이 적용되어 있습니다.

 

SecureFiles 복제

 

애플리케이션에서 똑같은 파일 사본을 저장하는 일은 매우 흔합니다. 한 가지 일반 적인 예가 이메일 애플리케이션입니다. 이메일 애플리케이션에서는 사용자가 똑같 은 첨부 파일을 수신할 수 있습니다. SecureFiles 복제는 SecureFiles 데이터의 복 사본을 제거하는 지능형 기술입니다. 오라클은 SecureFiles 데이터의 한 이미지를 저장하고서 복사본을 이 이미지의 참조로 대체합니다. 10명의 사용자가 1MB의 똑 같은 파일이 첨부된 이메일을 받는 이메일 애플리케이션에 대해 생각해 보십시오.

 

SecureFiles 복제가 없다면 시스템에서 10명의 사용자 한명 한명에 대해 파일 사본 을 하나씩 저장할 것이고 그러면 10MB의 저장 공간이 필요할 것입니다. 이 경우 이 메일 애플리케이션에서 SecureFiles 복제 기술을 사용했다면, 1MB의 첨부 파일을 한번만 저장하면 됐을 것입니다. 그러면 스토리지 요구량이 90% 절약될 것입니다. 스토리지 절약 외에 SecureFiles 복제 기술은 애플리케이션 성능을 높이기도 합니다. 구체적으로 말해서, SecureFiles 이미지의 참조만 작성하기 때문에 쓰기와 복사 작업의 효율성이 높아집니다. 게다가, 똑같은 SecureFiles 데이터가 이미 버퍼 캐시 에 존재하면, 읽기 작업이 향상될 수도 있습니다.

 

그림 3. SecureFiles 복제

 

SecureFiles 압축

 

Oracle Database 11g의 Advanced Compression 옵션은 SecureFiles 데이터의 크 기를 제어하는 또 다른 메카니즘을 제공합니다. 앞서 논의한 복제 외에, SecureFiles 압축(SecureFiles Compression)은 업계 표준의 압축 알고리즘을 활용하여 SecureFiles 데이터의 스토리지 요구량을 더욱 최소화합니다. 문서나 XML 파일과 같은 일반 파일을 압축하면 크기가 2-3배 줄어듭니다. 내장된 지능형 기술을 이용 하는 SecureFiles 압축은 압축의 이점이 없는 데이터의 경우 압축을 피합니다. SecureFiles 자격으로 데이터베이스에 끼워 넣기 전에 타사 도구를 통해 압축된 문 서가 그 예입니다.

 

현재 지원하는 압축 수준은 두 종류이며, 그 중 높은 쪽의 경우 압축률이 높지만 대 신 CPU 사용이 더 많이 요구됩니다. SecureFiles 압축의 일반적인 CPU 오버헤드는 3%와 5% 사이입니다. 애플리케이션에서는 압축된 SecureFiles 데이터에 대한 무 작위 읽기/쓰기를 여전히 수행할 수 있습니다. 압축된 데이터가 더 작은 크기의 데이 터로 분해되기 때문입니다. 이렇게 하면, 전체 파일을 데이터베이스에 끼워 넣기 전 에 압축할 때와 비교하여 성능을 크게 향상시킬 수 있습니다.

 

백업 데이터의 압축

 

데이터베이스 내부에 저장된 데이터를 압축하는 것 외에, Oracle Advanced Compression은 백업 데이터를 압축하는 기능도 있습니다. Recovery Manager (RMAN)와 Data Pump는 오라클 데이터베이스에 저장된 데이터를 백업할 때 가장 많이 사용하는 도구 두 가지입니다. RMAN은 데이터베이스 데이터를 블록별로 백 업하는데, 이를 일명“물리적”백업이라고 합니다. 이 물리적 백업은 데이터베이스, 테이블 공간 또는 블록 단위 복구를 수행할 때 사용할 수 있습니다. 반면, Data Pump는“논리적”백업을 수행할 때 사용하며, 하나 이상의 테이블에 있는 데이터를 플랫 파일(flat file)에 오프로딩합니다. Oracle Advanced Compression은 두 도구 중 하나에 의해 생성된 백업 데이터를 압축하는 기능이 있습니다.

 

Data Pump 압축

 

Data Pump와 관련된 메타데이터를 압축하는 기능은 Oracle Database 10g Release 2에서 제공합니다. Oracle Database 11g에서는 내보내기할 테이블 데이터를 압축 할 수 있도록 이 압축 기능을 확장했습니다. Data Pump 압축은 인라인 작업이므로파일 크기가 감소하면 디스크 공간이 크게 절약됩니다. 운영 체제나 파일 시스템의 압축 유틸리티와 달리, Data Pump 압축은 가져오기 측면에서 볼 때 완전히 인라인 방식입니다. 따라서 덤프 파일(dump file)을 가져오기 전에 압축을 해제하지 않아도 됩니다. 압축된 덤프 파일 집합은 데이터베이스 관리자가 추가 절차를 밟지 않아도 가져오기 작업 중에 자동으로 압축이 풀립니다.

 

오라클 샘플 데이터베이스에 있는 다음의 압축 예에서, 모든 데이터와 메타데이터를 동시에 압축하면서 OE 및 SH 스키마를 내보냈습니다. 그 결과, 덤프 파일의 크기가 74.67% 감소했습니다.

 

3가지 버전의 gzip (GNU zip) 유틸리티와 한 가지 UNIX 압축 유틸리티를 6.0MB의 덤프 파일 집합을 압축하는 데 사용했습니다. 덤프 파일 크기의 감소가 Data Pump 압축과 비슷했습니다. 덤프 파일 크기의 감소폭은 데이터 유형과 기타 요인에 따라 달라진다는 점에 유의하십시오.

 

압축 파일을 이용하여 Data Pump 기능을 충분히 사용할 수 있습니다. 정규 파일에 서 사용하는 모든 명령어는 압축 파일에서도 효력을 발휘합니다. 덤프 파일 집합에 서 어떤 부분을 압축해야 할지는 사용자가 다음의 옵션으로 결정할 수 있습니다.

• ALL: 모든 내보내기 작업의 압축을 지원합니다.

• DATA-OLNY: 모든 데이터가 덤프 파일에 압축 포맷으로 작성됩니다.

• METADATA-ONLY: 모든 메타데이터가 덤프 파일에 압축 포맷으로 작 성됩니다. 이것이 기본값입니다.

• NONE: 전체 내보내기 작업의 압축을 사용 안 함으로 합니다.

Recovery Manager 압축

 

기업 데이터베이스의 지속적인 팽창은 데이터베이스 관리자에게 커다란 도전입니 다. 데이터베이스 백업을 보존하는 스토리지 요구량과 백업 절차의 수행은 데이터베 이스 크기의 영향을 직접적으로 받습니다. 오라클의 백업 및 복구 유틸리티인 Recovery Manager (RMAN)는 Oracle Database 10g에 압축 기능을 도입했습니 다. RMAN 압축을 이용하면 백업에 필요한 스토리지가 대폭 줄어듭니다. RMAN이 오라클 데이터베이스와 긴밀하게 통합되어 있어서 디스크나 테이프에 기록하기 전 에 백업 데이터가 압축되므로 복구에 앞서 압축을 풀 필요가 없습니다. 이렇게 하면 스토리지 비용이 상당히 줄어듭니다. 그러나 엄청난 압축비로 인해 백업 성능이 영 향을 받아 백업 창이 길어질 수 있습니다.

 

Oracle Advanced Compression은 백업에 쓰이는 스토리지 요구량을 크게 감소시키 면서 RMAN 성능을 향상시키는 RMAN 압축 기능을 도입하고 있습니다. 업계 표준 의 ZLIB 압축 알고리즘에 기반한 RMAN 압축 백업은 Oracle Database 10g의 압축 백업보다 최대 40% 빠릅니다. 오라클은 압축비의 감소폭을 약 20%로 하여 이런 급 격한 성능 향상을 달성하고 있습니다. 빠른 RMAN 압축은 정상 근무 시간에 행하는 점증 백업을 위한 완벽한 솔루션입니다.

 

네트워크 트래픽의 압축

 

Data Guard는 관리, 모니터링 및 자동화 소프트웨어 인프라를 지원하여 하나 이상 의 스탠바이 데이터베이스를 생성, 유지, 모니터링함으로써 기업 데이터의 고장, 재 해, 오류, 데이터 손상을 방지합니다. Data Guard는 리두 데이터 (트랜잭션 복구에 필요한 정보)를 이용하여 기본 데이터베이스와 스탠바이 데이터베이스의 동기화를 유지합니다. 트랜잭션이 기본 데이터베이스에서 발생하면, 리두 데이터가 생성되어 로컬 리두 로그 파일에 작성됩니다. Data Guard의 리두 전송 서비스 (Redo Transport Services)는 이 리두 데이터를 스탠바이 데이터베이스로 전송하는 데 사 용합니다.

 

네트워크나 스탠바이 서비스의 작동이 중단되면 리두 데이터가 스탠바이 서버에 전 송되는 것이 차단됩니다. 작동 중단이 해결되면, 오라클이 스탠바이 데이터베이스의 동기화에 필요한 모든 리두 데이터를 전송하는 식으로 Redo gap resolution을 자동 수행합니다. Oracle Advanced Compression에는 Redo gap resolution 도중에 리두 데이터가 네트워크에서 전송될 때 이를 압축하는 기능이 있습니다. 이 압축을 통해 네트워크 대역폭이 극대화되어 Redo gap resolution 처리량이 증가합니다. 압축으 로 Redo gap resolution이 최대 2배까지 빨라질 수 있으며, 그러면 스탠바이 데이터 베이스가 신속하게 동기화되고 고가용성이 구현됩니다.

 

결론

 

데이터 용량의 폭발적 증가가 기업에 심각한 위협이 되고 있습니다. 기업은 순익에 영향을 끼치지 않는 범위에서 변화하는 비즈니스 환경에 빠르게 적응해야 합니다. 그리고 IT 관리자는 비용 억제를 위해 기존 인프라를 효율적으로 관리하되, 높은 애 플리케이션 성능을 계속 구현해야 합니다.

 

Oracle Database 11g의 Advanced Compression 옵션은 IT 관리자가 복잡한 환경 에서 성공할 수 있게 견고한 압축 기능 세트를 지원합니다. Advanced Compression 옵션을 이용하여 기업은 데이터 센터의 모든 구성요소 전반에 걸쳐 늘어나는 데이 터 요구량을 효율적으로 관리할 수 있습니다. 이를 통해 최고 수준의 애플리케이션 성능을 계속 구현하면서 비용을 최소화할 수 있습니다.

 

 

출처 : 한국 오라클

제공 : DB포탈사이트 DBguide.net

출처명 : 한국 오라클
반응형
Posted by [PineTree]
ORACLE/ADMIN2009. 4. 2. 10:24
반응형

* 사용자 비밀번호를 변경하는 방법.

        ALTER USER <username> IDENTIFIED BY <new_password>;

오라클 8 부터는 sqlplus 를 통해, 유닉스처럼 비밀번호를 변경한다.

         SQL> password
         Changing password for SCOTT
         Old password:
         New password:
         Retype new password:

만약 다른 사용자의 비밀번호를 변경하고 싶다면, 'password 사용자이름' 으로 한다.

 

* 사용자를 삭제하고, 만드는 방법.
생성)
  CREATE USER scott
  IDENTIFIED BY tiger  -- 비밀번호
  DEFAULT TABLESACE  tools -- 테이블스페이스 설정
  TEMPORARY TABLESPACE temp; -- 임시테이블 스페이스 설정 ( 임시테이블스페이스가 정렬시사용되므로 정렬공간확보 )
삭제)
        DROP USER scott CASCADE; 

생성후 권한 주기)
        GRANT CONNECT, RESOURCE TO scott;
        GRANT DBA TO scott; 

사용자의 테이블 스페이스 사용량 지정하기)
        ALTER USER scott QUOTA UNLIMITED ON tools;

 

* 사용자 관리방법

DBA 는 특정사용자를 Lock, Unlock, 비밀번호를 바꾸도록 할 수 있다.
오라클 9i 는 디비를 만들때 dbca(DB Configuration Assistant) 를 사용해서, SYS, SYSTEM 을 제외한 모든 계정을 Lock 할 수 있다.
사용하려면, 각 계정들을 Unlock 해줘야 한다.

         ALTER USER scott ACCOUNT LOCK       -- lock a user account
         ALTER USER scott ACCOUNT UNLOCK;    -- unlocks a locked users account
         ALTER USER scott PASSWORD EXPIRE;   -- 새로운 비밀번호로 바꾸도록 한다.

 

* 비밀번호 관리 방법.
오라클은 한자리 비밀번호나, 사용자 계정 그대로 비밀번호를 만드는 것을 허용한다. 별로 좋지 않다.

오라클 8 부터는 profile 을 통해 비밀번호를 관리한다.

 CREATE PROFILE my_profile LIMIT
  PASSWORD_LIFE_TIME 30;
 ALTER USER scott PROFILE my_profile;

설정 가능한 값들)
  FAILED_LOGIN_ATTEMPTS - 로그인 몇번 실패시 Lock 할 것인지?
  PASSWORD_LIFE_TIME    - 패스워드 유효일수
  PASSWORD_REUSE_TIME   - 패스워드 재사용일수 (number of days before a password can be reused)
  PASSWORD_REUSE_MAX    - 현재 패스워드를 재사용한다면, 변경할때까지의 날수.
                         (number of password changes required before the current password can be reused )
  PASSWORD_LOCK_TIME    - 로그인 실패로 인한 Lock 일수
  PASSWORD_GRACE_TIME   - 로그인은 허용되고 경고가 주어지는 기간.
  PASSWORD_VERIFY_FUNCTION - 패스워드 변경 함수.


* administrative (privileged) 사용자란.
SYSOPER 혹은 SYSDBA 의 권한을 가진 사용자를 의미한다. 이런 권한이 있으면 디비가 꺼져있어도 디비에 접근해서 작업을 할 수 있다.
이 권한을 관리하는 것은 디비가 아닌 패스워드 파일을 사용해서 하는데, 패스워드 파일은 orapwd 유틸리티를 사용해서 만들어낸다.

 

* administrative user 로 연결하는 방법.
administrative user는 유닉스에서는 DBA 그룹이고, 윈도우즈 NT 계열에서는 ORA_DBA 그룹이다.
         connect / as sysdba

         connect sys/password as sysdba

 

* 패스워드파일을 만드는 방법.
패스워드 파일은 $ORACLE_HOME/dbs/orapw or orapwSID 에 있다.
원격의 접속자를 위해 패스워드 파일을 생성한다.

1) 로그인 해서
2) 다음 명령실행. :
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=mypasswd
3) Shutdown the database (SQLPLUS> SHUTDOWN IMMEDIATE)
4) INIT.ORA file 을 열어 REMOTE_LOGIN_PASSWORDFILE=exclusive 라고 수정한다.
5) Startup the database (SQLPLUS> STARTUP)

 

* 패스워드파일에 사용자 추가하는 방법.
패스워드파일에 어떤 사용자가 있는지는 SYS.V_$PWFILE_USERS 에 쿼리해서 알아낸다.
sysdba 나 sysoper 권한을 주면 추가되고, 혹은 orapwd 유틸을 사용한다.
         GRANT SYSDBA TO scott;

 

* 다른 사용자로 바꾸고 싶다면.

        SQL> select password from dba_users where username='SCOTT';
        PASSWORD
         -----------------------------
         F894844C34402B67

        SQL> alter user scott identified by lion;
        User altered.

        SQL> connect scott/lion
        Connected.

        REM Do whatever you like...

        SQL> connect system/manager
        Connected.

        SQL> alter user scott identified by values 'F894844C34402B67';
        User altered.

        SQL> connect scott/tiger
        Connected.

 

* 원격 로그인시에 반드시 비밀번호를 입력하도록 한다.

REMOTE_OS_AUTHENT = FALSE 로 한다.

 

* 오라클 생성시 만들어지는 유저들... (이렇게나 많았나????)

 

SYS/CHANGE_ON_INSTALL or INTERNAL
Oracle Data Dictionary/ Catalog
생성 스크립트: ?/rdbms/admin/sql.bsq and various cat*.sql scripts
패스워드수정가능(디비만든 직후)
삭제불가

 

SYSTEM/MANAGER
The default DBA user name (please do not use SYS)
생성 스크립트: ?/rdbms/admin/sql.bsq
패스워드수정가능(디비만든 직후)
삭제불가


OUTLN/OUTLN
Stored outlines for optimizer plan stability
생성 스크립트: ?/rdbms/admin/sql.bsq
패스워드수정가능(디비만든 직후)
삭제불가


SCOTT/TIGER, ADAMS/WOOD, JONES/STEEL, CLARK/CLOTH and BLAKE/PAPER.
Training/ demonstration users containing the popular EMP and DEPT tables
생성 스크립트: ?/rdbms/admin/utlsampl.sql
패스워드수정가능(디비만든 직후)
삭제가능


HR/HR (Human Resources), OE/OE (Order Entry), SH/SH (Sales History).
Training/ demonstration users containing the popular EMPLOYEES and DEPARTMENTS tables
생성 스크립트: ?/demo/schema/mksample.sql
패스워드수정가능
삭제가능


CTXSYS/CTXSYS
Oracle interMedia (ConText Cartridge) administrator user
생성 스크립트: ?/ctx/admin/dr0csys.sql


TRACESVR/TRACE
Oracle Trace server
생성 스크립트: ?/rdbms/admin/otrcsvr.sql


DBSNMP/DBSNMP
Oracle Intelligent agent
생성 스크립트: ?/rdbms/admin/catsnmp.sql, called from catalog.sql
패스워드수정가능 - snmp_rw.ora 파일에 새로운 비밀번호를 넣는다
삭제가능 - Only if you do not use the Intelligent Agents


ORDPLUGINS/ORDPLUGINS
Object Relational Data (ORD) User used by Time Series, etc.
생성 스크립트: ?/ord/admin/ordinst.sql


ORDSYS/ORDSYS
Object Relational Data (ORD) User used by Time Series, etc
생성 스크립트: ?/ord/admin/ordinst.sql


DSSYS/DSSYS
Oracle Dynamic Services and Syndication Server
생성 스크립트: ?/ds/sql/dssys_init.sql


MDSYS/MDSYS
Oracle Spatial administrator user
생성 스크립트: ?/ord/admin/ordinst.sql


AURORA$ORB$UNAUTHENTICATED/INVALID
Used for users who do not authenticate in Aurora/ORB
생성 스크립트: ?/javavm/install/init_orb.sql called from ?/javavm/install/initjvm.sql


PERFSTAT/PERFSTAT
Oracle Statistics Package (STATSPACK) that supersedes UTLBSTAT/UTLESTAT
생성 스크립트: ?/rdbms/admin/statscre.sql


* 의심가는 테이블 감시하는 법.
DBMS_FGA 를 통해 의심가는 테이블에 대한 감시 정책을 생성한다.
DBA_AUDIT_POLICIES 에서 감시정책의 리스트를 볼 수 있고,
감시 기록은 DBA_FGA_AUDIT_TRAIL 에 남는다.
DBMS_FGA PL/SQL패키지는 테이블이나 뷰에 대한 정책을 적용하기 위한 패키지 안의 프로시져 즉 인터페이스이다.

 -- Add policy on table with auditing condition...
 execute dbms_fga.add_policy('HR', 'EMP', 'policy1', 'deptno > 10');
 -- Must ANALYZE, this feature works with CBO (Cost Based Optimizer)
 analyze table EMP compute statistics;

 select * from EMP where c1 = 11;  -- Will trigger auditing
 select * from EMP where c1 = 09;  -- No auditing

 -- Now we can see the statments that triggered the auditing condition...
 select sqltext from sys.fga_log$
 delete from sys.fga_log$;

 

* 뒤에 두개는 무시.. 머리 아픔. 뭔지 모르겠음.
* What is a Virtual Private Database?
* What is Oracle Label Security?

출처 : Tong - jackie92님의 ◐ Database Tip통

반응형

'ORACLE > ADMIN' 카테고리의 다른 글

SID, DB_NAME,GLOBAL_NAME  (0) 2009.04.08
[oracle]Column 단위로 권한 부여 하기  (0) 2009.04.06
ORACLE Data Pump  (0) 2009.04.02
as sysdba로 접속시 암호 물어보게 하는 방법  (0) 2009.03.27
index 정보 조회  (1) 2009.03.20
Posted by [PineTree]
ORACLE/ADMIN2009. 4. 2. 09:41
반응형

Data Pump

1.1. Oracle Data pump란?

 

Oracle Data Pump는 Oracle Database 10g 버전에서 제공되는Utility로 향상된 데이터 이동을 가능하게 한다.
이전 버전의 오라클을 설치한 홈 디렉토리에는 ‘imp’,’exp’라는 실행 파일이 있다. 이는 오라클에서 제공하는 backup 및 recovery 에 사용되는 도구 이다.
Exp는 데이터베이스에 저장되어 있는 데이터들을 OS의 바이너리 파일로 전환하는 도구이고, imp는 바이너리 파일을 데이터베이스 안의 데이터로 전환하는 도구이다. 새로 등장한Data Pump는 exp 와 imp를 대체하기 위하여 오라클 10g 버전부터 제공되는 유틸리티로 Exp / Imp 와 유사한 동작을 하지만 data pump 가 훨신 효율적으로 동작한다.
Exp/Imp와 비교하여 그 효율성을 예를 들자면 exp시 single thread 에서 2배가 빠르고 imp시 15~45배 빠르므로 데이터베이스간의 bulk data 와 meta data의 전송시간을 줄이는데 효율적으로 사용될 수 있다.

 

1.2. Data pump Key features

 

1.2.1. Fast Performance

앞에서 말한 것과 같이Data Pump Export and Import 유틸리티는 기존의 Export and Import 유틸리티보다 훨씬 빠르다. Data Pump Export 에서 direct path method를 사용시 single stream data unload에서 기존의 export 보다 2배가 빠르다. 이는 direct path API가 더 효과적으로 수정 되었기 때문이다. Parallelism 의 level에 따라서는 더욱 향상된 performance를 보일 수 있다.

 

Data pump import 에서는 single stream 의 data load 시 기존의 import 보다 15~45배가 빠르다. 이는 기존의 import 에서 단순히 export dump파일에서 레코드를 읽고 일반적인 insert into 명령을 사용해서 대상 테이블에 삽입 하는 대신에 Data pump import 는Direct path method loading 을 사용하기 때문이다.


 

1.2.2. Improved Management Restart


 

모든 Data Pump operation은 Data Pump job을 실행하는 스키마에 만들어진 master table을 가지고 있다. Master table은 현재 수행중인 모든 export또는 import시 객체의 상태정보와 dump file set에서의 위치정보를 가지고 있다. 이는 갑작스런 job의 중단에도 job 의 성공적인 종료에 상관 없이 어떤 object의 작업이 진행 중이었는지 알 수 있게 해 준다. 그래서 master table 과 dump file set 이 있는 한 모든 정지된 data pump job은 데이터 손실 없이 다시 시작할 수 있다.

 

1.2.3. Fine-Grained Object Selection

 

Data Pump job 은 거의 모든 type의 object를 exclude 또는 include 시킬 수 있다.
아래의 parameter 가 사용된다.
* EXCLUDE - 특정 객체 유형을 제외한다. (예: EXCLUDE=TABLE:EMP)
* INCLUDE - 특정 객체 유형을 포함한다. (예: INCLUDE=TABLE_DATA)
* CONTENT - 로드를 취소할 데이터를 지정한다.
적합한 키: (ALL), DATA_ONLY 및 METADATA_ONLY.
* QUERY - 테이블의 부분 집합을 엑스포트하기 위해 사용되는 술어 절이다.

 

1.2.4. Monitoring and Estimating Capability

 

Data Pump는 Standard progress , error message를 log file에 기록할 뿐만 아니라 현재 operation의 상태를 대화식모드 ‘command line’으로 보여 준다. Job의 completion percentage를 측정하여 보여주며 초 단위의 지정한 time period에 따라 자동으로 update하여 표시한다.

1개 이상의 client가 running job에 attach 수 있기 때문에 업무환경에서 job을 실행하고, detach 한 후 집에 가서 job을 reattach 하여 끊김 없이 모든 job을 모니터링 할 수 있다.
모든export job이 시작할 때 대략적인 전체unload양을 측정해 준다. 이는 사용자가 dump file set을 위한 충분한양의 disk space를 할당할 수 있게 한다.

 

1.2.5. Network Mode

 

Data Pump Export and Import는 job의 source가 리모트 인스턴스 일 경우를 위한 network mode를 지원한다.

 

Network을 통해 import를 할 때 source가 dump file set이 아닌 다른 database에 있기 때문에 dump file이 없다.

 

Network를 통해 export를 할 때 souce가 다른시스템에 있는 read-only database 일 수 있다. Dumpfile은 local(non-networked)export 처럼 local 시스템에 쓰이게 된다.

 

1.3. Data pump overview

 

1.3.1. Data Pump Overview

 

- expdp/impdp로 제공 되어 진다.
- exp/imp의 superset 이다.
- Data 와 metadata를 매우 빠른 속도로 load/unload 하는 Server-based facility이다.
                    ==> dump file sets은 Server에 생성
- DBMS_DATAPUMP PL/SQL Package를 이용하여 사용 가능 하다.
- Web-based interface <--access from EM Database Control이 가능하다.
- Data Pump job을 실행하는 schema에 master table(MT)이 만들어 진다.

MT는 해당 job의 모든 것(aspects)을 관리하며 data pump(expdp)의 마지막 단계에서 pump file sets에 기록된다.


file based import 작업(impdp)시 dump file에 있는 MT 내용을 current user의 schema에 제일먼저 loading한다.


계획 또는 예상치 못한 job의 중단 시 재가동수 있게 하는 Data Pump의 핵심이 MT 이다.



Client process는 Data Pump API를 call한다.


-여러 개의 clients가 모니터링하고 control하기 위해서 job을 attach/detach 한다.

 

1.3.2. Data Pump Benefit

 

- Data Access Methods : Direct Path, External Tables
- Detach from, reattach to log-running jobs
- Restart Data Pump Jobs
- Find-grained object selection <-- 원하는 rows만(EXCLUDE, INCLUDE, CONTENT)
- Explicit database version specification
- Parallel execution
- Estimate export job space <--ESTIMATE_ONLY
- Network Mode에서는 Remote의 server process가 DB link를 이용하여 Local에 dump file을 직접 만들어 준다..
- Import 과정에서 target data file name, schema, tablespace 을 변경할 수 있다.

1.3.3. Data Pump File Locations

 

- Data pump file 종류

- DUMP file : data와 metadata를 포함한다.
- LOG file : operation과 관련된 message를 기록한다.
- SQL file : impdp에서 SQLFILE operation의 결과를 기록한다.
- Data Pump는 server-based 이므로 Oracle directory path를 통해서 Data Pump file에 access한다.
Absolute path는 보안상 지원되지 않는다.

- Order of precedence of file locations

 

1) per-file directory
- dump file, log file, sql file 마다 지정될 수 있다. 콜론(:)으로 directory 와 file name 을 구분한다.
예) dumpfile=AA:A.dmp

 

2) DIRECTORY parameter

- directory object를 사용한다.
Create Directory DIR_PJH as '/home/oracle10g/test/';
Grant read, write On Directory DIR_PJH to SCOTT;
Directory=AA
Dumpfile=A.dmp


3) DATA_PUMP_DIR 환경변수

- DIRECTORY Parameter를 대신하여 directory object name을 설정한다.
export DATA_PUMP_DIR=AA
Dumpfile=A.dmp
- 위의 모든 경우에 시도하려는 operation에 대해 directory object에 대해 적절한 access privs가 있어야 한다.
Export할 경우 모든 file에 대해 write access가 필요하다.
Import할 경우 dump file에 대해 read access, log file과 sql file에 대해 write access가 필요하다.

 

1.3.4. Data Pump File Naming and size

 

(1) DUMPFILE
- file list는 , 로 분리한다.
- %U template --> two-character, fix-width, 01부터 증가하는 integer 를 가진다.
- DUMPFILE 이 지정되어 있지 않으면 expdat.dmp 가 default로 사용된다. Default는 autoextensible이다.

 

(2) FILESIZE
- FILESIZE 가 지정되어 있으면 각 file은 FILESIZE안으로 만들어지고 늘어날 수 없다. dump 공간이 더 필요하고 template %U가 지정되었다면, 새로운 파일이 생성된다. 그렇치 않으면 사용자는 new file을 add하라는 메세지를 받는다.

 

(3) PARALLEL
- %U가 지정되면 PARALLEL parameter의 개수만큼 초기에 file이 생성된다.
- 기존에 존재하는 file과 이름이 중복될 경우 overwrite하지 않고 에러를 발생시키고 job이 abort된다.
- 복수개의 dump file template가 제공되면 round-robin fashion으로 dump file을 생성하는 데 사용한다.

 

1.3.5. Data Pump Filtering

 

(1) Find-grained object selection
- 기존의 exp/imp는 index, trigger, grant, constraint를 포함하거나 제외하는 것이 있으나
data pump는 virtually any type of object를 포함하거나 제외할 수 있다.
- EXCLUDE 와 IMCLUDE는 mutually exclusive 하다.
- INCLUDE = object_type[:"name_expr"]
- EXCLUDE = object_type[:"name_expt"]
- 모든 view, 모든 package, EMP로 시작하는 Index만 제외한다.
EXCLUDE=view
EXCLUDE=package
EXCLUDE=INDEX:"LIKE 'EMP%' "

 

(2) Data Selection
- CONTENT = ALL(def) | METADATA_ONLY | DATA_ONLY
- QUERY = [Schema.][table_name:]"query_clause"
- CONTENT에 data_only가 사용되면 EXCLUDE 와 INCLUDE를 사용할 수 없다.QUERY=hr.employees:"WHERE department_id in (10,20) and salary < 1600 ORDER BY department_id"
    <--특정 table을 지정해서 해당 table로 한정. imp시에도 적용.

 

1.3.6. Data Pump Job Monitoring

 

- 데이터베이스 뷰에서 실행되는 Data Pump 작업에 관해서도 자세한 정보를 확인할 수 있다.
- DBA_DATAPUMP_JOBS – 작업에서 실행되는 작업자 프로세스(DEGREE 열)의 수를 확인 할 수 있다.
- DBA_DATAPUMP_SESSIONS –이전 뷰 및 V$SESSION과 조인하여 foreground 프로세스 세션의 SID확인 할 수 있다.

 

select sid, serial#
from v$session s, dba_datapump_sessions d
where s.saddr = d.saddr;


- V$SESSION_LONGOPS - 작업 완료에 걸리는 시간을 예측하는 또 다른 유용한 정보를 얻을 수 있다.

select sid, serial#, sofar, totalwork
from v$session_longops
where opname = 'CASES_EXPORT' and sofar != totalwork;

totalwork 열에는 총 작업량이 표시되는데, 이 중 현재까지 sofar 작업량을 완료했으므로 이를 통해 얼마나 더 시간이 걸릴지 예측할 수 있다.

 

1.3.7. Data Pump Export and Import

 

1) Parallel Full Export and Import

> expdp system/manager full=y parallel=4
dumpfile=DATADIR1:full1%U.dat,
DATADIR2:full2%U.dat,
DATADIR3:full3%U.dat,
DATADIR4:full4%U.dat
filesize=2G

 

<--4개의 work process를 가진 full export,
Pump file은 DATADIR1, DATADIR2, DATADIR3, DATADIR4 네 곳에 라운드로빈 방식으로 생성된다.
2G를 넘지 않으면서 최소4개 생성.
Job 과 master table 이름은 default로 SYSTEM_EXPORT_FULL_01 를 가진다.

 

>impdp system/manager directory= NET_STORGAE_1 parallel=4
dumpfile= full1%U.dat,
full2%U.dat,
full3%U.dat,
full4%U.dat

 

<--expdp로 받은 dump file을 network를 통해 NET_STORAGE_1 이라는 directory object위치로 보내졌다. Default import는 dump set 전체를 import하는 것이므로 Full=y 는 필요 없다.
Job 과 master table 이름은 default로 SYSTEM_IMPORT_FULL_01 를 가진다.

 

2) Limited Schema Export (fine-grained)

incluse=function include=procedure include=pacakge include=type include=view:"like 'PRODUCT%'"
> expdp system/manager schemas=hr,oe
directory=USR_DATA
dumpfile=schema_hr_oe.dat
parfile=exp_par.txt <----------------------------

 

<--HR, OE schema에서 모든 func, prod, pkg, user-defined type, PRODUCT로 시작하는 view를 export한다.
Schema definition과 system priv graints는 export되지 않는다.

 

> impdp system/manager directory=USR_DATA
dumpfile=schema_hr_oe.dat
sqlfile=schema_hr_oe.dat

 

<--실제 import는 하지 않고 dmp file에서 DDL 문장만 뽑아낸다.

 

3) Network Mode Import (DB Link)

network_link=finance.hq.com <--db link
remap_schema=payroll:finance

> impdp system/manager schemas=hr,sh,payroll
parfile=imp_par.txt <--------------------------------

<--Source DB에 dblink로 붙어서 hr, sh, payroll schema를 가져온 다음 imp 한다.
이때 payroll schema로 finance schema로 만들어 진다.
SYSTEM은 IMPORT_FULL_DATABASE role을 가지고 있고 Source DB에 대해서는 EXPORT_FULL_DATABASE role을 가지므로 Target DB에 해당 schema definition이 없으면 만들어진다.
flashback_time은 예전의 CONSISTENT와 동일하다.

 

4) Data-Only Unload

> expdp hr/hr parfile=exp_par.txt dumpfile=expdat.dmp content=data_only
include=table:"in ('DEPARTMENTS','DEPARTMENTS_HIST','EMPLOYEES','EMP_HIST')"
query="where DEPARTMENT_ID != 30 order by DEPARTMENT_ID"

 

1.3.8. Data Pump restarting

 

1) Attaching to Existing Job
> expdp system/manager attach=EXP_TS1


<--Job name(MT name) :dba_datapump_jobs
해당 스키마에 active export job 이 하나만 있을 경우 안 적어도 된다..

job: EXP_TS1
owner: SYSTEM
mode:
status:
Export> STOP_JOB
<--중지.
Attach session은 terminate 되고 실행되던 job은 controlled fashion으로 run down 된다.

해당 Job은 dump file과 SYSREM.EXP_TS1 table이 disturbed 되지 않는 한 startable 하다.

 

2) Restarting Stopped Job

> expdp system/manager attach=exp_ts1
<--같은 schema안에 여러 개의 outstanding job이 있으면 job name지정한다.

Export> parallel=4
Export> start_job
Export> status =600 <--10분

<-- detailed per-work process가 10분 단위로 regular status message를 보여준다.
KILL_JOB로 job을 kill한다.

<--status, status=600(초)
stop_job,
start_job,
continue_client: attach한 session이 계속 받아서 expdp 실행한다.(logging mode로 전환)
exit_client: Attach를 빠져 나옴. expdp는 background로 실행한다.

 

1.4. Data pump 실습

 

1.4.1. 전체 데이터베이스 export 실습

 

SQL> conn /as sysdba
연결되었습니다.

SQL> create directory dump as 'C:₩oracle/backup'; ->directory를 생성한다.

 

디렉토리가 생성되었습니다.
SQL> grant read ,write on directory dump to public; -> directory에 권한을 부여한다.

 

권한이 부여되었습니다.

 

SQL> host

Microsoft Windows XP [Version 5.1.2600]

(C) Copyright 1985-2001 Microsoft Corp.
C:₩oracle>expdp system/oracle dumpfile=full.dmp directory=dump full=y job_name=Lucie

Export: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 17:17:41

Copyright (c) 2003, 2005, Oracle. All rights reserved.

접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
"SYSTEM"."LUCIE" 시작 중: system/******** dumpfile=full.dmp directory=dump full=y job_name=Lucie
BLOCKS 메소드를 사용하여 예측 진행 중...
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA 처리 중
BLOCKS 메소드를 사용한 총 예측: 66.56 MB ->대략적인dmp파일 size를 예측할 수 있다.
객체 유형 DATABASE_EXPORT/TABLESPACE 처리 중
객체 유형 DATABASE_EXPORT/SYS_USER/USER 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/USER 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/POST_INSTANCE/PROCDEPOBJ 처리 중

. . "SCOTT"."DEPT" 48.00 MB 2097152행이 엑스포트됨
. . "SYSMAN"."MGMT_JOB_CRED_PARAMS" 11.70 KB 18행이 엑스포트됨
. . "SYSMAN"."MGMT_JOB_PROP_PARAMS" 8.820 KB 12행이 엑스포트됨
. . "SYSMAN"."MGMT_JOB_STEP_PARAMS" 127.3 KB 1128행이 엑스포트됨

 

Control + c ->중간에 끊어도 job이 끊기지 않고 명령모드로 들어간다.

 

Export>status
작업: LUCIE
작업: EXPORT
모드: FULL
상태: EXECUTING
처리된 바이트: 50,337,376
완료율: 84 -> 진행률을 알 수 있다.
현재 병렬도: 1
작업 오류 수: 0
덤프 파일: C:₩ORACLE₩BACKUP₩FULL.DMP
기록된 바이트: 55,226,368

작업자 1 상태:
상태: EXECUTING
객체 스키마: SYSMAN
객체 이름: MGMT_JOB_EXECUTION
객체 유형: DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA

완료된 객체: 45
총 객체: 408
작업자 병렬도: 1

Export> stop_job -> job 을 정지시킨다.
이 작업을 정지하겠습니까([예]/아니오):

 

C:₩oracle>

C:₩oracle>sqlplus "/as sysdba"

 

SQL*Plus: Release 10.2.0.1.0 - Production on 화 5월 29 17:32:59 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

다음에 접속됨:

 

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options

SQL>select owner_name,job_name,operation,job_mode,state from dba_datapump_jobs;
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE
---------- ---------- ------------ ----------- ------------
SYSTEM LUCIE EXPORT FULL NOT RUNNING
                                 ->job 상태를 확인할 수 있다.

SQL> exit

 

C:₩oracle>expdp system/oracle attach=lucie ->job을 다시 attach한다.

Export: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 17:35:54

 

Copyright (c) 2003, 2005, Oracle. All rights reserved.

접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options

 

작업: LUCIE
소유자: SYSTEM
작업: EXPORT
생성자 권한: FALSE
GUID: 18405C1B820C4ABB9B30C4948E0D356F
시작 시간: 화요일, 29 5월, 2007 17:35:56
모드: FULL
인스턴스: ora10
최대 병렬도: 1
EXPORT 작업 매개변수:
매개변수 이름 매개변수 값:
  CLIENT_COMMAND    system/******** dumpfile=full.dmp directory=dump full=y job_name=Lucie
상태: IDLING
처리된 바이트: 51,646,000
완료율: 99
현재 병렬도: 1
작업 오류 수: 0
덤프 파일: C:₩oracle/backup₩full.dmp
기록된 바이트: 55,914,496

작업자 1 상태:
상태: UNDEFINED

 

SQL>select owner_name,job_name,operation,job_mode,state from dba_datapump_jobs;
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE
---------- ---------- ------------ ----------- ------------
SYSTEM LUCIE EXPORT FULL IDLING
                            ->job 상태를 확인할 수 있다.

Export> start_job ->Job을 다시restar한다.

Export> status

작업: LUCIE
작업: EXPORT
모드: FULL
상태: COMPLETING
처리된 바이트: 51,646,001
완료율: 100
현재 병렬도: 1
작업 오류 수: 0
덤프 파일: C:₩oracle/backup₩full.dmp
기록된 바이트: 64,684,032

작업자 1 상태:
상태: WORK WAITING

C:₩oracle>

 

Logfile 확인

 

지정한 directory 위치에 “export” log file을 확인 한다. 파일의 끝부분을 보면 성공적으로 완료됨을 확인할 수 있다.

"SYSTEM"."LUCIE" 작업이 17:18:56에서 사용자 요청에 의해 정지됨
LUCIE 작업이 화요일, 29 5월, 2007 17:35 에서 다시 열림 ->작업을 정지했다 다시 시작한 것을 확인 할 수 있음


"SYSTEM"."LUCIE" 재시작 중: system/******** dumpfile=full.dmp directory=dump full=y job_name=Lucie
마스터 테이블 "SYSTEM"."LUCIE"이(가) 성공적으로 로드됨/로드 취소됨
******************************************************************************
SYSTEM.LUCIE에 대해 설정된 덤프 파일:
C:₩oracle/backup₩full.dmp
"SYSTEM"."LUCIE" 작업이 17:37:12에서 성공적으로 완료됨

 

1.4.2. 특정 스키마 DDL 스크립트 생성 실습

 

SQL> conn /as sysdba
연결되었습니다.


SQL> create directory dump as 'C:₩oracle/backup'; ->directory를 생성한다.
디렉토리가 생성되었습니다.

SQL> grant read ,write on directory dump to public; -> directory에 권한을 부여한다.
C:₩oracle>impdp system/oracle directory=dump dumpfile=full.dmp schemas=scott sqlfile=ddl_scott.sql
<이 명령은 dump로 지정된 디렉터리에 ddl_scott.sql로 명명된 파일을 생성하며 엑스포트 덤프 파일 내의 객체 스크립트를 생성한다.>


Import: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 19:12:13

Copyright (c) 2003, 2005, Oracle. All rights reserved.

접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
마스터 테이블 "SYSTEM"."SYS_SQL_FILE_SCHEMA_01"이(가) 성공적으로 로드됨/로드 취소됨


"SYSTEM"."SYS_SQL_FILE_SCHEMA_01" 시작 중: system/******** directory=dump dumpfile=full.dmp schemas=
scott sqlfile=ddl_scott.sql
객체 유형 DATABASE_EXPORT/SCHEMA/USER 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/GRANT/SYSTEM_GRANT 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/ROLE_GRANT 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/DEFAULT_ROLE 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/PROCACT_SCHEMA 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/TABLE 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS 처리 중
"SYSTEM"."SYS_SQL_FILE_SCHEMA_01" 작업이 19:12:22에서 성공적으로 완료됨

 

Logfile 확인

 

- dump로 지정된 C:₩oracle/backup에 ddl_scoot.sql파일이 생성된다.

 

-- CONNECT SYSTEM
-- new object type path is: DATABASE_EXPORT/SCHEMA/USER
CREATE USER "SCOTT" IDENTIFIED BY VALUES 'F894844C34402B67'
DEFAULT TABLESPACE "USERS"
TEMPORARY TABLESPACE "TEMP";
-- new object type path is: DATABASE_EXPORT/SCHEMA/GRANT/SYSTEM_GRANT
GRANT UNLIMITED TABLESPACE TO "SCOTT";
GRANT CREATE SESSION TO "SCOTT";
-- new object type path is: DATABASE_EXPORT/SCHEMA/ROLE_GRANT
GRANT "RESOURCE" TO "SCOTT";
-- new object type path is: DATABASE_EXPORT/SCHEMA/DEFAULT_ROLE
ALTER USER "SCOTT" DEFAULT ROLE ALL;
-- new object type path is: DATABASE_EXPORT/SCHEMA/PROCACT_SCHEMA
-- CONNECT SCOTT
BEGIN
sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','CURRENT_SCHEMA'), export_db_name=>'ORA10', inst_scn=>'283762');
COMMIT;
END;
/
-- new object type path is: DATABASE_EXPORT/SCHEMA/TABLE/TABLE

-- CONNECT SYSTEM
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0) NOT NULL ENABLE,
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ;
CREATE TABLE "SCOTT"."DEPT"
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ;

 

1.4.3. 존재하는 table import

 

1) content=data_only 포함한 경우

 

C:₩oracle>Impdp system/oracle dumpfile=full.dmp directory= dump content=data_only job_name=data_import logfile=table_log tables=scott.dept

Import: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 19:42:15

Copyright (c) 2003, 2005, Oracle. All rights reserved.

접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
마스터 테이블 "SYSTEM"."DATA_IMPORT"이(가) 성공적으로 로드됨/로드 취소됨
"SYSTEM"."DATA_IMPORT" 시작 중: system/******** dumpfile=full.dmp directory= dump content=data_only
job_name=data_import logfile=table_log tables=scott.dept
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA 처리 중
. . "SCOTT"."DEPT" 48.00 MB 2097152행이 임포트됨
"SYSTEM"."DATA_IMPORT" 작업이 19:42:52에서 성공적으로 완료됨

 

2) content=data_only 포함하지 않은 경우

 

C:₩oracle>Impdp system/oracle dumpfile=full.dmp directory= dump job_name=data_import logfile=table_log tables=scott.dept

Import: Release 10.2.0.1.0 - Production on 화요일, 29 5월, 2007 19:41:02

Copyright (c) 2003, 2005, Oracle. All rights reserved.

접속 대상: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the OLAP and Data Mining options
마스터 테이블 "SYSTEM"."DATA_IMPORT"이(가) 성공적으로 로드됨/로드 취소됨
"SYSTEM"."DATA_IMPORT" 시작 중: system/******** dumpfile=full.dmp directory= dump job_name=data_impo
rt logfile=table_log tables=scott.dept
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/TABLE 처리 중
ORA-39151: "SCOTT"."DEPT" 테이블이 존재합니다. 건너 뛰기 table_exists_action으로 인해 모든 종속 메타 데이터 및 데이터를 건너 뜁니다.
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA 처리 중
객체 유형 DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS 처리 중
"SYSTEM"."DATA_IMPORT" 작업이 1 오류와 함께 19:41:09에서 완료됨
* 임포트 프로세스의 기본 작업 방식은 테이블 및 연관된 모든 객체를 생성하고 테이블이 있는 상태에서 오류를 만들어 낸다.

 

* 임포트 프로세스의 기본 작업 방식은 테이블 및 연관된 모든 객체를 생성하고 테이블이 있는 상태에서 오류를 만들어 낸다.

 

 

다음 명령은 대화형 모드에서 적합합니다.
참고: 약어도 허용됨

 

 

 

다음 명령은 대화형 모드에서 적합합니다.
참고: 약어도 허용됨

 

 

 

출처 : GOODUS

제공 : DB포탈사이트 DBguide.net

반응형
Posted by [PineTree]
ORACLE/ADMIN2009. 3. 27. 17:04
반응형

orapwd를 password와 sys user의 password가 일치해야 접속이 가능합니다.

 

0. DB startup 상태

1. sqlnet.ora에 다음을 주석 처리
   % vi $ORACLE_HOME/network/admin/sqlnet.ora
       #SQLNET.AUTHENTICATION_SERVICES = (NONE)

 

2. 오라클 alter user 명령으로 설정
    SQL> connect / as sysdba
    SQL> alter user sys identified by change_on_install;

 

3. orapwd unix command 명령으로 설정
    % mv orapwDBTEST orapwDBTEST.old
    % orapwd file=orapwDBTEST password=change_on_install entries=5

 

4. initDBTEST.ora file에 다음을 설정
    % vi $ORACLE_HOME/dbs/initDBTEST.ora
        remote_login_passwordfile=exclusive

    # spfile을 사용할 경우
   SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;

 

5. sqlnet.ora에 주석처리했던 내용을 풀어 줌.
  % vi $ORACLE_HOME/network/admin/sqlnet.ora
     SQLNET.AUTHENTICATION_SERVICES = (NONE)

 

6. DB Shutdown/startup

반응형

'ORACLE > ADMIN' 카테고리의 다른 글

오라클 간단한 보안 시큐리티설정들..  (0) 2009.04.02
ORACLE Data Pump  (0) 2009.04.02
index 정보 조회  (1) 2009.03.20
em 삭제하고 재 설치  (0) 2009.03.19
TABLE별 용량을 파악해보자!  (0) 2009.03.13
Posted by [PineTree]
ORACLE/ORACLE TOOL2009. 3. 27. 09:21
반응형
출처 : http://blog.daum.net/maihikki/9078992

방 1)

Sql Plus 에서 아래 코드 붙여넣기 하신후 실행하시고

@C:\oracle\ora92\rdbms\admin\utlxplan.sql

toad-view-option-oracle-general 에서 가운데쯤 보시면 Explan Plan Table Name이라는 항목이 있습니다. 거기에 Plan_Table 이라고 기재하신후 사용하면 됩니다.

 

 

방 2)

토드에서 explain plan을 볼려면 아래의 스크립트를 실행 시킵니다.
C:\Program Files\Quest Software\TOAD\temps\toadprep.sql

 

toadprep.sql을 열어보면 toad유저를 생성할 때..
테이블스페이스를 지정하는데 데이타베이스에 존재하는 테이블 스페이스에 맞게 수정해야 합니다.

 

=============== 아래 부분은 제 오라클에 맞게 수정한 부분입니다. ===================

CREATE USER TOAD IDENTIFIED BY TOAD
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON USERS
QUOTA 0K ON SYSTEM;

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

 

toadprep.sql스크립트가 에러없이 수행이 되면 오라클에 toad라는 유저가 생성되고...

toad_plan_table, toad_plan_sql 테이블이 생성이 됩니다.

또한 시퀀스, 시노님, 권한부여, 함수가 에러없이 생성이 되면 설치가 다 끝난겁니다.


 

실행계획을 보는 방법은 우선 SQL을 실행할 유저로 토드를 접속합니다..

 

그리고 나서 sql 을 실행하고 나면 토드 아래에  explain plan과 autotrace를 보면 됩니다.

 

아래의 그림은 제 피시에서 실행한 예 입니다..아래의 explain plan이 보이지 ?을 경우에는 토드 메뉴에서 view->explain plan을 선택하거나 아래 그림 맨 오른쪽 세번째 있는 엠브런스차 아이콘을 클릭하면 됩니다..

 

실행 계획을 보는 방법은 Operation 컬럼에 나온 내용과 아래의 표를 참고해서  보시면 됩니다.

그리고 Explain Plan 오른쪽에   Auto Trace를 보면 Trace정보가 나옵니다..

 

AutoTrace관련 몇 가지를 설명하면 아래와 같습니다.

  • db block gets : current gets에 대한 논리적인 IO횟수(in memory)
  • consistent gets : read-consistent gets에 대한 논리적인 IO횟수(in memory)
  • physical reads : Disk에서 읽은 블럭수
  • redo size : (DML)문에 의해 생성된 redo의 양
  • sorts(memory) : memory에서 수행된 sort횟수
  • sorts(disk) : Temporary 영역에서 sort된 횟수

     

    이미 아시겠지만 db block gets와 consistent gets는 Logical Read를 나타냅니다.
    두개를 더한 값과 Pysical Reads를 비교해서 Hit Ratio를 구하죠.

    우선 consistent gets는 consistent mode에서 db block read를 수행한 숫자입니다.

    TKPROF 레포트에서 query에 해당하는 값입니다.

     

    consistent라는 말은 read consistency와 관련이 있는데 즉 읽기 일관성이 보장되는 상황에서 읽는 숫자라는 것입니다. 데이터를 수정하지 않고 단지 읽기만 하기때문에 lock이 발생하지 않습니다.

    db block gets는 CURRENT mode에 있는 block의 데이터를 읽은 숫자입니다. TKPROF 레포트에서 current에 해당하는 값이구요. current mode에서는 곧 수정될 Segment header나 block을 얻을 때 일어납니다. INSERT, UPDATE, DELETE에서 데이터 쿼리부분이 아니라 수정될 값을 읽을 때 나타나는 숫자입니다. select문일 경우에는 Full table scan일 경우 Segment header를 읽을 때 나타납니다.

    위의 내용은 Performance Tuning 문서에 있는 내용을 대충 정리한 것입니다. 그래서 아마도 위의 내용은 대부분 보셧을 내용이겠지만, 정확한 차이점을 이해하려면 더 많은 것들을 알고 이해해야합니다.

    여기서 Consistent mode와 current mode가 무엇인지를 아는 것이 중요합니다.

    우선 Consistency를 알기 위해서 오라클이 제공하는 Mulitversion concurrency control에 대해 알아야 합니다. 사용자가 쿼리를 날렸을때 그 순간의 이미지를 가지고 데이터를 가져오게 됩니다. 쿼리를 날린 후에 다른 세션에서(자기 자신의 세션에서도 마찬기지입니다.) 원하는 데이터가 수정이 되어도 처음 쿼리의 처리를 시작한 순간의 내용을 오라클은 제공합니다. 이런 처리를 위해 쿼리가 실행되는 순간 SCN(System change number)가 결정의 되고 각 DB Block의 scn과 비교하여 더 큰 scn을 가지고 있는 경우 즉 변경이 일어난 경우에는 rollback segment에서 과거의(자신의 scn보다 낮은 scn을 가지고 있는) 이미지의 block을 가지고 오게 됩니다.

    consistent gets가 consistent mode에서 block의 데이터를 읽은 숫자라는 것은 이와 같이 읽기 일관성이 보장되는 상황에서 읽은 block의 숫자라는 것입니다.

    DML문장이 수행되는 경우에 처리되는 부분을 두 부분으로 나눌 수 있는데, 하나는 수정할 데이터를 찾기 위해 읽는 부분이고, 다른 하나는 실제 데이터를 수정하기 위해 데이터를 읽는 부분입니다. 데이터를 찾기위해 읽는 부분은 INSERT문의 sub query부분과 delete문과 update문의 where 조건절에 해당하는 부분이나 sub query에 해당하는 부분입니다.

    DML문에서는 데이터를 찾기 위한 부분이 consistent gets에 나타나고 수정하기 위한 부분이 db block gets에 나타납니다.

    update t set value = value 5 where value > 10;
    예를 들어 위와 같은 문장을 보면 처음 위의 문장이 실행 되는 순간의 이미지를 이용해서 조건에 맞는 즉 value가 10보다 큰 row들을 찾습니다. 그리고 각각의 row를 실제로 update하는 value = value 5를 실행할때는 current mode에서 수행이 됩니다. 조건에 해당하는 row를 이미 읽었지만 수정하기 위해서 다시 또 읽게 됩니다. 이 때는 실제 데이터를 수정해야 하기 때문에 지금 바로 현재의 데이터여야 합니다. consistent mode에서 읽은 데이터는 과거의 이미지의 데이터일 수 있지만 수정시에는 가장 최근의 버젼을 수정해야 하기 때문입니다. 즉 current mode라는 것은 과거의 시점이 아닌 바로 지금의 data를 읽는 것을 말합니다.

    update문을 수행시에 consistent gets와 db block gets의 숫자를 비교해 보면 db block gets의 숫자가 더 큰 경우를 보게 되는데 이것은 consistent gets는 즉 수정될 로우를 찾을 경우는 block단위로 io가 일어나서 읽은 block의 수를 나타내게 되지만, db block gets는 즉 수정될 로우를 찾을 때는 각 로우마다 current mode에서 데이터를 읽기 때문에 같은 block도 row의 수만큼 읽게 됩니다. trace를 보시면 db block gets의 수는 실제 수정될 row의 수와 거의 같은 것을 확인하실 수 있습니다.

    consistent gets는 physical reads를 포함하고 있기 때문에 실제로 쿼리를 튜닝할 때 중요한 것은 Logical IO를 줄이는 것입니다. 이것에 관한 내용도 설명하자면 매우 길어지므로 여기서는 logical reads의 한 경우인 db block gets의 관한 예를 하나만 들겠습니다.

    다음의 두 문장은 똑 같은 읽을 수행합니다. 읽은 범위는 똑 같습니다. 즉 consistent reads의 수는 동일합니다. 그러나 db block gets의 숫자는 두배의 차이가 있기때문에 속도의 차이가 있습니다. 직접 샘플을 만들어 확인해 보시기 바랍니다.

    UPDATE ta A
    SET A.QTY = (
    SELECT SUM(B.QTY) A.QTY
    FROM tb B
    WHERE B.ID = A.ID
    );

    UPDATE ta A
    SET A.QTY = A.QTY (
    SELECT SUM(B.QTY)
    FROM tb B
    WHERE B.ID = A.ID
    );


    질문의 내용에는 벗어나지만 성능을 향상시키기 위해서는 LIO를 줄여야합니다. 모든 LIO는 latch를 발생시키기 때문에 가능한 적은 LIO를 수행하도록 하여야 좋은 성능과 확장성을 보장할 수 있습니다.

  • 반응형
    Posted by [PineTree]
    ORACLE/ADMIN2009. 3. 20. 11:11
    반응형
    인덱스 정보 보기
    select a.index_name,b.table_name,column_name,COLUMN_POSITION,UNIQUENESS,tablespace_name,table_owner
    from ind a, USER_IND_COLUMNS b
    where a.index_name=b.index_name
    order by a.index_name,COLUMN_POSITION
    반응형

    'ORACLE > ADMIN' 카테고리의 다른 글

    ORACLE Data Pump  (0) 2009.04.02
    as sysdba로 접속시 암호 물어보게 하는 방법  (0) 2009.03.27
    em 삭제하고 재 설치  (0) 2009.03.19
    TABLE별 용량을 파악해보자!  (0) 2009.03.13
    유용한 DICTIONARY 뷰 ..  (0) 2009.03.06
    Posted by [PineTree]