Saya baru-baru ini pindah dari menjadi pengembang Java ke DBA yang sebenarnya di perusahaan kami. Saya sedang mempelajari tali, untuk berbicara, tentang menjadi DBA (yang sebenarnya agak posisi baru bagi perusahaan kami).
Saya telah melihat beberapa skrip tempat kami menjalankan perintah DB2 BIND bind_file other_parameters
.
Saya bingung dengan apa yang dilakukan ini. Saya telah meminta DBA kami yang lain, tetapi mereka tidak dapat menjelaskannya kepada saya dengan cara yang masuk akal. Saya telah melihat Pusat Informasi IBM untuk perintah BIND , tetapi juga tidak jelas bagi saya.
Saya tahu mengikat entah bagaimana penting, karena kita seharusnya menjalankan REORGS, menjalankan STATS, dan BIND pada database kita secara teratur untuk membantu kinerja.
Karena saya masih DBA n00b, saya bertanya-tanya apakah ada yang bisa memberikan "Apa yang BINDING for Dummies?" penjelasan?
EDIT : Dalam edisi untuk jawaban di bawah ini, saya baru-baru ini menemukan artikel developerworks berikut: "Paket DB2: Konsep, contoh, dan masalah umum: Memahami sistem DB2 dan paket aplikasi pengguna" . Sangat membantu. Khusus untuk paket sistem, yang sering kami temui.
20130905 EDIT : Entri blog ini oleh DB2 DBA Ember Crooks sangat populer untuk mengikat dan apa artinya. Dia juga menulis entri sebelumnya tentang paket yang tidak ditemukan dan kapan harus menaikkan nomor CLIPKG untuk bind dan apa artinya. Artikel-artikel ini dijelaskan dengan sangat baik. Pada dasarnya suka membaca "DB2 Binding and Packages for Dummies" jika hal seperti itu ada.
Jawaban:
Saya melihat tautan Info Center Anda ke LUW 9.7, dan Anda menyebutkan bahwa Anda telah memprogram di Jawa, tetapi sebagian besar pengalaman yang saya miliki dengan pengikatan adalah dengan DB2 pada Mainframe dengan COBOL. Jadi, Anda mungkin perlu menyesuaikan sedikit penjelasan (tetapi umumnya, konsepnya harus sama).
Saya percaya bahwa mengikat hanya relevan ketika Anda mengkompilasi program yang menyertakan SQL tertanam yang dikompilasi (SQL terikat secara statis). Jika, misalnya, Anda menggunakan JDBC, Anda tidak diharuskan menjalankan BIND. Pengemudi JDBC akan
PREPARE
pernyataan secara dinamis.Ketika Anda menjalankan program melalui pra-kompiler DB2,
PRECOMPILE
menjalankan program Anda, dan jika ia menemukan SQL yang disematkan (dalam COBOL, ini adalah blok pernyataan yang beralih dariEXEC SQL
keEND-EXEC.
), itu dengan hati-hati merobek SQL keluar, dan menggantinya dengan panggilan ke antarmuka COBOL-DB2. Setelah ini, ada dua output dariPRECOMPILE
, sumber COBOL yang telah menghapus semua embedded SQL yang dihapus (A
mulai sekarang), danDBRM
yang berisi semua SQL yang telah dihapus (B
).Precompile memang melakukan beberapa pemeriksaan sintaksis dasar, tetapi perlu diketahui bahwa pemeriksaan hanya didasarkan pada deklarasi tabel Anda dalam program. Itu tidak dilampirkan ke DB2 untuk memverifikasi ini!
Kedua file ini benar-benar terpisah, dan ketika Anda menjalankan program COBOL, ia harus menemukan
A
danB
yang dihasilkan pada waktu yang sama.Pada titik ini,
A
dikompilasi dan dihubungkan dengan kompiler COBOL standar ke dalamload module
dan ditempatkan di pustaka beban untuk digunakan nanti.Namun, masih banyak pekerjaan yang harus dilakukan
B
, DBRM. Di sinilahBIND
masukBIND
adalah semacam kompiler untuk kode SQL tertanam, dan output dari "kompilasi" adalah apackage
.Untuk mengikat SQL ke dalam "paket" yang dapat dieksekusi, proses BIND melampirkan DB2 dan melakukan beberapa hal:
Selama langkah terakhir, semua SQL Anda dijalankan melalui Pengoptimal, yang memperhitungkan semua statistik dan berbagai jalur yang dapat diambil mesin DB2 untuk mengambil data Anda. Kemudian ia memilih jalur yang muncul dengan biaya terendah yang terkait (dengan versi DB2 yang lebih baru [DB2 10 untuk z / OS] , ia mungkin memutuskan untuk mengambil jalur "biaya lebih tinggi", tetapi jalur "risiko lebih rendah"). Setelah path dipilih, ia dikompilasi dan menjadi sebuah paket, yang disimpan dalam katalog (Anda dapat melihat semua paket Anda saat ini dengan
SELECT * FROM SYSIBM.SYSPACKAGE
(z / OS)).Akhirnya, ada bagian terakhir yang memungkinkan program kami untuk menyatukan kembali dengan paket mereka, the
PLAN
. Anda membuat rencana dengan melakukan BIND lain (BIND PLAN
). Paket adalah kumpulan paket yang diizinkan oleh program untuk dicari guna menemukan paket yang memiliki nama yang sama. Dengan COBOL, Anda menentukan paket mana yang harus dicari program di JCL Anda.Singkatnya, kode yang dikompilasi melewati langkah-langkah ini untuk menghasilkan yang dapat digunakan
BIND PLAN
:Precompile -> Membuat DBRM (dengan C [++], precompiler mengeluarkan SQL yang sudah dikompilasi ke file HFS, yang dapat dikirim melalui program bind command-line ) -> DBRM dioptimalkan dan serangkaian jalur akses ( a
package
) dibuat -> Paket ditambahkan keBIND PLAN
, yang merupakan sekelompok paket yang memungkinkan Anda untuk membuat "jalur pencarian" untuk program Anda untuk melihat.Karena program-program ini terikat secara statis, jika statistik tabel Anda berubah secara drastis, maka jalur akses yang dipilih pengoptimal pada waktu-mengikat mungkin bukan jalan terbaik lagi, dan mengikat kembali akan memungkinkannya untuk mengevaluasi kembali SQL dan mungkin memilih jalan yang lebih baik.
Sunting (perbarui untuk komentar): Jika Anda menggunakan prosesor baris perintah, Anda dapat mengirimkan paket bind tunggal (
.bnd
), atau daftar nama file bind (.lst
). Jika Anda memasukkan daftar, nama file harus didahului dengan@
(misalnya/path/to/@packages.lst
). Di dalam file .lst, Anda dapat meletakkan setiap paket pada satu baris, atau Anda dapat memisahkannya dengan+
:sumber
.bnd
s adalah file bind, dan.lst
s adalah daftar file bind.db2ubind.lst
dan / ataudb2cli.lst
. File-file ini secara otomatis dibuat ketika database baru dibuat di server, dan file-file ini memungkinkan berbagai utilitas klien jarak jauh untuk bekerja (dukungan CLI / ODBC; DB2 CLP; utilitas impor / ekspor). Lihat tautan ini