Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pekerjaan Oracle DBMS tidak berjalan

Ini adalah salah satu pertanyaan Penjadwal yang paling umum ditanyakan. Berikut kami daftar beberapa masalah umum dan solusinya.

1) job_queue_processes mungkin terlalu rendah (ini adalah masalah yang paling umum) Nilai job_queue_processes membatasi jumlah total tugas dbms_scheduler dan dbms_job yang dapat dijalankan pada waktu tertentu. Untuk memeriksa apakah ini masalahnya, periksa nilai saat ini dari job_queue_processes denganSQL> pilih nilai dari v$parameter where name='job_queue_processes';Kemudian periksa jumlah menjalankan jobsSQL> pilih count() from dba_scheduler_running_jobs;SQL> pilih count( ) dari dba_jobs_running;

Jika ini masalahnya, Anda dapat meningkatkan parameter menggunakan SQL> ubah set sistem job_queue_processes=1000;

2) max_job_slave_processes mungkin terlalu rendahJika parameter ini bukan NULL maka akan membatasi berapa banyak pekerjaan dbms_scheduler yang dapat dijalankan pada satu waktu. Untuk memeriksa apakah ini masalahnya, periksa nilai saat ini menggunakan SQL> pilih nilai dari dba_scheduler_global_attributewhere attribute_name='MAX_JOB_SLAVE_PROCESSES';Kemudian periksa jumlah pekerjaan yang berjalanSQL> pilih count(*) from dba_scheduler_running_jobs;

Jika ini masalahnya, Anda dapat menambah jumlahnya atau hanya NULL menggunakan SQL> exec dbms_scheduler.set_scheduler_attribute('max_job_slave_processes',null)

3) sesi mungkin terlalu rendah Parameter ini membatasi jumlah sesi setiap saat. Setiap pekerjaan Penjadwal membutuhkan 2 sesi. Untuk memeriksa apakah ini masalahnya, periksa nilai saat ini menggunakanSQL> pilih nilai dari v$parameter where name='sessions';Kemudian periksa jumlah sesi saat ini menggunakanSQL> pilih count(*) from v$session;

Jika angkanya terlalu dekat, Anda dapat meningkatkan maksimum menggunakan SQL> mengubah set sistem job_queue_processes=200;

4) Apakah Anda baru saja menerapkan patch pembaruan zona waktu atau memutakhirkan basis data ke versi dengan informasi zona waktu yang lebih baru? Jika Anda melewatkan langkah apa pun saat memperbarui informasi zona waktu, pekerjaan mungkin tidak berjalan. Untuk memeriksa apakah ini masalahnya, coba lakukanSQL> pilih * dari sys.scheduler$_job;andSQL> pilih * dari sys.scheduler$_window;dan pastikan semuanya selesai tanpa kesalahan.

Jika muncul peringatan zona waktu, terapkan kembali pemutakhiran atau patch zona waktu dan pastikan untuk mengikuti semua langkah.

5) Apakah database berjalan dalam mode terbatas? Jika database berjalan dalam mode terbatas maka tidak ada pekerjaan yang akan berjalan (kecuali jika Anda menggunakan 11g dan menggunakan atribut ALLOW_RUNS_IN_RESTRICTED_MODE). Untuk memeriksa ini, gunakan SQL> pilih login dari v$instance;

Jika login dibatasi, Anda dapat menonaktifkan mode terbatas menggunakan SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;

6) Apakah pekerjaan dijadwalkan untuk dijalankan pada instance yang sedang down?

Anda dapat memeriksanya dengan melihat apakah instance_id disetel untuk pekerjaan tersebut (periksa tampilan dba_scheduler_jobs), dan jika demikian, Anda harus memeriksa apakah instance tersebut aktif.

7) Apakah pekerjaan dijadwalkan untuk dijalankan pada layanan yang belum dimulai pada setiap instance?

Anda dapat memeriksanya dengan memeriksa job_class apa yang ditunjuk oleh pekerjaan dan kemudian memeriksa apakah kelas tersebut menunjuk ke suatu layanan. Jika ya, pastikan layanan telah dimulai setidaknya pada satu instans yang berjalan. Anda dapat memulai layanan pada instans menggunakan dbms_service.start_service.

8) Apakah Manajer Sumber Daya berlaku dengan rencana sumber daya yang membatasi?

Jika rencana sumber daya terbatas berlaku, pekerjaan penjadwal mungkin tidak memiliki sumber daya yang cukup dialokasikan sehingga tidak dapat dijalankan. Anda dapat memeriksa rencana sumber daya apa yang berlaku dengan melakukan

SQL> pilih nama dari V$RSRC_PLAN;

Jika tidak ada rencana yang berlaku atau rencana yang berlaku adalah INTERNAL_PLAN maka pengelola sumber daya tidak berlaku. Jika pengelola sumber daya berlaku, Anda dapat menonaktifkannya dengan melakukan

SQL>mengubah set sistem resource_manager_plan ='';

9) Apakah Penjadwal telah dinonaktifkan? Ini bukan tindakan yang didukung tetapi ada kemungkinan seseorang telah melakukannya. Untuk memeriksa doSQL ini> pilih nilai dari dba_scheduler_global_attribute where attribute_name='SCHEDULER_DISABLED'

Jika kueri ini mengembalikan TRUE maka Anda dapat memperbaikinya menggunakan SQL> exec dbms_scheduler.set_scheduler_attribute('scheduler_disabled','false');

Alasan mengapa pekerjaan bisa terlambat

1) Hal pertama yang harus diperiksa adalah zona waktu pekerjaan dijadwalkan dengan SQL> pilih pemilik, nama_pekerjaan, tanggal_run_berikutnya dari dba_scheduler_jobs;

Jika pekerjaan berada di zona waktu yang salah, mereka mungkin tidak berjalan pada waktu yang diharapkan. Jika next_run_date menggunakan offset zona waktu absolut (seperti+08:00) alih-alih zona waktu bernama (seperti AS/PACIFIC) maka pekerjaan mungkin tidak berjalan seperti yang diharapkan jika penghematan siang hari berlaku - pekerjaan mungkin berjalan satu jam lebih awal atau terlambat.

2) Bisa jadi pada saat pekerjaan dijadwalkan untuk dijalankan, salah satu dari beberapa batasan di atas mungkin telah tercapai untuk sementara sehingga menyebabkan pekerjaan tertunda. Periksa apakah batas di atas cukup tinggi dan jika mungkin periksa selama waktu tersebut pekerjaan sedang tertunda.

3) Salah satu kemungkinan alasan bahwa salah satu batas di atas mungkin terkena adalah bahwa jendela pemeliharaan mungkin telah berlaku. Jendela pemeliharaan adalah jendela OracleScheduler milik grup jendela bernamaMAINTENANCE_WINDOW_GROUP. Selama jendela pemeliharaan terjadwal, beberapa tugas pemeliharaan dijalankan menggunakan tugas. Ini dapat menyebabkan salah satu batas yang tercantum di atas tercapai dan pekerjaan pengguna tertunda. Lihat panduan admin untuk info lebih lanjut tentang ini (bab 24).

Untuk mendapatkan daftar maintenance windows gunakan SQL> pilih * from dba_scheduler_wingroup_members;

Untuk melihat kapan windows dijalankan gunakan SQL> pilih * from dba_scheduler_windows;

Untuk memperbaikinya, Anda dapat meningkatkan batas atau menjadwal ulang jendela pemeliharaan agar berjalan pada waktu yang lebih nyaman.

Mendiagnosis Masalah lain

Jika tidak ada yang berhasil, berikut beberapa langkah lebih lanjut yang dapat Anda ambil untuk mencoba mencari tahu apa yang terjadi.

1) Periksa apakah ada kesalahan dalam log peringatan. Jika database mengalami masalah dalam mengalokasikan memori atau kehabisan ruang disk atau terjadi kesalahan fatal lainnya, Anda harus menyelesaikannya terlebih dahulu. Anda dapat menemukan lokasi log peringatan dengan menggunakan SQL> pilih nilai dari v$parameter di mana name ='background_dump_dest';Log peringatan akan berada di direktori ini dengan nama yang dimulai dengan "alert".

2) Periksa apakah file lacak koordinator pekerjaan dan jika ya, periksa apakah ada kesalahan. Jika ini ada, itu akan terletak di direktori 'background_dump_dest' yang dapat Anda temukan seperti di atas dan akan terlihat seperti SID-cjq0_nnnn.trc . Jika ada kesalahan di sini, mereka mungkin menunjukkan mengapa pekerjaan tidak berjalan.

3) Jika salah satu di atas menunjukkan bahwa tablespace SYSAUX (tempat penjadwal menyimpan tabel loggingnya) penuh, Anda dapat menggunakan prosedur dbms_scheduler.purge_log untuk menghapus entri log lama.

4) Lihat apakah ada jendela yang sedang terbuka. Jika ada, Anda dapat mencoba menutupnya untuk melihat apakah itu membantu .

SQL> select * from DBA_SCHEDULER_GLOBAL_ATTRIBUTE where 
attribute_name='CURRENT_OPEN_WINDOW';
SQL> exec DBMS_SCHEDULER.close_window ('WEEKNIGHT_WINDOW');

5) coba jalankan pekerjaan run-once sederhana dan lihat apakah itu berjalan

SQL>begin
dbms_scheduler.create_job (
job_name => 'test_job',
job_type => 'plsql_block',
job_action => 'null;',
enabled => true);
end;
/
SQL> -- wait a while
SQL> select * from user_scheduler_job_run_details where job_name='TEST_JOB';

6) Jika tugas run-once sederhana tidak berjalan, Anda dapat mencoba memulai ulang penjadwal sebagai berikut.

SQL> exec dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED', 'TRUE');
SQL> alter system set job_queue_processes=0;
SQL> exec dbms_ijob.set_enabled(FALSE);
SQL> 
SQL> alter system flush shared_pool;
SQL> alter system flush shared_pool;
SQL>
SQL> exec dbms_ijob.set_enabled(TRUE);
SQL> alter system set job_queue_processes=99;
SQL> exec dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED', 'FALSE');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. FNDCPASS &AFPASSWD

  2. Mencoba mendapatkan hasil dalam satu baris menggunakan sql?

  3. konfigurasikan Django dengan masalah basis data Oracle 11g

  4. Pl/SQL Penanganan Pengecualian Prosedur Bersarang

  5. Bagaimana menemukan tiga gaji tertinggi di tabel emp di oracle?