Проблеми с rollback segment

3 отговора 179 прегледа
#1

Проблеми с rollback segment

Oracle ми дава следните грешки, когато се опитам да направя INSERT на около 400 000 реда от една таблица в друга:

ORA-01562: failed to extend rollback segment number 4
ORA-01650: unable to extend rollback segment R03 by 128 in tablespace RBS

Използвам следните query-та за целта:
1. TRUNCATE TABLE bindingdataformat
2. INSERT INTO bindingdataformat (select id,bindingid,userid,name,to_date(value,'MM/DD/YYYY') value from bindingdata where name in ('Start Date','End Date'))
3. COMMIT

Има ли начин да кажа на Oracle да не използва rollback segment за INSERT-а?

Така или иначе винаги правя COMMIT накрая. * се стратират автоматично по едно и също време всеки ден и няма да ми се налага да правя ROLLBACK.

Отговор
в отговор на decker #2

Re: Проблеми с rollback segment

Не може ли да да добавиш данните на части и да издаваш commit между отделните части - тогава rollback сегментът ще е достатъчен, ако обемът на данните е подходящ. Това може да свърши работа, ако е единичен случай, но ако често трябва да добавяш големи обеми данни ще се наложи да разшириш rollback tablespace.

Виж следното (взел съм го от Oracle8i Error Messages).

Ето какво предлагат в документацията:

ORA-01562 failed to extend rollback segment number string

Cause: Failure occurred when trying to extend rollback segment.

Action: This is normally followed by another error message that caused the
failure. You may take the rollback segment offline to perform maintenance. Use
SELECT SEGMENT_NAME FROM DBA_ROLLBACK_SEGS WHERE
SEGMENT_ID=string (where string is the segment number from the message)
to determine the rollback segment name. Then use the ALTER ROLLBACK
SEGMENT OFFLINE command to take the rollback segment offline.


ORA-01650 unable to extend rollback segment string by string in tablespace
string

Cause: Failed to allocate an extent for rollback segment in tablespace.

Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or
more files to the tablespace indicated.

Отговор
в отговор на decker #3

Re: Проблеми с rollback segment

Decker,

Mojesg da si poigraesh s 'insert /*+ append */ into .... select .... from ... i da setnesh tablicata v koito inservash s NOLOOGING atribut. Ako imash indexi vurhu tazi tablica ne sum siguren che ste ti pomogne ( ne si spomniam tochno ). Mene ako pitah napvari si edin rollback segment( nesto kato RBS_BIG ) koito dostatuchno goliam taka che da niama problemi s inserta i predi da insetnesh nakarai inserta da polzva tozi raollback segment SET TRANSACTION USE ROLLBACK_SEGMENT RBS_BIG naprimer.

Pozdravi

Отговор
в отговор на decker #4

Re: Проблеми с rollback segment

Благодаря много и за двата отговора!

За сажаление rollback segment-а не мога да го пипам, а да не гожорим за саздажането на нов. Аз сам Developer, а не DBA и нямам достап до тези неща.

Идеята за COMMIT на малки порции ми хареса много, та за това се спрях на нея. Сега правя COMMIT на всеки 1000 реда и всичко приваршва нормално за около 3-4 минути.

За сажаление това трябваше да го направя с PL/SQL скрипт, което спорред архитекта ни не било добра идея, защото ни ограничавало само с Oracle. Така или иначе работи ...

Отговор