Oracle
 sql >> база данни >  >> RDS >> Oracle

Какво е Отмяна и повторение в базата данни на Oracle

Много хора често ми задават въпроси

Какво е Отмяна и повторение в базата данни на Oracle ? Какво използва?

Опитвам се да разсея всички съмнения относно това тук в публикацията

Какво е Отмяна в Oracle?

Отмяната се съхранява в пространството за таблици „Отмяна“ в базата данни. Тя съхранява предишните стойности на променените блокове данни всеки път, когато издаваме израз за вмъкване, актуализиране или изтриване (операция DML). Когато издаваме какъвто и да е оператор на DML, променените блокове се съхраняват в буферния кеш и предишните стойности за тези променени блокове в сегментите UNDO. Всеки път, когато издадем команда ROLLBACK, тя използва сегмента за отмяна за връщане към предишната стойност.

Това е точно като отмяна в Notepad или Microsoft word

Отмяната за изтриване е повече за това за вмъкване. Това е така, защото отмяната за изтриване   всъщност е повторното вмъкване на целия ред. Така че той има запазени стойности за всяка от колоните на реда, за да може да „отмени“ изтриването.
Обратно, отмяната за вмъкване е изтриване на реда от ROWID – което не трябва да запазва стойностите се изтриват.

Отмяната също ни предоставя  последователността на четене на потребител, тъй като той може да вижда само предишните стойности, докато транзакцията не бъде ангажирана. За да обясня, бих дал един пример

Потребител A стартира курсора за избор върху таблицата в момент t . Курсорът ще работи известно време

Потребител Б започва да актуализира същата таблица в момент t’.

Сега потребител А трябва да получи прочетената последователна версия на таблицата в момент t. Но блоковете се актуализират  от потребител Б след известно време.

Така Oracle използва сегменти за отмяна, за да възстанови предишното изображение на  актуализация за тези блокове от сегменти за отмяна, за да получи последователните изгледи на четене

Отмяната не се унищожава непосредствено след комит или връщане назад, тъй като ще се използват в механизма за последователно четене.

Те се използват и в заявки за ретроспекция, за да се видят старите заети данни, като се използва отмяна на възстановяване.

Колко време се съхраняват данни за отмяна в базата данни?
Oracle предоставя гъвкавост за това колко дълго трябва да се съхраняват данните за отмяна с помощта на параметъра undo_retention. Можем да настроим параметъра undo_management на автоматичен, за да може Oracle да управлява отмяната на задържането (по подразбиране) или дори да зададем тази стойност ръчно и стойността й трябва да бъде по-голяма от времето, необходимо за най-дълго изпълняваната заявка във вашата база данни. В 11 g нататък Oracle настрои този параметър автоматично според размера на пространството за таблици за отмяна

Какво е транзакция ?
Транзакцията е колекция от изрази на езика за манипулиране на данни SQL (DML), третирани като логическа единица.
Неуспехът на който и да е израз води до „отмяна на транзакцията“. Ако всички изрази се обработват, SQLPlus или програмното приложение ще издаде COMMIT, за да направи промените в базата данни постоянни. Транзакциите се извършват имплицитно, ако потребителят прекъсне връзката с Oracle нормално.
Ненормалните прекъсвания водят до връщане на транзакцията. Командата ROLLBACK се използва за отмяна (не завършване) на транзакция, която е в напредък.

Какво е повторение в Oracle?

Redo означава записване на извършените работи, за да не се загуби работата. REDO регистрите се използват при възстановяване. Всеки път, когато го вмъкнем в базата данни, тя прави следните неща

  1. Вмъкнете реда в буфера
  2. генерирайте отмяната в буфера
  3. Напишете промените за повторно изпълнение, т.е. вмъкнете редове в регистрационните файлове за повторно изпълнение
  4. Запишете промените за повторно изпълнение за сегменти за отмяна в регистрационните файлове за повторно изпълнение

Така че всяка DML операция, извършена в базата данни, се записва в регистрационните файлове за повторно изпълнение с цел възстановяване

Възстановяването първо се записва в буфера на регистрационния файл за повторно изпълнение в SGA. Процесът на записване на регистрационни файлове (LGWR) записва тези промени от „буфер на дневник за повторно изпълнение“ в регистрационни файлове за повторно изпълнение на диска

Регистрите за повторение помагат при възстановяване на всяка загуба на данни поради човешка грешка, грешка на ОС, повреда на твърдия диск.

Регистраторите за повторно изпълнение са от решаващо значение  за работата на базата данни, тъй като осигуряват толерантност на грешки.

Преди да запише промените в таблиците  във файла с данни, Oracle първо запише буфера за повторно изпълнение във файла с регистрационни файлове за повторно изпълнение.

имаме опция за липса на регистрация за определени операции  да не генерираме буфери за повторно изпълнение.

Как работят регистрационните файлове за повторение
Сървърът на Oracle последователно записва всички промени, направени в базата данни, в буфера на дневника за повторно изпълнение. Записите за повторно изпълнение се записват от буфера на дневника за повторно изпълнение в една от онлайн групите регистрационни файлове за повторно изпълнение, наречена текущата онлайн група регистрационни файлове за повторно изпълнение от процеса LGWR. LGWR записва при
следните ситуации:
• Когато транзакция се извършва
• Когато буферът на журнала за повторно изпълнение стане пълен с една трета
• Когато има повече от мегабайт променени записи в буфера на дневника за повторно изпълнение
• Преди DBWn да запише модифицирани блокове в кеша на буфера на базата данни във файловете с данни
Регистрациите за повторни действия се използват по цикличен начин. Всяка група регистрационни файлове за повторно изпълнение се идентифицира с пореден номер на регистрационния файл, който се презаписва всеки път, когато регистрационният файл се използва повторно. LGWR записва в онлайн регистрационните файлове за повторно изпълнение последователно. Когато текущата онлайн група регистрационни файлове за повторно изпълнение е попълнена, LGWR започва да пише до следващата група. Това се нарича превключвател на регистрационния файл. Когато последният наличен онлайн регистрационен файл за повторно изпълнение е попълнен, LGWR се връща към първата група онлайн
регистрационни файлове и започва да пише отново.

Сродни статии

как да намеря сесия, генерираща много redo
променете регистрационния файл за превключване на системата v/s archive log current
пресъздайте регистрационни файлове за повторно изпълнение в базата данни на Oracle
въпроси за интервю за старши Oracle dba


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Състояние на риска при анализ на налягането в паметта

  2. C# параметризирани заявки за Oracle - сериозна и опасна грешка!

  3. Преобразуване на Long в Varchar2

  4. грешка при липсваща ключова дума в оператора на oracle CASE WHEN sql

  5. Оптимален начин за ИЗТРИВАНЕ на определени редове от Oracle