Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> understanding rollback segments
hi all,
I thought I understood how rollback segments worked, but now I'm not sure. Can someone explain what is happening here...
I simply want to copy a table ...
The "obvious":
CREATE TABLE foo AS SELECT * FROM bar;
Didn't seem right. If foo is big, I thought the rollback segments would blow if I tried it.
Intead I tried this PL/SQL ...
declare cursor c1 is select .... from bar; c_rec c1%ROWTYPE; ctr number ; begin open c1; loop fetch c1 into c_rec; exit when c1%notfound; ctr := ctr + 1; insert into foo values ( c_rec.xxxx, c_rec.yyyy, c_rec.zzzz ); if ctr > 1000 then commit; ctr := 0; end if; end loop; close c1; commit; end;
ie. I am trying to copy the table by inserting rows into the new table 1000 at a time, and commiting.
But I still get an error "ROLLBACK SEGMENT cannot be extended".
I thought that, by doing regular commits, the rollback segment would reuse the extents in the segment, rather than continue to allocate more extents. Why is this happening? No-one else was using the database when I was doing this.
I have found another solution using exp/imp, but I'd really like to know what it is I misunderstand about the above approach.
Many thanks for any help.
Dave. Received on Wed Apr 23 1997 - 00:00:00 CDT