오라클의 모든 storage를 갖는 object들은 data가 늘어나면서
처음 생성시 잡아놓은 initial size를 넘어서면 extent를 발생시킵니다. 그것도 물론 maxextents 로 설정한 임계치까지이고 그 object가
존재하고 있는 tablespace의 크기 안에서이지만요.
아시다시피 rollback segment도 oracle에서 size를 갖는 object로서
initial 값을 넘으면 당연히 extent를 일으킵니다.
처음에 crdb 할때 default로 rollback segment를 생성하는데
이건 size가 무척 작지요. 그래서 보다 크고, 많은 수의
rollback segment를 생성하는게 보통입니다.
물론 크기와 갯수는 발생하는 transaction에 따라 좌우되겠지요.
발생한 에러에 대한 조치는
alter rollback segment <rollback segment명> shrink to <size>M(K);
이란 명령으로 발생한 extent를 줄여놓고,
위에 말씀드린 대로 새로운 rollback segment를 생성하여 사용하세요.
새로운 rollback segment를 생성하고 나서 init file에 그 리스트를
추가하고 DB를 shutdown 하고 다시 startup 하십시오.
물론 default로 생성되어있던 rollback segment들은
alter rollback segment <rollback segment 명> offline;
drop rollback segment <rollback segment 명>;
으로 drop 하는게 좋겠지요.
rollback segment 생성하는 명령은 아시겠지요?
아, 그리고 rollback segment만을 위한 tablespace를 생성하여
사용하시는게 좋을겁니다.
두서없이 적어놓아 오히려 혼란스러우실지도 모르겠군요.
도움이 되었으면 합니다.
> 안녕하세요.
> 김효원이라고 합니다.
>
> mysql만 쓰다가 oracle을 쓰는 중인데,
> 갑자기 delete가 안 됩니다.
>
> qeury에는 이상이 없구요..
>
> ERROR at line 1:
> ORA-01562: failed to extend rollback segment number 4
> ORA-01650: unable to extend rollback segment R03 by 64 in tablespace R
> BS
>
> 이런 에러가 뜨는군요.
>
> tablespace가 모자라는가 해서, 100메가 추가를 했는데도 마찬가지입니다.
>
>
> 그럼, 답변 부탁드립니다.
|