<<20060705>>

SQL> alter system set control_files=
  2  "D:\oracle\oradata\DBH1\CONTROL01.CTL",
  3  "D:\oracle\oradata\DBH1\CONTROL02.CTL",
  4  "D:\oracle\oradata\DBH1\CONTROL03.CTL" scope=spfile;

시스템이 변경되었습니다.

SQL> shutdown immediate
ORA-01507: ??????? ????? ?????
ORACLE 인스턴스가 종료되었습니다.
SQL> startup
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.

++++++++++++++++++++++++++++++++++++++++++++++++++++++
*** Redo log file 관리 (multiplexing)
--로그정보확인
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ----------------------------------
         3 STALE   ONLINE  D:\ORACLE\ORADATA\DBH1\REDO03.LOG
         2             ONLINE  D:\ORACLE\ORADATA\DBH1\REDO02.LOG
         1 STALE   ONLINE  D:\ORACLE\ORADATA\DBH1\REDO01.LOG


SQL> select GROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ---------- ----------------
         1          1          2  104857600          1 INACTIVE
         2          1          3  104857600          1 CURRENT
         3          1          1  104857600          1 INACTIVE


SQL> alter database add logfile
  2  'D:\oracle\oradata\DBH1\REDO04.LOG' size 10m;

데이타베이스가 변경되었습니다.

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- -----------------------------------
         3 STALE   ONLINE  D:\ORACLE\ORADATA\DBH1\REDO03.LOG
         2         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO02.LOG
         1 STALE   ONLINE  D:\ORACLE\ORADATA\DBH1\REDO01.LOG
         4         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO04.LOG


SQL> select GROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ---------- --------------
         1          1          2  104857600          1 INACTIVE
         2          1          3  104857600          1 CURRENT
         3          1          1  104857600          1 INACTIVE
         4          1          0   10485760          1 UNUSED


alter system switch logfile;  -- 강제 로그 스위치 발생

SQL> select GROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ---------- --------------
         1          1          2  104857600          1 INACTIVE
         2          1          3  104857600          1 ACTIVE
         3          1          1  104857600          1 INACTIVE
         4          1          4   10485760          1 CURRENT

-- 로그 멤버 추가(기존 그룹에 파일추가)
--크기를 지정할 수 없다(기존 멤버 파일과 같은 크기로 생성)

SQL> alter database add logfile member
  2  'D:\oracle\oradata\DBH1\REDO01_r.LOG' to group 1,
  3  'D:\oracle\oradata\DBH1\REDO02_r.LOG' to group 2,
  4  'D:\oracle\oradata\DBH1\REDO03_r.LOG' to group 3,
  5  'D:\oracle\oradata\DBH1\REDO04_r.LOG' to group 4 ;

데이타베이스가 변경되었습니다.

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ----------------------------------------
         3 STALE   ONLINE  D:\ORACLE\ORADATA\DBH1\REDO03.LOG
         2             ONLINE  D:\ORACLE\ORADATA\DBH1\REDO02.LOG
         1 STALE   ONLINE  D:\ORACLE\ORADATA\DBH1\REDO01.LOG
         4             ONLINE  D:\ORACLE\ORADATA\DBH1\REDO04.LOG
         1 INVALID ONLINE  D:\ORACLE\ORADATA\DBH1\REDO01_R.LOG
         2 INVALID ONLINE  D:\ORACLE\ORADATA\DBH1\REDO02_R.LOG
         3 INVALID ONLINE  D:\ORACLE\ORADATA\DBH1\REDO03_R.LOG
         4 INVALID ONLINE  D:\ORACLE\ORADATA\DBH1\REDO04_R.LOG

8 개의 행이 선택되었습니다.

SQL> select GROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ---------- --------------
         1             1                2        104857600          2         INACTIVE
         2             1                3        104857600          2         ACTIVE
         3             1                1        104857600          2         INACTIVE
         4             1                4         10485760           2         CURRENT


-- 로그 멤버 삭제

SQL> alter database drop logfile member
  2  'D:\ORACLE\ORADATA\DBH1\REDO01_R.LOG';

데이타베이스가 변경되었습니다.

SQL> alter database drop logfile member
  2  'D:\ORACLE\ORADATA\DBH1\REDO02_R.LOG';

데이타베이스가 변경되었습니다.

SQL> alter database drop logfile member
  2  'D:\ORACLE\ORADATA\DBH1\REDO03_R.LOG';

데이타베이스가 변경되었습니다.

SQL> alter system switch logfile;

시스템이 변경되었습니다.

SQL> alter database drop logfile member
  2  'D:\ORACLE\ORADATA\DBH1\REDO04_R.LOG';

데이타베이스가 변경되었습니다.

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ----------------------------------------
         3         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO03.LOG
         2         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO02.LOG
         1         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO01.LOG
         4         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO04.LOG

SQL> select GROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ---------- --------------
         1          1          6  104857600          1 INACTIVE
         2          1          7  104857600          1 CURRENT
         3          1          5  104857600          1 INACTIVE
         4          1          4   10485760          1 INACTIVE


-- 로그 그룹 삭제(그룹번호로 삭제가능)

SQL> alter database drop logfile group 4;

데이타베이스가 변경되었습니다.

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ----------------------------------------
         3         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO03.LOG
         2         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO02.LOG
         1         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO01.LOG

SQL> select GROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ---------- --------------
         1          1          6  104857600          1 INACTIVE
         2          1          7  104857600          1 CURRENT
         3          1          5  104857600          1 INACTIVE

-- 오라클에서 그룹이나 멤버를 삭제한 뒤, 물리적인 파일(control,redolog,data)들도 삭제하길 바란다.
    오라클에서는 기본적으로 논리적 파일과 물리적 파일을 동시게 삭제하지 않는다.

--오라클에서 파일(컨트롤/리두로그/데이터)이 삭제된다 해도(비사용)
--운영체제 상에서의 물리적인 파일은 함께 삭제되지 않는다!!!

*** tablespace 관리
--system 테이블 스페이스가 locally 방식이면 다른 테이블 스페이스도 locally방식을 사용해야 한다
--하나의 테이블 스페이스는 최소한 하나 이상의 데이터 파일로 구성

SQL> select tablespace_name, status, contents, extent_management from dba_tablespaces;

TABLESPACE_NAME STATUS    CONTENTS  EXTENT_MAN
--------------- --------- --------- ----------
SYSTEM          ONLINE    PERMANENT LOCAL --***
UNDOTBS1        ONLINE    UNDO      LOCAL           
TEMP            ONLINE    TEMPORARY LOCAL
CWMLITE         ONLINE    PERMANENT LOCAL
DRSYS           ONLINE    PERMANENT LOCAL
EXAMPLE         ONLINE    PERMANENT LOCAL
INDX            ONLINE    PERMANENT LOCAL
ODM             ONLINE    PERMANENT LOCAL
TOOLS           ONLINE    PERMANENT LOCAL
USERS           ONLINE    PERMANENT LOCAL
XDB             ONLINE    PERMANENT LOCAL

11 개의 행이 선택되었습니다.

SQL> select tablespace_name, bytes, file_name from dba_data_files
  2  union all
  3  select tablespace_name, bytes, file_name from dba_temp_files;

TABLESPACE_NAME      BYTES FILE_NAME
--------------- ---------- ---------------------------------------------
XDB               39976960 C:\ORACLE\ORADATA\DBTEA\XDB01.DBF
USERS             26214400 C:\ORACLE\ORADATA\DBTEA\USERS01.DBF
UNDOTBS1         209715200 C:\ORACLE\ORADATA\DBTEA\UNDOTBS01.DBF
TOOLS             10485760 C:\ORACLE\ORADATA\DBTEA\TOOLS01.DBF
SYSTEM           419430400 C:\ORACLE\ORADATA\DBTEA\SYSTEM01.DBF
ODM               20971520 C:\ORACLE\ORADATA\DBTEA\ODM01.DBF
INDX              26214400 C:\ORACLE\ORADATA\DBTEA\INDX01.DBF
EXAMPLE          156631040 C:\ORACLE\ORADATA\DBTEA\EXAMPLE01.DBF
DRSYS             20971520 C:\ORACLE\ORADATA\DBTEA\DRSYS01.DBF
CWMLITE           20971520 C:\ORACLE\ORADATA\DBTEA\CWMLITE01.DBF
TEMP              41943040 C:\ORACLE\ORADATA\DBTEA\TEMP01.DBF

11 개의 행이 선택되었습니다.

--tablespace 생성
SQL> create tablespace ts_ex1
  2  datafile 'C:\ORACLE\ORADATA\DBTEA\ts_ex1.dbf' size 5m
  3  autoextend on next 2m maxsize 20m;
     -------------------절이 없다면 자동 증가 할 수 없다!

테이블 영역이 생성되었습니다.

SQL> select tablespace_name, bytes, file_name from dba_data_files
  2  where tablespace_name='TS_EX1';

TABLESPACE_NAME      BYTES FILE_NAME
--------------- ---------- ---------------------------------------------
TS_EX1             5242880 C:\ORACLE\ORADATA\DBTEA\TS_EX1.DBF

--tablespace의 용량 늘이기
1. 데이터 파일 추가
SQL> alter tablespace ts_ex1
  2  add datafile 'C:\ORACLE\ORADATA\DBTEA\TS_EX2.DBF' size 5m;

테이블 영역이 변경되었습니다.

SQL> @t1

TABLESPACE_NAME      BYTES FILE_NAME
--------------- ---------- ---------------------------------------------
TS_EX1             5242880 C:\ORACLE\ORADATA\DBTEA\TS_EX1.DBF
TS_EX1             5242880 C:\ORACLE\ORADATA\DBTEA\TS_EX2.DBF --***

2. 기존 파일의 크기 늘이기
SQL> alter database datafile
  2  'C:\ORACLE\ORADATA\DBTEA\TS_EX1.DBF' resize 10m;

데이타베이스가 변경되었습니다.

SQL> @t1

TABLESPACE_NAME      BYTES FILE_NAME
--------------- ---------- ---------------------------------------------
TS_EX1            10485760 C:\ORACLE\ORADATA\DBTEA\TS_EX1.DBF --***
TS_EX1             5242880 C:\ORACLE\ORADATA\DBTEA\TS_EX2.DBF


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<오후>

--현재 사용 중인 테이블 스페이스 정보

SQL> desc dba_segments
 이름                                      널?      유형
 ----------------------------------------- -------- -------------
 OWNER                                              VARCHAR2(30)
 SEGMENT_NAME                                       VARCHAR2(81)
 PARTITION_NAME                                     VARCHAR2(30)
 SEGMENT_TYPE                                       VARCHAR2(18)
 TABLESPACE_NAME                                    VARCHAR2(30)
 HEADER_FILE                                        NUMBER
 HEADER_BLOCK                                       NUMBER
 BYTES                                              NUMBER
 BLOCKS                                             NUMBER
 EXTENTS                                            NUMBER
 INITIAL_EXTENT                                     NUMBER
 NEXT_EXTENT                                        NUMBER
 MIN_EXTENTS                                        NUMBER
 MAX_EXTENTS                                        NUMBER
 PCT_INCREASE                                       NUMBER
 FREELISTS                                          NUMBER
 FREELIST_GROUPS                                    NUMBER
 RELATIVE_FNO                                       NUMBER
 BUFFER_POOL                                        VARCHAR2(7)

SQL> select distinct tablespace_name from dba_segments;

TABLESPACE_NAME
------------------------------
CWMLITE
DRSYS
EXAMPLE
ODM
SYSTEM
TOOLS
UNDOTBS1
XDB


-- 현재 사용하고 있지 않는 테이블 스페이스 정보
(dba_tablespaces)-(dba_segments) = ?
전체 테이블 스페이스 - 사용중인 테이블 스페이스 = ?

select tablespace_name from dba_tablespaces
minus
select distinct tablespace_name from dba_segments;


-- 테이블 스페이스 삭제
테이블 스페이스 안에 객체가 포함되어있을 경우 삭제 안됨
drop tablespace table_name including contents and datafiles;
                                     ---------------------------
                       운영체제상의 테이블 스페이스 내의 물리적인 파일들도 삭제가능

SQL> alter user sky default tablespace users;

사용자가 변경되었습니다.

SQL> select username,default_tablespace from dba_users;


-- 해당 테이블스페이스
-- sky 가 소유한 sawon 테이블정보
select tablespace_name from dba_tables where owner='SKY' and table_name='SAWON';

TABLESPACE_NAME
------------------------------
SYSTEM

select tablespace_name from dba_tables where owner='SCOTT' and table_name='EMP';

TABLESPACE_NAME
------------------------------
SYSTEM

select * from sky.sawon;  --온라인으로 확인


SQL> alter tablespace users offline;

테이블 영역이 변경되었습니다.

SQL> select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
CWMLITE                        ONLINE
DRSYS                          ONLINE
EXAMPLE                        ONLINE
INDX                           ONLINE
ODM                            ONLINE
TOOLS                          ONLINE
USERS                          OFFLINE
XDB                            ONLINE

11 개의 행이 선택되었습니다.

SQL> select * from sky.sawon;

 

SQL> alter tablespace users online;

SQL> select tablespace_name,status from dba_tablespaces;

SQL> select * from sky.sawon;


create table scott.dept2
tablespace users
as select * from scott.dept;

select tablespace_name from dba_tables where owner='SCOTT' and table_name='DEPT2';

TABLESPACE_NAME
------------------------------
USERS

select * from scott.dept2;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON


alter tablespace users read only;  -- 읽기 전용으로변경
테이블 영역이 변경되었습니다.

select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
CWMLITE                        ONLINE
DRSYS                          ONLINE
EXAMPLE                        ONLINE
INDX                           ONLINE
ODM                            ONLINE
TOOLS                          ONLINE
USERS                          READ ONLY
XDB                            ONLINE

select * from scott.dept2;

insert into scott.dept2 select * from scott.dept;
insert into scott.dept2 select * from scott.dept
                  *
1행에 오류:
ORA-00372: 파일 9는 지금 수정될 수 없습니다
ORA-01110: 9 데이터 파일: 'D:\ORACLE\ORADATA\DBH1\USERS01.DBF'

drop table scott.dept2;
(읽기전용 테이블스페이스도 삭제는 가능하다,변경 불가)

alter tablespace users read write;


-- Locally management & Dictionary management 관리
1. Locally management
--비트맵 정보를 이용한 빈 extents 기록 관리
--빈공간 조각모음(coalesing), undo(변경전 값) 데이터 관리가 필요없다
--저장 extent 크기가 일정해야 한다 (기본으로 extent 크기도 자동 관리)
   (9i 는 extent 사이즈가 자동으로 변환된다)

2. Dictionary management
(Oracle 9i 버전에서는 사용안함, 퍼포먼스에 영향을 미치기때문에 성능 저하)
--Dictionary table 을 이용하여 빈 extents 기록 관리 => 성능 떨어짐


create tablespace ts_ex1
datafile 'D:\ORACLE\ORADATA\DBH1\USER_data.DBF' size 5m
extent management local uniform size 256k;  --이 마지막줄은 생략가능
--Locally 로 관리되면 저장되는 extent(블럭이모인것) 사이즈가 같아야한다


--UNDO tablespace 생성 : 변경전 값을 가지는 데이타 테이블 스페이스
SQL> create undo tablespace undo_ex
  2  datafile 'D:\ORACLE\ORADATA\DBH1\UNDO_ex.DBF' size 10m;

테이블 영역이 생성되었습니다.

SQL> select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
CWMLITE                        ONLINE
DRSYS                          ONLINE
EXAMPLE                        ONLINE
INDX                           ONLINE
ODM                            ONLINE
TOOLS                          ONLINE
USERS                          ONLINE
XDB                            ONLINE

TABLESPACE_NAME                STATUS
------------------------------ ---------
TS_EX1                         ONLINE
UNDO_EX                        ONLINE

13 개의 행이 선택되었습니다.

--임시 테이블 스페이스 생성
SQL> create temporary tablespace temp_ex
  2  tempfile 'D:\ORACLE\ORADATA\DBH1\temp_ex.DBF' size 5m;

테이블 영역이 생성되었습니다.

SQL> select tablespace_name,contents from dba_tablespaces;

TABLESPACE_NAME                CONTENTS
------------------------------ ---------
SYSTEM                         PERMANENT
UNDOTBS1                       UNDO
TEMP                           TEMPORARY
CWMLITE                        PERMANENT
DRSYS                          PERMANENT
EXAMPLE                        PERMANENT
INDX                           PERMANENT
ODM                            PERMANENT
TOOLS                          PERMANENT
USERS                          PERMANENT
XDB                            PERMANENT

TABLESPACE_NAME                CONTENTS
------------------------------ ---------
TS_EX1                         PERMANENT
UNDO_EX                        UNDO
TEMP_EX                        TEMPORARY

14 개의 행이 선택되었습니다.

SQL> select tablespace_name,file_name from dba_temp_files;

TABLESPACE_NAME                FILE_NAME
------------------------------ -------------------------------------
TEMP                           D:\ORACLE\ORADATA\DBH1\TEMP01.DBF
TEMP_EX                        D:\ORACLE\ORADATA\DBH1\TEMP_EX.DBF


*** OMF (Oracle managed files)
-- 데이터베이스 파일들의 경로 및 이름을 자동관리, 물리적인 파일도 자동관리

-- 사전에(미리) 파라미터 변경 작업 필요
db_create_file_dest : 데이타 파일의 자동 저장될 경로 지정 (파라미터 경로 지정)
db_create_online_log_dest_1~5 : 로그 파일 & 컨트롤 파일의 자동 저장 경로
                             ---- destination (목적지)

ora_%u.ctl        : 컨트롤 파일
ora_%g_%u.log : 리두 로그 파일
ora_%t_%u.dbf  : 데이터 파일
ora_%t_%u.tmp : 임시 데이터 파일

%u : 8문자 임의의 문자, %t : 테이블 스페이스명, %g : 로그 그룹 번호
-----------------------------------------------------------
(여러장소에는 줄수 없다)
alter system set db_create_online_log_dest_1='d:\oradata1';
alter system set db_create_online_log_dest_2='d:\oradata2';

alter database add logfile [size 10m];
alter database drop logfile group 4;  -- 물리적인 운영체제 상에서도 자동 삭제


**** extent & segment 관리
--extent : 세그먼트(테이블)의 최소 저장 단위

--할당 받을 수 있는 extent의 수가 10개 미만인 세그먼트 정보
SQL> col owner format a7
SQL> col segment_name format a12
SQL> col segment_type format a12
SQL> col tablespace_name format a10

SQL> select owner, segment_name, segment_type, tablespace_name, max_extents,
  2  extents, pct_increase from dba_segments
  3  where max_extents-extents<=10 and owner<>'SYS';

선택된 레코드가 없습니다.

--특정 테이블에 할당된 segment 정보
SQL> select owner, segment_name, segment_type, tablespace_name, max_extents,
  2  extents, pct_increase from dba_segments
  3  where owner='SKY' and segment_name='SAWON';

OWNER   SEGMENT_NAME SEGMENT_TYPE TABLESPACE MAX_EXTENTS    EXTENTS PCT_INCREASE
------- ------------ ------------ ---------- ----------- ---------- ------------
SKY     SAWON        TABLE        USERS       2147483645                           1

--특정 테이블의 extent 정보
SQL> select segment_name, extent_id, block_id, bytes, blocks from dba_extents
  2  where owner='SKY' and segment_name='SAWON'
  3  order by 2,3;

SEGMENT_NAME  EXTENT_ID   BLOCK_ID      BYTES     BLOCKS
------------ ---------- ---------- ---------- ----------
SAWON                 0                 33          65536         8  --33번째 블럭부터 8개로 구성(저장)

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE
------------------------------------ -----------
db_block_size                        integer     8192

---------------------------------------------
SQL> create table sky.sawon2
  2  tablespace users
  3  as select * from sky.sawon;

테이블이 생성되었습니다.

SQL> insert into sky.sawon2 select * from sky.sawon2;

21 개의 행이 만들어졌습니다.

SQL> /

42 개의 행이 만들어졌습니다.

SQL> /

84 개의 행이 만들어졌습니다.

SQL> /

10000 개의 행이 만들어졌습니다.

SQL> select owner, segment_name, segment_type, tablespace_name, max_extents,
  2  extents, pct_increase from dba_segments
  3  where owner='SKY' and segment_name='SAWON2';

OWNER   SEGMENT_NAME SEGMENT_TYPE TABLESPACE MAX_EXTENTS    EXTENTS PCT_INCREASE
------- ------------ ------------ ---------- ----------- ---------- ------------
SKY     SAWON2       TABLE        USERS       2147483645         23 
                                                                                --23개의 extent에 sawon2 저장

SQL> select segment_name, extent_id, block_id, bytes, blocks from dba_extents
  2  where owner='SKY' and segment_name='SAWON2'
  3  order by 2,3;

SEGMENT_NAME  EXTENT_ID   BLOCK_ID      BYTES     BLOCKS
------------ ---------- ---------- ---------- ----------
SAWON2                0        345      65536          8
SAWON2                1        353      65536          8
SAWON2                2        361      65536          8
SAWON2                3        369      65536          8
SAWON2                4        377      65536          8
SAWON2                5        385      65536          8
SAWON2                6        393      65536          8
SAWON2                7        401      65536          8
SAWON2                8        409      65536          8
SAWON2                9        417      65536          8
SAWON2               10        425      65536          8

SEGMENT_NAME  EXTENT_ID   BLOCK_ID      BYTES     BLOCKS
------------ ---------- ---------- ---------- ----------
SAWON2               11        433      65536          8
SAWON2               12        441      65536          8
SAWON2               13        449      65536          8
SAWON2               14        457      65536          8
SAWON2               15        465      65536          8
SAWON2               16        521    1048576        128   --***자동 extent크기 조정(최적화)
SAWON2               17        649    1048576        128
SAWON2               18        777    1048576        128
SAWON2               19        905    1048576        128
SAWON2               20       1033    1048576        128
SAWON2               21       1161    1048576        128

SEGMENT_NAME  EXTENT_ID   BLOCK_ID      BYTES     BLOCKS
------------ ---------- ---------- ---------- ----------
SAWON2               22       1289    1048576        128

23 개의 행이 선택되었습니다.
-->locally management tablespace에서는 자동 extent 할당이 기본값이다!

*** free space(빈공간) 관리
SQL> select * from dba_free_space
  2  where tablespace_name='USERS';

TABLESPACE    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
---------- ---------- ---------- ---------- ---------- ------------
USERS                  9        345         23396352       2856            9
                               -->345번째부터 2856개 블럭이 빈공간

SQL> select * from dba_free_space
  2  where tablespace_name='USERS';

TABLESPACE    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
---------- ---------- ---------- ---------- ---------- ------------
USERS               9        353      65536          8            9          --중간에 빈 공간
USERS               9        369   23199744       2832            9        
                           --> 361번째부터 8개의 블럭 저장(dept4 table)

SQL> select owner, segment_name, segment_type, tablespace_name, max_extents,
  2  extents, pct_increase from dba_segments
  3  where owner='SKY' and segment_name='DEPT4';

OWNER   SEGMENT_NAME SEGMENT_TYPE TABLESPACE MAX_EXTENTS    EXTENTS PCT_INCREASE
------- ------------ ------------ ---------- ----------- ---------- ------------
SKY     DEPT4        TABLE        USERS       2147483645          1

SQL> select segment_name, extent_id, block_id, bytes, blocks from dba_extents
  2  where owner='SKY' and segment_name='DEPT4';

SEGMENT_NAME  EXTENT_ID   BLOCK_ID      BYTES     BLOCKS
------------ ---------- ---------- ---------- ----------
DEPT4                    0              361      65536          8
                                    
SQL> drop table sky.dept4;

테이블이 삭제되었습니다.

SQL> drop table sky.dept2;

테이블이 삭제되었습니다.

SQL> select * from dba_free_space
  2  where tablespace_name='USERS';

TABLESPACE    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
---------- ---------- ---------- ---------- ---------- ------------
USERS               9          345          23396352       2856            9
-->locally management tablespace는 빈공간에 대하여 자동 병합된다!! --***
    (강제 병합 명령:alter tablespace users coalesce;)


SQL> select username,default_tablespace from dba_users;

USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
SYS                            SYSTEM
SYSTEM                         SYSTEM
DBSNMP                         SYSTEM
SKY                            USERS
SCOTT                          SYSTEM
TEST                           SYSTEM
OUTLN                          SYSTEM
WMSYS                          SYSTEM
ORDSYS                         SYSTEM
ORDPLUGINS                     SYSTEM
MDSYS                          SYSTEM

USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
CTXSYS                         DRSYS
QS_ES                          EXAMPLE
QS_WS                          EXAMPLE
QS                             EXAMPLE
QS_ADM                         EXAMPLE
SH                             EXAMPLE
PM                             EXAMPLE
OE                             EXAMPLE
HR                             EXAMPLE
RMAN                           TOOLS
QS_CS                          EXAMPLE

USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
QS_CB                          EXAMPLE
QS_CBADM                       EXAMPLE
QS_OS                          EXAMPLE
XDB                            XDB
ANONYMOUS                      XDB
WKSYS                          DRSYS
WKPROXY                        DRSYS
ODM                            ODM
ODM_MTR                        ODM
OLAPSYS                        CWMLITE

32 개의 행이 선택되었습니다.

'Program... > Oracle' 카테고리의 다른 글

Tablespace 오류복구  (0) 2009.03.13
오라클 백업복구  (0) 2009.03.13
물리적인 DB관리 (1)  (0) 2009.03.13
DataBase 정규화  (0) 2009.03.13
오라클 Import & Export  (0) 2009.03.13
Posted by Duritz

oracle = Database (물리적인파일) + Instance (메모리)

**Database (물리적인파일) 설명
D:\oracle\oradata\DBH1 밑에 파일...

① Control file (CTL) : 오라클 서버의 현재(전체) 상태정보를 나타내는 파일, 물리적인 파일의 상태 동기화, 최소1개

② redolog file (LOG) : Database상의 (변경상황) 트랜잭션(insert,update,delete) 저장, 최소2개 파일(그룹) = MEMBER

③ Data file (DBF) : 실제로 생각하는 데이터가 저장되는 파일(실제 데이터 저장)
- data
- undo (rollback) segment : DB복구시 버퍼와 (변경전 값) 비교해서 일관성 검사

④ initial parameter file : 초기 파라미터 파일(오라클서버 시작시 초기 환경변수를 읽어들이는 파일)

⑤ password file : 오라클 관리가자(특정계정이) 사용자 정보를 넣어주는 파일, 인증관련파일

파라미터(변수처럼사용)=>오라클이 시작될 때 필요한 모든정보를 가진 파일=>초기 파라미터

 


SQL> select * from v$controlfile;

STATUS   NAME
-------   -------------------------------------

D:\ORACLE\ORADATA\DBH1\CONTROL01.CTL

D:\ORACLE\ORADATA\DBH1\CONTROL02.CTL

D:\ORACLE\ORADATA\DBH1\CONTROL03.CTL

 

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE     MEMBER
---------- ------- -------  --------------------------------------------------
         3      STALE   ONLINE     D:\ORACLE\ORADATA\DBH1\REDO03.LOG
         2                  ONLINE     D:\ORACLE\ORADATA\DBH1\REDO02.LOG


         1         ONLINE
D:\ORACLE\ORADATA\DBH1\REDO01.LOG

SQL> select * from v$log;

  GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS               FIRST_CHANGE#   FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- -------------     --------
         1              1               2        104857600          1        NO  CURRENT                 257848             06/07/04
         2              1               0        104857600          1        YES UNUSED                       0
         3              1               1        104857600          1        NO  INACTIVE                  190578             06/07/03


SQL> select name from v$datafile;

NAME
-------------------------------------
-------------------------------------
D:\ORACLE\ORADATA\DBH1\SYSTEM01.DBF
D:\ORACLE\ORADATA\DBH1\UNDOTBS01.DBF
D:\ORACLE\ORADATA\DBH1\CWMLITE01.DBF
D:\ORACLE\ORADATA\DBH1\DRSYS01.DBF
D:\ORACLE\ORADATA\DBH1\EXAMPLE01.DBF
D:\ORACLE\ORADATA\DBH1\INDX01.DBF
D:\ORACLE\ORADATA\DBH1\ODM01.DBF
D:\ORACLE\ORADATA\DBH1\TOOLS01.DBF
D:\ORACLE\ORADATA\DBH1\USERS01.DBF
D:\ORACLE\ORADATA\DBH1\XDB01.DBF


SQL> show parameter db

NAME                                                    TYPE        VALUE
------------------------------------ ----------- ----------
db_16k_cache_size                                    big integer    0
db_2k_cache_size                                      big integer    0
db_32k_cache_size                                     big integer    0
db_4k_cache_size                                       big integer    0
db_8k_cache_size                                       big integer    0
db_block_buffers                                         integer         0
db_block_checking                                     boolean     FALSE
db_block_checksum                                    boolean     TRUE
db_block_size                                             integer     8192
db_cache_advice                                         string      ON
db_cache_size                                           big integer 25165824
.....

%% 위 5가지를 모두 백업해놓아야 오라클 시작가능, 파일이 다르게 백업되면 복구안됨 %%

D:\oracle\ora92\database\PWDDBH1.ora
D:\oracle\ora92\database\SPFILEDBH1.ORA => 9i부터 기본값으로 오라클 시작함

 

**  Instance (메모리) 설명

Instance = SGA + BGP
SGA => 크기가 클수록 성능이 좋아진다

DB buffer cache : 사용되었던 Data를 가지는 메모리, block 단위 저장
- dirty block : 데이터가 save된 block, 기본 8kbyte block
- free block : 데이터가 비어있는 block
- pin block : 데이터가 저장중인 block

LRU 알고리즘(LRU 원리) = FIFO (가장최근에 사용된 데이터가 입구에 저장)

DBWR : DB buffer cache에서 실제로 DB 파일로 dirty block 저장
(실제로 기억해서 저장)
redolog buffer : 트랜잭션 저장
SMON : 트랜잭션과 undo segment file 을 비교해서 일관성 체크
           1개 block의 size 4배, DB buffer size의 기본 4배
LGWR : redolog buffer 를 실제 redolog file(*.LOG)로 저장해주는 역할

Shared pool : 여러사용자들이 객체정보를 공유해서 사용하기 때문에 공유영역이라한다
- Library cache : 가장 최근에 사용한(분석된,파싱된) 문장(명령,객체명,뷰 등)
- Data dictionary cache : 데이터 사전으로부터 가장 최근의 객체정보를 가지고 있음
                                  대소문자 정확하게 구분한다

PMON : 프로세서가 오류를 발생시키면 감시(프로세서의 오류 체크,감시)

%% 메모리에 있는 정보를 많이 사용하는게 좋고, 메모리가 크면 튜닝 성능이 높아진다

CKPT : 버퍼 캐쉬에 있는 내용이 check point 가 발생시마다 DB 상태 정보 변경(갱신,보관)
check point (강제 발생 가능) : 버퍼에 있는 내용이 영구적으로 파일에 기록되는 시점

ARCH : redolog file 을 *.ARC 파일로 백업하는 역할, 며칠이 지나도 백업됨

DB mode
- ARCHIVE
- NOARCHIVE (default)

PGA
java_pool
large_pool


SQL> show sga

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes

SQL> select * from v$sga;

NAME                              VALUE
-------------------- ----------
Fixed Size                        453492
Variable Size                109051904
Database Buffers            25165824
Redo Buffers                    667648


SQL> show parameter db_cache

NAME                                 TYPE        VALUE
----------------------- ----------- ------------------------------
db_cache_advice                      string      ON
db_cache_size                        big integer 25165824

SQL> show parameter log_buffer  (redolog buffer size)

NAME                                 TYPE        VALUE
-------------------- ----------- ------------------------------
log_buffer                           integer     524288

SQL> show parameter share

NAME                                 TYPE        VALUE
----------------------- ----------- ------------------------------
hi_shared_memory_address             integer     0
max_shared_servers                   integer     20
shared_memory_address                integer     0
shared_pool_reserved_size            big integer 2516582
shared_pool_size                     big integer 50331648
shared_server_sessions               integer     165
shared_servers                       integer     1


SQL> select name from v$bgprocess;  (bgprocess 를 보는 동적뷰)

NAME
-----
PMON
DIAG
FMON
LMON
LMD0
LMS0
LMS1
LMS2
LMS3
LMS4
LMS5
......


SQL> select name,log_mode from v$database;

NAME      LOG_MODE
--------- ------------
DBH1      NOARCHIVELOG


SQL> show parameter pool

NAME                                 TYPE        VALUE
---------------------- -----------  ---------
buffer_pool_keep                     string
buffer_pool_recycle                  string
global_context_pool_size          string
java_pool_size                       big integer 33554432
large_pool_size                      big integer 8388608
olap_page_pool_size                integer     33554432
shared_pool_reserved_size       big integer 2516582
shared_pool_size                    big integer 50331648


SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME    HOST_NAME       VERSION           STARTUP_ STATUS
--------------- ---------------- ---------------- ----------------- --------------------
                1               dbh1             KH40219               9.2.0.1.0                06/07/04

       PAR    THREAD# ARCHIVE LOG_SWITCH_ LOGINS     SHU
 ------------ --- ---------- -------      ----------- ---------- ---
        OPEN     NO           1      STOPPED      ALLOWED    NO

DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST
----------------- ------------------ ---------
ACTIVE            PRIMARY_INSTANCE   NORMAL


SQL> select tablespace_name,contents from dba_tablespaces;

TABLESPACE_NAME   CONTENTS
------------------  ---------
SYSTEM                   PERMANENT
UNDOTBS1               UNDO
TEMP                       TEMPORARY  -- temp 정렬작업,임시테이블스페이스
CWMLITE                  PERMANENT
DRSYS                     PERMANENT
EXAMPLE                  PERMANENT
INDX                         PERMANENT
ODM                        PERMANENT
TOOLS                     PERMANENT
USERS                     PERMANENT
XDB                          PERMANENT


SQL> desc dba_users
 이름                                                                                                      널?      유형
 ----------------------------------------------------------------------------------------------------------------- -------- ------
----------------------------------------------------------------------
 USERNAME                                                                                                  NOT NULL VARCHAR2(30)
 USER_ID                                                                                                   NOT NULL NUMBER
 PASSWORD                                                                                                           VARCHAR2(30)
 ACCOUNT_STATUS                                                                                            NOT NULL VARCHAR2(32)
 LOCK_DATE                                                                                                          DATE
 EXPIRY_DATE                                                                                                        DATE
 DEFAULT_TABLESPACE                                                                                        NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE                                                                                      NOT NULL VARCHAR2(30)
 CREATED                                                                                                   NOT NULL DATE
 PROFILE                                                                                                   NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP                                                                                        VARCHAR2(30)
 EXTERNAL_NAME                                                                                                      VARCHAR2(4000)

 

SQL> select username,temporary_tablespace,default_tablespace from dba_users;

USERNAME          TEMPORARY_TABLESPACE   DEFAULT_TABLESPACE
--------------- ------------------------ -------------------------
SYS                            TEMP                           SYSTEM
SYSTEM                         TEMP                           SYSTEM
DBSNMP                         TEMP                           SYSTEM
SKY                            TEMP                           SYSTEM
SCOTT                          TEMP                           SYSTEM
TEST                           TEMP                           SYSTEM
OUTLN                          TEMP                           SYSTEM
WMSYS                          TEMP                           SYSTEM
ORDSYS                         TEMP                           SYSTEM
ORDPLUGINS                     TEMP                           SYSTEM
MDSYS                          TEMP                           SYSTEM

USERNAME          TEMPORARY_TABLESPACE   DEFAULT_TABLESPACE
--------------- ------------------------ -------------------------
CTXSYS                         TEMP                           DRSYS
QS_ES                          TEMP                           EXAMPLE
QS_WS                          TEMP                           EXAMPLE
QS                             TEMP                           EXAMPLE
QS_ADM                         TEMP                           EXAMPLE
SH                             TEMP                           EXAMPLE
PM                             TEMP                           EXAMPLE
OE                             TEMP                           EXAMPLE
HR                             TEMP                           EXAMPLE
RMAN                           TEMP                           TOOLS
QS_CS                          TEMP                           EXAMPLE

USERNAME          TEMPORARY_TABLESPACE   DEFAULT_TABLESPACE
--------------- ------------------------ -------------------------
QS_CB                          TEMP                           EXAMPLE
QS_CBADM                       TEMP                           EXAMPLE
QS_OS                          TEMP                           EXAMPLE
XDB                            TEMP                           XDB
ANONYMOUS                      TEMP                           XDB
WKSYS                          TEMP                           DRSYS
WKPROXY                        TEMP                           DRSYS
ODM                            TEMP                           ODM
ODM_MTR                        TEMP                           ODM
OLAPSYS                        TEMP                           CWMLITE


%%% 위에서 본 물리적인 파일 경로 => D:\oracle\oradata\DBH1

@@@ DEFAULT_TABLESPACE 를 SYSTEM->USERS 로 변경해주기
SQL> conn /as sysdba
연결되었습니다.

SQL> alter user scott default tablespace users;

사용자가 변경되었습니다.

$$$ alter user user_name default tablespace users;

 

↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 오전까지 수요일 쪽지시험 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

<<오후>>
오라클 서비스의 단계

관리자 로그인
SQL> conn /as sysdba

SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.

SQL> startup nomount
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes

SQL> alter database mount;

데이타베이스가 변경되었습니다.

SQL> alter database open;

데이타베이스가 변경되었습니다.


SQL> desc v$session
SQL> select username,sid,serial# from v$session;

USERNAME                     SID         SERIAL#
-------------------- ---------- ----------
                                        1          1
                                        2          1
                                        3          1
                                        4          1
                                        5          1
                                        6          1
                                        7          1
                                        8          1
SYS                                  9          1

-- 다른창을 열고 SKY 로 로그인후 select 하면~
SQL> select username,sid,serial# from v$session;

USERNAME                     SID         SERIAL#
-------------------- ---------- ----------
                                        1          1
                                        2          1
                                        3          1
                                        4          1
                                        5          1
                                        6          1
                                        7          1
                                        8          1
SYS                                  9          1
SKY                                  10         32


SQL> alter system kill session '10,32';

시스템이 변경되었습니다.

SQL> select username,sid,serial# from v$session;
sky 로 로그인한 창에 가서~

SQL> select * from dept;
select * from dept
*
1행에 오류:
ORA-00028: 세션이 종료되었습니다


SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.

SQL> startup open restrict;
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.

SQL> conn sky/pass
ERROR:
ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

경고: 이제는 ORACLE에 연결되어 있지 않습니다.

==>>> 일반계정은 로그온 못하게 할때,현재는 관리자만 로그인가능

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

SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> alter system disable restricted session;

SQL> startup open force
==>>강제종료 후 다시 시작(무조건 서비스를 다시 시작하는 옵션)


SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
dbh1

SQL> select name,open_mode from v$database;

NAME      OPEN_MODE
--------- ----------
DBH1      READ WRITE

SQL> help shutdown

 SHUTDOWN
 --------

 Shuts down a currently running Oracle instance, optionally closing
 and dismounting a database.

 SHUTDOWN [ABORT|IMMEDIATE|NORMAL|TRANSACTIONAL [LOCAL]]


SQL> conn /as sysoper
ERROR:
ORA-01031: insufficient privileges


경고: 이제는 ORACLE에 연결되어 있지 않습니다.

<< D:\oracle\ora92\network\admin\sqlnet.ora >>


SQL> col name format a40
SQL> select name,status from v$datafile;

NAME                                     STATUS
---------------------------------------- -------
D:\ORACLE\ORADATA\DBH1\SYSTEM01.DBF      SYSTEM
D:\ORACLE\ORADATA\DBH1\UNDOTBS01.DBF     ONLINE
D:\ORACLE\ORADATA\DBH1\CWMLITE01.DBF     ONLINE
D:\ORACLE\ORADATA\DBH1\DRSYS01.DBF       ONLINE
D:\ORACLE\ORADATA\DBH1\EXAMPLE01.DBF     ONLINE
D:\ORACLE\ORADATA\DBH1\INDX01.DBF        ONLINE
D:\ORACLE\ORADATA\DBH1\ODM01.DBF         ONLINE
D:\ORACLE\ORADATA\DBH1\TOOLS01.DBF       ONLINE
D:\ORACLE\ORADATA\DBH1\USERS01.DBF       ONLINE
D:\ORACLE\ORADATA\DBH1\XDB01.DBF         ONLINE


SQL> select name,status,enabled from v$datafile;

NAME                                     STATUS  ENABLED
---------------------------------------- ------- ----------
D:\ORACLE\ORADATA\DBH1\SYSTEM01.DBF      SYSTEM  READ WRITE
D:\ORACLE\ORADATA\DBH1\UNDOTBS01.DBF     ONLINE  READ WRITE
D:\ORACLE\ORADATA\DBH1\CWMLITE01.DBF     ONLINE  READ WRITE
D:\ORACLE\ORADATA\DBH1\DRSYS01.DBF       ONLINE  READ WRITE
D:\ORACLE\ORADATA\DBH1\EXAMPLE01.DBF     ONLINE  READ WRITE
D:\ORACLE\ORADATA\DBH1\INDX01.DBF        ONLINE  READ WRITE
D:\ORACLE\ORADATA\DBH1\ODM01.DBF         ONLINE  READ WRITE
D:\ORACLE\ORADATA\DBH1\TOOLS01.DBF       ONLINE  READ WRITE
D:\ORACLE\ORADATA\DBH1\USERS01.DBF       ONLINE  READ WRITE
D:\ORACLE\ORADATA\DBH1\XDB01.DBF         ONLINE  READ WRITE

10 개의 행이 선택되었습니다.

SQL> select name,status,enabled from v$tempfile;   (9i 부터 temp파일만 따로 볼수 있게되었다)

NAME                                     STATUS  ENABLED
---------------------------------------- ------- ----------
D:\ORACLE\ORADATA\DBH1\TEMP01.DBF        ONLINE  READ WRITE


-- 데이터파일과 관련된 뷰

SQL> select file_name,tablespace_name from dba_data_files;

FILE_NAME                                TABLESPACE_NAME
---------------------------------------- ------------------------------
D:\ORACLE\ORADATA\DBH1\SYSTEM01.DBF      SYSTEM
D:\ORACLE\ORADATA\DBH1\UNDOTBS01.DBF     UNDOTBS1
D:\ORACLE\ORADATA\DBH1\CWMLITE01.DBF     CWMLITE
D:\ORACLE\ORADATA\DBH1\DRSYS01.DBF       DRSYS
D:\ORACLE\ORADATA\DBH1\EXAMPLE01.DBF     EXAMPLE
D:\ORACLE\ORADATA\DBH1\INDX01.DBF        INDX
D:\ORACLE\ORADATA\DBH1\ODM01.DBF         ODM
D:\ORACLE\ORADATA\DBH1\TOOLS01.DBF       TOOLS
D:\ORACLE\ORADATA\DBH1\USERS01.DBF       USERS
D:\ORACLE\ORADATA\DBH1\XDB01.DBF         XDB

10 개의 행이 선택되었습니다.

SQL> select file_name,tablespace_name from dba_temp_files;

FILE_NAME                                TABLESPACE_NAME
---------------------------------------- ------------------------------
D:\ORACLE\ORADATA\DBH1\TEMP01.DBF        TEMP


-- 로그파일과 관련된 뷰

SQL> select group#,status,type,member from v$logfile;

    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ----------------------------------------
         3 STALE   ONLINE  D:\ORACLE\ORADATA\DBH1\REDO03.LOG
         2         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO02.LOG
         1         ONLINE  D:\ORACLE\ORADATA\DBH1\REDO01.LOG

SQL> select group#,sequence#,members,status from v$log;

    GROUP#  SEQUENCE#    MEMBERS STATUS
---------- ---------- ---------- ----------------
         1          2          1 CURRENT
         2          0          1 UNUSED
         3          1          1 INACTIVE

SQL> select * from v$thread;

   THREAD# STATUS ENABLED      GROUPS INSTANCE         OPEN_TIM CURRENT_GROUP#
---------- ------ -------- ---------- ---------------- -------- --------------
 SEQUENCE# CHECKPOINT_CHANGE# CHECKPOI ENABLE_CHANGE# ENABLE_T DISABLE_CHANGE#
---------- ------------------ -------- -------------- -------- ---------------
DISABLE_
--------
         1 OPEN   PUBLIC            3 dbh1             06/07/04              1
         2             337870 06/07/04         190578 06/07/03               0

 

-- 컨트롤 파일과 관련된 뷰

SQL> select * from v$controlfile;

STATUS  NAME
------- ----------------------------------------
        D:\ORACLE\ORADATA\DBH1\CONTROL01.CTL
        D:\ORACLE\ORADATA\DBH1\CONTROL02.CTL
        D:\ORACLE\ORADATA\DBH1\CONTROL03.CTL

SQL> select * from v$sgastat;  -- SGA 정보
-- BGP 정보

SQL> select * from v$bgprocess where paddr>'00';

SQL> col name format a10
SQL> col description format a30

SQL> /

PADDR    NAME       DESCRIPTION                         ERROR
-------- ---------- ------------------------------ ----------
681E46BC PMON       process cleanup                ##########
681E4A7C DBW0       db writer process 0            ##########
681E4E3C LGWR       Redo etc.                      ##########
681E51FC CKPT       checkpoint                     ##########
681E55BC SMON       System Monitor Process         ##########
681E597C RECO       distributed recovery           ##########
681E5D3C CJQ0       Job Queue Coordinator          ##########
681E60FC QMN0       AQ Time Manager Process 0      ##########


SQL> select * from v$process;

D:\oracle\ora92\database\SPFILEDBH1.ORA -- 오라클시작파일-- 열리지않는 샘플
D:\oracle\admin\DBH1\pfile\init.ora.632006143048 --물리적으로 볼수 있는 파일샘플


SQL>alter system enable restricted session;   -- 일반사용자 로그온 못하게...
SQL>alter system disable restricted session;   -- 반대

select * from dictionary;
select * from dict;
col table_name format a30
col comments format a45
(table_name : 뷰 이름, comments : 설명서)

SQL> select * from dict where upper(comments) like upper('%user%');

SQL> select * from dict where table_name like '%INDEX%';


SQL> select * from dict_columns where table_name='DBA_SYS_PRIVS';

TABLE_NAME              COLUMN_NAME    COMMENTS
-------------------- -------------   ----------------------------------------
DBA_SYS_PRIVS          GRANTEE              Grantee Name, User or Role receiving the grant

DBA_SYS_PRIVS          PRIVILEGE             System privilege
DBA_SYS_PRIVS          ADMIN_OPTION      Grant was with the ADMIN option


-- 동적 성능 뷰를 보는 뷰

SQL> select * from v$fixed_table;


-- data dictionary 뷰 목록표 만드는방법

SQL> set pages 800
SQL> spool c:\oracle_views
SQL> select * from dict order by 1;
SQL> select * from dict where table_name like '%USER%';
SQL> select * from dict where table_name like '%TABLE%';
SQL> spool off

select * from dictionary / dict_columns / v$fixed_table;


*** 초기 파라미터 파일 관리
-- initSID.ora / spfileSID.ora
-- oracle 9i 버전은 기본적으로 spfileSID.ora 를 사용한다
     경로 : [oracle\ora92\database\]

① initSID.ora : 반드시 shutdown 된 후 수동으로 편집(변경)한다
    기본경로 : D:\oracle\admin\DBH1\pfile\
-- 파라미터 값 변경
     DB shutdown => init 파일 메모장에서수정 => DB startup

② spfileSID.ora : 온라인 상태에서 (서비스(온라인)가 구동중에) 편집(변경) 가능하다 (바로 적용)
                        정적(수동) 파라미터인 경우는 반드시 (offline) 변경후 restart 해야 한다
                        기본경로 : D:\oracle\ora92\database\ (9i 는 이경로에 있어야만 파라미터로 인정한다)
-- 파라미터 값 변경 : 무조건 명령으로 수정만 가능
     alter system set 파라미터명=값 scope=[both | spfile];
      (both : 파일도 수정되고 지금사용되고 있는 메모리도 수정해라)
     => (옵션) [=> shutdown => startup]

-- 파라미터 생성
create spfile='경로' from pfile='경로';  == pfile 을 가지고 spfile 을 생성
create spfile from pfile;  == 기본경로로 생성
create pfile from spile;


*** 컨트롤 파일 관리 (multiplexing control file)
--방법 (spfile)
1.파라미터 변경(alter system ~~)
2.shutdown
3.원본에서 control file 복사
4.startup

--pfile 을 사용하는 경우
1.shutdown
2.파라미터 변경
3.원본에서 control file 복사
4.startup


SQL> show parameter control

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      D:\oracle\oradata\DBH1\CONTROL
                                                 01.CTL, D:\oracle\oradata\DBH1
                                                 \CONTROL02.CTL, D:\oracle\orad
                                                 ata\DBH1\CONTROL03.CTL

SQL> ed 0704_1
alter system set control_files=
"D:\oracle\oradata\DBH1\CONTROL01.CTL",
"D:\oracle\oradata\DBH1\CONTROL02.CTL",
"D:\oracle\oradata\DBH1\CONTROL03.CTL",
"D:\oracle\oradata\DBH1\CONTROL04.CTL" scope=spfile;
SQL> @ 0704_1
시스템이 변경되었습니다.


SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.


windows탐색기에서 CONTROL01.CTL 원본을 복사해서 이름바꾸기 CONTROL04.CTL


SQL> startup
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.

SQL> select * from v$controlfile;

 NAME
--------------------------------------------
 D:\ORACLE\ORADATA\DBH1\CONTROL01.CTL
 D:\ORACLE\ORADATA\DBH1\CONTROL02.CTL
 D:\ORACLE\ORADATA\DBH1\CONTROL03.CTL
 D:\ORACLE\ORADATA\DBH1\CONTROL04.CTL

'Program... > Oracle' 카테고리의 다른 글

오라클 백업복구  (0) 2009.03.13
물리적인 DB관리 (2)  (0) 2009.03.13
DataBase 정규화  (0) 2009.03.13
오라클 Import & Export  (0) 2009.03.13
오라클 Sys 접속 및 계정생성  (0) 2009.03.13
Posted by Duritz

## 정규화 과정
★ 참고사항
*데이터를 추출하는 명령어의 순서
 - select 컬럼명, 컬럼명... -- ④
 - from 테이블명 -- ①
 - where 조건절 -- ②
 - group by -- ③
 - having 절 -- ⑤ 
 - order by 절 -- ⑥ 
 - 열 (colum = field = attribute = property = 속성)
 - 행 (record = row = domain = tuple)
 - Table (entity = 개체)
*desc emp (emp 테이블의 데이터 크기)
   COLUMN NULL? WIDTH KEY
1. EMPNO NOT NULL NUMBER(4) P1  --> 숫자 4바이트
2. ENAME VARCHAR2(10)  --> 문자열 10바이트
3. JOB          VARCHAR2(9)
4. MGR       NUMBER(4)
5. HIREDATE       DATE 
6. SAL NUMBER(7,2)  --> 7개의 바이트 중에 2개는 소수점으로 표시된다. (Ex : _ _ _ _ _ . _ _ )
7. COMM NUMBER(7,2)
8. DEPTNO NUMBER(2)
* RDBMS (Relation Date Base Management System) : Oracle, MS-SQL, My-SQL, Infomix……  -> 오라클도 RDBMS에 속한다.
***** 설명시 참조되야할 예제는 교제를 참조하세요 ******
1) 정규화 과정 : 고유한 식별자를 가지는 모든 개체(테이블)에 대해 더 이상 분리할 수 없는 상태로 나누는 과정
 - 장점 : 데이터량 줄어듬, 데이터 갱신속도 빠름
 - 단점 : 조회시 여러 개체를 Join하여작업하는 어려움, 갱신시 여러 개체에 동시 반영하는 작업일 경우 명시적으로 트랜잭션 처리
 - 정규화 과정의 필요성 : DB서버 성능의 최적화
2) 제 1차 정규화 (1NF, First Normal Form)
 - 반복되는 속성들을 다른 개체로 나누어 분리
 - 부모테이블의 식별자(Promary Key)는 자식테이블의 외부키(Foreign Key)로 전이된다.
 - 부모테이블에 존재하지 않는 값이 자식테이블의 외부키(Foreign Key)값으로 존재할 수 없다.
* 식별자 (Primary Key)
 - 고유성을 지니고, Table에 1개만 존재한다. (P.K를 이루는 Colum의 수는 여러 개가 올 수 있다.)
 - Colum이 1개인 P.K를 Single P.K라 한다.
 - Colum이 2개 이상인 P.K를 Composite P.K라 한다.
3) 제 2차 정규화 (2NF, Second Normal Form)
 - 제 1차 정규화를 한 후, P.K를 이루는 Colum의 개수가 복합일 때 분리하는 정규화
4) 제 3차 정규화 (3NF, Third Normal Form)
 - 식별자가 아닌 Colum이 식별자가 아닌 Colum에 의존적이면 분리하는 정규화
5) 제 4차 정규화 (4NF, Fourth Nomarl Form)
 - M:M 관계를 1:M 관계로 분리하는 정규화 (부모테이블의 P.K는 자식 테이블의 F.K가 된다.)
* 관계의 종류
 ① 1:1 관계 - 자주사용하는 Colum만 추출해서 새로운 Table(자식테이블) 생성
                 - 자식테이블의 값은 부모테이블에 항상 존재하여야 한다. (부모테이블의 P.K는 자식테이블의 F.K가 된다.)
 ② 1:M 관계 - A라는 테이블의 하나의 행에 대하여 B라는 테이블의 값이 여러 개가 대응되는 관계
 ③ M:M 관계 - A라는 테이블의 하나의 행에 대하여 B라는 테이블의 값이 여러 개가 대응되고,
                      B라는 테이블의 하나의 행에 대하여 A라는 테이블의 값이 여러 개가 대응되는 관계  -> A(1) : B(M) and B(1) : A(M)
                   => 논리적인 모델링에서는 존재하지만 실제 물리적인 DB에서는 존재하지 않는다.


'Program... > Oracle' 카테고리의 다른 글

물리적인 DB관리 (2)  (0) 2009.03.13
물리적인 DB관리 (1)  (0) 2009.03.13
오라클 Import & Export  (0) 2009.03.13
오라클 Sys 접속 및 계정생성  (0) 2009.03.13
ORACLE PARTION 관리 및 검색  (0) 2009.03.12
Posted by Duritz

공지사항

Yesterday
Today
Total
05-18 22:01

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31