SQL을 작성하는 환경은 다양합니다. 

실제로 서버에 직접 작업하는 경우도 많지만, PL/SQL developer를 이용하여 작업하는 경우도 많습니다.


사용해본 툴은 SQL Developer와 PL/SQL Developer을 주로 사용해봤고 맥북용은 있는지 모르겠지만.. 구하기는 어려웠기 때문에

유명한 상용툴인 Toad를 통해 VM Ware상에 설치되어있는.. 오라클에 접속하는 방법에 대해 포스팅 하겠습니다.


실제 상용버전의 Toad는 사용해본적이 없어서 비교는 불가능하지만, 앱스토어에 있는 Toad를 통해 기본적인 쿼리를 수행할 수 있다는 점에서 정보공유드립니다


1단계. Down Load

정식 App store에 등록되어있는 toad 입니다.

App Sotre에 Toad를 검색하고 다운을 받습니다.

제가 다운받을 때는 공짜였으나. 지금은 다운받은상태라.. 가격이있는지는 모르겠네요




2. Toad를 다운받은 후 DB Connect


- 왼쪽 상단 Connect 클릭 후 New Connection 클릭




3.  오라클이 설치된 리눅스 서버의 IP와 오라클 SID 정보를 입력해줍니다.

- IP: 192.168.100.100

- SID = PROD

- 일반 계정일 때는 ID 및 패스워드만 기입하고

- SYS 계정으로 접속할 경우엔 Connect as에 SYSDBA를 선택 후 접속합니다.

- Save Password 옵션을 선택하면 패스워드가 저장되어 접속할 때마다 새로 추가하지 않아도됩니다. 





4. 결과화면





 

- Archive Log mode 확인


SYS@PROD>archive log list

Database log mode       No Archive Mode

Automatic archival       Disabled

Archive destination       /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch

Oldest online log sequence     24

Current log sequence       26

 


- Archive Log Mode로 변경

해당 모드로의 변경은 데이터베이스가 Mount 상태일 때 가능.

SYS@PROD>alter database archivelog;

alter database archivelog

*

ERROR at line 1:

ORA-01126: database must be mounted in this instance and not open in any instance


SYS@PROD>shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.


SYS@PROD>startup mount

ORACLE instance started.

 

Total System Global Area  417546240 bytes

Fixed Size     2213936 bytes

Variable Size   327157712 bytes

Database Buffers   83886080 bytes

Redo Buffers     4288512 bytes

Database mounted.



SYS@PROD>alter database archivelog;

 

Database altered.

 

SYS@PROD>archive log list

Database log mode       Archive Mode

Automatic archival       Enabled

Archive destination       /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch

Oldest online log sequence     24

Next log sequence to archive   26

Current log sequence       26


 


- No Archive Log mode 변경

 SYS@PROD>startup mount

ORACLE instance started.

 

Total System Global Area  417546240 bytes

Fixed Size     2213936 bytes

Variable Size   327157712 bytes

Database Buffers   83886080 bytes

Redo Buffers     4288512 bytes

Database mounted.

SYS@PROD>alter database noarchivelog;

 

Database altered.

 

SYS@PROD>archive log list

Database log mode       No Archive Mode

Automatic archival       Disabled

Archive destination       /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch

Oldest online log sequence     24

Current log sequence       26





 



* 위와같이 접속 계정과 인스턴스명으로 구성하기위한 방법.

- 오라클 홈디렉토리 하위  $ORACLE_HOME/sql/admin 디렉토리로 이동 glogin.sql편집.

- sql 접속 후 set을 통해 수행해도되지만, 수행할 때마다 세팅해줘야하는 번거로움이 있으므로 위에 스크립트 편집.

- vi 편집기를 이용하여, 하단에  세줄 추가.


 [oracle@edydr1p0-PROD dbhome_1]$ cd $ORACLE_HOME/sqlplus/admin

[oracle@edydr1p0-PROD admin]$ ls -ltr

total 20

-rw-r--r-- 1 oracle oinstall 2118 Feb 16  2003 pupbld.sql

-rw-r--r-- 1 oracle oinstall  813 Mar  7  2006 plustrce.sql

-rw-r--r-- 1 oracle oinstall  226 Aug  3  2009 libsqlplus.def

drwxr-xr-x 2 oracle oinstall 4096 Jun  8 10:37 help

-rw-r--r-- 1 oracle oinstall  421 Jul 13 15:25 glogin.sql

 

 








저장 후 실행.


Tablespace와 Data File 관리하기.


1. 개요

- 오라클은 데이터를 저장하고 작업할 때 메모리에 논리적으로는 Tablespace라는 공간을 만들어서 작업하며, 물리적으로는 Data File을 만들어서 저장한다.

- 사용자가 SQL을 수행하면 해당 데이터는 반드시 메모리에 있는 Tablespace에 존재해야 한다.

- 메모리에 존재하지 않을 경우 Server Process는 데이터가 저장되어있는 Data File에 가서 해당 데이터가 있는 Block을 찾아서 Tablespace로 가져온 후 사용자가 원하는 데이터를 전달한다.

- Oracle에서는 Database Buffer chache에 Tablespace를 생성하며 사용하는 메모리 공간이 클수록 일반적으로 수해속도가 빨라진다.


2. Tablespace의 종류 및 특징.

1) SYSTEM Tablespace.

- 데이터 딕셔너리들이 저장되어있음.

* 데이터 딕셔너리:  오라클 서버의 모든 정보를 저장하고있는 아주 중요한 테이블이나 뷰를말함.

- 데이터 딕셔너리는 Base Table과 Data Dictionary View로 나눌 수 있다.

- Base Table은 데이터베이스를 생성할 때 생성됨.

- Data Dictionary View는 dbca로 database 생성 시 자동생성 되지만, 수동 생성 경우 catalog.sql을 수행해주어야 한다.


 [oracle@edydr1p0-PROD dbhome_1]$ cd $ORACLE_HOME

[oracle@edydr1p0-PROD dbhome_1]$ find . -type f -name catalog.sql

./rdbms/admin/catalog.sql

 


- Data dictionary에 있는 정보.

1. 데이터베이스의 논리적인 구조와 물리적인 구조 정보들.

2. 객체의 정의와 공간 활용 정보 등

3. 제약조건에 관련된 정보 등

4. 사용자에 관련된 정보 등

5. Role, Priviledge 등에 관련된 정보 등

6. 감사 및 보안에 관련된 정보 등


- Data Dictionary는 크게  Static Dictionary와 Dynamic Dictionary로 나눌 수 있다.


1. Static Dictionary

- 수동으로 업데이트를 해야 정보가 갱신된다.

- 인스턴스가 OPEN 되었을 경우 조회가능

* 딕셔너리 내용 업데이트 쿼리.

SQL> analyze table stest compute statistics;

 

* 딕셔너리 조회쿼리 

     select table_name, num_rows

     from user_tables

     where table_name='테이블명' ;


실습.

 

SQL> conn scott/tiger

 

Connected.

- Scott 계정접속.


SQL> create table stest (no number);

- Tablespace


 

SQL> begin

  2  for i in 1..100 loop

  3   insert into stest values (i);

  4  end loop;

  5  commit;

  6  end;

 

  7  /

- stest 테이블에 값 추가.


SQL> select count(*) from stest

100 rows selected.


SQL> select table_name, num_rows

  2  from user_tables

  3  where table_name='STEST';

 

TABLE_NAME              NUM_ROWS

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

STEST

 

- NUM_ROWS 결과가 업데이트 되지 않았음을 확인.

- STATIC Dictionary는 수동으로 업데이트해야함.


 

SQL> analyze table stest compute statistics;

 

 

Table analyzed.

 

SQL> select table_name, num_rows

  2  from user_tables

  3  where table_name='STEST';

 

TABLE_NAME             NUM_ROWS

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

 

STEST                         100


통계정보 업데이트 후 조회. NUM_ROWS 업데이트 된것을 확인할 수 있다.


* 딕셔너리 정보를 업데이트 하기위한 방법으로, DBMS_STATS라는 패키지도 많이 사용한다.

** Analyze 명령어나 DBMS_STATS 패키지는 해당 테이블을 전체 스캔하는 명령어 이므로 서버의 성능에 아주 나쁜 영향을 줄 수있으므로, 함부로 사용해서는 안되는 명령어이다.


- Static 딕셔너리 분류.

 USER_XXX

 해당 사용자가 생성한 내용만 볼 수 있는 딕셔너리.

ex) USER_TABLE

      USER_INDEXES

 ALL_XXX

해당 사용자가 생성한 것과 생성하지 않았더라도 접근이 가능한 내용을(Select권한을 받은내용) 볼 수 있는 딕셔너리.
ex) ALL_TABLES

      ALL_INDEXES 

 DBA_XXX

데이터 베이스에 생성되어 있는 내용을 다 볼 수 있는 딕셔너리.
DBA권한을 가지고 있는 사용자만 조회가능.

ex) DBA_TABLES

      DBA_INDEXES

 


2. Dynamic Performance View

- 실시간으로 변경되는 내용을 볼 수 있는 뷰

- 사용자가 조회할 경우 그 시점의 Control File 이나 메모리에서 데이터를 가져와 보여줌.

- v$로 시작되며, Database가 Nomount 상태일 때 부터 조회가능



2) SYSAUX Tablespace

- 주로 오라클 서버의 성능 튜닝을 위한 데이터들이 저장되어 있음.

- 9i 버전까지는 튜닝관련 딕셔너리들은 SYSTEM Tablespace에 있었으나, 10g버젼부터 성능 튜닝과 관련된 딕셔너리들이 이곳에 별도로 저장이 되었으며, 10g에 새로 등장한 자동튜닝 기능들 AWR, ADDM, ASH 등이 이곳의 정보를 사용한다.


3) 일반 Tablespace

- 일반적으로 많이 사용되는 Tablespace로 관리자가 필요에 의해 만드는 Tablespace.



*** 실습 ***


- Tablespace 생성.

 SQL>create tablespace haksa

           datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' size 1M;

 

Tablespace created.


- Tablespace 생성 확인

 SQL> select tablespace_name, status, contents, extent_management,

 segment_space_management

 from dba_tablespaces;

 

TABLESPACE_NAME        STATUS CONTENTS  EXTENT_MAN SEGMEN

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

SYSTEM       ONLINE PERMANENT LOCAL      MANUAL

SYSAUX       ONLINE PERMANENT LOCAL      AUTO

UNDOTBS1       ONLINE UNDO   LOCAL      MANUAL

TEMP       ONLINE TEMPORARY LOCAL      MANUAL

USERS       ONLINE PERMANENT LOCAL      MANUAL

EXAMPLE        ONLINE PERMANENT LOCAL      AUTO

HAKSA       ONLINE PERMANENT LOCAL      AUTO

 

7 rows selected.


- Data file 실제 사용량 확인

- 조회 스크립트 생성.


set lines 200;

col filefor 999;

col ts_name for a10;

col total_blocks for 9999999;

col used_blocks for 9999999;

col pct_used for a10;

select distinct d.file_id file#,

d.tablespace_name ts_name,

d.bytes /1024 / 1024 MB,

d.bytes / 8192 MB,

sum(e.blocks) used_blocks,

to_char(nvl(round(sum(e.blocks)/(d.bytes/8192),4),0)*100,'09.99')|| ' %' pct_used

from dba_extents e, dba_data_files d

where d.file_id = e.file_id(+)

group by d.file_id , d.tablespace_name , d.bytes

order by 1,2;



 SQL> @tablespaces

 

FILE# TS_NAME MB     MB USED_BLOCKS PCT_USED

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

    1 SYSTEM 400 51200     32280  63.05 %

    2 SYSAUX 200 25600     14264  55.72 %

    3 UNDOTBS1 200 25600     25216  98.50 %

    4 USERS 50   6400       120  01.88 %

    5 EXAMPLE 100 12800       7320  57.19 %

    6 HAKSA   1   128     00.00 %

 


# HAKSA Table space Full 만들어서 장애유도.


 SQL> conn scott/tiger

Connected.

SQL> create table iphak (stduno number) tablespace haksa;

Table created.


SQL> begin      

  2  for i in 1..50000 loop

  3  insert into iphak values(i);

  4  end loop

  5  ;

  6  commit ;

  7  end;

  8  /

 

PL/SQL procedure successfully completed.

SQL> /

begin

*

ERROR at line 1:

ORA-01653: unable to extend table SCOTT.IPHAK by 8 in tablespace HAKSA

ORA-06512: at line 3

 


 조치방안 1. Tablespace에 Datafle 추가


- 테이블 스페이스 사용량 확인. 

SQL> @tablespaces

 

FILE# TS_NAME MB     MB USED_BLOCKS PCT_USED

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

    1 SYSTEM 400 51200     32280  63.05 %

    2 SYSAUX 200 25600     14336  56.00 %

    3 UNDOTBS1 200 25600     25216  98.50 %

    4 USERS 50   6400       120  01.88 %

    5 EXAMPLE 100 12800       7320  57.19 %

    6 HAKSA   1   128       120  93.75 %

 

6 rows selected.

 

- 권한 없는 계정으로 테이블스페이스 용량 추가 시도 시 실패.

SQL> conn scott/tiger

Connected.

SQL> alter tablespace haksa

  2  add datafile '/u01/app/oracle/oradata/PROD/haksa02.dbf' size 20M

  3  ;

alter tablespace haksa

*

ERROR at line 1:

ORA-01031: insufficient privileges

 

 

- SYSTEM 계정으로 생성.

SQL> alter tablespace haksa

  2  add datafile '/u01/app/oracle/oradata/PROD/haksa02.dbf' size 20M;

 

Tablespace altered.

 

 


- 테이블 스페이스 용량 재 확인

SQL> @tablespaces

 

FILE# TS_NAME MB     MB USED_BLOCKS PCT_USED

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

    1 SYSTEM 400 51200     32280  63.05 %

    2 SYSAUX 200 25600     14336  56.00 %

    3 UNDOTBS1 200 25600     25216  98.50 %

    4 USERS 50   6400       120  01.88 %

    5 EXAMPLE 100 12800       7320  57.19 %

    6 HAKSA   1   128       120  93.75 %

    7 HAKSA 20   2560     00.00 %


- 다시 데이터 Insert 후 테이블스페이스 사용률 확인

 

SQL> conn scott/tiger

Connected.

SQL> 

SQL> 

SQL> 

SQL> 

SQL> begin

  2  for i in 1..50000 loop

  3  insert into iphak values(i);

  4  end loop;

  5  commit;

  6  end;

  7  /

 

PL/SQL procedure successfully completed.


 

SQL> conn SYSTEM/oracle

Connected.

SQL> @tablespaces

 

FILE# TS_NAME MB     MB USED_BLOCKS PCT_USED

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

    1 SYSTEM 400 51200     32280  63.05 %

    2 SYSAUX 200 25600     14336  56.00 %

    3 UNDOTBS1 200 25600     25472  99.50 %

    4 USERS 50   6400       120  01.88 %

    5 EXAMPLE 100 12800       7320  57.19 %

    6 HAKSA   1   128       120  93.75 %

    7 HAKSA 20   2560       136  05.31 %

 

7 rows selected.

 


 



조치 2. 데이터파일 Resize


- 93.75% 사용률의 haksa01 데이터파일 리사이즈.

 SYS@PROD>@tablespaces

 

FILE# TS_NAME MB     MB USED_BLOCKS PCT_USED   FILE_DIR

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

   1 SYSTEM 400 51200     32280  63.05 %   /u01/app/oracle/oradata/PROD/system01.dbf

    2 SYSAUX 200 25600     14368  56.13 %   /u01/app/oracle/oradata/PROD/sysaux01.dbf

    3 UNDOTBS1 200 25600     25472  99.50 %   /u01/app/oracle/oradata/PROD/undotbs01.dbf

    4 USERS 50   6400       120  01.88 %   /u01/app/oracle/oradata/PROD/users01.dbf

    5 EXAMPLE 100 12800       7320  57.19 %   /u01/app/oracle/oradata/PROD/example01.dbf

    6 HAKSA   1   128       120  93.75 %   /u01/app/oracle/oradata/PROD/haksa01.dbf

    7 HAKSA 20   2560       136  05.31 %   /u01/app/oracle/oradata/PROD/haksa02.dbf


- 데이터파일 리사이즈 후 사용률 확인

SYS@PROD>alter database datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' resize 20M;


Database altered.


SYS@PROD>@tablespaces


FILE# TS_NAME MB     MB USED_BLOCKS PCT_USED   FILE_DIR

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

    1 SYSTEM 400 51200     32280  63.05 %   /u01/app/oracle/oradata/PROD/system01.dbf

    2 SYSAUX 200 25600     14368  56.13 %   /u01/app/oracle/oradata/PROD/sysaux01.dbf

    3 UNDOTBS1 200 25600     25472  99.50 %   /u01/app/oracle/oradata/PROD/undotbs01.dbf

    4 USERS 50   6400       120  01.88 %   /u01/app/oracle/oradata/PROD/users01.dbf

    5 EXAMPLE 100 12800       7320  57.19 %   /u01/app/oracle/oradata/PROD/example01.dbf

    6 HAKSA 20   2560       120  04.69 %   /u01/app/oracle/oradata/PROD/haksa01.dbf

    7 HAKSA 20   2560       136  05.31 %   /u01/app/oracle/oradata/PROD/haksa02.dbf


7 rows selected.

 

조치 3. Data file 사이즈 자동증가

- 32 bit용 오라클 경우 파일 1개의 크기는 16GB 까지 가능

- 64 bit용 오라클 경우 파일 1개의 크기는 32GB 까지 가능



- Auto extend 옵션 추가. 

SYSTEM@PROD>alter database datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' autoextend on;

 

Database altered.


- auto extend 상태 확인.

 

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa01.dbf YES ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE 

 



Tablespace Offline

- tablespace 오프라인은 더이상 해당 테이블 스페이스를 사용하지 못하게 하는 것.

- 특정 tablespace만 shutdown 시킨다는 의미.

- 데이터파일의 위치를 이동하거나, 특정 Tablespace가 장애가 나서 복구해야할 때 사용함.


1)테이블 스페이스를 Offline으로 하는 방법

1-1) 일반적으로 사용하는 Normal Mode

- haksa 라는 테이블 스페이스를 offline 으로 변경.

- 변경 결과 해당 테이블스페이스를 사용하는 오브젝트 즉, Scott의 iphak 테이블의 조회또한 불가능.

- 온라인으로 변경하면, 조회가능. (당연하지만..ㅋㅋ)


SYS@PROD>alter tablespace haksa offline;

 

Tablespace altered.

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa01.dbf     OFFLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa02.dbf     OFFLINE

 

7 rows selected.

 

SYS@PROD>select * from scott.iphak;

select * from scott.iphak

                    *

ERROR at line 1:

ORA-00376: file 6 cannot be read at this time

ORA-01110: data file 6: '/u01/app/oracle/oradata/PROD/haksa01.dbf' 


SYS@PROD>alter tablespace haksa online;

 

Tablespace altered.

 

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa01.dbf YES ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE

 

7 rows selected.

 

SYS@PROD>select count(*) from scott.iphak;

 

  COUNT(*)

----------

 

    650000

 


1-2) Temporary mode.

- 현재 오프라인 시키고자 하는 테이블스페이스의 데이터파일이 하나라도 이상이 생기게 되면 Offline 수행 불가능한데, 이럴 경우 사용하는 것이 offline Temporary 

 SYS@PROD>alter tablespace haksa offline temporary;

 

Tablespace altered.

 


1-3) Immediate Mode

- 반드시 Archive Log mode일 경우에만 사용해야함. (이유는..?)

- 데이터파일이 장애가 나서 데이터를 내려쓰지 못하는 상황에서 Tablespace를 Offline 해야할 경우 사용.

- 해당 테이블스페이스를 온라인 할 때 복구메세지가 나옴.

- Tablespace 전체를 Offline  할 수 있으나, 특정 Datafile만 Offline 할 수도 있다.

- RECOVER 모드로 변경된 후 복구 전까지는 해당 테이블 스페이스를 사용하는 테이블에 대한 조회 불가능.

- Tablespace를 오프라인 한 후 Online을 하게되면 수동으로 Check point를 수행해서 SCN 번호를 동기화 시켜야한다.



- No Archive Log 모드일 때 Offline 변경시도.

 SYS@PROD>archive log list

Database log mode       No Archive Mode

Automatic archival       Disabled

Archive destination       /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch

Oldest online log sequence     24

Current log sequence       26

SYS@PROD>alter database open;

 

Database altered.

 

SYS@PROD>

SYS@PROD>

SYS@PROD>

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa01.dbf YES ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE

 

7 rows selected.

 

SYS@PROD>alter database datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' offline;

alter database datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' offline

*

ERROR at line 1:

ORA-01145: offline immediate disallowed unless media recovery enabled


=> 해당 명령어로 Offline 변경 불가.


SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa01.dbf YES ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE

 

7 rows selected.


SYS@PROD>alter database datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' offline drop;

 

Database altered.

=>no archive log 모드에서는  drop 이라는 옵션을 추가하여 Offline 으로 변경해야한다.


SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa01.dbf     RECOVER

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE

 

7 rows selected.


** 만약 체크포인트가 발생했다면 오프라인 상태의 테이블스페이스와 나머지 테이블 스페이스의 SCN이 다르게된다.

테스트환경에서 강제로 체크포인트 발생 후 확인.


SYS@PROD>@chk_point_num

 

     FILE#   TS# NAME     STATUS  CHECKPOINT_CHANGE#

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

1     0 SYSTEM     SYSTEM 810703

2     1 SYSAUX     ONLINE 810703

3     2 UNDOTBS1     ONLINE 810703

4     4 USERS     ONLINE 810703

5     5 EXAMPLE     ONLINE 810703

6     6 HAKSA     RECOVER 810476

7     6 HAKSA     ONLINE 810703

 

7 rows selected.


** HAKSA 테이블스페이스 데이터파일 중 온라인상태가 있는 경우 Recover 시도

SYS@PROD>recover tablespace haksa

ORA-00283: recovery session canceled due to errors

ORA-01124: cannot recover data file 7 - file is in use or recovery

ORA-01110: data file 7: '/u01/app/oracle/oradata/PROD/haksa02.dbf'

 

=> 복구가 불가능 하다.

 

** HAKSA 테이블 스페이스 오프라인시도

SYS@PROD>alter tablespace haksa offline

  2  ;

alter tablespace haksa offline

*

ERROR at line 1:

ORA-01191: file 6 is already offline - cannot do a normal offline

ORA-01110: data file 6: '/u01/app/oracle/oradata/PROD/haksa01.dbf'

 

=> 데이터파일 한개만 오프라인 상태라 Temporary 오프라인을 수행해야한다.


 

SYS@PROD>alter tablespace haksa offline temporary

  2  ;

 

Tablespace altered.

 

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa01.dbf     RECOVER

HAKSA       /u01/app/oracle/oradata/PROD/haksa02.dbf     OFFLINE

 

7 rows selected.


=> HAKSA Tablespace 오프라인 되었다.


** Haksa Tablespace 복구 진행

SYS@PROD>recover tablespace haksa;

Media recovery complete.

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa01.dbf     OFFLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa02.dbf     OFFLINE

 

7 rows selected.

 


** 복구 후 온라인 상태로 변경

SYS@PROD>alter tablespace haksa online;

 

Tablespace altered.

 

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa01.dbf YES ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE

 

7 rows selected.

 

=> 온라인상태로 변경 확인


** SCN 정보가 같은지 확인


SYS@PROD>@chk_point_num

 

     FILE#   TS# NAME     STATUS  CHECKPOINT_CHANGE#

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

1     0 SYSTEM     SYSTEM 810716

2     1 SYSAUX     ONLINE 810716

3     2 UNDOTBS1     ONLINE 810716

4     4 USERS     ONLINE 810716

5     5 EXAMPLE     ONLINE 810716

6     6 HAKSA     ONLINE 810818

7     6 HAKSA     ONLINE 810818

 

7 rows selected.

 


=> SCN이 다르므로 강제 체크포인트 발생


YS@PROD>alter system checkpoint

  2  ;

 

System altered.

 

SYS@PROD>@chk_point_num

 

     FILE#   TS# NAME     STATUS  CHECKPOINT_CHANGE#

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

1     0 SYSTEM     SYSTEM 810847

2     1 SYSAUX     ONLINE 810847

3     2 UNDOTBS1     ONLINE 810847

4     4 USERS     ONLINE 810847

5     5 EXAMPLE     ONLINE 810847

6     6 HAKSA     ONLINE 810847

7     6 HAKSA     ONLINE 810847

 

7 rows selected.

 

SYS@PROD>select count(*) from scott.iphak;

 

  COUNT(*)

----------

    650000

 

 

=>  오프라인 -> 복구-> 온라인-> 조회가능 



- Archive Log Mode일 때 Offline


 SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa01.dbf YES ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE

 

7 rows selected.

 

SYS@PROD>alter database datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' offline;

 

Database altered.

 

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa01.dbf     RECOVER

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE

 

7 rows selected.

 

- 해당 테이블을 스페이스를 온라인으로 변경하여도 복구가 필요하다고 나온다.

- 복구를 해야 조회가 가능함.

SYS@PROD>alter database datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' online;

alter database datafile '/u01/app/oracle/oradata/PROD/haksa01.dbf' online

*

ERROR at line 1:

ORA-01113: file 6 needs media recovery

 

ORA-01110: data file 6: '/u01/app/oracle/oradata/PROD/haksa01.dbf'



SYS@PROD>select count(*) from scott.iphak;

select count(*) from scott.iphak

                           *

ERROR at line 1:

ORA-00376: file 6 cannot be read at this time

ORA-01110: data file 6: '/u01/app/oracle/oradata/PROD/haksa01.dbf'


-해당 테이블 스페이스 복구

* 이미 데이터파일 한개가 offline 상태이기 때문에 Temporary 모드로 오프라인 시도해야함.


SYS@PROD>alter tablespace haksa offline temporary;

 

Tablespace altered.

 

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa01.dbf     RECOVER

HAKSA       /u01/app/oracle/oradata/PROD/haksa02.dbf     OFFLINE

 

7 rows selected.

 

- 해당 테이블스페이스 복구 시도.

SYS@PROD>recover tablespace haksa;

Media recovery complete.


SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa01.dbf     OFFLINE

HAKSA       /u01/app/oracle/oradata/PROD/haksa02.dbf     OFFLINE

 

 

7 rows selected.

 


- 복구 후 ONLINE 상태로 변경

 

SYS@PROD>alter tablespace haksa online;

 

Tablespace altered.

 

SYS@PROD>@tbs_auto_status

 

TABLESPACE   MB FILE_NAME  AUT ONLINE_

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

SYSTEM   400 /u01/app/oracle/oradata/PROD/system01.dbf  NO  SYSTEM

SYSAUX   200 /u01/app/oracle/oradata/PROD/sysaux01.dbf  NO  ONLINE

UNDOTBS1   200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO  ONLINE

USERS   50 /u01/app/oracle/oradata/PROD/users01.dbf NO  ONLINE

EXAMPLE   100 /u01/app/oracle/oradata/PROD/example01.dbf NO  ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa01.dbf YES ONLINE

HAKSA   20 /u01/app/oracle/oradata/PROD/haksa02.dbf NO  ONLINE

 

7 rows selected.

 

* 온라인이 되자 조회가 가능함.

SYS@PROD>select count(*) from scott.iphak;

 

  COUNT(*)

----------

 

    650000



SYS@PROD>@chk_point_num

 

     FILE#   TS# NAME     STATUS  CHECKPOINT_CHANGE#

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

1     0 SYSTEM     SYSTEM 809510

2     1 SYSAUX     ONLINE 809510

3     2 UNDOTBS1     ONLINE 809510

4     4 USERS     ONLINE 809510

5     5 EXAMPLE     ONLINE 809510

6     6 HAKSA     ONLINE 809599

7     6 HAKSA     ONLINE 809599

 

 

7 rows selected.



=> Check point 값이 다른것을 확인할 수 있다.

이 경우 데이터 파일 백업을 받는다면, 백업파일 자체가 문제가 있게되며 복구에 문제가 될 수 있다.

이럴경우엔 Check Point 를 발생시켜 동기화 한 후 백업을 받아야함.


SYS@PROD>alter system checkpoint;

 

System altered.

 

SYS@PROD>@chk_point_num

 

     FILE#   TS# NAME     STATUS  CHECKPOINT_CHANGE#

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

1     0 SYSTEM     SYSTEM 809644

2     1 SYSAUX     ONLINE 809644

3     2 UNDOTBS1     ONLINE 809644

4     4 USERS     ONLINE 809644

5     5 EXAMPLE     ONLINE 809644

6     6 HAKSA     ONLINE 809644

7     6 HAKSA     ONLINE 809644

 

 

7 rows selected.





6-2. Redo Log File 구성 및 관리하기. 



Redo Log File 구성 및 관리하기


1) Redo Log Buffer와 Redo Log File

 



- Redo Log File은 그룹과 멤버라는 개념으로 관리됨.

- Oracle 7 버전 이후부터 같은 내용을 여러곳에 중복으로 저장하는 그룹이란 개념이 등장

- 위 그림은 Redo Log Group 3개가 있고, Member 로 2개씩 존재하는 구성

- 같은 그룹의 Member 들은 같은 내용을 담고있다.

- Member를 많이 추가하면 안정적일 수는 있지만, 기록시간이 커서 부하를 줄 수 있으므로 구성을 잘 해야한다.

- 같은 그룹의 멤버는 서로 다른 디스크에 저장되는것을 권장한다.


* 오라클에서 최소 그룹의 개수는 2개이며, 그룹별로 필요한 최소 Member 갯수는 1개다.

* *  장애를 대비하여 그룹은 최소 3개와 각 그룹별 최소 2개이상의 Member 구성을 권장함.

- LGWR이 Redo Log Buffer의 내용을 Redo Log File에 내려쓰다가 해당 파일이 가득 차게되면 Log Switch가 발생하여 자동으로 다음 그룹으로 넘어가게된다.

 * Log Switch가 발생하게 되면 Checkpoint 신호가 발생하게된다.

=> Check point 신호 발생 시 DBWR은 해당 로그파일에 있는 내용 중 DB Buffer Cache에서 데이터파일로 저장되지 못한 변경사항을 내려쓰게 되며, 이 정보들을 Data file과 Control file에 반영된다.

- 다음 그룹역시 가득 찰 경우 다음 Redo Log 그룹으로 넘어간다.

* Log Switch가 일어나는 그룹의 순서는 Oracle이 라운드 로빈 방식으로 결정하게된다.

(1번 그룹 다음 2번그룹이 아니라 3번일 수 있다는 뜻.)

- 같은 그룹 안의 Member들 끼리는 서로 저장하고 있는 내용과 크기가 동일하다.

- LGWR은 Redo Log File의 그룹의 멤버가 여러 개일 경우 병렬로 동시에 같은 내용을 기록한다.

(같은 디스크에 있을 경우 하나 기록후 끝나고 하나 기록하는 식의 직렬로 기록) 

* 병렬쓰기 도중 Redo Log File이 삭제되었다든지 Block에 문제가 생겼다든지 문제가 생길 경우 LGWR은 각 오픈 로그 멤버의 상태를 조사해서 어떤 파일이 에러가 발생되는지 알아낸다.

 장애가 난 멤버는 Control File의 STALE이라는 상태로 기록하고, LGW은 Trace file에 ORA-00346에러를 기록한다.

- LGWR이 하나의 로그파일에서 4개이상의 에러를 만나게 되면 로그파일을 닫고 더이상 그 파일에 내용을 기록하지 않는다. 만약 LGWR이 어떤 로그 파일에도 내용을 기록할 수 없다면 ORA-00340 에러를 발새시키고Shutdown abort로 강제종료되고 Startup되지 않는다.


** Redo Log file 크기는 각 서버에 맞게 사용해야하며, Redo Log File크기가 너무 작을 경우 LOG SWITCH가 자주 발생하게되어 성능저하가 될 수 있고, 너무 크면 데이터의 손상 가능성이 커지므로 설정을 잘해야한다.

 보통  1시간에 Log Switch가 2~3회 발생하게 설정하는 것을 추천하지만, 서버실정에 맞게 설정해야한다.

** Alert Log File에 checkpoint not completed 메세지가 나오면 Redo Log File 크기나 그룹의 개수가 작다는 의미로 멤버 크기를 크게 만들거나, 그룹을 더 만들어주어야한다.

** checkpoint not completed 메세지는 Log Switch가 너무 빈번하게 일어날 경우 DBWR이 이전에 발생한 Check point 내용을 Data file에 다 기록을 못한 상태에서 다시 Log Switch가 발생하여 checkpoint 신호가 들어올 경우 발생한다.

 






 Control file 관리하기.


- Control File은 Binary File라서 Control file 내용을 DBA가 직접 수정할 수 없음.

- 내용 변경 시 Server Process에게 변경을 요구하는 SQL문장이나 DDL 문장을 수행해야한다.

- Instance가 Mount이상의 상태일 때 Control File의 내용이 실시간으로 변경되고 조회된다.

- 삭제 시 복구를 위해 여러곳에 복사본을 만들어 다중화 하는것을 권장함.


1. Spfile일 경우 다중화 하는 방법.

1)Control file 경로 확인 및 인스턴스 상태 확인.


SQL> show parameter control

 

NAME     TYPE VALUE

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

control_file_record_keep_time     integer 7

control_files     string /u01/app/oracle/oradata/PROD/control01.ctl

 

control_management_pack_access     string DIAGNOSTIC+TUNING


SQL> select status from v$instance;

 

STATUS

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

OPEN


SQL> show parameter spfile

 

NAME     TYPE    VALUE

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

spfile     string      /u01/app/oracle/product/11.2.0 /dbhome_1/dbs/spfilePROD.ora


2) 현재 Control file 조회.

 SQL> select name from v$controlfile;

 

NAME

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

/u01/app/oracle/oradata/PROD/control01.ctl

 



3) Spfile의 내용을 변경 후 Instance 종료.

 SQL> alter system set control_files='/home/oracle/disk1/control01.ctl', 

  2  '/home/oracle/disk2/control02.ctl',

  3  '/home/oracle/disk3/control03.ctl' scope=spfile;

 


4) 대상 디렉토리 생성 및 파일 복사.


[oracle@edydr1p0-PROD ~]$ mkdir disk1 disk2 disk3

[oracle@edydr1p0-PROD ~]$ cp /u01/app/oracle/oradata/PROD/control01.ctl /home/oracle/disk1/control01.ctl

[oracle@edydr1p0-PROD ~]$ cp /u01/app/oracle/oradata/PROD/control01.ctl /home/oracle/disk2/control02.ctl

[oracle@edydr1p0-PROD ~]$ cp /u01/app/oracle/oradata/PROD/control01.ctl /home/oracle/disk3/control03.ctl

 


5)Instance statup 후 Controlfile 다중화 확인.

 SQL> startup

ORACLE instance started.

 

Total System Global Area  417546240 bytes

Fixed Size     2213936 bytes

Variable Size   322963408 bytes

Database Buffers   88080384 bytes

Redo Buffers     4288512 bytes

Database mounted.

Database opened.

SQL> show parameter control

 

NAME     TYPE VALUE

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

control_file_record_keep_time     integer 7

control_files     string /home/oracle/disk1/control01.c

tl, /home/oracle/disk2/control

02.ctl, /home/oracle/disk3/con

trol03.ctl

control_management_pack_access     string DIAGNOSTIC+TUNING


SQL>select name from v$controlfile;

 

NAME

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

/home/oracle/disk1/control01.ctl

/home/oracle/disk2/control02.ctl

/home/oracle/disk3/control03.ctl

 



2. Pfile 다중화 방법.


환경구성.

- 현재 spfile 사용중이므로, pfile 생성.

- pfile 사용하기 위해서는 기존의 spfile을 지워야한다.


 SQL> create pfile from spfile;


[oracle@edydr1p0-PROD dbs]$ pwd

 

/u01/app/oracle/product/11.2.0/dbhome_1/dbs

 

[oracle@edydr1p0-PROD dbs]$ rm -f spfilePROD.ora 


SQL> show parameter pfile

 

NAME     TYPE VALUE

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

 

spfile     string


* VALUE에 아무내용이 없으면 pfile 사용한다는 뜻.



1)현재 사용중인 Control File 조회 및 인스턴스종료.

 SQL> select name from v$controlfile;

 

NAME

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

/home/oracle/disk1/control01.ctl

/home/oracle/disk2/control02.ctl

/home/oracle/disk3/control03.ctl


SQL> shutdown immediate;

 


2 )pfile 에서 Control file 경로 수정.

 [oracle@edydr1p0-PROD dbs]$ vi initPROD.ora 

 

PROD.__db_cache_size=83886080

PROD.__java_pool_size=4194304

PROD.__large_pool_size=4194304

PROD.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

PROD.__pga_aggregate_target=167772160

PROD.__sga_target=251658240

PROD.__shared_io_pool_size=0

PROD.__shared_pool_size=142606336

PROD.__streams_pool_size=8388608

*.control_files='/home/oracle/disk1/control01.ctl','/home/oracle/disk2/control02.ctl','/home/oracle/disk3/control03.ctl'

*.db_block_size=8192

*.db_name='PROD'

*.memory_target=400M

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

 


기존에 사용하는 Control file 01,02,03 -> 04,05,06 으로 변경

 *.control_files='/home/oracle/disk4/control04.ctl','/home/oracle/disk5/control05.ctl','/home/oracle/disk6/control06.ctl'


3)해당 디렉토리 생성 후 Controlfile 복사

 [oracle@edydr1p0-PROD ~]$ mkdir disk4 disk5 disk6


[oracle@edydr1p0-PROD ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk4/control04.ctl

[oracle@edydr1p0-PROD ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk5/control05.ctl

[oracle@edydr1p0-PROD ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk6/control06.ctl


4) 정상 오픈 후 확인

 SQL> startup

ORACLE instance started.

 

Total System Global Area  417546240 bytes

Fixed Size     2213936 bytes

Variable Size   327157712 bytes

Database Buffers   83886080 bytes

Redo Buffers     4288512 bytes

Database mounted.

Database opened.


SQL> select name from v$controlfile;

 

NAME

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

/home/oracle/disk4/control04.ctl

/home/oracle/disk5/control05.ctl

/home/oracle/disk6/control06.ctl