หลังจากชั่วโมงแห่งความผิดพลาดจากการสนับสนุนอย่างเป็นทางการของ Oracle ฉันได้ทำสิ่งนี้ด้วยตัวเองและแก้ไขมัน ฉันกำลังบันทึกไว้ที่นี่ในกรณีที่คนอื่นมีปัญหานี้
ในการทำสิ่งนี้คุณต้องเป็นผู้ใช้ oracle:
$ su - oracle
ขั้นตอนที่ 1: คุณต้องดูบันทึกการแจ้งเตือน มันไม่ได้อยู่ใน / var / log ตามที่คาดไว้ คุณต้องเรียกใช้โปรแกรมอ่านบันทึกของ Oracle:
$ adrci
ADRCI: Release 11.2.0.1.0 - Production on Wed Sep 11 18:27:56 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
ADR base = "/u01/app/oracle"
adrci>
สังเกตว่า ADR base นั่นไม่ใช่การติดตั้ง คุณต้องเห็นบ้านเพื่อให้คุณสามารถเชื่อมต่อกับบ้านที่คุณใช้
adrci> show homes
ADR Homes:
diag/rdbms/cci/CCI
diag/tnslsnr/cci/listener
diag/tnslsnr/cci/start
diag/tnslsnr/cci/reload
CCI เป็นบ้าน ตั้งว่า
adrci> set home diag/rdbms/cci/CCI
adrci>
ตอนนี้คุณสามารถดูบันทึกการแจ้งเตือน มันจะดีมากถ้าพวกเขาอยู่ใน / var / log เพื่อให้คุณสามารถแยกบันทึกได้อย่างง่ายดาย เพียงแค่หยุดต้องการและจัดการกับอินเทอร์เฟซนี้ อย่างน้อยคุณก็สามารถปรับ (และฉันหวังว่าคุณจะมีบัฟเฟอร์เลื่อน):
adrci> show alert -tail 100
เลื่อนกลับจนกว่าคุณจะเห็นข้อผิดพลาด คุณต้องการข้อผิดพลาดครั้งแรก ข้อผิดพลาดใด ๆ หลังจากข้อผิดพลาดแรกน่าจะเกิดจากข้อผิดพลาดแรก ในกรณีของฉันข้อผิดพลาดแรกคือ:
ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.
นี่คือสาเหตุที่เกิดจากการทำธุรกรรม Oracle ไม่ได้ถูกออกแบบมาให้ใช้ หากคุณส่งข้อมูลจำนวนมากเข้ามามันจะบันทึกบันทึกธุรกรรม สิ่งเหล่านั้นจะเข้าไปในพื้นที่ไฟล์กู้คืน เมื่อเต็มแล้ว (เต็ม 50GB ในกรณีนี้) จากนั้น Oracle ก็ตาย จากการออกแบบหากมีสิ่งใดเกิดความสับสน Oracle จะตอบสนองโดยการปิดระบบ
มีวิธีแก้ปัญหาสองแบบวิธีที่เหมาะสมและแบบรวดเร็วและสกปรก สิ่งที่รวดเร็วและสกปรกคือการเพิ่ม db_recovery_file_dest_size ก่อนอื่นให้ออกจาก adrci
adrci> exit
ตอนนี้ไปที่ sqlplus โดยไม่ต้องเปิดฐานข้อมูลเพียงแค่ติดตั้ง (คุณสามารถทำได้โดยไม่ต้องติดตั้งฐานข้อมูล แต่ฉันติดตั้งอยู่ดี)
$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 11 18:40:25 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> startup mount
ตอนนี้คุณสามารถเพิ่ม db_recovery_file_dest_size ปัจจุบันของคุณเพิ่มเป็น 75G ในกรณีของฉัน:
SQL> alter system set db_recovery_file_dest_size = 75G scope=both
ตอนนี้คุณสามารถปิดและเริ่มต้นอีกครั้งและข้อผิดพลาดก่อนหน้านี้ควรจะหายไป
การแก้ไขที่เหมาะสมคือการกำจัดไฟล์กู้คืน คุณทำเช่นนั้นโดยใช้ RMAN ไม่ใช่ SQLPLUS หรือ ADRCI
$ rman
Recovery Manager: Release 11.2.0.1.0 - Production on Wed Sep 11 18:45:11 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
RMAN> backup archivelog all delete input;
หากคุณมีRMAN-06171: not connected to target database
ลองใช้rman target /
แทนที่จะเป็นเพียงแค่rman
รอเป็นเวลานานและ archivelog ของคุณ (ที่ใช้พื้นที่ทั้งหมด) จะหายไป ดังนั้นคุณสามารถปิด / เปิดฐานข้อมูลของคุณและกลับมาทำธุรกิจได้
ALTER DATABASE OPEN
และข้อผิดพลาดหลังจากนั้น