alter rollback segment KDMS_ROLL online;
<참고> 1. 생성 후 오라클 shutdown 후 startup 시
KDMS_ROLL은 offline으로 설정됨.
2. 이를 항상 online으로 시작하게하려면,
initSID.ora파일의 rollback_segments 에 kdms_roll을 추가.
2. 롤백 세그먼트 삭제
alter rollback segment kdms_roll offline;
drop rollback segment kdms_roll;
drop tablespace kdm_roll;
<참고> 1. initSID.ora파일의 rollback_segments 에 kdms_roll을 추가하면
삭제 후 오라클 shutdown 후 startup 시 기동되지 않음.
2. 롤백 세그먼트 삭제 후 initSID.ora파일의
rollback_segments 에 kdms_roll을 삭제.
몇 번 에러인가요?
혹시 1555번 에러인가요?
(오라클 에러 관련해서는, 에러 번호를 같이 남겨 주시면 답변 받으시는데도 도움이 될 듯 합니다.)
데이터베이스 삭제를 하다 보면.. 자연스레 많은 양의 롤백'할' 내용이 쌓이기 마련이죠. 오라클의 경우 입출력무결성보장 모드를 바꿔봐도 큰 차이는 없을것이고.. 이는 하드의 여유공간과는 직접 관련은 없는 것으로 압니다. 오라클 DB의 설정에 잡아놓은 리두 로그 공간을 다 잡아먹어서 못쓴다는 뜻이니까요.
트랜잭션이 길게 늘어질 수록 발생확률이 높을테니깐, 삭제 작업 중간 중간에 commit을 때려주는게 도움이 될 거구요.
오라클 8 대의 제품에서는, DB설정은 오라클 홈 디렉토리 및의 admin 디렉토리에서 찾으시면 됩니다. 대개..
[홈디렉토리]/admin/[DB명]/pfile/init[DB명].ora 이런식으로 되어 있을겁니다.
거기서 db_log_buffer 나 db_block_buffer 등을 변경해주시되.. 너무 크게 잡아주면 오히려 서버가 감당을 못하는 사태가 벌어질 수 있으니 적당히..
(DB는 왠만하면 끄고 하셔야겠죠?)
그리고 transactions_per_rollback_segment ..이런 옵션도 있고.. 거기 나오는 튜닝 옵션들 하나씩 읽어보면서 잘 생각해보시면 될겁니다.
select * from v$parameter 해보시면 init.ora에서 발견할 수 있는 파라미터들이 나오는데.. issys_modifiable 필드에 deferred인가? 그놈 나오는 거 빼고는, 아마 DB를 멈춘채로 변경작업해야 할겁니다.
ROLLBACK SEGMENT 크기를 증가하여 재생성하는 방법
===============================================
ROLLBACK SEGMENT 는 LONG TRANSACTION 을 수행하면 크게 되는 경우가 있다.
확장된 ROLLBACK SEGMENT 는 줄어들지 않게 되므로(OPTIMAL을 지정하지 않는 경우)
주기적으로 재생성하여 TABLESPACE의 FREE SPACE 영역을 확보한다.
1. ROLLBACK SEGMENT 를 OFFLINE 시킨다.
ROLLBACK SEGMENT 를 OFFLINE
시키기 위해서는 그 ROLLBACK SEGMENT 가 INACTIVE 상태이여야 하므로 모든
TRANSACTION 을 종료하고 ROLLBACK SEGMENT r01-r04를 OFFLINE 시켜야 한다.
SELECT usn, xacts FROM V$ROLLSTAT;
SELECT * FROM v$rollname;
을 하여 OFFLINE하고자 하는 ROLLBACK SEGMENT의 XACTS 컬럼을 확인하여
이 값이 0일때만 OFFLINE 하도록 한다.
XACTS는 그 ROLLBACK SEGMENT를 현재 사용하고 있는 ACTIVE TRANSACTION의
수이다.
SQL> alter rollback segment r01 offline;
SQL> alter rollback segment r02 offline;
** r03 ~ r04 도 같은 방법으로 OFFLINE 함.
2. ROLLBACK SEGMENT를 DROP한다.
SQL> drop rollback segment r01;
SQL> drop rollback segment r02;
** r03 ~ r04 도 같은 방법으로 DROP 함.
3. ROLLBACK SEGMENT 를 생성한다. SYSTEM ROLLBACK 이외에 모든 ROLLBACK
SEGMENT 를 DROP 한 경우는 SYSTEM TABLESPACE 에 ROLLBACK SEGMENT 를 한 개
이상 생성 후에 NON-SYSTEM TABLESPACE에 ROLLBACK SEGMENT를 생성해야 한다.
SQL> create rollback segment r02 tablespace rbs
storage(initial 512k next 512k minextents 2);
** r03 ~ r04 도 같은 방법으로 생성함.
RBS TABLESPACE도 재생성하여 datafile 크기도 증가시켜 다시 만들고자 한다면
다음과 같이 한다.
----------------------------------------------------------------
1. RBS TABLESPACE를 DROP 하기 위해서는 1-2 과 같이 ROLLBACK SEGMENT를
전부 OFFLINE한다.
ROLLBACK SEGMENT 를 OFFLINE할 수 있는 다른 방법은
ORACLE_HOME/dbs/init<ORACLE_SID>.ora 화일의 rollback_segments=r01..
부분을 #으로 COMMENT 처리하고 DB를 다시 startup 시키면 된다.
SQL> drop rollback segment r01;
SQL> drop rollback segment r02;
** r03 ~ r04 도 같은 방법으로 DROP 함.
2. RBS TABLESPACE를 DROP 한다.
SQL> drop tablespace RBS including contents;
SQL> ! rm /oracle/dbs/rbs<ORACLE_SID>.dbf
말씀하신 문제에 대한 오라클 에러 설명은 이렇군요.
01562, 00000, "failed to extend rollback segment number %s"
Cause: Failure occurred when trying to extend rollback segment
Action: This is normally followed by another error message that caused
the failure. Shutdown, restart and then take appropriate action for
the error the caused the failure. If starting up the system
again doesn't solve the problem, it is possible that there is
an active transaction in the rollback segment and the system
can't roll it back for some reasons. Check the trace file
generated by the PMON process for more information.
01628, 00000, "max # extents (%s) reached for rollback segment %s"
Cause: Tried to extend rollback segment already at maxexents value
Action: If maxextents storage parameter less than system allowable max,
raise this value. Consider upping the pctincrease value as well.
발생한 에러 내용으로 종합해 볼 때 롤백세그먼트 영역을 확장하려다 에러가 났는데, 그것은 허용된 롤백 세그먼트 블록의 최대에 도달했기 때문이라는 결론으로 지워질 수 있겠네요.
제 생각으로는, init.ora파일의, 블록 설정이 min이나 midium에 있으면, 한 단계 높여보시는게 어떨까 싶구요..
그와는 별도로, 수행하는 작업에서, commit없이 너무 오랫동안 트랜잭션을 끌지 마시고 최대한 주기적으로 commit을 수행해주시면 이런 에러가 안나지 않을까 싶네요.
create tablespace KDM_ROLL
datafile '/AIMS/DBF/kdm_roll.dbf' size 200M reuse autoextend on
next 50M maxsize 300M;
create rollback segment KDMS_ROLL
tablespace KDM_ROLL
storage( initial 200M
next 50M
maxextents 3);
alter rollback segment KDMS_ROLL online;
<참고> 1. 생성 후 오라클 shutdown 후 startup 시
KDMS_ROLL은 offline으로 설정됨.
2. 이를 항상 online으로 시작하게하려면,
initSID.ora파일의 rollback_segments 에 kdms_roll을 추가.
2. 롤백 세그먼트 삭제
alter rollback segment kdms_roll offline;
drop rollback segment kdms_roll;
drop tablespace kdm_roll;
<참고> 1. initSID.ora파일의 rollback_segments 에 kdms_roll을 추가하면
삭제 후 오라클 shutdown 후 startup 시 기동되지 않음.
2. 롤백 세그먼트 삭제 후 initSID.ora파일의
rollback_segments 에 kdms_roll을 삭제.
롤백 테이블스페이스를 늘려주는 방법인데...
저도 해본지가 오래되어서... 걍 참고만하세요...
아니면 오라클 홈페이지가셔서 한번찾아보세요...
잘못하면 오라클이 부팅이 안될수도 있으니깐... 조심하세요...
즐프하세요...^^