본문 바로가기

Programing/Oracle

Oracle - Group

C:\>SQLPLUS /NOLOG

SQL*Plus: Release 9.2.0.1.0 - Production on 금 Apr 18 14:19:24 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


SQL> CONN SYS/ORACLE AS SYSDBA
연결되었습니다.
SQL> SELECT GROUP#, SEQUENCE#,ARCHIVED, MEMBERS, STATUS
  2  FROM V$LOG;

    GROUP#  SEQUENCE# ARC    MEMBERS STATUS
---------- ---------- --- ---------- ----------------
         1         92 NO           2 CURRENT
         2         90 YES          1 INACTIVE
         3         91 YES          1 INACTIVE

SQL> SAVE GROUP
file GROUP.sql(이)가 생성되었습니다


SQL> @MEMBER

    GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- -------
         3 C:\ORACLE\ORADATA\ORCL1\REDO03.LOG       STALE
         2 C:\ORACLE\ORADATA\ORCL1\REDO02.LOG
         1 C:\ORACLE\ORADATA\ORCL1\REDO01.LOG
         1 C:\ORACLE\ORADATA\ORCL1\REDO01A.LOG

SQL> @GROUP

    GROUP#  SEQUENCE# ARC    MEMBERS STATUS
---------- ---------- --- ---------- ----------------
         1         92 NO           2 CURRENT
         2         90 YES          1 INACTIVE
         3         91 YES          1 INACTIVE



그룹추가.



SQL> ALTER DATABASE ADD LOGFILE GROUP 4 'C:\ORACLE\ORADATA\ORCL1\REDO03A.LOG' SIZE 10M;

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

SQL> @GROUP

    GROUP#  SEQUENCE# ARC    MEMBERS STATUS
---------- ---------- --- ---------- ----------------
         1         92 NO           2 CURRENT
         2         90 YES          1 INACTIVE
         3         91 YES          1 INACTIVE
         4          0 YES          1 UNUSED


SQL> ALTER SYSTEM SWITCH LOGFILE;

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



SQL> ALTER DATABASE ADD LOGFILE GROUP 5

('C:\ORACLE\ORADATA\ORCL\REDO05A.LOG','C:\ORACLE\ORADATA\OR
CL1\REDO05B.LOG') SIZE 10M;

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


SQL> @GROUP

    GROUP#  SEQUENCE# ARC    MEMBERS STATUS
---------- ---------- --- ---------- ----------------
         1         92 YES          2 ACTIVE
         2         90 YES          1 INACTIVE
         3         91 YES          1 INACTIVE
         4         93 NO           1 CURRENT
         5          0 YES          2 UNUSED



SQL> @MEMBER

    GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- -------
         3 C:\ORACLE\ORADATA\ORCL1\REDO03.LOG
         2 C:\ORACLE\ORADATA\ORCL1\REDO02.LOG
         1 C:\ORACLE\ORADATA\ORCL1\REDO01.LOG
         1 C:\ORACLE\ORADATA\ORCL1\REDO01A.LOG
         4 C:\ORACLE\ORADATA\ORCL1\REDO03A.LOG
         5 C:\ORACLE\ORADATA\ORCL1\REDO05A.LOG
         5 C:\ORACLE\ORADATA\ORCL1\REDO05B.LOG


SQL> ALTER SYSTEM SWITCH LOGFILE\REDO05B.LOG


메모장 열어서 파일 손상후

C:\oracle\oradata\ORCL1


SQL> STARTUP FORCE


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

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


SQL> @GROUP


    GROUP#  SEQUENCE# ARC    MEMBERS STATUS
---------- ---------- --- ---------- ----------------
         1         97 YES          2 INACTIVE
         2         95 YES          1 INACTIVE
         3         96 YES          1 INACTIVE
         4         98 NO           1 CURRENT
         5         94 YES          2 INACTIVE


SQL> @MEMBER


    GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- -------
         3 C:\ORACLE\ORADATA\ORCL1\REDO03.LOG
         2 C:\ORACLE\ORADATA\ORCL1\REDO02.LOG
         1 C:\ORACLE\ORADATA\ORCL1\REDO01.LOG       STALE(불안정)
         1 C:\ORACLE\ORADATA\ORCL1\REDO01A.LOG      STALE
         4 C:\ORACLE\ORADATA\ORCL1\REDO03A.LOG
         5 C:\ORACLE\ORADATA\ORCL1\REDO05A.LOG
         5 C:\ORACLE\ORADATA\ORCL1\REDO05B.LOG      INVALID

7 개의 행이 선택되었습니다.
스테일 파일은 몇번 스위치해주면 다시 안정을 찾는다.



파일이 없거나 이상징후가 있으면 보고 해주는 파일

C:\oracle\admin\ORCL1\bdump\........






맴버 삭제 명령, 그룹 삭제시 주의 사항

1.맴버든 그룹이든 CURRENT REDO LOG FILE은 삭제 불가능

2.하나의 그룹에 MEMBER가 1개 남았을 경우 MEMBER 삭제명으로 지울수 없다.


SQL> ALTER DATABASE DROP LOGFILE MEMBER 'C:\ORACLE\ORADATA\ORCL1\REDO05B.LOG';

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


SQL> ALTER DATABASE DROP LOGFILE GROUP 5;

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


DROP명령으로 삭제를 하더라도 컴퓨터에는 남아 있다 . OS에 들어가서 직접 삭제해야한다.


Datafile

데이터 파일은 미러 하지 않는다.(용량이 커서?)

 

Database

     |

     *

tablespace        ------*   Datafile

     |

     *

segment            ------*  O.S block

     |                 |            (운영체제의 블락사이즈) 1byte짜리 파일 만들기

     *                 |

extent               |

     |                 |

     *                 |

block-----------


하나의 데이타베이스는 여러개의 테이블 스페이스를 가지고..........이런식




tablespace  물리적 파일(Datafile)을 여러개로 묶어서 사용

                 시스템에서 가장 중요한 일을 처리하는 SYS관리자만 사용가능

 

용량 : Mega -> Giga -> Tera -> Peta

 

segment - 저장공간을 가지는것(index segment,,,,등등 물리적단위)비유 : 아파트

               테이블스페이스 안에는 다양한 segment가 올수있다.

 

 

extent : 공간 할당의 최소단위 extent(연속적으로 할당되는 공간을 말한다.)비유 : 아파트 1동,2동

 

block - 물리적인 단위로 저장되는  (사람)

 



TableSpace 실제 공간이 저장될 수있는 공간

- SYSTEM TABLESPACE -> 1. DATA DICTIONARY저장이 되어있다.

                                         2. SYSTEM UDMO SEGMENT

                                        3  . DB 저장안되어있으나 성능상 안된다.

예제 )SELECT NAME FROM V$TABLE SPACE;


SQL> SELECT NAME FROM V$TABLESPACE;

NAME
------------------------------
CWMLITE
DRSYS
EXAMPLE
INDX
ODM
SYSTEM
TOOLS
UNDOTBS1
USERS
XDB
TEMP

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



SQL> DESC DBA_DATA_FILES
 이름                                      널?      유형
 ----------------------------------------- -------- ---------------------
 FILE_NAME                                          VARCHAR2(513)
 FILE_ID                                            NUMBER
 TABLESPACE_NAME                                    VARCHAR2(30)
 BYTES                                              NUMBER
 BLOCKS                                             NUMBER


SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;

TABLESPACE_NAME
------------------------------
FILE_NAME
------------------------------------------------------------
SYSTEM
C:\ORACLE\ORADATA\ORCL1\SYSTEM01.DBF

UNDOTBS1
C:\ORACLE\ORADATA\ORCL1\UNDOTBS01.DBF

CWMLITE
C:\ORACLE\ORADATA\ORCL1\CWMLITE01.DBF


TABLESPACE_NAME
------------------------------
FILE_NAME
------------------------------------------------------------
DRSYS
C:\ORACLE\ORADATA\ORCL1\DRSYS01.DBF

EXAMPLE
C:\ORACLE\ORADATA\ORCL1\EXAMPLE01.DBF

INDX
C:\ORACLE\ORADATA\ORCL1\INDX01.DBF

- NONSYSTEM TABLESPACE




TABLESPACE 생성


SQL> CREATE TABLE TEST
  2  (ID NUMBER(4),
  3  NAME VARCHAR2(20))
  4  ;

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



SQL> DESC USER_TABLES


SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES;



SQL> CREATE TABLE TEST
  2  (ID NUMBER(4),
  3  NAME VARCHAR2(20))
  4  TABLESPACE APP_DATA;   (테이블 스페이스)

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




SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES;

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
BONUS                          SYSTEM
DEPARATMENT                    SYSTEM
DEPT                           SYSTEM
DUMMY                          SYSTEM
EMP                            SYSTEM
EMPLOYEES                      SYSTEM
GUGU1                          SYSTEM
GUGU2                          SYSTEM
LOG_TABLE                      SYSTEM
SALGRADE                       SYSTEM
TEST                           APP_DATA

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TOP_DOGS                       SYSTEM
VEMP                           SYSTEM

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




테이블을 생성하면 적어도 한개의 0번 EXTENT가 할당된다.(물리적)


SQL> DESC DBA_EXTENTS   ----------- (SYS)
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------------------
 OWNER                                              VARCHAR2(30)
 SEGMENT_NAME                                       VARCHAR2(81)
 PARTITION_NAME                                     VARCHAR2(30)
 SEGMENT_TYPE                                       VARCHAR2(18)
 TABLESPACE_NAME                                    VARCHAR2(30)
 EXTENT_ID                                          NUMBER
 FILE_ID                                            NUMBER
 BLOCK_ID                                           NUMBER
 BYTES                                              NUMBER
 BLOCKS                                             NUMBER
 RELATIVE_FNO                                       NUMBER




SQL> COL SEGMENT_NAME FORMAT A15
SQL> SELECT SEGMENT_NAME, EXTENT_ID, BLOCKS,OWNER FROM DBA_EXTENTS WHERE SEGMENT_NAME = 'TEST';


SEGMENT_NAME     EXTENT_ID     BLOCKS OWNER
--------------- ---------- ---------- ------------------------------
TEST                     0                         8        SCOTT


SQL> SAVE EXT
file EXT.sql(이)가 생성되었습니다


0번 EXTENT가 꽉차게되면 1번 EXTENT를 할당한다.


데이터를 넣어 채워 보자. 스캇으로! 명령은 SYS로



SQL> CONN SCOTT/TIGER
연결되었습니다.
SQL> INSERT INTO TEST VALUES(1,'ABC');

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

SQL> INSERT INTO TEST SELECT * FROM TEST;

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

SQL> /

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

SQL> /

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

SQL> /

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


SQL> @EXT

SEGMENT_NAME
--------------------------------------------------------------------------------
 EXTENT_ID     BLOCKS OWNER
---------- ---------- ------------------------------
TEST
         0          8 SCOTT


SQL> @EXT

SEGMENT_NAME
--------------------------------------------------------------------------------
 EXTENT_ID     BLOCKS OWNER
---------- ---------- ------------------------------
TEST
         0          8 SCOTT

TEST
         1          8 SCOTT


1 .  FILE 크기 증가

SQL> ALTER DATABASE DATAFILE 'C:\oracle\oradata\ORCL1\APP_DATA01.DBF' RESIZE 20M;

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


2. 또다른 DATA 파일 추가


SQL>ALTER TABLESPACE APP_DATA ADD DATAFILE 'C:\oracle\oradata\ORCL1\APP_DATA02.DBF' SIZE 20M;

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


3.조회


SQL> SELECT TABLESPACE_NAME,FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='APP_DATA';

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
APP_DATA
C:\ORACLE\ORADATA\ORCL1\APP_DATA01.DBF

APP_DATA
C:\ORACLE\ORADATA\ORCL1\APP_DATA02.DBF


SQL> ROLLBACK                          (SCOTT)
  2  ;

롤백이 완료되었습니다.

SQL> SELECT * FROM TEST;

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

SQL>


추가된 파일 삭제


SQL> SELECT FILE_ID , EXTENT_ID FROM DBA_EXTENTS WHERE SEGMENT_NAME = 'TEST';

   FILE_ID  EXTENT_ID
---------- ----------
        11          0                    FILE_ID = 파일번호
        11          1                    EXTENT_ID = 익스텐트번호



TRUNCATE 과다하게 활당된 쓰지않는 EXTENT를 삭제한다.

SQL> TRUNCATE TABLE TEST;

테이블이 잘렸습니다.                   ---- (SCOTT);



SQL> SELECT FILE_ID , EXTENT_ID FROM DBA_EXTENTS WHERE SEGMENT_NAME = 'TEST';

   FILE_ID  EXTENT_ID
---------- ----------
        11          0                      (SYS)




해당 데이타스페이스에 특정 파일 삭제 (ORACLE 10G부터가능)


해당 DATAFILE에 할당된 EXTENT가 없을경우 삭제 가능

SQL> ALTER TABLESPACE APP_DATA DROP DATAFILE 'C:\oracle\oradata\ORCL1\APP_DATA02.DBF';




TABLE

SCOTT으로

SQL> CREATE TABLE T1
  2  (ID NUMBER(4))
  3  TABLESPACE APP_DATA
  4  STORAGE                      ---익스텐즈의 크기를 얼마로 줄것인가...
  5     (INITIAL 64K                 ---익스텐즈 처음 크기를 얼마나
  6      NEXT    64K                ---그다음 값
  7      MINEXTENTS 1           ---최소 익스텐츠 (못해도 딱한개는 만들어야된다)
  8      MAXEXTENTS 100       ---최대 익스텐츠 최대 100개까지 쓸래! 100대신 UnLimited(무한대)
  9      PCTINCREASE 50);     ---3번째 부터는이전에 것에 50% 증가한값

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

 

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

Oracle -  (0) 2008.07.29
Oracle - USER TABLE  (0) 2008.07.29
Oracle - LGWR  (0) 2008.07.29
Oracle - Control file  (0) 2008.07.29
Oracle - 관리자계정 "SYS"  (0) 2008.07.29