Oracle/Admin2009. 12. 30. 18:18
● Tables

  Table  Segment 
 Heap  1
 Partition  1
 Cluster  N
 IOT  1

cf. Table(LOB)                                                1                                                                 N

   ◎ (Heap Oraganized) Table
        : 테이블이 하나면 segment가 하나
   ◎ Partitioned Table 
        (참고1 : Learn How to Partition in oracle9i release 2, 참고2 : 파티션의 이해와 활용)
        : 실제 테이블은 하나이지만, 입력되는 데이터를 파티션으로 분류할 수 있는 테이블.
         파티션은 당 하나의 테이블 스페이스를 지정할 수 있다.
         테이블이 하나면 여러개의 extent를 가짐

         ○ range (8~)
             각 파티션의 크기에 차이가 많이 있을 경우, 병렬처리시에 문제 발생

             실습

-------------------   range partitioned table 생성 / 데이터 입력 -------------------
SQL> drop table t1 purge;

SQL> create table t1
         (col1 number,
          col2 number,
          flag varchar2(1) constraint t1_flag_ck check(flag in ('A', 'B', 'C', 'D'))
         )
        partition by range (flag)
        (partition p1 values less than ('B') tablespace ts1,                               -- p1 파티션에는 B 미만 즉 A만 입력됩니다.
         partition p2 values less than ('C') tablespace ts2,                               -- p2 파티션에는 C 미만 즉 B만 입력됩니다.
         partition p3 values less than ('D') tablespace ts3,
         partition p4 values less than (maxvalue) tablespace ts4
        );

SQL> insert into t1 values (1, 1, 'K');     -- ORA-02290: check constraint (SYS.T1_FLAG_CK) violated
SQL> insert into t1
         select level, level, decode(trunc(level/250), 0, 'A', 1, 'B', 3, 'C', 'D')
         from dual
        connect by level <= 1000;
-------------------------------   확인 ---------------------------------

SQL> exec dbms_stats.gather_table_stats('SCOTT', 'T1')
SQL> set autot on
SQL> select * from t1 where flag = 'A';
SQL> select * from t1 where flag = 'B';
SQL> select * from t1 where flag in ('B', 'C');
SQL> select * from t1 partition (p2);
SQL> alter tablespace ts2 offline;
         select * from t1 where flag = 'B';
SQL> select * from t1 where flag = 'C';
SQL> select *
         from dict
         where table_name like '%PART%';
SQL> select *
         from dba_tables
         where owner = 'SCOTT'
         and table_name = 'T1';
SQL> select *
         from DBA_TAB_PARTITIONS
         where table_owner = 'SCOTT'
         and table_name = 'T1';
 


         ○ hash (8i~)
             있는 값 그대로가 아닌 어떤 연산을 하여 나온 결과로 분류
             hashing이란 : 불특정 다수의 데이터가 몇개 안되는 것으로 분류되는 것.

             실습

------------------------   hash partitioned table 생성 / 데이터 입력 -----------------------------

SQL> alter tablespace ts2 online;
SQL> drop table t1 purge;
SQL> create table t1
         (col1 number,
          col2 number,
          flag varchar2(1) constraint t1_flag_ck check(flag in ('A', 'B', 'C', 'D'))
         )
         partition by HASH (flag)
         (partition p1 tablespace ts1,
          partition p2 tablespace ts2,
          partition p3 tablespace ts3,
          partition p4 tablespace ts4
         );

SQL> insert into t1
         select level, level, decode(trunc(level/250), 0, 'A', 1, 'B', 3, 'C', 'D')
         from dual
        connect by level <= 1000;

-------------------------------   확인 ---------------------------------
SQL> exec dbms_stats.gather_table_stats('SCOTT', 'T1')
SQL> set autot on
SQL> select * from t1 where flag = 'A';
SQL> select * from t1 where flag = 'B';
SQL> select * from t1 where flag = 'C';
SQL> select * from t1 where flag = 'D';
SQL> select * from t1 partition (p2);


         ○ list (9i)


----------------------   list partitioned table 생성 / 데이터 입력 ---------------------------
SQL> drop table t1 purge;
SQL> create table t1
         (col1 number,
          col2 number,
          flag varchar2(1) constraint t1_flag_ck check(flag in ('A', 'B', 'C', 'D', 'E', 'F' , 'G', 'H', 'I'))
         )
         partition by LIST (flag)
         (partition p1 values ('A', 'B')      tablespace ts1,
          partition p2 values ('C', 'D', 'E') tablespace ts2,
          partition p3 values ('F')           tablespace ts3,
          partition p4 values (default) tablespace ts4
         );
SQL> insert into t1
         select level, level, decode(trunc(level/250), 0, 'A', 1, 'B', 3, 'C', 'D')
         from dual
         connect by level <= 1000;

SQL> insert into t1
        select level, level, decode(trunc(level/200), 0, 'E', 1, 'F', 3, 'G', 4, 'H', 'I')
        from dual
        connect by level <= 1000;

---------------------------------   확인 ------------------------------------
SQL> exec dbms_stats.gather_table_stats('SCOTT', 'T1')

SQL> set autot on
SQL> select * from t1 where flag = 'A';
SQL> select * from t1 where flag IN ('C', 'D', 'E')
SQL> select * from t1 where flag = 'C';
SQL> select * from t1 where flag = 'D';
SQL> select * from t1 partition (p2);

         ○ range + hash
             : range partiotion과 hash partition의 조합


-----------------   range + hash paritioned table 생성 / 데이터 입력 --------------------------

SQL> create tablespace ts5 datafile '/u01/app/oracle/oradata/orcl/ts5.dbf' size 10m;
SQL> create tablespace ts6 datafile '/u01/app/oracle/oradata/orcl/ts6.dbf' size 10m;
SQL> create tablespace ts7 datafile '/u01/app/oracle/oradata/orcl/ts7.dbf' size 10m;
SQL> create tablespace ts8 datafile '/u01/app/oracle/oradata/orcl/ts8.dbf' size 10m;
SQL> drop table t1 purge;
SQL> create table t1
        (col1 number,
         col2 number,
         flag varchar2(1) constraint t1_flag_ck check(flag in ('A', 'B', 'C', 'D', 'E', 'F' , 'G', 'H', 'I')))
         partition by range (col1)
         subpartition by hash (flag)
        (partition p1 values less than (1001)
           (subpartition sub1 tablespace ts1,
            subpartition sub2 tablespace ts2,
            subpartition sub3 tablespace ts3,
            subpartition sub4 tablespace ts4),
         partition p2 values less than (maxvalue)
           (subpartition sub5 tablespace ts5,
            subpartition sub6 tablespace ts6,
            subpartition sub7 tablespace ts7,
            subpartition sub8 tablespace ts8)
        );
SQL> insert into t1
         select level, level, decode(trunc(level/250), 0, 'A', 1, 'B', 3, 'C', 'D')
         from dual
         connect by level <= 2000;

---------------------------------   확인 ------------------------------------

SQL> set autot on
SQL> select * from t1 partition (p1);
SQL> select * from t1 partition (p2);
SQL> select * from t1 subpartition (sub1);
SQL> select * from t1 subpartition (sub5);


         ○ range + list

             : range partition과 list partition의 조합

 
   ◎ Index Organized Table
      : 인덱스가 필요없어지는 테이블
          primary key 기준으로 데이터 찾을 경우 빠름
          스토리지 적게 소비(인덱스에 대한 스토리지가 필요없으므로)
          물리적인 Rowid 대신 논리적인 RowID를 갖는다.
        예) 학생테이블, 과목 테이블은 N:N이므로 중간에 교차 entity(수강내역테이블)을 추가함에 따라
             1:N 의 관계로 만들어줌. 이때 수강내역 테이블의 primary key가 stu_id, class_id여여만함
             인덱스가 필요없어지는 테이블
             데이터가 주소 뒤에 컬럼과 데이터가 들어있음.

           ○ 실습

create table students (id number primary key, name varchar2(10));
create table classes (id number primary key, name varchar2(10));
- 수강 내역 관리 : 첫번째 방법 -
create table registers
(stu_id number references students(id),
 class_id number references classes(id),
 grade varchar2(1));
create index registers_pk_idx on registers (stu_id, class_id);
alter table registers add primary key(stu_id, class_id);

-- 수강 내역 관리 : 두번째 방법

drop table registers purge;
create table registers
(stu_id number references students(id),
 class_id number references classes(id),
 grade varchar2(1),
 primary key(stu_id, class_id))
 organization index;


   ◎ Clustered Table
         1. index cluster
            :

1. cluster 생성
create cluster ed_clu
(deptno number(2))
size 1k                     -- 중요한 결정사항
tablespace users;
if) 블럭 사이즈 8k - size가 1k이면, cluster가 7개 정도 들어감.
if) 블럭 사이즈 8k - size가 13k이면, cluster가 하나도 안들어갈까?
  --> cluster는 논리적 개념임.
2. cluster용 index 생성
create index ed_clu_idx
on cluster ed_clu;

3. table 생성 (...)
create table n_emp
cluster ed_clu(deptno)
as
select * from emp;

rename emp   to old_emp;
rename n_emp to emp;
create index emp_deptno_idx on emp(deptno);


         2. hash cluster
            : 특정 함수를 사용하여 hashing함
              범위 질의일 경우 사용할 수 없음.


(1) cluster 생성
create cluster emp_h_cluster
(empno number(4))
size 1k
hashkeys 100                    -- 오라클이 알아서 함수를 알아서 만들어 hashing함
--hash is mod(empno, 1000)
tablespace users;

(2) table 생성(...)
create table h_emp
cluster emp_h_cluster(empno)
as
select * from emp;

alter table h_emp add contraint h_emp_empno_pk primary key (empno);
select * from h_emp
where empno = 7788;

         3. sorted hash cluster(10g~)
            : Cluster Key 를 Hashing 하여 저장한것과 각 Hashing 값들에 대해 정렬된 값들을 합친 구조

create cluster emp_cluster
(deptno number(2),
 sal    number sort)
 hashkeys 4
 hash is deptno
 size 50;
create table emp1
(empno number,
 ename varchar2(30),
 sal   number,
 deptno number(2))
cluster emp_cluster(deptno, sal);

insert into emp1
select empno, ename, sal, deptno from emp;

set autot on
select * from emp1;

select * from emp1
where deptno = 10
order by deptno, sal;                       
select * from emp1
where deptno = 20
order by deptno, sal;

참조 : http://www.urbantree.wo.tc/entry/10-Managing-Schema-Objects

size?
growth trend
optimizer statistics
reorganization
 - 9i : dbms_redefinition 패키지
         http://kr.forums.oracle.com/forums/thread.jspa?threadID=453730
 - 10g : EM
 



기타 참고사항

- 데이터를 빨리 찾게 하기 위한 방법
  1. index를 이용
  2. 해싱기법을 이용
  3. partitioned table

- partition prunning
  : 조건에 맞는 partition만 scan

- AWR에는 segment의 공간이 성장하는 패턴도 들어있음.

'Oracle > Admin' 카테고리의 다른 글

ASM(Automatic Storage Management)  (0) 2010.01.07
Managing Storage  (0) 2010.01.06
Moving Data (SQL*Loader, Export/Import, Datapump)  (0) 2009.12.15
Backup and Recovery  (0) 2009.12.10
Optimizer Statistics & Performance Statistics  (0) 2009.12.10
Posted by 자수성가한 부자
Oracle/Tuning2009. 12. 29. 15:20
● 튜닝의 핵심 활동
  ◎ Performance planning

  ◎ Server(instance + database) tuning
  ◎ SQL tuning

● Tuning is Iteration!
                  Education!

● Statistics (참고하러가기)
    : statistics_level 파라미터를 최소한 typical로 설정해 놓을 것.
      optimizer_dynamic_sampling - 직접적으로 optimizer에게 영향을 주는 파라미터,
      timed_statistics, timed_os_statistics

  ◎ Optimizer Statistics
      : 노력해야 함.(DBMS_STATS를 이용) -> 10g부터는 GATHER_STATS_JOB
    ○ Data statistics
    ○ System statistics

  ◎ Performance Statistics
     : 그냥 즐길 것. -> 누적, 휘발 -> ... -> 10g AWR + MMON + ADDM
    ○ Activity
    ○ Wait
    ○ Others

● 주요 튜닝대상.
  ◎ 한번에 많은 자원을 쓰는 쿼리
  ◎ 자주 쓰이는 쿼리

참조 : http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/toc.htm 
         (1장~3장은 필독)

'Oracle > Tuning' 카테고리의 다른 글

[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Dynamic Performance View의 이름 / 설명  (0) 2009.12.26
Monitoring and Managing Memory  (0) 2009.12.24
Posted by 자수성가한 부자
Oracle/Tuning2009. 12. 26. 10:09
순서 Dynamic View Description
1 V$ACCESS 현재 데이터베이스내의 lock이걸린 object와 그 object를 access 하려는 session id.
2 V$ACTIVE_INSTANCES 현재 데이터베이스내의 Mount된 모든 인스턴스에대하여 인스턴스 이름과, 번호를 매치.
3 V$AQ 데이터베이스내의 모든 Queue에 대한 통계.
4 V$ARCHIVE Archive에 필요한 redo log file에 대한 정보. 각각의 행은 하나의 thread에 대한 정보이다.
V$LOG도 동일한정보.
5 V$ARCHIVE_DEST 현재의 instance에서, 모든 archive log destination, 현재값, mode, status. 
6 V$ARCHIVED_LOG archive log 이름을 포함하는 controlfile에 대한 archive log 정보, archive log 기록은
online중 redo log가 성공적으로 저장되었거나, clear(log가 clear되면, name칼럼은
null이 된다)된후 insert된다. 
7 V$BACKUP 모든 online 데이터파일의 backup 상태를 나타낸다. 
8 V$BACKUP_CORRUPTION 데이터파일의 backup 중 에러정보를 나타낸다.
에러들은 control 파일과 achived log backup 에 포함되지 않는다. 
9 V$BACK_DATAFILE control 파일에서 datafile과 controlfile 의 backup정보를 보여줌. 
10 V$BACK_DEVICE 지원되는 backup 디바이스정보. 
11 V$BACK_PIECE controlfile에서 backup piece에 대한 정보를 포함. 각각의 backup set 은 하나 또는 그이상의
backup piece로 구성된다. 
12 V$BACKUP_REDOLOG controlfile에서 backup set의 저장된 log에 대한 정보. Online redo logs는 곧바로 backup
되지 않는다. 먼저 disk에 저장된후 backup 된다. 저장된 log backup set 은 하나 또는
그 이상의 logs들로 구성된다. 
13 V$BACKUP_SET controlfile에서 backupset 정보를 보여줌. backup set 행은 backup set이 성공적으로 완료되었을
때 insert된다. 
14 V$BGPROCESS 백그라운드 프로세스 정보. 
15 V$BH 병렬서버 view이다. SGA내의 모든 버퍼에 대한 ping의 상태와 수를 나타낸다. 
16 V$BUFFER_POOL 인스턴스내에서 사용가능한 모든 버퍼풀에 대한정보. 
17 V$CACHE 병렬서버 view이다.
특정데이타베이스object에 관련된 현재의 인스턴스의 SGA내부의 각각의 block에 대한
block header에 대한 정보.
18 V$CACHE_LOCK 병렬서버view. platform-specific lock manager 식별자를 제외하면, V$CACHE와 유사하다. 
19 V$CIRCUIT 가상 circuit에 관한 정보이며, 가상circuit란 dispatcher와 server를 통한 데이터베이스와의
user 연결을 말한다. 
20 V$CLASS_PING 각각blockclass마다 ping된 블록의 수를나타낸다. 다른class블록의 충돌을 비교하기위해 사용. 
21 V$COMPATIBILITY 이전버전으로 downgrade를 방지하기위해 데이터베이스인스턴스에 의해 사용된특성들을 설명.
다른 인스턴스가 갖고있는 특성에 영향을 미치지 않으며, 데이터베이스가 완전히 정지한이후에도
존재하지 않는 일시적인 비호환성들을 포함할수도 있다. 
22 V$COMPATSEG 이전버전으로 되돌아가는 것을 막기위한 데이터베이스에서 사용되는 영구적인 특성들.
23 V$CONTROLFILE 컨트롤파일의 이름과 상태. 
24 V$CONTROLFILE_RECORD_SECTION 컨트롤파일의 record에 대한 정보. 
25 V$COPY_CORRUPTION 컨트롤파일로부터 데이터파일의 복사불량에 대한 정보. 
26 V$CURRENT_BUCKET 캐쉬내의 버퍼의 수가 감소할때 발생할 수 있는 캐쉬손실의 경우수를 예상하는데 유용. 
27 V$DATABASE control file 로부터 데이터베이스정보를 포함. 
28 V$DATAFILE 컨트롤파일로부터데이타파일에대한 정보를 포함. 
29 V$DATAFILE_COPY 컨트롤파일로부터 데이터파일의 복사에 대한 정보를포함. 
30 V$DATAFILE_HEADER 데이터파일헤더에 대한 정보. 
31 V$DBFILE 데이터베이스를 구성하는 모든 데이터파일. 대신에 V$DATAFILE 추천한다.
32 V$DBLINK 세션에 의해 open된 데이터베이스링크에 대한 설명이 데이터베이스링크들은 닫히기전에
commit되거나 rollback되어야만 한다.
33 V$DB_OBJECT_CACHE library cache에 cach된 데이터베이스오브젝트를 나타냄. 
34 V$DB_PIPES 데이터베이스내에 현재 운영중인 pipe에 대한 설명. 
35 V$DELETED_OBJECT 삭제된 archived 로그, 데이터파일 copy, 컨트롤파일에서 백업piece 에 대한 정보.
이뷰의 목적은 복구목록의 재동조작업을 최적화하는 것이다.
archived 로그나, 데이터파일 copy, 백업piece 등이 삭제될때는 해당하는 행이삭제되었음이
표시된다. 
36 V$DISPATCHER dispatcher 프로세스에 관한 정보. 
37 V$DISPATCHER_RATE dispatcher 프로세서에 관련된 확률통계. 
38 V$DLM_CONVERT_LOCAL lock 변환작업에 대한 경과시간. 
39 V$DLM_CONVERT_REMOTE 원격 lock변환작업에 대한 경과시간. 
40 V$DLM_LATCH DLM 잠금에 대한 통계. 각각의 잠금에 대한 통계보다는, 각 타입에 대한 총계를 포함. 개념적으로
IMM_GETS/TTL_GETS 값은 1에 가깝게 된다. 
41 V$DLM_LOCKS 병렬서버 view이다. 블록화되었거나, 다른 것을 블록화하고있는 lock manager에 알려진 모든
lock에 대한 정보. 
42 V$DML_MISC 잡다한 DLM 통계에 대한 정보. 
43 V$ENABLEDPRIVS 사용가능한 권한에 대한정보, 이들권한은 SYS.SYSTEM_PRIVILEGES_MAP테이블에 존재해야만 한다. 
44 V$ENQUEUE_LOCK 큐에 대기상태인 오브젝트에의해 소유된 모든 lock이 view의 칼럼은 V$LOCK의 칼럼과 동일하다.
자세한 것은 V$LOCK을 참고. 
45 V$EVENT_NAME wait event 에 대한 정보. 
46 V$EXECUTION 병렬 질의 실행에 대한 정보. 
47 V$EXECUTION_LOCATION 병렬 질의 실행 트리의 위치에 대한 자세한 정보. 
48 V$FALSE_PING 병렬서버view. ping에 실패지도 모르는 버퍼에 대한 정보. 즉, 10회이상ping된 다른 버퍼와
동일한 lock으로 잠겨있는 버퍼를 말한다. ping이 실패로 판명된 버퍼는 lock충돌을 감소시키기위해
1-44페이지의 "GC_FILES_TO_LOCK"에 다시 매핑된다. 
49 V$FILE_PING 데이터파일마다 ping된 블록수를 보여줌.
이정보는 현존하는 데이터파일에 대한 access패턴을 결정하는데 데이터파일블록을 PCM lock에
새로 매핑하는것을 결정하는데 사용된다. 
50 V$FILESTAT 파일 read/write 통계. 
51 V$FIXED_TABLE 데이터베이스내의 모든 동적실행테이블, views, 유도테이블. 실제테이블을 참조하는 약간의
V$테이블은 리스트에 없다. 
52 V$FIXED_VIEW_DEFINITION (V$로 시작하는)고정view에 대한 설명. 유의해서 사용해야한다. 
53 V$GLOBAL_TRANSACTION 현재 활동중인 트랜잭션에 대한 설명. 
54 V$INDEXED_FIXED_COLUMN index된 동적실행테이블(X$ table)의 칼럼에 대한 설명. X$ table은 경고없이 변경할수있다.
55 V$INSTANCE 현재의 인스턴스의 상태를 나타냄.
V$INSTANCE의 버전은 V$INSTANCE의 초기버전과 호환성이 없다. 
56 V$LATCH 하위 잠금에 대한 통계와 상위 잠금에 대한 요약통계. 즉, 상위잠금에 대한 통계는 그 하위잠금에
대한 각각의 통계를 포함한다. 
57 V$LATCHHOLDER 현재잠금에 대한 정보. 
58 V$LATCHNAME  V$LATCH 에 있는 잠금에 대한 디코드된 잠금이름에 대한 정보. V$LATCHNAME의 행들은
V$LATCH의 행들과 1:1로 대응된다. 
59 V$LATCH_CHILDREN 하위잠금에 대한 통계를 포함.
V$LATCH의 칼럼에 child# 칼럼이추가되었다. LATCH#칼럼이 서로 동일하다면, 하위잠금이
동일한 상위잠금을 갖는 것이다. 
60 V$LATCH_MISSES 잠금을 획득하는데 실패한 시도에 대한 통계. 
61 V$LATCH_PARENT 상위잠금에 대한 통계.
V$LATCH_PARENT 칼럼은 V$LATCH칼럼과 동일하다. 
62 V$LIBRARYCACHE library cache의 실행과 활동통계. 
63 V$LICENSE license 한계에 대한 정보. 
64 V$LOADCSTAT 직접적재하는동안 컴파일된 SQL*loader 통계정보.
이테이블에대한 어떤 Select 문도 "no rows returned" 결과가 나오는데, 왜냐면, 동일한 시간에
데이터를 적재하면서, 쿼리를 날릴수 없기 때문이다. 
65 V$LOCK 현재 Oracle 서버에 의해 확립된 잠금에 대한 정보나 lock또는 latch에 대한 두드러진요청 
66 V$LOCK_ACTIVITY 병렬서버view이다. V$LOCK_ACTIVITY는 현재의 인스턴스의 DLM잠금동작을 나타낸다.
각각의 행은 잠금동작의 타입과 일치된다. 
67 V$LOCK_ELEMENT 병렬서버view이다.
버퍼캐쉬에 의해사용된 각각의 PCM잠금에 대해 v$LOCK_ELEMENT 에 한행이다.
잠금요소에 대응되는 PCM잠금의 이름은 'BL',indx,class등이다. 
68 V$LOCKED_OBJECT 시스템안의 모든 트랜잭션에 걸린 잠금을 나타낸다. 
69 V$LOCKED_WITH_COLLISIONS 병렬서버view이다. 여러버퍼를 보호하는 lock을 찾는데 사용되며, 그 버퍼들은 최소한 10회이상
각각 강제로 쓰여지거나, 강제로 읽혀진 버퍼들이다. 
70 V$LOG 컨트롤파일로부터 log 파일정보를 포함한다. 
71 V$LOGFILE redo log 파일정보. redo log 그룹과 멤버 파일명. 
72 V$LOGHIST 컨트롤파일로부터 log history정보를 포함. 지속적인 호환성을 포함하고 있다.
대신에 V$LOG_HISTORY의 사용을 권장한다. 
73 V$LOG_HISTORY 컨트롤파일로부터 log history 정보를 포함한다. 
74 V$MLS_PARAMETERS Oracle Server의 확정된 초기화파라미터를 나타냄. 
75 V$MTS multi-threaded server의 성능향상을위한 정보를 포함. 
76 V$MYSTAT 현재 세션에 대한 통계값포함. 
77 V$NLS_PARAMETERS 현재의 NLS 매개변수의 값들을 포함. 
78 V$NLS_VALID_VALUES 유효한 NLS 매개변수값. 
79 V$OBJECT_DEPENDENCY 현재 공유풀에 적재되어있는 package, procedure, cursor등에 관련되어있는 object를
결정하는데 사용된다. 예를들면, V$SESSION, V$SQL등과 조인하면, 현재 어떤 user가
실행중인 SQL문에서 어떤 테이블이 사용되었는지를 알아낼수가 있다. 
80 V$OFFLINE_RANGE 컨트롤파일로부터 offline된 datafile을 보여준다. DATAFILE행에 저장되어있는 각각의
데이터파일의 최종offline 간격을 보여줌. offline 간격은 테이블스페이스가 처음 offline normal,
또는 Read Only로 변경되고난이후 다시 online 또는 read-write로 변경된다음에 확정된다.
데이터파일이 스스로 Offline로 변경되거나 테이블스페이스가 OFFLINE IMMEDIATE로 변경되면,
offline간격은 확정되지 않는다. 
81 V$OPEN_CURSOR 각각 user 세션이 열렸있거나, 정지되어있는 cursor를 보여준다. 
82 V$OPTION Oracle Server와 같이 설치된 선택사항들. 
83 V$PARAMETER 초기화 파라미터에 대한 설명이다. 
84 V$PING 병렬서버view이다. 최소한 1번이상 ping된 블록만을 보여준다는 것을 제외하고
V$CACHE view와 동일하다. 특정 데이터베이스 object와 관련된 현재의 인스턴스내의
SGA에 있는 각각의 블록에대한 block header정보를 포함하고 있다. 
85 V$PQ_SESSTAT 병렬쿼리에 대한 session 통계를 포함. 
86 V$PQ_SLAVE 인스턴스내에 실행중인 parallel 쿼리서버에 대한 통계. 
87 V$PQ_SYSSTAT 병렬쿼리에 대한 시스템통계. 
88 V$PQ_TQSTAT 병렬쿼리 동작의 통계를 포함. 통계는 질의가 완료된후에 컴파일되며 세션이 살아있는동안 계속
남아있는다. 
89 V$PROCESS 현재 작업중인 프로세스에 대한 정보.
LATCHWAIT 칼럼은 프로세스잠금이 무엇을 기다려야하는가를 나타내며, LATCHSPIN 칼럼은
프로세스잠금이 동작되는 것을 나타낸다. 멀티프로세서의 경우 Oracle 프로세스는 잠금을
기다리기전에 실시한다. 
90 V$PWFILE_USERS password 파일로부터 유도해낸 SYSDBA, SYSOPER 권한을 부여받은 user. 
91 V$QUEUE 멀티쓰레드 메시지큐에 대한 정보. 
92 V$RECENT_BUCKET 대용량 캐쉬실행을 평가하기에 유용한 정보. 
93 V$RECOVER_FILE media 복구에필요한 파일의 상태를 나타냄. 
94 V$RECOVERY_FILE_STATUS 각각의 RECOVER명령에 대한 각 데이터파일에 대한 정보를 한행씩 포함.
Oracle프로세스가 복구를 수행하는데 유용한 정보임.
recover manager는 서버프로세스에 직접 복구를수행하도록 했을 때, recovery manager가 이
view에서 관련된정보를 참고할 수 있다.  다른user들에게는 유용하지 않다. 
95 V$RECOVERY_LOG 완벽한 media복구에 필요한 archived logs에 관한 정보. 이정보는 log history view인
V$LOG_HISTORY에서 유도된 것이다. 
96 V$RECOVERY_PROGRESS 데이터베이스복구작업이 중간에 멈추지않도록하는데 사용되며, 복구작업을 완료하는데
요구되는 시간을 측정하는데 사용된다. 
97 V$RECOVERY_STATUS 현재의 복구진행상태를 나타낸다. 단지 복구를 수행하는 Process 에대한 정보만이유용하다.
복구관리자가 서버프로세스에게 복구를 수행하라고 지시할때에, 복구관리자는 이view에서
관련정보를 참조할 수 있다. 다른 user에게는 불필요하다. 
98 V$REQDIST MTS dispatcher의 응답시간에 대한 그래프통계를 나타내며, time range는 버킷 number의
지수함수로 증가한다. 
99 V$RESOURCE 자원(resource)의 이름과 주소정보를 포함. 
100 V$RESOURCE_LIMIT System 자원의 부분적인 사용에 대한 정보. 자원의 소비를 모니터링함으로서 낭비를
방지하는데 사용된다.
101 V$ROLLNAME 모든 online중인 rollback segments의 이름. 데이터베이스가 open시에만 조회가능. 
102 V$ROLLSTAT 롤백세그먼트통계정보. 
103 V$ROWCACHE 자료사전활동에 대한 통계. 각각의 행은 하나의 자료사전cache 통계를 포함. 
104 V$SESSION 현재 open된 세션에 대한 정보. 
105 V$SESSION_CONNECT_INFO 현재의 세션에 대한 network 연결에 대한 정보. 
106 V$SESSION_CURSOR_CACHE 현재의 세션에 대한 cursor 사용에 대한 정보.
SESSION_CACHED_CURSORS 초기화파라미터에 대한 효율을 측정하지는 않는다. 
107 V$SESSION_EVENT 세션의 event 대기에 관한정보. 
108 V$SESSION_LONGOPS 장시간실행되는 작업에 대한 상태. SOFAR, TOTALWORK칼럼은 진행상태를 제공한다.
예를들어 다음요소(hach cluster creations, backup, recovery) 에 대한 작동상태를
모니터링할 수 있다. 
109 V$SESSION_OBJECT_CACHE  로칼서버의 현재사용중인 user세션의 object, cache통계정보. 
110 V$SESSION_WAIT 활동중인 세션이 대기하고있는 자원또는 이벤트이다. 
111 V$SESSTAT  user세션 통계이다. 통계number(statistic#)에 해당하는 통계name을 찾으려면,
V$STATNAME를 참고하면 된다. 
112 V$SESS_IO 각각의 user세션에 대한 I/O 통계이다. 
113 V$SGA System Global Area 에대한 간략한 정보.(name, size)
114 V$SGASTAT System Global Area에 대한 자세한 정보.(name, bytes, pool) 
115 V$SHARED_POOL_RESERVED Shared Pool내에 예약풀과 공간을 바꾸고자할 때 도움이 되는통계. 
116 V$SHARED_SERVER Shared Server processes 에 대한 정보를 포함. 
117 V$SORT_SEGMENT 주어진 인스턴스내의 각 sort세그먼트에 대한 정보. 테이블스페이스가 Temporary
타입일때만 update된다. 
118 V$SORT_USAGE sort 사용에 대해 기술한다. 
119 V$SQL Group by절이없는 공유sql영역에대한 통계이며 입력된 원래 sql문장의
각 child의 row를 포함. 
120 V$SQL_BIND_DATA 데이터가 이 서버에서 추출가능하다면 이 view를 조회하는 세션에 소유된 각 커서안에
있는 각각의 원격bind변수에 대한 클라이언트에 의해 보내진 데이터.
121 V$SQL_BIND_METADATA 이view를 조회하는 세션에 소유된 각커서안에 있는 각각의 원격bind변수에 대해
클라이언트에의해 제공되는 bind metadata. 
122 V$SQL_CURSOR 이 view를 조회하는 세션과 관련된 각 cursor에 대한 디버깅정보. 
123 V$SQL_SHARED_MEMORY 메모리 스냅샷에 공유된 커서에 대한 정보. 공유풀에 저장된 각SQL문은 관련된 하나또는
그이상의 하위object를 가지고 있다. 
124 V$SQLAREA 공유SQL영역에 대한 통계를 가지고있으며, Sql 문자열마다 한행을 포함한다.
메모리내에 존재하는, parse된, 실행을 대기하고있는 SQL문장에 대한 통계를 제공한다. 
125 V$SQLTEXT  SGA내부의 공유SQL 커서에 속해있는 SQL문장을 포함. 
126 V$SQLTEXT_WITH_NEWLINES 가독성이 증가되고, 공백을 포함한 SQL문장안에 newline과 tabs을 대체하지 않는다는
것을 제외하고는 V$SQLTEXT view와 동일하다. 
127 V$STATNAME V$SESSTAT와 V$SYSSTAT테이블에서 나타난 statistics에 대한 이름. 
128 V$SUBCACHE 현재 라이브러리 캐쉬메모리에 적재된 하위 캐쉬에 대한 정보. 모든 라이브러리캐쉬에 대해
언급하고있으며, 각 라이브러리 캐쉬object마다 각 적재된 하위 캐쉬에 대해 한행을 나타낸다. 
129 V$SYSSTAT 시스템 통계이다. 각 statistic number(statistic#)와 관련된 statistic의 이름을 찾기위해서는,
"V$STATNAME"를 보시오. 
130 V$SYSTEM_CURSOR_CACHE 시스템 전반적인정보라는 것을 제외하고, V$SESSION_CURSOR_CACHE와 유사한 정보를
나타낸다.
131 V$SYSTEM_EVENT 이벤트에 대한 총 wait정보. TIME_WAITED, AVERAGE_WAIT칼럼은 급속메커니즘을 지원하지
않는 플랫폼에서 0값을 포함할 것이다. 이런 플랫폼에서 DB를 운영중이고, 이칼럼이 wait time을
줄여주기를 원한다면, 파라미터파일의 TIMED_STATISTICS를 TRUE로 세팅하면된다.
단지 이렇게 하면, 시스템 성능에 약간의 마이너스효과를 가져올 것이다. 
132 V$SYSTEM_PARAMETER System parameter에 대한 정보. 
133 V$TABLESPACE 컨트롤파일로부터 테이블스페이스 정보를 나타내준다. 
134 V$THREAD 컨트롤파일로부터 thread 정보를 가져온다. 
135 V$TIMER  1/100 초로 나타낸 경과시간.
시간은 epoch가 시작된이후부터 측정되며, epoch는 OS의 특성이며, 값이 4bytes(약 497일)를
넘을때마다 0근처의 값이 된다. 
136 V$TRANSACTION 시스템내의 활동중인 트랜잭션. 
137 V$TRANSACTION_ENQUEUE 트랜잭션 오브젝트에 의해 소유된 lock를 나타냄. 
138 V$TYPE_SIZE 데이터블록용량을 측정하는데 사용되는 여러 데이터베이스컴포넌트들의 SiZe. 
139 V$VERSION Oracle Server의 core 라이브러리 컴포넌트의 Version수이다. 각 컴포넌트에 한 row가 있



[출처] [펌]V$ Dynamic View 정리|작성자 엑셥


'Oracle > Tuning' 카테고리의 다른 글

[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Automatic Performance Management  (0) 2009.12.29
Monitoring and Managing Memory  (0) 2009.12.24
Posted by 자수성가한 부자
Oracle/Tuning2009. 12. 24. 14:11

● Monitoring and Managing Memory

  ◎ SGA
     : 공유메모리 영역

       관련 파라미터의 분류



     ASMM (Automatic Shared Memory Management)
      SGA의 크기를 자동으로 조정해줌
      관련 파라미터 :
        SGA_TARGET (Auto-tuned Dynamic + Manually-tuned Dynamic + Manually-tuned Static{그림 참조))


      SGA_MAX_SIZE = 16G    : static

SQL> alter system set sga_max_size = 16g scope=spfile --> restartup


      SGA_TARGET   = 10G    : dynamic

SQL> alter system set sga_target=10G                 -- 증가시킬수 있는 최대값은 SGA_MAX_SIZE

     SGA_TARGET 변경에 따른 각 파라미터의 변경특성
     1. SGA_TARGET을 늘이거나 줄이면 auto-tuned dynamic만 늘거나 준다.
     2. manually tuned가 늘이거나 줄이면 auto-tuned dynamic이 영향을 받는다.
     3. auto-tuned dynamic중 각 파라미터의 크기를 줄이면 그 파라미터의 하한값만 변경되는 것.
     4. SGA_TARGET을 0으로 하면 ASMM이 off가 되고 각 파라미터 상태로 고정이 된다.
     

     MMAN (Memory Manager)
      이상적인 메모리의 분배를 위해 수분에 한번씩 메모리를 모니터링한다.

    ○ Database Buffer Cache
      - 데이터 블럭이 복사되는 메모리 영역.
      - 2k, 4k, 8k, 16k, 32k -> 잘 결정할 것
      - 집계를 주로 하는 프로그램의 경우는 데이터 블럭이 클수록 좋음.
      - 관련 파라미터 : DB_CACHE_SIZE
                      DB_KEEP_BUFFER_SIZE
                      DB_RECYCLE_BUFFER_SIZE
                      DB_BLOCK_SIZE(한번 정하면 못바꿈)
                      DB_CACHE_ADVICE

      - 자주쓰는 데이터 블럭의 데이터가 일부 영역에 caching되어 있다.
      - 저장되는 데이터와 사용하는 패턴에 따라 잘 결정해야함.
      - CR블럭 : 데이터베이스 블럭은 하나지만 읽기 일관성을 위해 존재하는 복사한 이미지
      - 블럭의 분류

        standard block


create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool default)
tablespace users5;
.......

db_cache_size  = 100m(캐쉬될 메모리의 크기)

create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool keep)
tablespace users5;
.........

db_keep_cache_size = 40m
(keep이란 메모리 영역의 한번에 캐쉬될 메모리의 크기. 정말 자주 사용되므로 메모리에 올려놓고 disk i/o를 줄임)

create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool recycle)
tablespace users5;
..............

db_recycle_cache_size = 20m
(recycle이란 메모리 영역의 한번에 캐쉬될 메모리의 크기,
keep영역보다는 덜 사용되지만 default보다는 많이 사용되는 데이터에 사용)

default, keep, recycle의 의미는 그냥 a,b,c와 같은 의미이다. 특별한 취급이 없음.



        non standard block

db_4k_cache_size = 20m  -- 이 파라미터가 설정되어 있어야 아래의 테이블 스페이스가 생성됨.
create tablespace ts4k
datafile ~~~~~ size 100m blocksize 4k;
 -- 이 데이터 파일은 데이터 블럭이 4k로 이루어짐
create table t1 (...) tablespace ts4k;


      - LRU lists(Least Recently Used Lists)
        : 가장 최근에 사용된 버퍼 캐쉬의 주소부터 오랫동안 사용이 안된 버퍼캐쉬의 순서로 저장되어 있는 리스트
          서버 프로세서가 주로 사용.

      - Checkpoint queue
        : 가장 오래된 dirty buffer부터 차례대로 들어가 있음.
          DBWR가 내려써야 할 순서

    ○ Shared pool
      - Library Cache
        : 최근에 사용된 SQL, 파싱된 SQL이 저장됨
      - Data Dictionary Cache
        : 최근에 사용된 metadata가 저장됨

    ○ Large pool
      - UGA(User Globalization Area)
        : 세션데이터. Shared Server Process들이 사용하는 메모리 영역
      - RMAN이 백업과 복원, 복구시 사용.
      - 설정을 해줘야 공간할당이 됨.할당이 안될 경우에는 shared pool을 사용.
        -> 경합을 줄이기 위해서는 공간할당을 해주는 것이 좋음

    ○ Java pool
      - jvm이 내장되어 있음
      - java의 클래스, method등이 저장 가능.

  ◎ PGA
    ○ 서버프로세스가 독자적으로 사용하는 메모리 영역이지만 대량의 데이터를 정렬해야 하는 상황에서는 disk i/o가 발생하므로
      다른 서버 프로세스에 영향을 줄 수 있음.

    ○ PGA의 크기는 SGA의 크기와 비교해서 결정
      OLTP 환경 - SGA:PGA = 8:2
      OLAP 환경 - SGA:PGA = 5:5

    ○ 관련 파라미터 : 
      - PGA_AGGREGATE_TARGET : 자동관리, 총량제
                               PGA_AGGREGATE_TARGET = 4G이더라도 4G까지 제한을 두는 것은 아님.세션이 많아지면 늘어날 수도 있음.
      - *_AREA_SIZE          : 수동관리, 세션별 제한
        SORT_AREA_SIZE = 1M : 정렬시 사용할 수 있는 최대의 메모리가 1M
              읽기(3G) -> 정렬(1G*3) -> Merge(3G) : 정렬해야 하는 데이터가 3M일 경우.

    ○ 관련 statistics
      - v$pgastat의 cache hit percentage : 
               http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/memory.htm#i48203
      - v$sql_workarea_histogram
        : 빈도수를 나타내는 막대그래프
        

        Optimal -> 메모리 정렬
        Onepass -> 한번 disk i/o후 merge과정을 통한 return
        Multipass -> disk에서 sort run을 하고 이를 다시하여 merge하는 과정
                     sga의 크기를 줄여서라도 없애야 한다.
        ex) Data : 10G
            i/o slot : 256kb
            Moptimal : 약 11G
            Monepass : 약 76M

  ◎ 효율적인 메모리 사용 : 가이드라인

    ○ buffer cache hit ratio를 높이는 것이 좋다.
      but, hit ratio만으로는 정확한 진단이 어렵다.-> wait 지표를 봐야 한다.
      ex) 100만 블럭  A           99%(99%를 메모리에서, 1%는 디스크에서 읽음)
          100블럭    B            60%(60%를 메모리에서, 40%는 디스크에서 읽음)
    ○ memory advisor를 이용할 것.



기타 참고사항

- PGA의 크기 관련 파라미터 : PGA_AGGREGATE_TARGET 

- performance 관련 query
 select * from v$latch;
 select * from v$system_event;
 select * from v$event_name;

- v$sga_target_advice;

- MEMORY_TARGET (11g 파라미터)

- CGA (Call Globalization Area)

'Oracle > Tuning' 카테고리의 다른 글

[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Automatic Performance Management  (0) 2009.12.29
Dynamic Performance View의 이름 / 설명  (0) 2009.12.26
Posted by 자수성가한 부자
Oracle/Backup & Recovery2009. 12. 23. 17:57

● 개요

Block Corruption의 원인을 확인할 수 있다.
Block Corruption을 찾을 수 있다.
 - Analyze
 - Dbverify
 - DB_BLOCK_CHECKING
 - DBMS_REPAIR
RMAN을 이용하여 Block Corruption을 repair 할 수 있다.


● Block corruption이란?
    : 오라클 포맷이라고 인식되지 않은 블럭을 말한다.
  ◎ block을 읽거나 쓸 때마다 일관성 검사가 수행됨
    - block 버전
    - Cache에 있는 Datablock Address(DBA)와 block buffer의 주소를 비교
    - block checksum : check의 합
  ◎ corrupt block의 종류
    - disk corrupt
    - logically(software) corrupt

● ORA-01578 : "ORACLE data block corrupted (file # %s, block # %s)": 에러
  - corrupted data block을 찾았을 때 발생된다.
  - alert.log에 남음

  - 같은 file과 block이 자주 발생하면 media corruption일 가능성이 큼
  - 다른 flie과 block이 발생하면 software일 가능성이 큼

● Block Corruption 관련 특징
  ◎ dbverify

     : 파일에 훼손된 블럭이 있는지 검사하는 유틸리티
       블럭 일관성 확인.

OS] dbv 파일명

  ◎ analyze
     : logical block check를 수행함.

SQL> analyze table table_name validate structure cascade;

  ◎ db_block_checking
    : block check 관련 파라미터
     TRUE일 경우, 모든 데이터 블럭들에 대해 블럭 checking을 수행

  ◎ db_block_checksum
   : 데이터 블럭헤더에 쓸 때 검사.파라미터
     셋팅하는 것을 권장.

  ◎ exp
   : export중 block corruption이 있으면 도중에 멈춤

  ◎ flashback

  ◎ dbms_repair package
    : 8i부터 사용가능.
     손상된 블럭을 marking.또는 skip

  ◎ BMR(Block Media Recovery)
    : 9i부터 사용가능.
      MTTR을 낮춘다.
      복원에 적절한 백업을 알아서 찾음.

RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 49, 50, 51, 52;


기타 참고사항

- DBA
  : Data Block Address의 약자


- Fix와 Repair의 사전적 의미
  - Fix : 간단한 것을 고침
  - Repair : 기술력이 많이 드는 것을 고침

Posted by 자수성가한 부자
Oracle/Backup & Recovery2009. 12. 23. 15:43
● restore points
  - 복원할 지점을 지정한다.
  - 10g new feature
  - savepoint와 비슷한 개념.
  - scn or time에 대한 alais
  - control file에 저장됨.
  - 관련 view : v$restore_point
  - FRA에 저장됨.(관련 파라미터 : db_recovery_file_dest, db_recovery_file_dest_size

  ◎ 종류
    1. normal restore point
      : 보장이 안됨(FRA이 크기가 모자라면 지워질 가능성이 있음). scn이나 시간을 대신할 목적으로 생성

SQL> create restore point before_upgrade; 

   2. guaranteed restore point
     : restore point 후의 보장이 됨. 복원이 빠름.


SQL> create restore point before_upgrade guarantee flashback database;

Flashback database(O) : flashback log가 주기적으로 남긴다.
Flashback database(X) : whole restore를 빠르게 할 수 있다. 첫번째 남기는 것(FRA세팅 필수)

명령을 친 이후 처음으로 데이터가 변경되면 변경된 데이터의 before 블럭이 남는다.
몇 번의 변경이 있어도 before 블럭을 적용하면 whole backup이 없어도 restore됨

flashback database에 종속된 기능이 아니다

참조 : http://blog.naver.com/orapybubu?Redirect=Log&logNo=40046342918


필요할 경우 control file을 빨리 복구하는 방법

nomount상황
RMAN> restore controlfile to '경로' from autobackup;

catalog database가 있을 경우
RMAN> restore control file;


read only tablespace의 recovery

- read only로 tablespace를 변경하면 그 시점에 백업을 꼭 해 놓을 것.
- backup file에서 cp로 해결.
case 1 :  read only        ->     read only     ->   read only
case 2 :  read only        ->     read only     ->   read / write
case 3 :  read write       ->     read / write  ->   read only


기타 참고사항

- resetlogs로 open후 반드시 whole backup을 하는 것은 아님
  : %r이 들어가면서 부터

- alter database open resetlogs;로 open할 경우
  : 불완전 복구 후
    flashback database

- 10g부터는 신경쓸 필요가 없지만, 9i에서는 신경써야 할 복구(SCN 관련:alert)
    http://kr.forums.oracle.com/forums/thread.jspa?threadID=463572
Posted by 자수성가한 부자
Oracle/기타2009. 12. 23. 09:22

Oracle 의 뷰가 만들어지는 과정

 

DBA 생활을 하면서  우리가 단순히 사용하는 DBA_, USER_ , ALL_, V$ 등을 제대로 알고 어떻게 만들어지는지에 대한 정의를 한 문서를 본적이 없다.

따라서 최근에 읽기 시작한 "secret oracle"라는 책을 토대로해서 한번 정리해 보는 기회를 가졌다. 

아래는 오라클에서 만들어지는 V$ 뷰들의 layer architecture 를 표현한 그림이다.

맨 아래에 x$ 테이블을 토대로 위의 view나 시노님들이 만들어진다.

그렇다면 우리가 쉽게 조회하는 딕셔너리 뷰 및 v$ 뷰는 결국에는 x$ 테이블의 데이타를 참고하는 view나 시노님에 불과하다.

특히나 우리가 쉽게 조회하는 V$ 뷰는 결국에는 퍼블릭 시노님에 불과하다는 것을 알수 있다.

V$ VIEW라는 이름보다는 V$ 시노님이 더 어울리지 않을까?

 

 

 

TOP-DOWN방식으로 찾아본 X$ 테이블

 

그렇다면 여기서 우리가 초기화파라미터를 조회하기 위해서 흔히들 조회하는 

V$PARAMETER가 어떠한 x$ 테이블을 조회하는지 다이나믹 뷰의 원천 테이블을 찾아보도록 하자.

 

SQL> desc v$parameter
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NUM                                                NUMBER
 NAME                                               VARCHAR2(80)
 TYPE                                               NUMBER
 VALUE                                              VARCHAR2(512)
 DISPLAY_VALUE                                      VARCHAR2(512)
 ISDEFAULT                                          VARCHAR2(9)
 ISSES_MODIFIABLE                                   VARCHAR2(5)
 ISSYS_MODIFIABLE                                   VARCHAR2(9)
 ISINSTANCE_MODIFIABLE                              VARCHAR2(5)
 ISMODIFIED                                         VARCHAR2(10)
 ISADJUSTED                                         VARCHAR2(5)
 ISDEPRECATED                                       VARCHAR2(5)
 DESCRIPTION                                        VARCHAR2(255)
 UPDATE_COMMENT                                     VARCHAR2(255)
 HASH                                               NUMBER


 

1) V$PARAMETER SYNONYM

v$parameter는 sys소유의 v_$parameter 뷰를  public 시노님으로 생성되어 놓은 것에 불과하다는 것을 알수 있다.  

 

SQL> SELECT OWNER,SYNONYM_NAME,TABLE_OWNER,TABLE_NAME FROM DBA_SYNONYMS

         WHERE SYNONYM_NAME ='V$PARAMETER';

 

OWNER    SYNONYM_NAME     TABLE_OWNER     TABLE_NAME
------------------------------------------------------------
PUBLIC    V$PARAMETER        SYS                     V_$PARAMETER

 

 

2) SYS.V_$PARAMETER 뷰

 

V_$PARAMETER 뷰의 정의를 찾아보자.

이 뷰는 SYS.V$PARAMETER 로 생성된 것을 알수 있다.

 

SQL> SELECT OWNER,TEXT FROM DBA_VIEWS WHERE VIEW_NAME ='V_$PARAMETER';

OWNER    TEXT

-------------------------------------------------
SYS         select "NUM","NAME","TYPE","VALUE","DISPLAY_VALUE","ISDEFAULT","ISSES_MODIFIABLE","ISSYS_MODIFIABLE","

              ,"ISINSTANCE_MODIFIABLE","ISMODIFIED","ISADJUSTED","ISDEPRECATED","DESCRIPTION","UPDATE_COMMENT",

              "HASH"   from v$parameter

 

3) SYS.V$PARAMETER FIXED VIEW

 

그럼 FIXED VIEW 인 V$PARAMETER 의 구성을 찾아보자.

아래의 V$FIXED_VIEW_DEFINITION 뷰를 조회해보면 GV$PARAMETER를 가지고 있는것을 알수 있다.

 

SQL> SELECT view_definition FORMAT FROM V$FIXED_VIEW_DEFINITION
    2   WHERE view_name='V$PARAMETER';

 

FORMAT
--------------------------------------------------------------------------------
select  NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE
, ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE, ISMODIFIED , ISADJUSTED , ISDEPRECAT
ED, DESCRIPTION, UPDATE_COMMENT, HASH  from GV$PARAMETER where inst_id = USERENV
('Instance')

 

 

GV$PARAMETER를 위의 1~ 3번과정을 동일하게 조회된다.

마지막에 SYS.GV$PARAMETER를 조회하면 해당되는 X$ 테이블을 알 수 있다.

 

SELECT * FROM V$FIXED_VIEW_DEFINITION
WHERE VIEW_NAME='GV$PARAMETER'

 

View_name 

--------------------

GV$PARAMETER 

View_definition

----------------------------------------------------------------------------------------------------

select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl, ksppstdvl, ksppstdf,  decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),  decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',                                  3,'IMMEDIATE','FALSE'),  decode(bitand(ksppiflg,4),4,'FALSE',                                     decode(bitand(ksppiflg/65536,3), 0, 'FALSE', 'TRUE')),     decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),  decode(bitand(ksppstvf,2),2,'TRUE','FALSE'),  decode(bitand(ksppilrmflg/64, 1), 1, 'TRUE', 'FALSE'),  ksppdesc, ksppstcmnt, ksppihash  from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and  ((translate(ksppinm,'_','#') not like '##%') and    ((translate(ksppinm,'_','#') not like '#%')      or (ksppstdf = 'FALSE') or      (bitand(ksppstvf,5) > 0)))

 

위의 과정들을 귀찮으니 한방에 어떠한 X$테이블인지 찾을려면

V$FILESTAT 의 예를 보면  먼저 GV$FILESTAT 로 변환해서 위의 V$FIXED_VIEW_DEFINITION 을 조회하면 되겠다.

 

View_name 

------------

View_definition

---------------------

GV$FILESTAT 

select k.inst_id, k.kcfiofno,k.kcfiopyr,k.kcfiopyw,k.kcfiopbr,k.kcfiopbw, k.kcfiosbr,k.kcfioprt,k.kcfiopwt,k.kcfiosbt,k.kcfioavg,k.kcfiolst,k.kcfiomin, k.kcfiormx,k.kcfiowmx from x$kcfio k,x$kccfe f where f.fedup <> 0 and  f.fenum=k.kcfiofno

 

X$ -> GV$ 뷰-> GV_$ 뷰-> GV$ 시노님 -> V$ 뷰 -> V_$ 뷰 -> V$ 시노님

 

과정을 거친다.

 

그렇다면 X$ 테이블의 정체는 무엇인가?

X$ 테이블은 오라클의 각종 뷰가 참조되는 원천 테이블이자 C 프로그램으로 작성된 Oracle Kernel 에 존재하는 2차원(2-dimension) array 형태의 데이타이다. 절대로 보호되어야 하는 데이타이고 따라서 당근 SYS유저만이 접근이 가능하다.  

거의 X$ 테이블에 대해서는 몇몇 테이블들(x$bh,x$ksppi, x$ksppsv 등)  일부 공개가 되어 있고 대부분 internal 그 의미와 용도가 숨겨져 있다.

다만 추측으로 어떠한 테이블인지에 대한 정보가 제공될 뿐이다.

약어

추정 의미<?xml:namespace prefix = o /><?xml:namespace prefix = o />

K

Kernel

KC

Kernel Cache

KCB

Kernel Cache buffer

KCBW

Kernel Cache buffer wait

KCC

Kernel Cache Control file

KCCB

Kernel Cache Control Backup

KCCF

Kernel Cache Copy Flash Recovery Area

KCCDC

Kernel Cache Control file Data file Copy

KCP

Kernel Cache transPortable tablespace

KCR

Kernel Cache Redo

KCT

Kernel Cache insTance

KG

Kernel Generic

KGL

Kernel Generic Library Cache

KCLJ

Kernel Generic Library Cache java

KS

Kernel Service

KSB

Kernel Service Background

KSM

Kernel Service Memory

KSU

Kernel Service User

KSUSE

Kernel Service User SEssion

KSUSECON

Kernel Service User SEssion COnnection

KSUSEH

Kernel Service User SEssion History

KT

Kernel Transaction

KTU

Kernel Transaction Undo

KX

Kernel eXecution

KXS

Kernel eXecution Pool

 

위의 정보를 토대로 v$filestat가 참조하는 x$ 테이블인 x$kcfio ,x$kccfe 의 뜻을 대충 살펴보자면 kernel cache의 file i/o에 관련된 테이블과  Kernel Cache Control file에 관련된 구조정보를 조인하는 문구정도로 추측할 수 있을 것이다.

 

 

참고문헌: Secret Oracle (by Robert Debes)

'Oracle > 기타' 카테고리의 다른 글

reorganization  (0) 2010.02.11
Read the alert log with SQL  (0) 2010.01.13
login.sql셋팅  (0) 2009.12.15
DBMS_STATS package  (0) 2009.12.08
index의 크기 문제  (0) 2009.12.02
Posted by 자수성가한 부자
Oracle/용어정리2009. 12. 23. 00:00

FGA

FGA(Fine-Grained Auditing)

Fine-grained auditing allows the monitoring of data access based on content. It provides granular auditing of queries, as well as INSERT, UPDATE, and DELETE operations. For example, a central tax authority needs to track access to tax returns to guard against employee snooping, with enough detail to determine what data was accessed. It is not enough to know that SELECT privilege was used by a specific user on a particular table. Fine-grained auditing provides this deeper functionality.

In general, fine-grained auditing policy is based on simple user-defined SQL predicates on table objects as conditions for selective auditing. During fetching, whenever policy conditions are met for a returning row, the query is audited. Later, Oracle runs user-defined audit event handlers using autonomous transactions to process the event.

Fine-grained auditing can be implemented in user applications using the DBMS_FGA package or by using database triggers.

출처 : http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/security.htm#sthref2840

'Oracle > 용어정리' 카테고리의 다른 글

정규화란?  (1) 2010.02.04
옵티마이져(Optimizer)란?  (0) 2010.02.04
DUL(Disk Unload)  (0) 2009.12.18
OLTP  (0) 2009.12.16
Oracle LogMiner  (0) 2009.12.10
Posted by 자수성가한 부자
Oracle/Backup & Recovery2009. 12. 22. 23:13

● clone DB를 이용한 incomplete recovery 실습2

  ◎ RMAN

실습순서

1. 실습을 위한 환경설정
   ① whole backup
   테이블 생성 -> 데이터 입력 -> 테이블 삭제 (recovery 확인용)
2. clone DB를 이용한 복구
   ① password file 준비
   ② oracle net 설정(tnsnames.ora)
   ③ parameter file 생성
   ④ Start the Auxiliary Instance
   ⑤ Mount or Open the Target Database
   ⑥ Allocate Auxiliary Channels if Automatic Channels Are Not Configured
   ⑦ clone DB에서 export -> devdb로 import





    1. 실습을 위한 환경 설정 : ① whole backup
      

[oracle@ora10gr2 ~]$ mkdir /u01/app/oracle/oradata/devdb_rman_backup
[oracle@ora10gr2 ~]$ export ORACLE_SID=devdb
[oracle@ora10gr2 ~]$ rman target /
connected to target database: DEVDB (DBID=610700147)
RMAN> backup database format='/u01/app/oracle/oradata/devdb_rman_backup/devdb_%d_%s_%p.bus';
RMAN> exit 



   
1. 실습을 위한 환경 설정 :  테이블 생성 -> 데이터 입력 -> 테이블 삭제 (recovery 확인용)


[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> create table phil.t2 (col1 varchar2(20));
SQL> insert into  phil.t2 values ('Recovery done!');
SQL> commit;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> -- 복구 시점 확인
SQL> !date
2009. 12. 21. (월) 23:43:47 KST
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> -- 장애 발생
SQL> drop table phil.t2 purge;
SQL> exit



    2. clone DB를 이용한 복구 : ① password file 준비



[oracle@ora10gr2 ~]$ cd
[oracle@ora10gr2 ~]$ cd $ORACLE_HOME/dbs
[oracle@ora10gr2 dbs]$ orapwd file=orapwdevdbaux password=oracle entries=5


    2. clone DB를 이용한 복구 : ② oracle net 설정(tnsnames.ora)


[oracle@ora10gr2 dbs]$ cd $ORACLE_HOME/network/admin
[oracle@ora10gr2 admin]$ vi tnsnames.ora
devdbaux =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = devdbaux)
    )
  )


    2. clone DB를 이용한 복구 : parameter file 생성


[oracle@ora10gr2 admin]$ export ORACLE_SID=devdb
[oracle@ora10gr2 admin]$ sqlplus / as sysdba
SQL> create pfile='$ORACLE_HOME/dbs/initdevdbaux.ora' from spfile;
SQL> !mkdir /u01/app/oracle/oradata/devdbaux
SQL> !vi $ORACLE_HOME/dbs/initdevdbaux.ora
DB_NAME=devdbaux
CONTROL_FILES='/u01/app/oracle/oradata/devdbaux/control01.ctl'
DB_FILE_NAME_CONVERT=('/u01/app/oracle/oradata/devdb', '/u01/app/oracle/oradata/devdbaux')
LOG_FILE_NAME_CONVERT=('/u01/app/oracle/oradata/devdb', '/u01/app/oracle/oradata/devdbaux')
db_block_size=4096
sga_target=200m
pga_aggregate_target=60m
SQL> exit


    2. clone DB를 이용한 복구 : ④ Start the Auxiliary Instance


[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> startup force nomount
SQL> exit



    2. clone DB를 이용한 복구 : ⑤ Mount or Open the Target Database


[oracle@ora10gr2 ~]$ export ORACLE_SID=devdb
[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> startup force
SQL> exit



    2. clone DB를 이용한 복구 : ⑥ Allocate Auxiliary Channels if Automatic Channels
                              Are Not Configured



[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 ~]$ export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
[oracle@ora10gr2 ~]$ export NLS_LANG=american
[oracle@ora10gr2 ~]$ rman TARGET sys/oracle@devdb AUXILIARY /
RMAN> run {
 ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;
 DUPLICATE TARGET DATABASE TO devdbaux UNTIL TIME '2009/12/21 23:43:47';
}



   2. clone DB를 이용한 복구 : ⑦ clone DB에서 export -> devdb로 import


[oracle@ora10gr2 ~]$ export ORACLE_SID=devdbaux
[oracle@ora10gr2 dbs]$ sqlplus / as sysdba
SQL> select * from phil.t2;
COL1
--------------------
Recovery done!

SQL> !exp phil/phil file=t2.dmp tables=t2
SQL> exit
[oracle@ora10gr2 dbs]$ export ORACLE_SID=devdb
[oracle@ora10gr2 dbs]$ sqlplus phil/phil
SQL> select * from t2;
select * from t2
              *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> !imp phil/phil file=t2.dmp tables=t2
SQL> select * from t2;

'Oracle > Backup & Recovery' 카테고리의 다른 글

Block Corruption  (0) 2009.12.23
restore points  (0) 2009.12.23
clone DB를 이용한 incomplete recovery 실습1 : user managed  (0) 2009.12.22
MTTR (Mean Time To Recover)  (0) 2009.12.21
MTBF(Mean Time Between Failures)  (0) 2009.12.21
Posted by 자수성가한 부자
Oracle/Backup & Recovery2009. 12. 22. 18:17

● clone DB를 이용한 incomplete recovery 실습1

  ◎ User Managed

실습 순서

1. 실습을 위한 환경 설정
   ① whole backup
   ② 테이블 생성 -> 데이터 입력 -> 테이블 삭제 (recovery 확인용)

2. clone DB를 이용한 복구
   ① control file 및 parameter file 준비
   ② datafile backup, online redo log file, archive log file 복사
   ③ startup nomount -> control file 생성 -> 불완전 복구
   ④ clone DB에서 export -> devdb로 import
   ⑤ clone database 종료 및 삭제



    1. 실습을 위한 환경 설정 : ① whole backup       


OS] export ORACLE_SID=devdb
OS] sqlplus / as sysdba
-- 기존의 backup 및 archived log file 삭제
SQL> !rm -rf $ORACLE_BASE/oradata/devdb_backup
SQL> !rm -rf $ORACLE_BASE/oradata/devdb_arch
-- archive log file 위치를 다시 설정
SQL> !mkdir $ORACLE_BASE/oradata/devdb_arch
SQL> alter system set log_archive_dest_1 = 'location=$ORACLE_BASE/oradata/devdb_arch/';
SQL> alter system switch logfile;
SQL> !ls $ORACLE_BASE/oradata/devdb_arch
  1_2_706222899.dbf
-- 정상종료 및 whole backup
SQL> shutdown immediate
SQL> !mkdir $ORACLE_BASE/oradata/devdb_backup
SQL> !cp $ORACLE_BASE/oradata/devdb/* $ORACLE_BASE/oradata/devdb_backup
SQL> startup
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
devdb 



    1. 실습을 위한 환경 설정 : ② 테이블 생성 -> 데이터 입력 -> 테이블 삭제 (recovery 확인용)


  SQL> drop table phil.t1 purge;
drop table phil.t1 purge
                *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> create table phil.t1 (no number);
SQL> insert into phil.t1 values (1000);
SQL> insert into phil.t1 values (2000);
SQL> commit;
SQL> select * from phil.t1;
        NO
----------
      1000
      2000
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> !date                         
  2009. 12. 21. (월) 22:56:38 KST            -- 반드시 확인할 것.

SQL> alter system switch logfile;
SQL> drop table phil.t1 purge;
SQL> select * from phil.t1;
select * from phil.t1
                   *
ERROR at line 1:
ORA-00942: table or view does not exist



    2. clone DB를 이용한 복구 : ① control file 및 parameter file 준비


   SQL> !mkdir $ORACLE_BASE/oradata/devdb_clone

  SQL> alter database backup controlfile to trace;                 -- control file을 재생성할 수 있는 스크립트를 생성.
SQL> select d.value||'/'||p.value||'_ora_'||s.spid||'.trc' as trace_file_name
     from (select value from v$parameter where name = 'instance_name') p,
          (select value from v$parameter where name = 'user_dump_dest') d,
          (select spid  from v$process   where addr = (select paddr from v$session
                                                       where sid = (select sid from v$mystat
                                                                    where rownum = 1))) s;
     TRACE_FILE_NAME
     --------------------------------------------------------------------
     /u01/app/oracle/product/10.2.0/db_1/rdbms/log/devdb_ora_24567.trc
-- 컨트롤 파일 생성을 위한 준비
SQL> !cp /u01/app/oracle/product/10.2.0/db_1/rdbms/log/devdb_ora_24567.trc $ORACLE_BASE/oradata/devdb_clone/control_file_create.sql
-- 파라미터 파일을 위한 준비
SQL> create pfile='$ORACLE_HOME/dbs/initC1.ora' from spfile;
SQL> !ls $ORACLE_BASE/oradata/devdb_clone
  control_file_create.sql 
-- 다음처럼 control file 생성을 위한 명령을 편집한다.
SQL> !vi $ORACLE_BASE/oradata/devdb_clone/control_file_create.sql
CREATE CONTROLFILE set DATABASE "C1" RESETLOGS  ARCHIVELOG    -- set 부분, DB 이름 부분
    MAXLOGFILES 16
    MAXLOGMEMBERS 2
    MAXDATAFILES 30
    MAXINSTANCES 1
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 (
    '/u01/app/oracle/oradata/devdb_clone/redo01_a.log',       -- devdb_clone 경로
    '/u01/app/oracle/oradata/devdb_clone/redo01_b.log'
  ) SIZE 20M,
  GROUP 2 (
    '/u01/app/oracle/oradata/devdb_clone/redo02_a.log',
    '/u01/app/oracle/oradata/devdb_clone/redo02_b.log'
  ) SIZE 20M
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/devdb_clone/system01.dbf',
  '/u01/app/oracle/oradata/devdb_clone/undotbs01.dbf',
  '/u01/app/oracle/oradata/devdb_clone/sysaux01.dbf',
  '/u01/app/oracle/oradata/devdb_clone/undo01.dbf',
  '/u01/app/oracle/oradata/devdb_clone/user_tab_ts.dbf',
  '/u01/app/oracle/oradata/devdb_clone/user_ind_ts.dbf'
CHARACTER SET US7ASCII
;
위의 내용만 두고 아래쪽은 모두 삭제한다.
SQL> -- 다음처럼 pfile을 편집한다.
SQL> !vi $ORACLE_HOME/dbs/initC1.ora
*.compatible='10.2.0'
*.control_files='/u01/app/oracle/oradata/devdb_clone/control01.ctl'
*.db_block_size=4096
*.db_name='C1'
*.log_archive_dest_1='location=$ORACLE_BASE/oradata/devdb_clone/'
*.pga_aggregate_target=60M
*.sga_target=200M
*.undo_management='auto'
*.undo_tablespace='undotbs01'



    2. clone DB를 이용한 복구 : ② datafile backup, online redo log file, archive log file 복사


  -- 백업해둔 데이터 파일 복사
  SQL> !ls $ORACLE_BASE/oradata/devdb_clone
control_file_create.sql
SQL> !cp $ORACLE_BASE/oradata/devdb_backup/*.dbf $ORACLE_BASE/oradata/devdb_clone
SQL> !ls $ORACLE_BASE/oradata/devdb_clone
control_file_create.sql  sysaux01.dbf  system01.dbf  temp01.dbf  undo01.dbf  undotbs01.dbf  user_ind_ts.dbf  user_tab_ts.dbf
-- 사용중인 online redo log 파일 복사
SQL> !cp $ORACLE_BASE/oradata/devdb/*.log $ORACLE_BASE/oradata/devdb_clone
SQL> !ls $ORACLE_BASE/oradata/devdb_clone
control_file_create.sql  redo01_b.log  redo02_b.log  system01.dbf  undo01.dbf     user_ind_ts.dbf
redo01_a.log             redo02_a.log  sysaux01.dbf  temp01.dbf    undotbs01.dbf  user_tab_ts.dbf
-- archived redo log 파일 복사
SQL> !cp $ORACLE_BASE/oradata/devdb_arch/* $ORACLE_BASE/oradata/devdb_clone
SQL> !ls $ORACLE_BASE/oradata/devdb_clone
1_19_706222899.dbf  1_22_706222899.dbf  control_file_create.sql  redo02_a.log  system01.dbf  undotbs01.dbf
1_20_706222899.dbf  1_23_706222899.dbf  redo01_a.log             redo02_b.log  temp01.dbf    user_ind_ts.dbf
1_21_706222899.dbf  1_24_706222899.dbf  redo01_b.log             sysaux01.dbf  undo01.dbf    user_tab_ts.dbf
SQL> exit



    2. clone DB를 이용한 복구 : ③ startup nomount -> control file 생성 -> 불완전 복구


[oracle@ora10gr2 oradata]$ export ORACLE_SID=C1
[oracle@ora10gr2 oradata]$ sqlplus / as sysdba
SQL> startup nomount
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
C1               STARTED
SQL> @ $ORACLE_BASE/oradata/devdb_clone/control_file_create.sql
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
C1               MOUNTED

SQL> -- 위에서 확인했던 날짜와 시간을 잘 확인해서 아래 명령을 완성한다.
SQL> recover database until time '2009-12-21 22:56:38' using backup controlfile;
ORA-00279: change 273942 generated at 12/21/2009 21:22:11 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/oradata/devdb_clone/1_14_706222899.dbf
ORA-00280: change 273942 for thread 1 is in sequence #14
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
--> auto 입력
... 생략 ...
ORA-00308: cannot open archived log
'/u01/app/oracle/oradata/devdb_clone/1_19_706222899.dbf'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
SQL> -- online redo log 파일을 계속 적용해야 하므로 파일 이름을 확인해서 사용한다.
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/devdb_clone/redo01_a.log
/u01/app/oracle/oradata/devdb_clone/redo01_b.log
/u01/app/oracle/oradata/devdb_clone/redo02_a.log
/u01/app/oracle/oradata/devdb_clone/redo02_b.log
SQL> recover database until time '2009-12-21 22:56:38' using backup controlfile;
ORA-00279: change 274060 generated at 12/21/2009 21:34:32 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/oradata/devdb_clone/1_19_706222899.dbf
ORA-00280: change 274060 for thread 1 is in sequence #19
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
--> /u01/app/oracle/oradata/devdb_clone/redo01_a.log 입력
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUS
---------------- ------------
C1               MOUNTED
SQL> alter database open resetlogs;
SQL> select * from phil.t1;
        NO
----------
      1000
      2000
SQL> exit



    2. clone DB를 이용한 복구 : ④ clone DB에서 export -> devdb로 import


 
[oracle@ora10gr2 devdb_clone]$ exp phil/phil file=t1.dmp tables=t1
About to export specified tables via Conventional Path ...
. . exporting table                             T1          2 rows exported
Export terminated successfully without warnings.
[oracle@ora10gr2 devdb_clone]$ export ORACLE_SID=devdb
[oracle@ora10gr2 devdb_clone]$ sqlplus phil/phil
SQL> select * from phil.t1;
select * from phil.t1
                   *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> ! imp phil/phil file=t1.dmp tables=t1;
SQL> select * from phil.t1;
        NO
----------
      1000
      2000
SQL> exit



    2. clone DB를 이용한 복구 : ⑤ clone database 종료 및 삭제


[oracle@ora10gr2 devdb_clone]$ cd
[oracle@ora10gr2 ~]$ export ORACLE_SID=C1
[oracle@ora10gr2 ~]$ sqlplus / as sysdba
SQL> shutdown abort
SQL> exit
[oracle@ora10gr2 ~]$ ls /u01/app/oracle/oradata
[oracle@ora10gr2 ~]$ rm -rf /u01/app/oracle/oradata/devdb_clone

 

'Oracle > Backup & Recovery' 카테고리의 다른 글

restore points  (0) 2009.12.23
clone DB를 이용한 incomplete recovery 실습2 : RMAN  (0) 2009.12.22
MTTR (Mean Time To Recover)  (0) 2009.12.21
MTBF(Mean Time Between Failures)  (0) 2009.12.21
User Managed Recovery  (0) 2009.12.18
Posted by 자수성가한 부자