Oracle - كيف تعمل المعاملة ومقطع التراجع ومعلمة التراجع؟

StackOverflow https://stackoverflow.com/questions/190693

  •  07-07-2019
  •  | 
  •  

سؤال

أنا لست محترفًا في إدارة الأعمال، وأواجه صعوبة في فهم عملية إدارة المعاملات في Oracle.

مما فهمته من خلال قراءتي لبعض الصفحات ذات المظهر الموثوق على الإنترنت (أبرزها هذا ملاحظة AskTom -- لكن لا تهتم بالتعليقات)، عند تنفيذ معاملة ما، تكون البيانات الجديدة كذلك لا تم الإبلاغ عنها في كتلة البيانات الفعلية حتى الآن، ولكنها تظل مسجلة في مقطع التراجع.عندما يصدر شخص ما تحديدًا على البيانات، أو عند مرور UNDO_RETENTION ثانية - أيًا من هذين الحدثين يحدث أولاً -، تتم كتابة البيانات الجديدة (وعندها فقط) على كتل البيانات.

لكن أحد الأشخاص في شركتنا، من المفترض أنه على دراية، أخبرني مؤخرًا بالعكس:ووفقا له، عندما يتم ارتكاب معاملة، البيانات الجديدة يكون تتم كتابتها على الفور على كتل البيانات، وتحتفظ مساحة جدول التراجع/التراجع بالبيانات القديمة لمدة UNDO_RETENTION ثانية.تظل هذه البيانات القديمة متاحة خلال هذا الوقت للوصول إليها من خلال الاستعلامات التي تم إطلاقها على شبكات SCN قبل المعاملة.

إذًا، ما الذي يحدث بالفعل داخل Oracle، وهل يمكنك تقديم مراجع لعمل نسخة احتياطية من ردك؟

نحن نستخدم أوراكل 9.2.0.8.

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

الكثير لتغطيته هنا!الشخص في شركتك على حق بشكل أساسي، باستثناء أن التغييرات مكتوبة على كتلة البيانات في الذاكرة كما تم صنعها، حتى قبل ارتكابها؛ويتم كتابتها على القرص بشكل مستقل تمامًا عن وقت الالتزام (ربما قبل ذلك، وربما بعده، وليس كجزء من عملية الالتزام أبدًا).

1) لا علاقة لـ UNDO_RETENTION بوقت كتابة تغييراتك على كتلة البيانات، سواء في الذاكرة أو على القرص.يتحكم UNDO_RETENTION في مدة استمرار البيانات اللازمة للتراجع عن التغيير بعد إجراء التغيير.والغرض من ذلك هو أن الاستعلامات الأخرى أو المعاملات القابلة للتسلسل والتي بدأت قبل التزامك قد لا تزال ترغب في تلك البيانات.مرجع: http://download.Oracle.com/docs/cd/B19306_01/server.102/b14231/undo.htm#sthref1477

2) عند إجراء تحديث، يتم تعديل كتل البيانات الموجودة في الذاكرة.قد يتم أو لا يتم كتابتها على القرص (على ما أعتقد حتى قبل الالتزام)؛يتم ذلك من خلال عملية الخلفية.كما تتم كتابة معلومات الإعادة إلى المخزن المؤقت لسجل الإعادة.يتم إنشاء التراجع وتخزينه في مقطع التراجع.

3) عند الالتزام، تتأكد Oracle من كتابة معلومات الإعادة على القرص، وتضع علامة على بيانات التراجع على أنها ملتزمة.لكنه لا يكتب كتل البيانات التي تم تغييرها في الذاكرة إلى القرص، ولا يعود ويضع علامة على كل كتلة على أنها ملتزمة.هذا هو جعل الالتزام في أسرع وقت ممكن.مرجع: http://download.Oracle.com/docs/cd/B19306_01/server.102/b14220/transact.htm#sthref628

4) سيتم وضع علامة على كتل البيانات الموجودة في الذاكرة على أنها ملتزمة إما عند كتابتها على القرص بواسطة عملية الخلفية، أو في المرة التالية التي يتم استخدامها فيها (بواسطة SELECT أو أي عملية أخرى).هذا ما تناقشه مذكرة AskTom.لا يتعلق الأمر بما إذا كانت التغييرات التي أجريتها على البيانات مكتوبة في الكتلة أم لا؛يتعلق الأمر بما إذا تم وضع علامة عليها على أنها ملتزمة في الكتلة نفسها.

نصائح أخرى

ما أفهمه هو (في الأساس) لاحقًا، هذا الرابط لديه التفاصيل.

لا يلزم كتابة كتل البيانات، بل يتم تحديثها فقط في المخزن المؤقت، وقد تتم أو لا تتم كتابتها على القرص.يجب كتابة الإعادة على القرص قبل متابعة الالتزام.

أنا أيضا أصوت للنسخة الثانية على أساس
هذا وصلة (وهو Oracle 10.2، ولكن أعتقد أنه لا يزال ينطبق على 9.2 أيضًا).

انها تقول:"بعد تنفيذ المعاملة، لم تعد هناك حاجة إلى التراجع عن البيانات لأغراض التراجع أو استرداد المعاملة.ومع ذلك، لأغراض القراءة المتسقة، قد تتطلب الاستعلامات طويلة الأمد معلومات التراجع القديمة هذه لإنتاج صور قديمة لكتل ​​البيانات.

و

"عند تمكين إدارة التراجع التلقائي، تكون هناك دائمًا فترة احتفاظ حالية للتراجع، وهي الحد الأدنى من الوقت الذي تحاول فيه Oracle Database الاحتفاظ بمعلومات التراجع القديمة قبل الكتابة فوقها."

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top