반응형


1.TABLESPACE 정보
1)DBA_TABLESPACES
SQL> select tablespace_name, status from dba_tablespaces;

2)V$TABLESPACE
SQL> select ts#,name from v$tablespace;

2.DATAFILE 정보
1)DBA_DATA_FILES
SQL> select file_name, file_id, tablespace_name from dba_data_files;

2)V$DATAFILE
SQL> select file#, name from v$datafile;


3.Temporary 파일정보
1)DBA_TEMP_FILES
SQL> select file_name, file_id, tablespace_name from dba_temp_files;
2)V$TEMPFILE
SQL> select file#, name from v$tempfile;

반응형
반응형


1.테이블스페이스 삭제(Drop)

1) 테이블스페이스와 그 내용이 더 이상 필요하지 않으면 DROP TABLESPACE 명령을 사용하여 테이블스페이스를 삭제할 수 있다.

2) 테이블스페이스 삭제하기 전에 Offline으로 설정하여 Transaction이 테이블스페이스에 있는 세그먼트를 엑세스할 수 없도록 한다.

SQL> alter tablespace users offline;
SQL> drop tablespace users including contents and datafiles;


2.Temp 테이블스페이스 확인

1)Temporary Tablespace 생성확인
SQL> select tablespace_name, file_name, bytes/1024/1024 from dba_temp_files;

2)Default Temporary Tablespace 확인
SQL> select * from database_properties where property_value='TEMP';


반응형

'개발 및 관리 > Oracle 9i, 10g, 11g, 12c, 19c' 카테고리의 다른 글

테이블스페이스 지침사항  (0) 2011.03.24
Tablespace 및 Datafile 정보 얻기  (0) 2011.03.24
데이터 파일 이동  (0) 2011.03.23
STORAGE PARAMETER  (0) 2011.03.23
오라클 버젼 정보 확인  (0) 2011.03.23
반응형


1. ALTER TABLESPACE 명령문 (OPEN 상태에서)
ALTER TABLESPACE test RENAME DATAFILE 'C:\DISK1\test01.dbf' TO 'D:\DISK1\test01.dbf';

1)테이블스페이스를 먼저 오프라인으로 만든다.
2)운영체제 명령으로 파일을 옮긴다.(CP)
3)ALTER TABLESPACE test RENAME DATAFILE 'C:\DISK1\test01.dbf' TO 'D:\DISK1\test01.dbf';
4)테이블스페이스를 온라인으로 만든다.
5)필요하다면 운영체제 명령을 사용하여 기존의 파일을 삭제한다.
- 테이블스페이스 test는 먼저 오프라인 상태이어야만 한다.
- 데이터베이스가 정상적으로 오픈되어 운영되는 도중에 데이터 파일을 옮기고자 할 때 사용할 수 있다.


2. ALTER DATABASE 명령문 (MOUNT 상태에서)
ALTER DATABASE RENAME FILE 'C:\DISK1\test01.dbf' TO 'D:\DISK1\test01.dbf';

1)데이터베이스를 정상 종료한다.
2)운영체제 명령을 이용하여 데이터 파일을 옮긴다.(cp)
3)데이터베이스를 마운트 모드로 스타트한다.(STARTUP MOUNT)
4)ALTER DATABASE RENAME FILE'C:\DISK1\test01.dbf' TO 'D:\DISK1\test01.dbf';
5)ALTER DATABASE OPEN;
6)필요하다면 운영체제 명령을 사용하여 기존의 파일을 삭제한다.
- 테이블스페이스가 반드시 마운트 상태여야 한다.
- 데이터베이스가 정상적으로 셧다운 되어 있는 상태에서 대부분(많은 수)의 데이터 파일을 옮기고자 할 때 사용한다.

반응형

STORAGE PARAMETER

개발 및 관리/Oracle 9i, 10g, 11g, 12c, 19c 2011. 3. 23. 23:57 posted by HighLighter
반응형
1.INITIAL: 첫번째 익스텐트의 크기를 정의한다. 첫 익스텐트의 최소크기는 두 블록(DB_BLOCK_SIZE*2)이다.
2.NEXT: 두번째 익스텐트의 크기를 정의한다. 최소크기는 한 블록이면, 기본값은 DB_BLOCK_SIZE*5 이다.
3.MINEXTENTS: 세그먼트가 생성될 때 할당되는 익스텐트의 개수, 최소값은 1이다.
4.MAXEXTENTS: 세그먼트가 가질 수 있는 익스텐트의 최대 개수, 최소값 1, 최대값은 DB_BLOCK_SIZE에 따라 결정됩니다. 최대크기는 2147483645의 값을 갖으며, UNLIMITED 키워드로 지정할 수 있다.
5.PCTINCREASE: 익스텐트의 증가율, 예를 들어, NEXT가 200K, PCTINCREASE 50로 결정되었다면 두번째 익스텐트는 200K, 세번째 익스텐트는 300K, 네번째 익스텐트는 450K가 된다.
반응형
반응형

하나,
SQL> select * from v$version;

둘,
SQL> show parameter compatible;
반응형

언두 에러

개발 및 관리/Oracle 9i, 10g, 11g, 12c, 19c 2011. 3. 23. 23:47 posted by HighLighter
반응형

1. 트랜잭션에 불충분한 공간
ORA-1650 : Unable to extent rollback segments
- 테이블 스페이스에 공간이 없을 때
- 세그먼트가 MAXEXTENTS에 도달했을 때

2. 읽기 일관성 에러
ORA-1555 : SNAPSHOT TOO OLD
- 언두 헤더의 트랜잭션 슬롯이 재사용되었을 때
- 언두 세그먼트의 Before Image가 다른 트랜잭션에 의해 겹쳐 쓰여졌을 때

3. UNDO 테이블스페이스 공간 부족
- 10GB의 테이블에 저장된 모든 행들을 삭제했다고 한다면 롤백을 위한 UNDO data가 생성되며 이를 위한 10GB의 UNDO
테이블스페이스 공간이 필요하게 된다. UNDO 테이블스페이스에 언두 데이터를 저장할 수 있는 공간이 더 이상 존재하지 않으면 ORA-1650 unable to extend rollback segment 오류메시지가 발생한다.

4. 읽기 일관성 문제
- 오라클 서버는 명령문을 수행하는 커밋 되어 있는 데이터만 처리하도록 보장한다. 명령문이 시작될 때 커밋되지 않은 변경 사항이나 명령문이 수행되기 시작한 후에 가해진 변경 사항은 해당 명령문을 통해서는 볼 수 없다. 오라클 서버가 이러한 읽기 일관성을 유지할 수 없게 되면 ORA-1555:snapshot too old 에러를 받게 된다. 이 에러는 변경을 일으킨 트랜잭션이 이미 커밋하고 다른 트랜잭션에 의해 겹쳐 쓰여졌을 때 발생한다.

반응형
반응형


*테이블 정보 검색

1)DBA_OBJECTS

select owner, object_name, object_id, data_object_id from dba_objects;
select owner, object_name, object_id, data_object_id from dba_objects where rownum < 3;


2)DBA_SEGMENTS

select owner, segment_name, tablespace_name, header_file, header_block from dba_segments;
select owner, segment_name, tablespace_name, header_file, header_block from dba_segments where rownum < 3;

3)DBA_TABLES

select owner, table_name, pct_free, pct_used, initial_extent, next_extent, min_extents, max_extents, pct_increase, cache, blocks, empty_blocks, chain_cnt,

temporary, duration from dba_tables;


select owner, table_name, pct_free, pct_used, initial_extent, next_extent, min_extents, max_extents, pct_increase, cache, blocks, empty_blocks, chain_cnt,

temporary, duration from dba_tables where rownum < 3;

4)DBA_EXTENTS

select owner, segment_name, extent_id, file_id, block_id, blocks from dba_extents;
select owner, segment_name, extent_id, file_id, block_id, blocks from dba_extents where rownum < 3;

반응형
반응형

*인덱스 생성

CREATE UNIQUE INDEX EXP_XOSL2_D_P.INDX_P_LINK_EVENT_PK
ON EXP_XOSL2_D_P.P_LINK_EVENT(O__NUM, O__ST)
TABLESPACE INDX_XOSL2_D_P ;

CREATE INDEX EXP_XOSL2_D_P.INDX_P_LINK_EVENT_L_EVT
ON EXP_XOSL2_D_P.P_LINK_EVENT(L_EVT)
TABLESPACE INDX_XOSL2_D_P ;

CREATE INDEX EXP_XOSL2_D_P.INDX_P_LINK_EVENT_L_LINK
ON EXP_XOSL2_D_P.P_LINK_EVENT(L_LINK_EVT)
TABLESPACE INDX_XOSL2_D_P ;


*Oracle Table에 Assign되어 있는 Index 조회

SELECT Idx.uniqueness,
Col.*
FROM ALL_INDEXES Idx,
ALL_IND_COLUMNS Col
WHERE Idx.index_name = Col.index_name
AND Idx.table_name=upper('P_LINK_EVENT');


*인덱스 생성 지침
1. 인덱스를 사용하면 질의 속도는 빨라지지만 DML 속도는 느려지므로 이 둘의 균형을 이룰 수 있도록 꼭 필요한 인덱스만 생성하도록 한다.
2. 인덱스는 다른 종류의 세그먼트를 포함하는 테이블스페이스가 아닌 별도의 스페이스에 두도록 한다.
3. 단편화를 최소화하기 위해 DB_BLOCK_SIZE의 5배인 표준 익스텐트 크기를 사용한다.
4. 큰 인덱스 생성시에는 성능향상을 위해 NOLOGGING 절을 사용하는 것이 좋다.
5. 새로운 키 값이 현재 범위 안에 있을 것 같으면 높은 PCTFREE 값을 설정한다.
6. 인덱스 항목은 자신이 인덱스하는 행보다 작기 때문에, 인덱스 BLOCK은 BLOCK마다 많은 항목을 포함하며 일반적으로 해당 테이블보다 인덱스에 대한 INITRANS가 더 높아야 한다.
7. 인덱스 및 PCTFREE
- 인덱스에 대한 PCTFREE Parameter는 테이블의 PCTFREE Parameter와 다르게 작동된다. 즉, 이 Parameter는 동일한 인덱스 BLOCK에 삽입할 인덱스 항목의 공간을 에약하기 위해 인덱스 생성 시에만 사용한다. 인덱스 항목은 갱신되지 않으며, 키 컬럼이 갱신될 때 인덱스 항목의 논리적 삭제 및 삽입이 발생한다.


*인덱스 재구축(Rebuild)-삭제된 항목을 제거하여 공간 활용 향상

ALTER INDEX order_id_idx REBUILD TABLESPACE exp_xlso2_indx;

1)인덱스 재구축의 특성
- 기존 인덱스를 Data 소스로 사용하여 새 인덱스를 구축한다.
- 기존 인덱스를 사용하여 인덱스를 구축할 경우에는 정렬이 필요하지 않으므로 성능이 향상된다.
- 새 인덱스를 구축하고 나면 이전 인덱스는 삭제되며, 재구축 중에는 이전 인덱스 및 새 인덱스를 각 Tablespace에 모두 수용할 수 있는 충분한 공간이 필요하다.
- 결과 인덱스는 삭제한 항목을 포함하지 않으므로 이 인덱스는 공간을 더 효율적으로 사용한다.
- 새 인덱스를 구축하는 동안에는 Query에서 기존 인덱스를 계속 사용할 수 있다.

2)인덱스 재구축이 필요한 상황
- 기존 인덱스를 다른 Tablespace로 이동해야 할 경우로 인덱스가 테이블과 동일한 Tablespace에 있거나 Object를 디스크에 재분배해야 할 경우에는 이 작업이 필요할 수 있다.
- 인덱스에 삭제한 항목이 많이 포함되어 있는 경우로, 이러한 현상은 완료된 주문은 삭제하고 새로운 주문을 높은 번호로 테이블에 추가하는 주문 테이블의 주문 번호 인덱스와 같이 변하는 인덱스에서 나타나는 일반적인 문제이다. 오래된 소수의 주문을 아직 처리하지 않은 경우 항목 일부만 삭제한 인덱스 최하위 BLOCK이 몇 개 있을 수도 있다.
- 기존의 일반 인덱스를 역방향 키(REVERSE KEY) 인덱스로 변환해야 할 경우로, 이전 릴리스의 Oracle Server의 응용 프로그램을 이전할 경우 재구축할 수 있다.
- 인덱스의 테이블을 ALTER TABLE ... MOVE TABLESPACE 명령을 사용하여 다른 Tablespace로 이동한 경우


3)Online으로 인덱스 재구축

ALTER INDEX order_id_idx REBUILD ONLINE;

- 인덱스 구축 또는 재구축 작업은 테이블이 아주 큰 경우 시간이 많이 걸리는 작업이며, Oracle 8i 이전에는 인덱스를 생성 또는 재구축할 경우 테이블을 locking해야 했고, 동시에 DML 작업을 할 수 없었다.
- Oracel 9i는 인덱스를 생성 또는 재생성하면서 기본 테이블에 대한 동시 작업을 수행할 수 있지만, 이러한 절차 중에는 큰 DML 작업을 수행하지 않는 것이 좋다.


*인덱스 유효성 검사

ANALYZE INDEX order_id_idx VALIDATE STRUCTURE;

- 이 명령을 수행해도 인덱스 항목이 테이블의 Data에 대응되는지 여부는 확인되지 않는다.
- INDEX_STATS 뷰를 인덱스 정보로 채운다.
- 모든 인덱스 BLOCK에 대해 손상된 BLOCK이 있는지 확인한다.
- 인덱스에 삭제된 행의 비율이 높은 경우 해당 인덱스를 재구성한다.

SELECT blocks, pct_used, distinct_keys, lf_rows, del_lf_rows FROM index_stats;

*인덱스 삭제

DROP INDEX order_id_idx

1)인덱스를 삭제하는 경우
- 인덱스가 더 이상 필요하지 않을 때
- 인덱스가 부적합하게 되어 재생성하기 전에 삭제할 필요가 있을 때
- 다른 테이블스페이스로 이 인덱스를 이동하고자 할 때
- 테이블에 대한 폭 넓은 DML 문장처리를 수행하고 있을 때
- 인덱스가 훼손되었을 때

2)인덱스 삭제 시나리오
- 응용 프로그램에서 더 이상 사용하지 않는 인덱스는 삭제할 수 있다.
- 대량 로드를 수행하기 전에 인덱스를 삭제할 수 있으며 Data를 대량으로 로드하기 전에 인덱스를 삭제하고 로드한 다음 다시 생성하면 다음 결과를 얻을 수 있다.
하나, 로드 성능이 향상된다.
두울, 인덱스 공간을 더 효율적으로 사용할 수 있다.

- 주기적으로만 사용하는 인덱스가 특히 휘발성 테이블에 기반을 두고 있을 경우에는 불필요하게 유지 관리하지 않아도 되며, 대개 연말 또는 분기 말의 검토 회의에 사용할 정보를 모으기 위해 임의의 Query를 생성하는 OLTP 시스템의 경우에는 불필요하게 유지 관리하지 않아도 된다.

- 로드 작업 같은 특정 유형의 작업 중에 Instance Failure가 발생하는 경우에는 인덱스를 INVALID로 표시하는데, 이러한 경우에는 인덱스를 삭제하고 다시 생성해야 한다.

- 인덱스가 훼손된 경우


반응형
반응형


1. 모든 리두로그 파일이 유실된 경우

마지막 아카이브 파일의 번호 확인하기
1) Alert 로그 분석
[C:\] cd c:\oracle\product\10.2.0\admin\orcl\bdump
[C:\] dir
[C:\] edit ALERT_<ORCL>.LOG
2) 아카이브 파일 생성 경로로 이동 후 직접 확인
[C:\] cd c:\oracle\product\10.2.0\db_1\database\archive
[C:\] dir

설명) 이전에 마지막으로 오프라인 백업된 파일들 중에 모든 데이터 파일들만 재설치한다. 컨트롤 파일과 리두로그 파일들은 재설치할 필요 없다. 모든 파일들을 재설치하게 되면 완전 복구방법이 되며 데이터 파일들만 설치하면 불완전 복구가 된다.

[C:\] cd c:\backup
[C:\] copy *.dbf c:\oracle\product\10.2.0\oradata\orcl

[C:\] sqlplus /nolog
SQL> conn sys/oralce as sysdba;
SQL> startup mount
SQL> recover database until cancel
<Archive 적용, 적용 후 더 이상 복구 작업을 수행할 파일이 없다면 CANCEL 입력>

SQL> alter database open resetlogs;
 설명) 불완전 복구는 데이터베이스의 모든 상태가 불일치하기 때문에 복구작업을 완료한 후 반드시 resetlog 옵션을 사용하여 open해야 한다. 이 명령어를 실행하면 유실된 모든 리두로그 파일들이 자동생성된다.

SQL> archive log list;
SQL> shutdown immediate
SQL> exit

 설명) 데이터베이스의 모든 상태정보가 초기회되는 불완전복 복구방법이 수행되고 나면 마지막으로 백업되었던 백업 파일은 더 이상 사용할 수 없으므로 반드시 오프라인 백업을 수행해야 한다. 또한 오프라인 백업이 수행되고 나면 이전의 모든 트레이스 파일과 로그 파일, 아카이브 파일들을 삭제해야 한다.

[c:\] cd c:\oracle\product\10.2.0\oradata\orcl
[c:\oracle\product\10.2.0\oradata\orcl] copy *.* c:\backup
[c:\oracle\product\10.2.0\oradata\orcl] copy c:\oracle\product\10.2.0\db_1\database\INITorcl.ora c:\backup

[c:\] del c:\oracle\product\10.2.0\admin\orcl\udump\*.trc
[c:\] del c:\oracle\product\10.2.0\admin\orcl\bdump\alert_ORCL.log
[c:\] del c:\oracle\product\10.2.0\db_1\database\archive
[c:\] del *.arc


2. 모든 컨트롤 파일이 유실된 경우

모든 컨트롤 파일에 장애가 발생하면 더 이상 오라클 데이터베이스를 사용할 수 없게된다. 이러한 현상이 발생하는 경우에는 불완전 복구방법을 사용한다.

[C:\] copy c:\backup\*.ctl c:\oracle\product\10.2.0\oradata\orcl\*.ctl
[C:\] sqlplus /nolog
SQL> startup mount
SQL> recover database using BACKUP controlfile
 설명) 현재 환경은 컨트롤 파일만 이전의 백업 파일이고 다른 파일들은 현재시점의 파일들이기 때문에 컨트롤 파일만의 복구작업을 수행하기 위해 USING BACKUP CONTROLFILE 절을 사용하여 복구작업을 수행해야 한다.
 
 설명) 여러 개의 아카이브 파일을 적용하다 마지막 아카이브 파일을 적용하려고 했을 때 에러가 발생할 수도 있다. 그러한 경우는 적용해야 할 마지막 백업 데이타가 아카이브 파일로 저장되어 있는 것이 아니라 CURRENT 리두로그 파일에 저장되어 있기 때문이다. 이러한 경우에는 마지막 CURRENT 리두로그 파일의 경로와 이름을 지정해 주면된다.

 SQL> recover database using BACKUP controlfile
 c:\oracle\product\10.2.0\oradata\orcl\redo03.log

SQL> alter database open resetlogs;
 설명) 절차와 방법은 완전 복구방법과 같지만 결론적으로 이 방법은 불완전 복구다. 왜냐하면, 데이터베이스의 모든 상태정보가 저장되어 있는 컨트롤 파일이 삭제되었기 때문에 컨트롤 파일은 복구되었지만 상태정보는 복구되지 않았기 때문이다.

SQL> shutdown
SQL> exit

 설명) 불완전 복구를 수행하고 나면 반드시 이전의 마지막 백업 파일은 재사용될 수 없기 때문에 다시 오프라인 백업을 수행해야 한다. 또한, 이전의 아카이브 파일, 트레이스 파일들도 제거 해야 한다.

[C:\] cd c:\oracle\product\10.2.0\oradata\orcl
[c:\oracle\product\10.2.0\oradata\orcl] copy *.* c:\backup
[C:\] copy c:\oracle\product\10.2.0\db_1\database\INITorcl.ora c:\backup
[C:\] del c:\oracle\product\10.2.0\db_1\database\archive\*.arc


3. 모든 컨트롤 파일과 특정 데이터 파일이 유실된 경우
 설명) 모든 컨트롤 파일에 장애가 발생하면 더 이상 오라클 데이터베이스를 사용할 수 없다. 이러한 현상은 불완전 복구방법을 사용한다. 마지막 오프라인 백업된 파일로부터 모든 컨트롤 파일과 장애가 발생한 데이터 파읾나을 현재 경로로 재설치한다.

[C:\] copy c:\backup\*.ctl c:\oracle\product\10.2.0\oradata\orcl\*.ctl
[C:\] copy c:\backup\users01.dbf c:\oracle\product\10.2.0\oradata\orcl

[C:\] sqlplus /nolog
SQL> startup mount
SQL> recover database using BACKUP controlfile

 설명) 여러 개의 아카이브 파일을 적용하다 마지막 아카이브 파일을 적용하려고 했을 때 에러가 발생할 수도 있다. 이러한 경우는 적용해야 할 마지막 백업 데이터가 아카이브 파일로 저장되어 있는 것이 아니라, CURRENT 리두로그 파일에 저장되어 있기 때문이다. 이러한 경우에는 마지막 CURRENT 리두로그 파일의 경로와 이름을 지정해 준다.

SQL> recover database using BACKUP controlfile

c:\oracle\product\10.2.0\oradata\orcl\redo03.log

SQL> alter database open resetlogs;
 설명) 절차와 방법은 완전 복구방법과 같지만 결론적으로 이 방법은 불완전 복구이다.
         왜냐하면, 데이터베이스의 모든 상태정보가 저장되어 있는 컨트롤 파일이 삭제되었기 때문에
         컨트롤 파일은 복구되었지만 상태정보가 복구되지 않았기 때문이다.

SQL> shutdown
SQL> exit

 설명) 불완전 복구를 수행하고 나면 반드시 이전의 마지막 백업 파일은 재사용될 수 없기 때문에 다시 오프라인 백업을 수행해야 한다. 또한, 이전의 아카이브 파일, 트레이스 파일들도 제거 해야 한다.

[C:\] cd c:\oracle\product\10.2.0\oradata\orcl
[c:\oracle\product\10.2.0\oradata\orcl] copy *.* c:\backup\.
[C:\] copy c:\oracle\product\10.2.0\db_1\database\INITorcl.ora c:\backup\.
[C:\] del c:\oracle\product\10.2.0\db_1\database\archive\*.arc


참조) '오라클 ACE가 해설하는 ORACLE Backup&Recovery' (저: 주종면)

반응형
반응형


1. 사용자 실수로 테이블을 Drop한 경우

SQL> host date
SQL> host time
 설명) 현재 날짜와 시간을 기록해둔다.

SQL> drop table scott.emp cascade constraints;
SQL> select * from scott.emp;
<Error 발생>

 설명) 이전에 오프라인 백업된 파일들 중에 모든 데이터 파일들만 해당 경로에 재설치한다.
         반드시 데이터 파일들만 재설치하여야 하며 컨트롤 파일과 리두로그 파일들은 정상적으로 사용 가능한 상태이므로 재설치할 필요없다.

SQL> shutdown immediate
SQL> exit
[C:\] cd c:\backup
[C:\backup] copy *.dbf c:\oracle\product\10.2.0\oradata\orcl\.
  설명) 반드시 모든 데이터 파일들만 재설치 요망

[C:\backup] sqlplus /nolog
SQL> conn sys/oralce as sysdba;
SQL> startup mount
SQL> recover database until time '2011-03-06:18:00:00'
<Archive 적용>

SQL> alter database open resetlogs;
 설명) 불완전 복구가 수행되었으면 데이터베이스를 resetlog 옵션을 사용하여 open하라.
         불완전 복구에 의한 복구작업 시에는 반드시 resetlog 옵션을 사용하여야 한다.
         현재 데이터베이스는 과거 emp 테이블이 삭제되기 이전 상태로 복구된 상태이다.
         그런데 컨트롤 파일과 리두로그 파일은 복구작업을 수행하기 이전의 현 상태에 대한 정보를 가지고 있기 때문에 시점이 일치하지 않는 문제점이 발생하게 된다. 결국 이 상태에서는 데이터베이스를 정상적으로 open할 수 없기 때문에 resetlog 옵션을 사용하여 모든 상태정보를 초기화할 수 밖에 없다.

SQL> archive log list
SQL> shutdown immediate
SQL> exit

[C:\] cd c:\oracle\product\10.2.0.\oradata\orcl
[C:\] copy *.* c:\backup\.
 설명) 관련된 모든 데이터 파일, 컨트롤 파일, 리두로그 파일, 파라미터 파일들을 오프라인 백업하라.

[C:\] del c:\oracle\product\10.2.0\db_1\database\archive\*.arc
 설명) 불완전 복구에 의해 데이터베이스의 모든 상태정보들이 초기하되면 이전까지 생성되었던 아카이브 파일들도 이젠 더 이상 필요 없는 파일들이 된다. 아카이브 파일들은 사용 가능한 마지막 오프라인 백업 파일 이후에 생성된 것들만 사용 가능하므로 초기화된 현재시점에서는 이전의 아카이브 파일은 사용될 수 없다.


2. Inactive 상태의 리두로그 파일이 유실된 경우

  여러 개의 리두로그 파일들 중에 LGWR 프로세스에 의해 현재 쓰이고 있는 리두로그 파일을 CURRENT 리두로그 파일이라고 하며 나머지 리두로그 파일을 INACTIVE 리두로그 파일이라고 한다. 이 시나리오는 INACTIVE 리두로그 파일에 장애가 발생한 경우 복구하는 방법과 절차이다.

SQL> select * from v$log where stauts='INACTIVE';
SQL> host dir c:\oracle\product\10.2.0\oradata\orcl
SQL> host del c:\oracle\product\10.2.0\oradata\orcl\redo03.log
 설명) redoo3.log 파일은 INACTIVE 상태인 리두로그 파일 중 하나이다.

[C:\] sqlplus /nolog
SQL> conn sys/oralce as sysdba;
SQL> @moredept.sql

alter system switch logfile;
insert into scott.dept values(1, 'IT', 'KOREA');
insert into scott.dept values(2, 'OPS', 'KOREA');
insert into scott.dept values(3, 'HR', 'KOREA');
alter system switch logfile;
insert into scott.dept values(4, 'IT', 'FRANCE');
insert into scott.dept values(5, 'OPS', 'FRANCE');
insert into scott.dept values(6, 'HR', 'FRANCE');
alter system switch logfile;
insert into scott.dept values(7, 'IT', 'TOKYO');
insert into scott.dept values(8, 'OPS', 'TOKYO');
insert into scott.dept values(9, 'HR', 'TOKYO');
commit;
select count(*) from scott.dept;

SQL> exit

 설명) 아카이브 모드에서 INACTIVE 상태의 리두로그 파일이란 사용자의 INSERT, UPDATE, DELETE 작업을 수행하면 발생하는 백업 데이터들을 저장하는 공간이다. 즉, 이 공간에 백업 데이터들은 이미 아카이브 파일로 백업된 상태이기 때문에 더 이상 사용될 수 없더라도 데이터에 대한 복구작업은 수행할 필요가 없다.

 다만, 계속적인 INSERT, UPDATE, DELETE 작업은 수행해야 함으로 유실된 리두로그 파일을 재생성하여 준다면 복구작업은 끝나게 된다.


[C:\] sqlplus /nolog
SQL> conn sys/oralce as sysdba;
SQL> shutdown aboart
SQL> startup

<Error 발생>

SQL> select * from v$logfile;
 설명) 실제 리두로그 파일은 유실되었지만 데이터베이스 내의 상태정보에 해당 파일이 여전히 사용 가능한 상태로 출력된다.

SQL> alter database drop logfile group 3;
 설명) INACTIVE 상태의 리두로그 파일에 대한 복구는 이전 정보를 모두 삭제한 후 재생성하는 방법이다.

SQL> select * from v$logfile;
 설명) 해당 리두로그 파일이 삭제된 것을 확인한다.

SQL> alter database add logfile group 3 'c:\oracle\product\10.2.0\oradata\orcl\redo03.log' size 51201K;
 설명) 유실된 redo03.log 파일의 복구는 관련된 정보를 삭제한 후 재생성하는 방법이다. 원본 리두로그 파일을 생성한다.

SQL> select * from v$logfile;
 설명) 유실된 INACTIVE 상태의 리두로그 파일이 재생성되었는지 확인한다.

SQL> alter database open;
 설명) 유실된 리두로그 파일에 대한 재생성이 완료되었으면 오라클 서버를 시작한다.


참조) '오라클 ACE가 해설하는 ORACLE Backup&Recovery' (저: 주종면)
 
 


반응형