Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 11117|Jawab: 0

[Sumber] Fitur Baru ORACLE 11g - Memungkinkan kunci DDL menunggu kunci DML

[Salin tautan]
Diposting pada 26/11/2014 15.54.15 | | |
Saya juga menulisnya sebelumnyaORAKELArtikel Fitur Baru 11G, sekarangORAKEL11g telah menjadi arus utamaORAKELversi database, pahami dan pelajariORAKELFitur-fitur baru 11G sangat penting, begitu juga sayaORAKELUntuk pemula fitur baru 11G, saya ingin berbagi proses dan pengalaman belajar saya di sini.
Artikel ini terutama mencatat bahwa:ORAKELFitur baru 11g yang memungkinkan kunci DDL menunggu kunci DML, yang juga merupakan tema yang dibagikan oleh Bapak Zhang Leyi (kamus) di acara ACOUG pada 30 Juni.
Dalam versi sebelum 11g, secara default, kunci DDL tidak menunggu kunci DML, dan jika Anda melakukan operasi DDL pada tabel dengan kunci DML, itu akan segera mengembalikan kegagalan (kecuali untuk SESI yang sama), mari kita lakukan percobaan sederhana, masukkan data ke dalam tabel STREAM dalam SESSION1, jangan kirimkan, saat ini tabel STREAM akan memiliki kunci DML, dan jalankan operasi TRUNCATE table STREAM dalam SESSION2, dan itu akan segera mengembalikan kegagalan:
SESSION1 >Masukkan ke dalam aliran pilih * dari DBMimmen; 10 baris dibuat. SESSION2 >aliran meja yang dipotong; memotong aliran tabel * ERROR di baris 1: ORA-00054: sumber daya sibuk dan perolehan dengan NOWAIT ditentukan atau batas waktu kedaluwarsa di versi 11g,ORAKELDiperkenalkan parameter DDL_LOCK_TIMEOUT, memungkinkan kunci DDL menunggu kunci DML, yang mengontrol waktu kunci DDL menunggu kunci DML, dalam detik, nilai defaultnya adalah 0, yaitu kunci DDL tidak menunggu kunci DML, nilai maksimum adalah 1 juta, yaitu 11,5 hari, parameter ini dapat diatur secara global atau di tingkat SESI.
SESSION2 >tampilkan parameter ddl_lock_timeout NILAI JENIS NAMA ----------------------- ----------- ------ ddl_lock_timeout bilangan bulat 0 SESSION2 >set sesi ubah ddl_lock_timeout=2000000; ERROR: ORA-00068: nilai tidak valid 2000000 untuk parameter ddl_lock_timeout, harus antara 0 dan 1000000 Berikut ini menunjukkan efek dari parameter DDL_LOCK_TIMEOUT berikut, dan juga mengambil tabel STREAM di atas sebagai contoh, tabel STREAM saat ini masih memiliki kunci DML, di SESSION2 akan DDL_LOCK_ TIMEOUT diatur ke 60 detik, dan kemudian operasi TRUNCATE dijalankan, dan kegagalan tidak akan segera dikembalikan, tetapi akan menunggu selama 60 detik, dan jika kunci DL tabel STREAM tidak dilepaskan dalam waktu 60 detik, itu akan mengembalikan kegagalan.
SESSION2 >ubah set sesi ddl_lock_timeout=60; Sesi diubah. SESSION2 >atur waktu pada SESSION2 >aliran meja yang dipotong; --Pada titik ini, SESSION2 menangguhkan, menunggu SESSION1 melepaskan kunci DML dalam waktu 60 detik, mengembalikan gagal setelah 60 detik memotong aliran tabel * KESALAHAN di baris 1: ORA-00054: sumber daya sibuk dan perolehan dengan NOWAIT ditentukan atau batas waktu kedaluwarsa Berlalu: 00:01:00.01 Munculnya parameter DDL_LOCK_TIMEOUT sangat menyederhanakan pengoperasian DBA, misalnya, kita ingin menambahkan bidang ke tabel, tetapi tabel ini memiliki banyak operasi DML, dan kita tidak dapat menggunakan metode ALTER SYSTEM KILL SESSION untuk mengakhiri operasi ini, jadi jika kita ingin menambahkan bidang ke tabel ini, kita perlu melakukan operasi menambahkan bidang berkali-kali, atau menulis skrip untuk melakukan pekerjaan ini, dan sekarang kita memiliki DDL_ LOCK_TIMEOUT parameter, kita hanya perlu mengatur nilai parameter ini sedikit lebih besar, dan kita tidak perlu khawatir tentang mengeksekusi SQL, mari kita demonstrasikan proses ini di bawah ini.
SESSION2 menambahkan bidang:
SESSION2 >Ubah aliran tabel tambahkan jpg_path varchar2(255) default '/home/oracle/'; 此时挂起,等待STREAM表的DML锁释放,SESSION1提交释放DML锁后,SESSION2操作便成功了。
SESSION1 >berkomitmen; Komitmen selesai. SESSION2 >Ubah aliran tabel tambahkan jpg_path varchar2(255) default '/home/oracle/'; Table altered. SESSION2 >select * from stream; ID IDENTIFIER PIC_NO JPG_PATH ---------- --------------- ------ --------------- 1 18-0220-003 1 /home/oracle/ 2 18-0221-003 1 /home/oracle/ 3 18-0221-003 2 /home/oracle/ 4 18-0221-003 3 /home/oracle/ 5 18-0223-005 1 /home/oracle/ 6 18-0223-005 2 /home/oracle/ 7 18-0223-005 3 /home/oracle/ 8 18-0223-005 4 /home/oracle/ 9 18-0223-005 5 /home/oracle/ 10 18-0223-005 6 /home/oracle/ 10 rows selected.




Mantan:Pernyataan SQL praktis: estimasi tanggal
Depan:Oracle ORA-12541: TNS: tidak ada solusi kesalahan pendengar
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com