Проблеми с rollback segment
3 отговора
179 прегледа
Проблеми с 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.
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.
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.
Виж следното (взел съм го от 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.
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
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
Re: Проблеми с rollback segment
Благодаря много и за двата отговора!
За сажаление rollback segment-а не мога да го пипам, а да не гожорим за саздажането на нов. Аз сам Developer, а не DBA и нямам достап до тези неща.
Идеята за COMMIT на малки порции ми хареса много, та за това се спрях на нея. Сега правя COMMIT на всеки 1000 реда и всичко приваршва нормално за около 3-4 минути.
За сажаление това трябваше да го направя с PL/SQL скрипт, което спорред архитекта ни не било добра идея, защото ни ограничавало само с Oracle. Така или иначе работи ...
За сажаление rollback segment-а не мога да го пипам, а да не гожорим за саздажането на нов. Аз сам Developer, а не DBA и нямам достап до тези неща.
Идеята за COMMIT на малки порции ми хареса много, та за това се спрях на нея. Сега правя COMMIT на всеки 1000 реда и всичко приваршва нормално за около 3-4 минути.
За сажаление това трябваше да го направя с PL/SQL скрипт, което спорред архитекта ни не било добра идея, защото ни ограничавало само с Oracle. Така или иначе работи ...