"ORA-03113: end-of-file di saluran komunikasi" saat startup

22

Saya telah membaca posting di sini, tentang dukungan Oracle, dan di mana pun saya dapat menemukan selama tiga hari terakhir dan saya sudah menyerah pada masalah ini ...

Basis data Oracle digantung. Pematian basis data berlangsung selama beberapa jam dan kemudian berhenti. Itu tidak mau restart. Server telah dimulai kembali. Oracle dimulai kembali. Selangkah demi selangkah: startup nomount works, mengubah basis data mount works, mengubah database open return ORA-03113. Ini semua di localhost - bukan melalui jaringan. Mesin tidak memiliki firewall apa pun yang berjalan.

Adakah yang tahu bagaimana cara melewati kesalahan ORA-03113 ini? Saya telah berbicara di telepon dengan dukungan di India selama 4,5 jam terakhir dan saya belum menemukan orang yang membantu.

kainaw
sumber
1
Posting kutipan dari log peringatan dengan ALTER DATABASE OPENdan kesalahan setelah itu.
Mindaugas Riauba
1
Cari (grep) semua log peringatan antara startup yang sukses terakhir dan startup yang gagal saat ini dan cari ALTER SYSTEM SET dalam semua rentang waktu ini. Mungkin seseorang mengubah beberapa parameter instance dengan cara yang tidak standar.
kubanczyk

Jawaban:

35

Setelah beberapa jam salah arah dari dukungan resmi Oracle, saya terjun sendiri dan memperbaikinya. Saya mendokumentasikannya di sini kalau-kalau ada orang lain yang memiliki masalah ini.

Untuk melakukan semua ini, Anda harus menjadi pengguna oracle:

$ su - oracle

Langkah 1: Anda perlu melihat log peringatan. Itu tidak ada di / var / log seperti yang diharapkan. Anda harus menjalankan program membaca 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>

Perhatikan basis ADR. Itu bukan instal. Anda perlu melihat rumah sehingga Anda dapat terhubung ke rumah yang Anda gunakan.

adrci> show homes
ADR Homes:
diag/rdbms/cci/CCI
diag/tnslsnr/cci/listener
diag/tnslsnr/cci/start
diag/tnslsnr/cci/reload

CCI adalah rumah. Atur itu.

adrci> set home diag/rdbms/cci/CCI
adrci>

Sekarang, Anda dapat melihat log peringatan. Akan sangat bagus jika mereka berada di / var / log sehingga Anda dapat dengan mudah menguraikan log. Berhentilah menginginkan dan berurusan dengan antarmuka ini. Setidaknya Anda dapat mengekor (dan saya harap Anda memiliki buffer scrollback):

adrci> show alert -tail 100

Gulir ke belakang sampai Anda melihat kesalahan. Anda ingin kesalahan PERTAMA. Kesalahan apa pun setelah kesalahan pertama kemungkinan disebabkan oleh kesalahan pertama. Dalam kasus saya, kesalahan pertama adalah:

ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.

Ini disebabkan oleh transaksi. Oracle tidak dirancang untuk digunakan. Jika Anda memasukkan banyak data ke dalamnya, ia menyimpan log transaksi. Itu masuk ke area file pemulihan. Setelah itu penuh (50GB penuh dalam hal ini). Kemudian, Oracle mati. Secara desain, jika ada masalah, Oracle akan merespons dengan mematikan.

Ada dua solusi, yang tepat dan yang cepat dan kotor. Yang cepat dan kotor adalah meningkatkan db_recovery_file_dest_size. Pertama, keluar dari adrci.

adrci> exit

Sekarang, masuklah ke sqlplus tanpa membuka basis data, cukup memasangnya (Anda mungkin bisa melakukan ini tanpa memasang basis data, tapi saya tetap memasangnya).

$ 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

Sekarang, Anda dapat meningkatkan db_recovery_file_dest_size Anda saat ini, meningkat menjadi 75G dalam kasus saya:

SQL> alter system set db_recovery_file_dest_size = 75G scope=both

Sekarang, Anda dapat mematikan dan memulai lagi dan kesalahan sebelumnya harus hilang.

Perbaikan yang tepat adalah menyingkirkan file pemulihan. Anda melakukannya menggunakan RMAN, bukan SQLPLUS atau 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;

Jika sudah RMAN-06171: not connected to target database, daripada mencoba menggunakannya, rman target /bukan hanyarman

Tunggu lama dan archivelog Anda (yang menggunakan semua ruang itu) akan hilang. Jadi, Anda dapat mematikan / memulai database Anda dan kembali berbisnis.

kainaw
sumber
Saya tidak menemukan perintah adrci di server linux oracle saya. Bagaimana cara menginstalnya? Terima kasih.
3
Terima kasih! Berhasil. Tetapi perintah yang benar untuk rman adalah: export ORACLE_SID=my_oracle//rman target /
Untuk menambahkan 2 sen saya - Anda dapat memeriksa artikel ini di sini, yang memiliki perintah yang dapat Anda gunakan RMAN, untuk menghapus area arsip, serta beberapa hal lainnya. Hati-hati, karena juga akan menghapus titik pemulihan jika DB terbuka untuk beberapa alasan (bit terakhir): the1403.github.io/RMAN-cleanup-logs
g00dy