SQL PL

Tinggalkan komentar

ujuan

PL / SQL adalah teknologi yang memungkinkan SQL Oracle untuk bertindak seperti bahasa prosedural. Menjelang akhir hari ini, Anda harus

  • Memiliki pemahaman dasar PL / SQL
  • Memahami fitur yang membedakan PL / SQL SQL dari standar
  • Memiliki pemahaman tentang elemen dasar dari sebuah program / PL SQL
  • Mampu menulis sederhana PL / SQL program
  • Memahami bagaimana kesalahan ditangani dalam PL / SQL program
  • Menyadari bagaimana PL / SQL digunakan di dunia nyata

Pengenalan

Salah satu cara untuk memperkenalkan PL / SQL untuk memulai dengan menjelaskan standar Structured Query Language, atau SQL. SQL adalah bahasa yang memungkinkan para pengguna database relasional untuk berkomunikasi dengan database secara langsung. Anda dapat menggunakan perintah SQL untuk query database dan mengubah tabel dalam database. Ketika Anda menulis pernyataan SQL, Anda mengatakan database apa yang ingin Anda lakukan, bukan bagaimana melakukannya. The query optimizer memutuskan dengan cara yang paling efisien untuk mengeksekusi pernyataan Anda. Jika Anda mengirim serangkaian pernyataan SQL ke server di SQL standar, server mengeksekusi mereka satu demi satu dalam urutan kronologis.

PL / SQL adalah bahasa prosedural’s Oracle, melainkan terdiri dari standar bahasa SQL dan berbagai macam perintah yang memungkinkan Anda untuk mengontrol eksekusi pernyataan SQL sesuai dengan kondisi yang berbeda. PL / SQL juga dapat menangani error runtime. Pilihan seperti loop dan JIKA ... MAKA memberikan laporan PL / SQL kekuatan-bahasa pemrograman generasi ketiga. PL / SQL memungkinkan Anda untuk menulis interaktif, ramah-program pengguna yang dapat melewati nilai-nilai ke dalam variabel. Anda juga dapat menggunakan beberapa paket yang telah ditetapkan, salah satu yang dapat menampilkan pesan kepada pengguna.

18 hari meliputi fitur-fitur utama dari PL / SQL:

  • Pemrogram dapat mendeklarasikan variabel yang akan digunakan selama proses pernyataan.
  • Pemrogram dapat menggunakan rutin penanganan kesalahan program mencegah dari batal tiba-tiba.
  • Pemrogram dapat menulis program interaktif yang menerima masukan dari pengguna.
  • Membagi fungsi pemrogram dapat menjadi blok-blok logis kode. Teknik pemrograman modular mendukung fleksibilitas dalam pengembangan aplikasi.
  • pernyataan SQL dapat diproses secara simultan untuk performa lebih baik secara keseluruhan.

Jenis data dalam PL / SQL

Sebagian besar data jenis ini jelas mirip, tetapi pelaksanaan masing-masing memiliki penyimpanan yang unik dan persyaratan pemrosesan internal. Saat menulis PL / SQL blok, Anda akan menyatakan variable, yang harus tipe data yang valid. The subbagian berikut dengan singkat menjelaskan jenis data yang tersedia dalam PL / SQL.

Di PL / SQL Oracle menyediakan subtipe dari tipe data. Sebagai contoh, tipe data NUMBER memiliki subtipe disebut INTEGER. Anda dapat menggunakan subtipe di / Program PL SQL Anda untuk membuat tipe data yang kompatibel dengan tipe data dalam program-program lainnya, seperti program COBOL, terutama jika Anda embedding PL / kode SQL pada program lainnya. Subtipe adalah nama alternatif hanya untuk tipe data Oracle dan karena itu harus mengikuti aturan tipe data yang terkait.


CATATAN: Seperti dalam kebanyakan implementasi dari SQL, sensitivitas kasus bukan merupakan faktor dalam sintaks dari pernyataan. PL / SQL memungkinkan baik huruf besar atau huruf kecil dengan perintah tersebut.


Jenis Data String Karakter

Karakter tipe data string dalam PL / SQL, seperti yang mungkin Anda harapkan, yaitu data jenis umum didefinisikan sebagai memiliki nilai alpha-numeric. Contoh karakter string adalah nama-nama, kode, deskripsi, dan nomor seri yang menyertakan karakter.

toko CHAR tetap-panjang karakter string. Panjang maksimum adalah 32.767 byte CHAR, meskipun sulit membayangkan seperangkat nilai-panjang tetap di meja yang begitu lama.

Sintaks:
  CHAR (max_length) 

Subtipe: KARAKTER

VARCHAR2 toko variabel-panjang karakter string. Anda biasanya pengguna VARCHAR2 bukan CHAR untuk menyimpan-panjang data variabel, seperti nama seorang individu. Panjang maksimumVARCHAR2 juga 32.767 byte.

Sintaks:
  VARCHAR2 (max_length) 

Subtipe:, STRING VARCHAR

PANJANG juga menyimpan panjang karakter string-variabel, memiliki panjang maksimum 32760 byte. PANJANG biasanya digunakan untuk menyimpan teks panjang seperti komentar, meskipunVARCHAR2 dapat digunakan juga.

Jenis Data numerik

NOMOR toko semua jenis nomor dalam database Oracle.

Sintaks:
  NOMOR (max_length) 

Anda dapat menentukan presisi data s 'NOMOR dengan sintaks berikut:

  NOMOR (presisi, skala) 

Subtipe:, DECIMAL, DOUBLE PRECISION Desember, INTEGER, INT, numerik, REAL, SMALLINT, Float

PLS_INTEGER mendefinisikan kolom yang mungkin berisi bilangan bulat dengan tanda, seperti nomor negatif.

Jenis Data Biner

Jenis data biner yang menyimpan data dalam format biner, seperti grafik atau foto. Ini tipe data termasuk RAW dan LONGRAW.

The DATE Jenis Data

DATE adalah tipe data Oracle berlaku di mana untuk menyimpan tanggal. Ketika anda mendefinisikan suatu kolom sebagai, DATE Anda tidak menetapkan panjang, karena panjang lapangan DATEtersirat. Format tanggal Oracle adalah, misalnya, 01-Oktober-97.

Boolean

Boolean menyimpan nilai-nilai berikut: TRUE, FALSE, dan NULL. Seperti DATE, Boolean tidak memerlukan parameter ketika mendefinisikan sebagai kolom atau tipe data yang variabel.

ROWID

ROWID adalah pseudocolumn yang ada di setiap tabel dalam database Oracle.. Yang ROWID disimpan dalam format biner dan mengidentifikasi setiap baris dalam tabel menggunakan Indeks ROWID s sebagai pointer ke data.

Struktur SQL / Blok PL

PL / SQL adalah bahasa terstruktur-blok, yang berarti bahwa PL / SQL program dibagi dan ditulis dalam blok logika kode. Dalam SQL / PL blok kode, proses seperti manipulasi data atau query dapat terjadi. Bagian-bagian berikut SQL / blok PL dibahas dalam bagian ini:

  • Bagian MENYATAKAN berisi definisi dari variabel, dan objek lain seperti konstanta dan kursor. Bagian ini adalah bagian opsional SQL / blok PL.
  • Bagian PROSEDUR berisi perintah bersyarat dan pernyataan SQL dan adalah tempat blok dikendalikan. bagian ini adalah wajib hanya sebagian SQL / blok PL.
  • Bagian PENGECUALIAN mengatakan PL / blok SQL bagaimana menangani kesalahan tertentu dan-yang didefinisikan pengguna pengecualian. Bagian ini adalah bagian opsional SQL / blok PL.

CATATAN: blok adalah unit logis dari PL / SQL code, mengandung setidaknya bagian yang opsional PROSEDUR dan MENYATAKAN dan bagian PENGECUALIAN.


Berikut adalah struktur dasar dari PL / SQL block:

Sintaks:
 BEGIN - opsional, menunjukkan awal MENYATAKAN blok - opsional, definisi variabel BEGIN - wajib, menunjukkan awal bagian PENGECUALIAN prosedur - opsional, menunjukkan awal bagian AKHIR pengecualian - wajib, menunjukkan bagian akhir dari prosedur AKHIR - opsional , menunjukkan akhir blok

Perhatikan bahwa hanya bagian-bagian wajib SQL / PL adalah blok BEGIN END kedua dan pertama, yang membentuk bagian PROSEDUR. Tentu saja, Anda akan memiliki laporan di antaranya. Jika Anda menggunakan BEGIN pertama, maka Anda harus menggunakan AKHIR kedua, dan sebaliknya.

Komentar

Apa yang akan program tanpa komentar? bahasa pemrograman menyediakan perintah yang memungkinkan Anda untuk menempatkan komentar dalam kode Anda, dan PL / SQL tidak terkecuali.Komentar setelah setiap baris dalam struktur blok sampel sebelumnya menjelaskan setiap perintah. Komentar diterima di PL / SQL adalah sebagai berikut:

Sintaks:
  - Ini adalah komentar satu baris. 
  / * Ini adalah 
  banyak baris komentar .* / 

CATATAN: PL / SQL secara langsung mendukung Bahasa Manipulasi Data (DML) perintah dan query database. Namun, tidak mendukung Bahasa Kamus Data (DDL) perintah. Anda biasanya dapat menggunakan PL / SQL untuk memanipulasi data dalam struktur database, tetapi tidak untuk memanipulasi struktur-struktur.


MENYATAKAN Bagian

Bagian MENYATAKAN dari sebuah blok PL / SQL kode terdiri dari variabel, konstanta, definisi kursor, dan khusus tipe data. Sebagai SQL / programmer PL, Anda dapat mendeklarasikan semua jenis variabel dalam blok kode Anda. Namun, Anda harus menetapkan tipe data, yang harus sesuai dengan kaidah Oracle dari tipe data tertentu, untuk setiap variabel yang Anda tetapkan. Variabel juga harus sesuai dengan Oracle objek penamaan standar.

Variabel Tugas

Variabel adalah nilai-nilai yang dapat berubah dalam blok / PL SQL. PL / Variabel SQL harus diberi tipe data yang valid pada deklarasi dan dapat diinisialisasi jika perlu. Contoh berikut mendefinisikan suatu set variabel di bagian blok MENYATAKAN:

  MENYATAKAN 
    pemilik char (10); 
    tablename char (30); 
    byte nomor (10); 
    hari ini tanggal; 
ANALISIS:

Bagian MENYATAKAN blok tidak dapat dijalankan dengan sendirinya. Bagian MENYATAKAN dimulai dengan pernyataan MENYATAKAN. Kemudian variabel individu didefinisikan pada baris yang terpisah.Perhatikan bahwa setiap deklarasi variabel diakhiri dengan titik koma.

Variabel dapat juga diinisialisasi pada bagian MENYATAKAN. Sebagai contoh:

  MENYATAKAN 
    char pelanggan (30); 
    fiscal_year nomor (2): = '97 '; 

Anda dapat menggunakan simbol: = untuk menginisialisasi, atau menetapkan nilai awal untuk variabel di bagian MENYATAKAN. Anda harus menginisialisasi variabel yang didefinisikan sebagai NOT NULL.

  MENYATAKAN 
    char pelanggan (30); 
    fiscal_year nomor (2): TIDAK NULL = '97 '; 
ANALISIS:

Klausa NULL TIDAK dalam definisi fiscal_year menyerupai definisi kolom dalam pernyataan CREATE TABLE.

Konstan Tugas

Konstanta didefinisikan dengan cara yang sama bahwa variabel tersebut, tetapi nilai-nilai konstan statis; mereka tidak berubah. Dalam contoh sebelumnya, fiscal_year mungkin konstan.


CATATAN: Anda harus mengakhiri setiap deklarasi variabel dengan titik koma.


Definisi kursor

kursor adalah jenis lain dari variabel dalam PL / SQL. Biasanya ketika Anda memikirkan sebuah variabel, nilai tunggal datang ke pikiran. kursor adalah variabel yang menunjuk ke sebuah baris data dari hasil query. Dalam baris hasil set-ganda, Anda perlu cara untuk menelusuri setiap record untuk menganalisis data. kursor adalah hanya itu. Ketika PL / SQL blok melihat hasil query di blok tersebut, menggunakan kursor menunjuk masing-masing kembali baris. Berikut adalah contoh dari kursor yang ditetapkan dalam PL / SQL block:

INPUT:
  MENYATAKAN 
   employee_cursor kursor adalah 
      pilih * dari karyawan; 

kursor adalah serupa dengan melihat. Dengan menggunakan loop di bagian PROSEDUR, Anda dapat gulir kursor. Teknik ini ditutupi segera.

The JENIS% Atribut

JENIS% adalah atribut variabel yang mengembalikan nilai kolom tertentu meja. Alih-alih keras-kode tipe data di / SQL Anda blok PL, Anda dapat menggunakan JENIS% untuk menjaga konsistensi data jenis dalam blok kode Anda.

INPUT:
  MENYATAKAN 
    employee_cursor kursor adalah 
      emp_id pilih, emp_name dari karyawan; 
    id_num employees.emp_id% TYPE; 
    nama% employees.emp_name JENIS; 
ANALISIS:

Id_num variabel tersebut dinyatakan memiliki tipe data yang sama seperti emp_id pada tabel KARYAWAN.% JENIS menyatakan nama variabel memiliki tipe data sama dengan emp_name kolom dalam tabel KARYAWAN.

The ROWTYPE% Atribut

Variabel tidak terbatas pada nilai-nilai tunggal. Jika Anda mendeklarasikan sebuah variabel yang berhubungan dengan kursor ditetapkan, Anda dapat menggunakan% ROWTYPE atribut untuk menyatakan tipe data dari variabel yang harus sama seperti setiap kolom dalam satu baris seluruh data dari kursor. Dalam leksikon Oracle’s atribut ROWTYPE% menciptakan variabel catatan.

INPUT:
 employee_cursor kursor MENYATAKAN adalah emp_id pilih, emp_name dari karyawan;% employee_cursor employee_record ROWTYPE;
ANALISIS:

Contoh ini menyatakan sebuah variabel yang disebut employee_record. Atribut ROWTYPE% mendefinisikan variabel ini memiliki tipe data yang sama sebagai seluruh baris data dalamemployee_cursor tersebut. Variabel dideklarasikan menggunakan atribut ROWTYPE% disebut juga variabel agregat.

The ROWCOUNT% Atribut

PL / SQL% mempertahankan atribut ROWCOUNT hitungan baris bahwa laporan SQL di blok tertentu telah diakses di kursor.

INPUT:
  MENYATAKAN 
    kursor adalah employee_cursor 
      pilih emp_id, emp_name dari karyawan; 
    : = Employee_cursor records_processed% ROWCOUNT; 
ANALISIS:

Dalam contoh ini variabel records_processed menunjukkan jumlah baris yang saat ini PL / SQL blok diakses di employee_cursor tersebut.


PERINGATAN: Hati-hati penamaan konflik dengan nama tabel ketika mendeklarasikan variabel. Misalnya, jika Anda mendeklarasikan variabel yang memiliki nama sama dengan meja yang Anda coba akses dengan PL / SQL code, variabel lokal akan didahulukan dari nama tabel.


Bagian PROSEDUR

Bagian PROSEDUR adalah wajib hanya sebagian SQL / blok PL. Ini bagian dari blok panggilan variabel dan menggunakan cursors untuk memanipulasi data dalam database,. PROSEDUR Bagian adalah utama bagian blok bersyarat mengandung pernyataan dan perintah SQL.

BEGIN … END

Dalam satu blok, pernyataan BEGIN menunjukkan awal prosedur. Demikian pula, pernyataan END menandai akhir prosedur. Contoh berikut menunjukkan struktur dasar bagian PROSEDUR:

Sintaks:
  BEGIN 
    terbuka kursor; 
    condition1; 
      statement1; 
    condition2; 
      statement2; 
    condition3; 
      statement3; 
  . 
  . 
  . 
    dekat kursor; 
  AKHIR 

Perintah Kontrol kursor

Sekarang bahwa Anda telah belajar bagaimana untuk menentukan kursor dalam SQL / blok PL, Anda perlu tahu bagaimana untuk mengakses kursor didefinisikan. Bagian ini menjelaskan perintah-perintah kontrol kursor dasar: MENYATAKAN, OPEN, FETCH dan CLOSE.

MENYATAKAN

Sebelumnya hari ini Anda belajar bagaimana menentukan kursor di bagian MENYATAKAN blok. Pernyataan MENYATAKAN termasuk dalam daftar perintah kontrol kursor.

BUKA

Sekarang bahwa Anda telah menetapkan kursor Anda, bagaimana Anda menggunakannya? Anda tidak dapat menggunakan buku ini kecuali Anda membukanya. Demikian pula, Anda tidak dapat menggunakan kursor sampai Anda membukanya dengan perintah BUKA. Sebagai contoh:

Sintaks:
  BEGIN 
    employee_cursor terbuka; 
    statement1; 
    statement2; 
    . 
    . 
    . 

  AKHIR 

FETCH

FETCH Mempopulai variabel dengan nilai-nilai dari kursor. Berikut adalah dua contoh menggunakan FETCH: Satu Mempopulai sebuah variabel agregat, dan variabel individu Mempopulai lainnya.

INPUT:
  MENYATAKAN 
    employee_cursor kursor adalah 
      emp_id pilih, emp_name dari karyawan; 
    employee_record% employee_cursor ROWTYPE; 
  BEGIN 
    employee_cursor terbuka; 
    putaran 
      mengambil employee_cursor ke employee_record; 
    loop end; 
    dekat employee_cursor; 
  AKHIR 
ANALISIS:

Contoh sebelumnya menjemput baris saat ini kursor ke employee_record variabel agregat. Menggunakan loop untuk gulir kursor. Tentu saja, blok tersebut tidak benar-benar mencapai apa pun.

  MENYATAKAN 
    employee_cursor kursor adalah 
      pilih emp_id, emp_name dari karyawan; 
    id_num employees.emp_id% TYPE; 
    nama% employees.emp_name JENIS; 
  BEGIN 
    employee_cursor terbuka; 
    putaran 
      mengambil employee_cursor ke id_num, nama; 
    loop end; 
    dekat employee_cursor; 
  AKHIR 
ANALISIS:

Contoh ini menjemput baris kursor sekarang ke dalam id_num variabel dan nama, yang didefinisikan pada bagian MENYATAKAN.

CLOSE

Bila Anda telah selesai menggunakan kursor di blok, Anda harus menutup kursor, seperti biasa menutup buku ketika Anda selesai membacanya. Perintah yang Anda gunakan CLOSE.

Sintaks:
  BEGIN 
    employee_cursor terbuka; 
    statement1; 
    statement2; 
    . 
    . 
    . 
    dekat employee_cursor; 
  AKHIR 
ANALISIS:

Setelah kursor ditutup, set hasil query itu tidak ada lagi. Anda harus membuka kembali kursor untuk mengakses terkait set data.

Laporan Bersyarat

Sekarang kita sampai ke hal yang baik – laporan bersyarat yang memberi Anda kontrol atas bagaimana Anda SQL laporan diproses. Laporan bersyarat dalam PL / SQL mirip dengan dalam bahasa generasi ketiga yang paling.

JIKA … MAKA

The JIKA ... MAKA pernyataan mungkin adalah pernyataan bersyarat paling akrab kebanyakan programmer. The JIKA ... MAKA pernyataan menentukan kinerja tindakan tertentu jika kondisi tertentu terpenuhi. Struktur dari IF ... THEN pernyataan adalah sebagai berikut:

Sintaks:
  Condition1 JIKA KEMUDIAN 
    statement1; 
  END IF; 

Jika Anda memeriksa dua kondisi, Anda dapat menulis laporan Anda sebagai berikut:

Sintaks:
  Condition1 JIKA KEMUDIAN 
    statement1; 
  ELSE 
    statement2; 
  END IF; 

Jika Anda memeriksa lebih dari dua kondisi, Anda dapat menulis pernyataan Anda sebagai berikut:

Sintaks:
  Condition1 JIKA KEMUDIAN 
    statement1; 
  ELSIF condition2 KEMUDIAN 
    statement2; 
  ELSE 
    statement3; 
  END IF; 
ANALISIS:

Contoh terakhir menyatakan: Jika condition1 terpenuhi, kemudian melakukan statement1, jika condition2 terpenuhi, kemudian melakukan statement2; dinyatakan, melakukan statement3. JIKA ... MAKA laporan mungkin juga diulang dalam laporan lain dan / atau looping.

Loop

Loop dalam SQL / blok PL memungkinkan laporan di blok tersebut untuk diproses secara terus menerus selama kondisi tertentu ada. Ada tiga jenis loop.

LOOP adalah infinite loop, yang paling sering digunakan untuk gulir kursor. Untuk mengakhiri jenis loop Anda harus menentukan kapan harus keluar. Sebagai contoh, di bergulir kursor Anda akan keluar loop setelah baris terakhir di kursor telah diproses:

INPUT:
  BEGIN 
  employee_cursor terbuka; 
  LOOP 
    FETCH employee_cursor ke employee_record; 
    EXIT KETIKA% employee_cursor NOTFOUND; 
    statement1; 
    . 
    . 
    . 
  END LOOP; 
  dekat employee_cursor; 
  END, 

NOTFOUND% adalah atribut kursor yang mengidentifikasi bila tidak ada banyak data yang ditemukan di kursor. Pintu keluar contoh sebelumnya loop bila tidak ada banyak data yang ditemukan. Jika Anda menghilangkan pernyataan dari loop, maka loop akan terus selamanya.

The WHILE-LOOP mengeksekusi perintah sementara kondisi tertentu adalah TRUE. Bila kondisi ini tidak lagi benar, loop kembali ke laporan berikutnya.

INPUT:
  MENYATAKAN 
    payment_cursor kursor adalah 
      pilih cust_id, pembayaran, total_due dari payment_table; 
    cust_id% payment_table.cust_id JENIS; 
    pembayaran% payment_table.payment JENIS; 
    total_due% payment_table.total_due JENIS; 
  BEGIN 
    payment_cursor terbuka; 
    <Pembayaran total_due LOOP WHILE 
      FETCH payment_cursor ke cust_id, pembayaran, total_due; 
      EXIT KETIKA% payment_cursor NOTFOUND; 
      masukkan ke underpay_table 
      nilai (cust_id, 'masih berhutang'); 
  END LOOP; 
    dekat payment_cursor; 
  END; 
ANALISIS:

Contoh sebelumnya menggunakan WHILE-LOOP untuk menggulir kursor dan untuk menjalankan perintah dalam loop selama kondisi pembayaran total_due <terpenuhi.

Anda dapat menggunakan FOR-LOOP di blok sebelumnya untuk secara implisit mengambil baris kursor sekarang ke dalam variabel ditetapkan.

INPUT:
  MENYATAKAN 
    payment_cursor kursor adalah 
      pilih cust_id, pembayaran, total_due dari payment_table; 
    cust_id% payment_table.cust_id JENIS; 
    pembayaran% payment_table.payment JENIS; 
    total_due% payment_table.total_due JENIS; 
  MULAI 
    payment_cursor terbuka; 
    Pay_rec UNTUK DI payment_cursor LOOP 
      JIKA pay_rec.total_due <pay_rec.payment KEMUDIAN 
        masukkan ke underpay_table 
        nilai (pay_rec.cust_id, 'masih berhutang'); 
      END IF; 
    END LOOP; 
    dekat payment_cursor; 
  END; 
ANALISIS:

Contoh ini menggunakan FOR-LOOP untuk menggulir kursor. Para FOR-LOOP adalah melakukan suatu FETCH implisit, yang dihilangkan saat ini. Juga, perhatikan bahwa atribut NOTFOUND% telah dihilangkan. Atribut ini tersirat dengan FOR-LOOP, karena itu, ini dan contoh sebelumnya menghasilkan hasil dasar yang sama.

Bagian PENGECUALIAN

Bagian PENGECUALIAN adalah bagian opsional dari setiap SQL / blok PL. Jika bagian ini dihilangkan dan kesalahan ditemui, blok akan dihentikan. Beberapa kesalahan yang mungkin tidak ditemui membenarkan penghentian segera blok, sehingga bagian PENGECUALIAN dapat digunakan untuk menangani error tertentu atau pengecualian didefinisikan pengguna secara teratur. Pengecualian dapat didefinisikan pengguna, meskipun banyak pengecualian yang telah ditetapkan oleh Oracle.

Budidaya Pengecualian

Pengecualian dibesarkan di blok dengan menggunakan perintah RAISE. Pengecualian dapat ditingkatkan secara eksplisit oleh pemrogram, sedangkan kesalahan database internal secara otomatis, atau secara implisit, dibangkitkan oleh database server.

Sintaks:
 MULAI MENYATAKAN exception_name PENGECUALIAN; BEGIN IF kondisi THEN RAISE exception_name; END IF; PENGECUALIAN KETIKA KEMUDIAN exception_name pernyataan; AKHIR; AKHIR;
ANALISIS:

Blok ini menunjukkan dasar-dasar secara eksplisit meningkatkan pengecualian. Pertama exception_name ini dideklarasikan dengan menggunakan pernyataan PENGECUALIAN. Pada bagianPROSEDUR, kecuali ditinggikan menggunakan RAISE jika kondisi tertentu terpenuhi. The RAISE kemudian referensi bagian PENGECUALIAN blok, di mana tindakan yang tepat diambil.

Penanganan Pengecualian

Contoh sebelumnya ditangani pengecualian di bagian PENGECUALIAN blok. Kesalahan dapat dengan mudah ditangani di PL / SQL, dan dengan menggunakan pengecualian, PL / SQL block dapat terus berjalan dengan kesalahan atau mengakhiri anggun.

Sintaks:
  PENGECUALIAN 
    KETIKA KEMUDIAN exception1 
      statement1; 
    KETIKA KEMUDIAN exception2 
      statement2; 
    KETIKA ORANG LAIN KEMUDIAN 
      statement3; 
ANALISIS:

Contoh ini menunjukkan bagaimana bagian PENGECUALIAN akan terlihat jika Anda memiliki lebih dari satu pengecualian. Contoh ini mengharapkan dua pengecualian (exception1 danexception2) ketika menjalankan blok ini. KETIKA ORANG LAIN memberitahu statement3 untuk mengeksekusi jika ada pengecualian lain terjadi pada saat blok sedang diproses. KETIKA ORANG LAIN memberi Anda kontrol atas setiap kesalahan yang mungkin terjadi di blok tersebut.

Mengeksekusi SQL / Blok PL

PL / SQL biasanya dibuat menggunakan editor host dan dieksekusi seperti file skrip SQL normal. PL / SQL menggunakan titik koma untuk mengakhiri setiap pernyataan di blok – dari tugas variabel untuk perintah manipulasi data. Garis miring (/) terutama terkait dengan file script SQL, tapi PL / SQL juga menggunakan garis miring untuk mengakhiri blok dalam sebuah file script. Cara termudah untuk memulai PL / SQL blok dengan mengeluarkan perintah START, disingkat STA atau @.

Anda PL / SQL script file akan terlihat seperti ini:

Sintaks:
  / * File ini disebut * proc1.sql / 
  BEGIN 
    MENYATAKAN 
      ... 
    BEGIN 
      ... 
      laporan; 
      ... 
    PENGECUALIAN 
      ... 
    END; 
  END; 
  / 

Anda jalankan Anda PL / SQL script file sebagai berikut:

  SQL> mulai proc1 atau 
  SQL> sta proc1 atau 
  SQL> @ proc1 

CATATAN: PL / SQL file script dapat dijalankan dengan menggunakan perintah START atau karakter @. PL / SQL file naskah juga dapat disebut dalam lain / PL SQL file, shell script, atau program lainnya.


Menampilkan Output untuk Pengguna yang

Terutama ketika menangani pengecualian, Anda mungkin ingin untuk menampilkan output untuk menjaga pengguna informasi tentang apa yang terjadi. Anda dapat menampilkan output untuk menyampaikan informasi, dan Anda dapat menampilkan pesan kesalahan kustom Anda sendiri, yang mungkin akan lebih masuk akal untuk pengguna dari jumlah kesalahan. Mungkin Anda ingin pengguna untuk menghubungi administrator database jika kesalahan terjadi selama pemrosesan, bukan untuk melihat pesan yang tepat.

PL / SQL tidak menyediakan suatu metode langsung untuk menampilkan output sebagai bagian dari sintaks, tetapi hal itu memungkinkan Anda untuk menelepon sebuah paket yang melayani fungsi ini dari dalam blok. Paket ini disebut DBMS_OUTPUT.

  PENGECUALIAN 
    KETIKA KEMUDIAN zero_divide 
      DBMS_OUTPUT.put_line ('ERROR: pembagi IS ZERO.. ANDA SEE DBA'); 
ANALISIS:

Oracle standar ZERO_DIVIDE adalah pengecualian. Sebagian besar kesalahan umum yang terjadi selama proses program ini akan ditetapkan sebagai pengecualian dan dibesarkan secara implisit (yang berarti bahwa Anda tidak perlu meningkatkan kesalahan pada bagian PROSEDUR blok).

Jika pengecualian ini ditemui selama pemrosesan blok, pengguna akan melihat:

INPUT:
  SQL> @ block1 

  ERROR: pembagi IS ZERO.  LIHAT DBA ANDA. 
  PL / SQL prosedur berhasil diselesaikan. 

Bukankah itu pesan tampak ramah dari:

INPUT / OUTPUT:
  SQL> @ block1 
  mulai 
  * 

  ERROR pada baris 1: 
  ORA-01476: pembagi sama dengan nol 
  ORA-06512: di baris 20 

Kontrol transaksional dalam PL / SQL

Pada 11 Hari, “Pengendalian Transaksi,” dibahas kita perintah kontrol transaksi COMMIT, ROLLBACK, dan SAVEPOINT. Perintah ini memungkinkan pemrogram untuk mengontrol kapan transaksi sebenarnya ditulis ke database, seberapa sering, dan ketika mereka harus dibatalkan.

Sintaks:
  BEGIN 
    MENYATAKAN 
      ... 
    BEGIN 
      laporan ... 
      IF kondisi THEN 
        COMMIT; 
      ELSE 
        ROLLBACK; 
      END IF; 
      ... 
    PENGECUALIAN 
      ... 
    END; 
  END; 

Hal yang baik tentang PL / SQL adalah bahwa Anda dapat mengotomatisasi penggunaan kontrol transaksional perintah daripada terus-menerus memantau transaksi besar, yang bisa jadi sangat membosankan.

Puting Semuanya Bersama

Sejauh ini, Anda telah diperkenalkan kepada PL / SQL, telah menjadi akrab dengan tipe data yang didukung, dan akrab dengan fitur-fitur utama dari SQL / blok PL. Kau tahu bagaimana cara mendeklarasikan variabel lokal, konstanta, dan kursor. Anda juga telah melihat bagaimana menanamkan SQL pada bagian PROSEDUR, memanipulasi kursor, dan menaikkan pengecualian. Ketika kursor telah dibangkitkan, Anda harus memiliki pemahaman dasar tentang bagaimana untuk menangani hal itu di bagian PENGECUALIAN blok. Sekarang Anda siap untuk bekerja dengan beberapa contoh praktis dan membuat blok dari BEGIN ke END. Pada akhir bagian ini, Anda benar-benar harus memahami bagaimana bagian-bagian dari suatu SQL / blok PL berinteraksi satu sama lain.

Contoh Tabel dan Data

Kami akan menggunakan dua meja untuk membuat PL / SQL blok. PAYMENT_TABLE mengidentifikasi pelanggan, berapa banyak ia telah membayar, dan jumlah total yang jatuh tempo.PAY_STATUS_TABLE belum berisi data. Data akan dimasukkan ke dalam PAY_STATUS_TABLE sesuai dengan kondisi tertentu dalam PAYMENT_TABLE.

INPUT:
  SQL> pilih * 
    2 dari payment_table;
OUTPUT:
  PEMBAYARAN PELANGGAN TOTAL_DUE 
  -------- -------- --------- 
  ABC 90,50 150,99 
  AAA 79,00 79,00 
  BBB 950,00 0,00 1000 
  CCC 27,50 27,50 
  DDD 350,00 500,95 
EEE         67.89     67.89
FFF        555.55    455.55
GGG        122.36    122.36
HHH         26.75      0.00
9 rows selected.
INPUT:
 SQL> describe pay_status_table
OUTPUT:
  Name                            Null?  Jenis 
 ------------------------------ --------- ----
 CUST_ID                         NOT NULL CHAR(3)
 STATUS                          NOT NULL VARCHAR2(15)
 AMT_OWED                                 NUMBER(8,2)
 AMT_CREDIT                               NUMBER(8,2)
ANALISIS:

DESCRIBE is an Oracle SQL command that displays the structure of a table without having to query the data dictionary. DESCRIBE and other Oracle SQL*Plus commands are covered on Day 20, “SQL*Plus.”

A Simple PL/SQL Block

This is how the PL/SQL script ( block1.sql ) file looks:

INPUT:
 set serveroutput pada BEGIN MENYATAKAN AmtZero PENGECUALIAN;% JENIS payment_table.cust_id cCustId; fPayment% payment_table.payment JENIS;% JENIS payment_table.total_due fTotalDue; payment_cursor kursor adalah cust_id pilih, pembayaran, total_due dari payment_table, nomor fOverPaid (8,2); fUnderPaid nomor (8,2); BEGIN payment_cursor terbuka; loop fetch payment_cursor ke cCustId, fPayment, fTotalDue; keluar ketika payment_cursor NOTFOUND%, jika (fTotalDue = 0) kemudian meningkatkan AmtZero; berakhir jika, jika (> fTotalDue fPayment) kemudian fOverPaid: = fPayment - fTotalDue; masukkan ke pay_status_table (cust_id, status, amt_credit) nilai (cCustId, 'Lebih', fOverPaid); elsif (fPayment <fTotalDue) kemudian fUnderPaid: = - fTotalDue fPayment Dibayar; masukkan ke pay_status_table (cust_id, status, amt_owed) nilai (cCustId, 'masih berhutang', fUnderPaid); menyisipkan lain ke dalam nilai-nilai pay_status_table (cCustId, 'Disetor Penuh', null, null); akhir jika; loop akhir; payment_cursor dekat; PENGECUALIAN ketika AmtZero kemudian DBMS_OUTPUT.put_line ('ERROR : jumlahnya nol.. Anda Lihat pengawas '); ketika LAIN kemudian DBMS_OUTPUT.put_line (' ERROR: Kesalahan yang tidak diketahui. Lihat DBA '); AKHIR; AKHIR; /
ANALISIS:

Bagian MENYATAKAN enam mendefinisikan variabel lokal, serta kursor yang disebut payment_cursor. Bagian PROSEDUR dimulai dengan pernyataan BEGIN kedua di mana langkah pertama adalah untuk membuka kursor dan mulai loop. Perintah FETCH melewati nilai saat ini di kursor ke dalam variabel-variabel yang didefinisikan dalam bagian MENYATAKAN. Selama loop menemukan catatan di kursor, pernyataan itu membandingkan jumlah yang dibayar oleh pelanggan dengan jumlah yang jatuh tempo. Kelebihan dan kekurangan bayar dihitung sesuai dengan jumlah yang dibayar, dan kami menggunakan yang dihitung jumlah memasukkan nilai-nilai ke dalam PAY_STATUS_TABLE. loop itu berakhir, dan kursor menutup. Bagian PENGECUALIAN menangani kesalahan yang mungkin terjadi selama pemrosesan.

Sekarang jalankan PL / SQL script file dan melihat apa yang terjadi.

INPUT:
  SQL> @ block1
OUTPUT:
  Input dipotong ke 1 karakter 
  ERROR: Zero jumlahnya.  Lihat atasan Anda. 
  PL / SQL prosedur berhasil diselesaikan. 

Sekarang Anda tahu bahwa jumlah yang tidak benar muncul di kolom total karena, Anda dapat memperbaiki jumlah dan menjalankan script lagi.

INPUT / OUTPUT:
  SQL> update payment_table 
    2 set total_due = 26,75 
    3 mana cust_id = 'HHH'; 

  1 baris diperbarui. 

  SQL> commit; 

  Komit lengkap. 

  SQL truncate table> pay_status_table; 

  Meja dipotong. 

CATATAN: Contoh ini memotong PAY_STATUS_TABLE untuk membersihkan meja isi; jangka berikutnya pernyataan itu akan terisi kembali tabel. Anda mungkin ingin menambahkan pernyataan TABLE truncate ke / SQL Anda blok PL.


INPUT / OUTPUT:
  SQL> @ block1 

  Input dipotong ke 1 karakter 
  PL / SQL prosedur berhasil diselesaikan. 

Sekarang Anda dapat memilih dari PAY_STATUS_TABLE dan melihat status pembayaran setiap pelanggan.

INPUT / OUTPUT:
  SQL> pilih * 
    2 dari pay_status_table 
    3 order menurut status; 
  STATUS PELANGGAN AMT_OWED AMT_CREDIT 
  -------- -------------- --------- ----------- 
  FFF Lebih Dibayar 100,00 
  AAA Disetor Penuh 
  CCC Disetor Penuh 
  Eee Disetor Penuh 
  GGG Disetor Penuh 
  HHH Disetor Penuh 
  ABC masih berhutang 60,49 
  DDD masih berhutang 150,95 
  BBB masih berhutang 50,00 

  9 baris yang dipilih. 
ANALISIS:

Sebuah baris dimasukkan ke dalam PAY_STATUS_TABLE untuk setiap baris data yang terdapat dalam PAYMENT_TABLE. Jika pelanggan membayar lebih dari jumlah yang jatuh tempo, maka perbedaan itu masukan ke dalam kolom amt_credit. Jika pelanggan membayar kurang dari jumlah utang, maka sebuah entri dibuat di kolom amt_owed. Jika pelanggan dibayar penuh, maka tidak ada jumlah dolar yang dimasukkan ke dalam salah satu dari dua kolom.

Program lain

Contoh ini menggunakan sebuah tabel yang disebut PAY_TABLE:

INPUT:
  SQL> desc pay_table
OUTPUT:
Name                            Null? Type ------------------------------  -------- ---- NAME                            NOT NULL VARCHAR2(20) PAY_TYPE                        NOT NULL VARCHAR2(8) PAY_RATE                        NOT NULL NUMBER(8,2) EFF_DATE                        NOT NULL DATE PREV_PAY                                 NUMBER(8,2)

First take a look at the data:

INPUT:
  SQL> pilih * 
  2 from pay_table
  3 order by pay_type, pay_rate desc;
OUTPUT:
 NAME                 PAY_TYPE  PAY_RATE  EFF_DATE  PREV_PAY
-------------------- -------- --------- --------- ---------
SANDRA SAMUELS       HOURLY       12.50 01-JAN-97
ROBERT BOBAY         HOURLY       11.50 15-MAY-96
KEITH JONES          HOURLY       10.00 31-OCT-96
SUSAN WILLIAMS       HOURLY        9.75 01-MAY-97
CHRISSY ZOES         SALARY    50000.00 01-JAN-97
CLODE EVANS          SALARY    42150.00 01-MAR-97
JOHN SMITH           SALARY    35000.00 15-JUN-96
KEVIN TROLLBERG      SALARY    27500.00 15-JUN-96
8 rows selected.

Situation: Sales are up. Any individual who has not had a pay increase for six months (180 days) will receive a raise effective today. All eligible hourly employees will receive a 4 percent increase, and eligible salary employees will receive a 5 percent increase.

Today is:

INPUT/OUTPUT:
 SQL> select sysdate
    2 dari dual; 

SYSDATE
--------
20-MAY-97

Before examining the next PL/SQL block, we will perform a manual select from the PAY_TABLE that flags individuals who should receive a raise.

INPUT:
 SQL> select name, pay_type, pay_rate, eff_date,
  2 'YES' due
  3  from pay_table
  4 where eff_date < sysdate - 180
  5 UNION ALL
  6 select name, pay_type, pay_rate, eff_date,
  7   'No' due
  8 from pay_table
  9 where eff_date >= sysdate - 180
 10 order by 2, 3 desc;
OUTPUT:
 NAME                 PAY_TYPE  PAY_RATE EFF_DATE  DUE
-------------------- --------- -------- --------- ---
SANDRA SAMUELS       HOURLY       12.50 01-JAN-97 No
ROBERT BOBAY         HOURLY       11.50 15-MAY-96 YES
KEITH JONES          HOURLY       10.00 31-OCT-96 YES
SUSAN WILLIAMS       HOURLY        9.75 01-MAY-97 No
CHRISSY ZOES         SALARY    50000.00 01-JAN-97 No
CLODE EVANS          SALARY    42150.00 01-MAR-97 No
JOHN SMITH           SALARY    35000.00 15-JUN-96 YES
KEVIN TROLLBERG      SALARY    27500.00 15-JUN-96 YES
8 rows selected.

The DUE column identifies individuals who should be eligible for a raise. Here’s the PL/SQL script:

INPUT:
 set serveroutput on
BEGIN
  DECLARE
    UnknownPayType exception;
    cursor pay_cursor is
      select name, pay_type, pay_rate, eff_date,
             sysdate, rowid
      from pay_table;
    IndRec pay_cursor%ROWTYPE;
    cOldDate date;
    fNewPay number(8,2);
  BEGIN
    open pay_cursor;
    loop
    fetch pay_cursor into IndRec;
    exit when pay_cursor%NOTFOUND;
    cOldDate := sysdate - 180;
    if (IndRec.pay_type = 'SALARY') then
      fNewPay := IndRec.pay_rate * 1.05;
    elsif (IndRec.pay_type = 'HOURLY') then
      fNewPay := IndRec.pay_rate * 1.04;
    else
      raise UnknownPayType;
    end if;
    if (IndRec.eff_date < cOldDate) then
      update pay_table
      set pay_rate = fNewPay,
          prev_pay = IndRec.pay_rate,
          eff_date = IndRec.sysdate
      where rowid = IndRec.rowid;
      commit;
    end if;
    end loop;
    close pay_cursor;
  EXCEPTION
    when UnknownPayType then
      dbms_output.put_line('=======================');
      dbms_output.put_line('ERROR: Aborting program.');
      dbms_output.put_line('Unknown Pay Type for Name');
    when others then
      dbms_output.put_line('ERROR During Processing.  See the DBA.');
    END;
END;
/

Are you sure that you want to give four employees a pay raise? (The final SELECT statement has four Yes values in the DUE column.) Why not…let’s give all four employees a raise. You can apply the appropriate pay increases by executing the PL/SQL script file, named block2.sql :

INPUT/OUTPUT:
 SQL> @block2

Input truncated to 1 characters
PL/SQL procedure successfully completed.

You can do a quick select to verify that the changes have been made to the pay_rate of the appropriate individuals:

INPUT:
  SQL> pilih * 
  2 from pay_table
  3 order by pay_type, pay_rate desc;
OUTPUT:
 NAME                 PAY_TYPE  PAY_RATE EFF_DATE    PREV_PAY
-------------------- --------- -------- -------- -----------
SANDRA SAMUELS       HOURLY       12.50 01-JAN-97
ROBERT BOBAY         HOURLY       11.96 20-MAY-97       11.5
KEITH JONES          HOURLY       10.40 20-MAY-97         10
SUSAN WILLIAMS       HOURLY        9.75 01-MAY-97
CHRISSY ZOES         SALARY    50000.00 01-JAN-97
CLODE EVANS          SALARY    42150.00 01-MAR-97
JOHN SMITH           SALARY    36750.00 20-MAY-97      35000
KEVIN TROLLBERG      SALARY    28875.00 20-MAY-97      27500

8 rows selected.
ANALISIS:

Empat karyawan menerima kenaikan gaji. Jika Anda bandingkan output ini dengan output dari perintah SELECT asli, Anda dapat melihat perubahan. Tingkat membayar saat ini telah diupdate untuk mencerminkan kenaikan gaji, tingkat membayar asli dimasukkan ke dalam kolom membayar sebelumnya, dan tanggal efektif telah diupdate untuk itu tanggal hari ini. Tidak ada aksi diambil pada orang-orang yang tidak memenuhi syarat untuk kenaikan gaji.

Tunggu – Anda tidak mendapatkan kesempatan untuk melihat cara kerja kecuali ditetapkan. Anda dapat menguji bagian PENGECUALIAN dengan menyisipkan sebuah PAY_TYPE valid ke PAY_TABLE.

INPUT:
  SQL> insert ke nilai-nilai pay_table 
    2 ('Jennings', 'JURNAL' JEFF, 71,50, '01-JAN-97 ', NULL);
OUTPUT:
  1 baris dibuat. 

Saat kebenaran:

INPUT / OUTPUT:
  SQL> @ block2 

  Input dipotong ke 1 karakter 
  ======================= 
  ERROR: Membatalkan program. 
  Jenis Unknown Bayar untuk: Jennings JEFF 
  PL / SQL prosedur berhasil diselesaikan. 
ANALISIS:

Pesan kesalahan kepada Anda bahwa JEFF Jennings memiliki Bayar Jenis dengan nilai selain GAJI atau PER JAM. Artinya, perkecualian ditangani dengan pesan kesalahan.

Disimpan Prosedur, Paket, dan Pemicu

Using PL/SQL, you can create stored objects to eliminate having to constantly enter monotonous code. Procedures are simply blocks of code that perform some sort of specific function. Related procedures can be combined and stored together in an object called a package. A trigger is a database object that is used with other transactions. You might have a trigger on a table called ORDERSthat will insert data into a HISTORY table each time the ORDERS table receives data. The basic syntax of these objects follows.

Sample Procedure

SYNTAX:
 PROCEDURE procedure_name IS
  variable1 datatype;
    ... 
  BEGIN 
  statement1;
    ... 
EXCEPTION
  when ...
END procedure_name;

Sample Package

SYNTAX:
 CREATE PACKAGE package_name AS
  PROCEDURE procedure1 (global_variable1 datatype, ...);
  PROCEDURE procedure2 (global_variable1 datatype, ...);
END package_name;
CREATE PACKAGE BODY package_name AS
  PROCEDURE procedure1 (global_variable1 datatype, ...) IS
      BEGIN 
      statement1;
        ... 
    END procedure1;
  PROCEDURE procedure2 (global_variable1 datatype, ...) IS
      BEGIN 
      statement1;
        ... 
  END procedure2;
END package_name;

Sample Trigger

SYNTAX:
   CREATE TRIGGER trigger_name
    AFTER UPDATE OF column ON table_name
    FOR EACH ROW
    BEGIN 
    statement1;
      ... 
    END; 

The following example uses a trigger to insert a row of data into a transaction table when updating PAY_TABLE . The TRANSACTION table looks like this:

INPUT:
 SQL>  describe trans_table
OUTPUT:
  Nama Null?  Jenis 
 ------------------------------  -------- ----
 ACTION                                   VARCHAR2(10)
 NAME                                     VARCHAR2(20)
 PREV_PAY                                 NUMBER(8,2)
 CURR_PAY                                 NUMBER(8,2)
 EFF_DATE                                 DATE

Here’s a sample row of data:

INPUT/OUTPUT:
  SQL> pilih * 
  2 from pay_table
  3 where name = 'JEFF JENNINGS';

NAME                 PAY_TYPE  PAY_RATE EFF_DATE   PREV_PAY
-------------------- -------- --------- -------- ----------
JEFF JENNINGS        WEEKLY       71.50 01-JAN-97

Now, create a trigger:

 SQL> CREATE TRIGGER pay_trigger
  2 AFTER update on PAY_TABLE
  3  FOR EACH ROW
  4 BEGIN
  5 insert into trans_table values
  6 ('PAY CHANGE', :new.name, :old.pay_rate,
  7  :new.pay_rate, :new.eff_date);
  8   END;
  9  /

Trigger created.

The last step is to perform an update on PAY_TABLE , which should cause the trigger to be executed.

INPUT/OUTPUT:
 SQL> update pay_table
  2 set pay_rate = 15.50,
  3  eff_date = sysdate
  4  where name = 'JEFF JENNINGS';

1 row updated.

  SQL> pilih * 
  2 from pay_table
  3 where name = 'JEFF JENNINGS';

NAME                 PAY_TYPE  PAY_RATE EFF_DATE   PREV_PAY
-------------------- -------- --------- -------- ----------
JEFF JENNINGS        WEEKLY       15.50 20-MAY-97

  SQL> pilih * 
  2 from trans_table;

ACTION     NAME                   PREV_PAY   CURR_PAY EFF_DATE
---------- -------------------- ---------- ---------- ---------
PAY CHANGE JEFF JENNINGS              71.5       15.5 20-MAY-97
ANALISIS:

PREV_PAY is null in PAY_TABLE but PREV_PAY appears in TRANS_TABLE . This approach isn’t as confusing as it sounds. PAY_TABLE does not need an entry for PREV_PAY because the PAY_RATE of71.50 per hour was obviously an erroneous amount. Rather, we inserted the value for PREV_PAY in TRANS_TABLE because the update was a transaction, and the purpose of TRANS_PAY is to keep a record of all transactions against PAY_TABLE .


CATATAN: Jika Anda sudah familiar dengan teknologi jaringan, Anda mungkin melihat persamaan antara PL / SQL dan Java disimpan prosedur dicatat. Namun, beberapa perbedaan seharusnya. PL / SQL merupakan pengembangan dari SQL standar, melaksanakan perintah-perintah bahasa prosedural. Jawa, yang jauh lebih maju dari PL / SQL, memungkinkan pemrogram untuk menulis program yang lebih kompleks daripada yang dimungkinkan dengan PL / SQL. PL / SQL didasarkan pada fungsi-intensif database SQL; Jawa lebih cocok untuk program CPU-intensif. Kebanyakan bahasa prosedural, seperti PL / SQL, yang dikembangkan secara khusus untuk platform yang sesuai. Sebagai bahasa prosedural perkembangan teknologi, tingkat lebih tinggi standardisasi akan diterapkan di seluruh platform.


Ringkasan

PL / SQL memperluas fungsionalitas dari SQL standar. Komponen dasar PL / SQL jenis yang sama melakukan fungsi sebagai bahasa generasi ketiga. Penggunaan variabel lokal kode dinamis mendukung, yaitu nilai-nilai dalam blok dapat berubah dari waktu ke waktu sesuai dengan input pengguna, kondisi tertentu, atau isi kursor /. PL SQL menggunakan program bahasa prosedural laporan kontrol standar. JIKA. KEMUDIAN .. laporan dan loop memungkinkan Anda untuk mencari kondisi-kondisi tertentu, Anda juga dapat menggunakan loop untuk menelusuri isi dari kursor didefinisikan.

Kesalahan yang terjadi selama proses dari setiap program yang menjadi perhatian utama. PL / SQL memungkinkan Anda untuk menggunakan pengecualian untuk mengontrol perilaku dari sebuah program yang menemukan kesalahan sintaks salah satu atau kesalahan logis. Banyak pengecualian yang telah ditetapkan, seperti kesalahan-dengan-nol membagi. Kesalahan dapat ditingkatkan setiap saat selama proses sesuai dengan persyaratan yang ditetapkan dan dapat ditangani dengan cara apapun PL / SQL keinginan pemrogram.

18 hari juga memperkenalkan beberapa penggunaan praktis dari PL / SQL. Database benda seperti pemicu, prosedur tersimpan, dan paket dapat mengotomatisasi fungsi pekerjaan yang banyak.itu contoh Hari ini menerapkan beberapa konsep yang tercakup pada hari sebelumnya.

Sumber ; http://www.webbasedprogramming.com

Iklan

SQL Laporan

Tinggalkan komentar

Tujuan

Hari ini Anda mempelajari konsep di balik menghasilkan satu atau lebih pernyataan dari query SQL. Pada akhir hari Anda harus memahami berikut:

  • Manfaat dari menghasilkan pernyataan SQL query
  • Bagaimana membuat output dari query muncul dalam bentuk lain pernyataan SQL
  • Cara menggunakan kamus data, tabel database, atau keduanya untuk membentuk pernyataan SQL

Tujuan Menggunakan SQL untuk Menghasilkan Laporan SQL

Membangkitkan SQL dari statemen SQL lain hanya berarti menulis pernyataan SQL yang output bentuk lain pernyataan SQL atau perintah. Sampai saat ini, semua pernyataan SQL bahwa Anda telah belajar menulis baik melakukan sesuatu, seperti memanipulasi data dalam sebuah tabel, satu baris pada satu waktu, atau memproduksi beberapa jenis laporan dari query. Hari ini Anda belajar bagaimana menulis sebuah permintaan yang output bentuk lain permintaan atau pernyataan SQL.

Mengapa kau perlu untuk menghasilkan pernyataan SQL dari query? Pada awalnya, itu adalah masalah kesederhanaan dan efisiensi. Anda tidak mungkin perlu  untuk menghasilkan pernyataan SQL, tetapi tanpa pernah melakukan hal itu Anda akan mengabaikan salah satu yang paling kuat fitur SQL, yang terlalu banyak orang tidak menyadari ada.

Membangkitkan SQL jarang wajib karena Anda dapat secara manual membuat dan menerbitkan semua pernyataan SQL, meskipun proses dapat membosankan dalam situasi tertentu. Pada catatan yang sama menghasilkan pernyataan SQL mungkin diperlukan bila Anda memiliki tenggat waktu yang ketat. Misalnya, atasan Anda ingin memberikan akses pada tabel baru untuk semua pengguna di 90 departemen pemasaran (dan Anda ingin pulang untuk makan malam). Karena beberapa pengguna database ini tidak bekerja di bidang pemasaran, Anda tidak bisa hanya memberikan akses pada meja untuk publik. Bila Anda memiliki beberapa kelompok pengguna dengan berbagai jenis akses, Anda mungkin ingin untuk menegakkan peran keamanan, yang merupakan built-in metode untuk mengendalikan akses ke data pengguna. Dalam situasi ini Anda dapat membuat suatu pernyataan SQL yang menghasilkan pernyataan GRANT kepada semua orang di departemen pemasaran, artinya, setiap individu hibah peranan yang tepat (s).

Anda akan menemukan banyak situasi yang menguntungkan untuk menghasilkan pernyataan SQL sebagai output ke laporan lain. Sebagai contoh, Anda mungkin perlu untuk menjalankan pernyataan SQL yang sama banyak sebagai sebuah kelompok atau Anda mungkin perlu untuk menumbuhkan DDL dari kamus data kamus. Ketika memproduksi SQL sebagai output lain dari pernyataan, akan Anda selalu mendapatkan data Anda untuk output baik dari data atau tabel skema dalam database. Gambar 17,1 mengilustrasikan prosedur ini.

Seperti yang dapat Anda lihat pada Gambar 17.1, perintah SELECT dapat dikeluarkan ke database, gambar hasil output yang baik dari kamus data atau dari tabel dalam database aplikasi.Pernyataan Anda dapat mengatur data diambil ke dalam satu atau lebih pernyataan SQL. Misalnya, jika satu baris dikembalikan, Anda akan telah menghasilkan satu pernyataan SQL. Jika 100 baris yang dikembalikan dari pernyataan Anda, Anda akan memiliki 100 dihasilkan pernyataan SQL. Bila Anda berhasil menghasilkan kode SQL dari database, Anda dapat menjalankan kode terhadap database, yang dapat melakukan serangkaian pertanyaan atau tindakan database.

Sisa hari itu dikhususkan untuk contoh yang menunjukkan kepada Anda bagaimana untuk menghasilkan output dalam bentuk pernyataan SQL. Sebagian besar informasi Anda akan datang dari kamus data, sehingga Anda mungkin ingin meninjau’s materi kemarin. (Lihat Hari 16, “Menggunakan Tampilan Informasi Berguna untuk Ambil dari Data Dictionary.”)

Gambar 17,1.

Proses menghasilkan SQL dari database.


CATATAN: Today’s contoh penggunaan pribadi Oracle7. Seperti biasa, Anda harus menerapkan konsep-konsep yang dibahas hari ini untuk sintaks implementasi database tertentu Anda.


Miscellaneous Perintah SQL * Plus

contoh hari ini menggunakan beberapa perintah baru. Perintah-perintah ini, dikenal sebagai perintah SQL * Plus, khusus untuk pribadi Oracle7 dan kontrol format hasil keluaran Anda. (Lihat Hari 20, “SQL * Plus).” SQL * Plus perintah dikeluarkan pada> SQL prompt, atau mereka dapat digunakan dalam file.


CATATAN: Walaupun perintah ini adalah khusus untuk Oracle, perintah sejenis yang tersedia dalam implementasi lain, misalnya, Transact-SQL. (Juga lihat Hari 19, “Transact-SQL: Sebuah Pengantar.”)


set echo on / off

Ketika Anda menetapkan echo, Anda akan melihat laporan SQL Anda saat mereka menjalankan echo. Set off berarti bahwa Anda tidak ingin melihat laporan SQL Anda saat mereka menjalankan – Anda hanya ingin melihat output.

  SET ECHO [ON | OFF] 

umpan balik set on / off

Saran atau masukan adalah jumlah output baris Anda. Misalnya, jika Anda dieksekusi perintah SELECT yang kembali 30 baris data, umpan balik Anda akan

  30 baris yang dipilih. 

KOMENTAR SET ON menampilkan jumlah baris; SET KOMENTAR MATI menghilangkan jumlah baris dari output Anda.

  SET KOMENTAR [ON | OFF] 

menetapkan pos on / off

Judul yang dimaksud di sini adalah judul kolom di output dari perintah SELECT, seperti LAST_NAME, atau CUSTOMER_ID Pos. SET ON, yang menjadi defaultnya, menampilkan judul kolom data Anda sebagai bagian dari output Pos. SET OFF , tentu saja, menghilangkan kolom judul dari output Anda.

  SET pos [ON | OFF] 

spool filename / off

Spooling adalah proses mengarahkan hasil pencarian Anda ke sebuah file. Untuk membuka file spool, Anda masukkan

  spool filename 

Untuk menutup file spool Anda, Anda akan ketik

  spool off 

mulai nama file

Sebagian besar perintah SQL yang telah kita pelajari sejauh ini telah diterbitkan di> SQL prompt. Metode lain untuk mengeluarkan pernyataan SQL adalah untuk menciptakan dan kemudian jalankan file. Di SQL * Plus perintah untuk menjalankan file SQL MULAI FILENAME.

  MULAI FILENAME 

ed nama file

ED adalah perintah Oracle7 pribadi yang membuka file (atau file yang ada). Bila Anda membuka file dengan ed, Anda menggunakan editor layar penuh, yang sering lebih mudah daripada mencoba untuk mengetik sebuah pernyataan SQL yang panjang di> SQL prompt . Anda akan menggunakan perintah ini untuk memodifikasi isi dari file spul Anda. Anda akan menemukan bahwa Anda menggunakan perintah ini sering saat membuat skrip SQL karena Anda mungkin harus mengubah isi dari file untuk kustomisasi. Namun, Anda dapat mencapai kustomisasi terbanyak melalui perintah SQL * Plus.

ED FILENAME

Menghitung Baris di Semua Tabel

Contoh pertama menunjukkan Anda bagaimana untuk mengedit file spool Anda untuk menghapus baris yang tidak relevan dalam kode yang dihasilkan Anda, sehingga memungkinkan pernyataan SQL Anda berjalan tanpa ternoda dengan kesalahan sintaks.


CATATAN: Mencatat teknik editing yang digunakan dalam contoh ini karena kita tidak akan menunjukkan langkah dalam sisa itu contoh hari ini. Kami berasumsi bahwa Anda mengetahui sintaks dasar pernyataan SQL sekarang. Selain itu, Anda dapat memilih untuk mengedit file spool dalam berbagai cara.


Mulailah dengan mengingat fungsi untuk menghitung semua baris dalam tabel: COUNT (*). Anda sudah tahu bagaimana untuk memilih jumlah pada semua baris dalam sebuah tabel tunggal.Sebagai contoh:

INPUT:
  SELECT COUNT (*) 
  DARI TBL1;
OUTPUT:
  COUNT (*) 
  -------- 
        29 

teknik itu berguna, tapi anggaplah Anda ingin mendapatkan jumlah baris pada semua tabel yang Anda miliki atau yang dalam skema Anda. Sebagai contoh, berikut adalah daftar tabel Anda sendiri:

INPUT / OUTPUT:
  SELECT * FROM CAT; 

  TABLE_NAME TABLE_TYPE 
  ------------------------------ ----------- 
  TABEL ACCT_PAY 
  TABEL ACCT_REC 
  TABEL PELANGGAN 
  TABEL KARYAWAN 
  TABEL SEJARAH 
  Faktur TABEL 
  TABEL Pesanan 
  TABEL PRODUK 
  TABEL PROYEK 
  TABEL Vendor 

  10 baris yang dipilih. 
ANALISIS:

Jika Anda ingin mendapatkan jumlah baris pada seluruh tabel Anda, Anda bisa secara manual masalah COUNT (*) Pernyataan di atas meja masing-masing. Umpan balik akan

  10 baris yang dipilih. 

Pernyataan SELECT SELECT berikut membuat laporan lebih untuk mendapatkan jumlah baris pada semua tabel sebelumnya.

INPUT / OUTPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool CNT.SQL 
  SQL> SELECT 'SELECT COUNT (*) FROM' | TABLE_NAME | | | ';' 
    2 DARI CAT 
    3 / 

  SELECT COUNT (*) FROM ACCT_PAY; 
  SELECT COUNT (*) DARI ACCT_REC; 
  SELECT COUNT (*) FROM PELANGGAN; 
  SELECT COUNT (*) FROM KARYAWAN; 
  SELECT COUNT (*) FROM SEJARAH; 
  SELECT COUNT (*) FROM faktur; 
  SELECT COUNT (*) dari pesanan; 
  SELECT COUNT (*) FROM PRODUK; 
  SELECT COUNT (*) DARI PROYEK; 
  pilih count (*) dari vendor; 
ANALISIS:

Tindakan pertama pada contoh sebelumnya adalah dengan menggunakan beberapa perintah SQL * Plus. Menetapkan echo off, umpan balik dari, dan berangkat mengembun output ke apa yang sebenarnya sedang dipilih. Ingat, output tidak digunakan sebagai laporan, tetapi lebih sebagai pernyataan SQL yang siap untuk dijalankan. Langkah selanjutnya adalah dengan menggunakan perintah spool untuk mengarahkan output ke file, yang ditetapkan sebagai cnt.sql. Langkah terakhir adalah untuk mengeluarkan pernyataan SELECT, yang akan menghasilkan output dalam bentuk pernyataan lain. Perhatikan penggunaan tanda kutip tunggal untuk memilih sebuah string literal. Kombinasi tanda kutip tunggal dan gabungan | (|) memungkinkan Anda untuk menggabungkan data aktual dan string literal untuk membentuk pernyataan SQL lain. Contoh ini memilih data dari kamus data. Perintah menutup MATI spool spool file.


TIP: Selalu mengedit output file sebelum menjalankannya untuk menghilangkan perbedaan sintaks dan untuk menyesuaikan lebih lanjut file yang telah Anda buat.


INPUT:
  SQL> spool MATI 
  SQL> ED CNT.SQL
OUTPUT:
  SQL> SELECT 'SELECT COUNT (*) FROM' | TABLE_NAME | ||';' 
    2 DARI CAT; 

  SELECT COUNT (*) FROM ACCT_PAY; 
  COUNT SELECT (*) FROM ACCT_REC; 
  SELECT COUNT (*) FROM PELANGGAN; 
  SELECT COUNT (*) FROM KARYAWAN; 
  SELECT COUNT (*) FROM SEJARAH; 
  SELECT COUNT (*) FROM faktur; 
  SELECT COUNT (*) dari pesanan; 
  SELECT COUNT (*) FROM PRODUK; 
  SELECT COUNT (*) DARI PROYEK; 
  SELECT COUNT (*) dari vendor; 
  SQL> spul MATI 
ANALISIS:

Perintah menutup MATI spool spool file. Maka perintah ED suntingan file. Pada titik ini Anda berada di dalam file yang Anda buat. Anda harus menghapus baris yang tidak perlu dari file, sepertiSELECT, yang digunakan untuk mencapai hasil, dan MATI spool pada akhir file.

Berikut adalah bagaimana file Anda akan terlihat setelah edit. Perhatikan bahwa setiap baris adalah pernyataan SQL yang valid.

  SELECT COUNT (*) FROM ACCT_PAY; 
  SELECT COUNT (*) FROM ACCT_REC; 
  SELECT COUNT (*) FROM PELANGGAN; 
  SELECT COUNT (*) FROM KARYAWAN; 
  SELECT COUNT (*) FROM SEJARAH; 
  SELECT COUNT (*) FROM faktur; 
  SELECT COUNT (*) dari pesanan; 
  SELECT COUNT (*) FROM PRODUK; 
  SELECT COUNT (*) DARI PROYEK; 
  SELECT COUNT (*) FROM Vendor; 

Sekarang, jalankan file:

INPUT / OUTPUT:
  SQL SET> ECHO ON 
  SQL> SET ON pos 
  SQL> START CNT.SQL 

  SQL> SELECT COUNT (*) FROM ACCT_PAY; 

   COUNT (*) 
  --------- 
          7 
  SQL> SELECT COUNT (*) FROM ACCT_REC; 

   COUNT (*) 
  --------- 
          9 
  SQL> SELECT COUNT (*) FROM PELANGGAN; 

   COUNT (*) 
  --------- 
          5 
  SQL> SELECT COUNT (*) FROM KARYAWAN; 

   COUNT (*) 
  --------- 
         10 

  SQL> SELECT COUNT (*) FROM SEJARAH; 

   COUNT (*) 
  --------- 
         26 
  SQL> SELECT COUNT (*) FROM faktur; 

   COUNT (*) 
  --------- 
          0 
  SQL> SELECT COUNT (*) dari pesanan; 

   COUNT (*) 
  --------- 
          0 
  SQL> SELECT COUNT (*) FROM PRODUK; 

   COUNT (*) 
  --------- 
         10 
  SQL> SELECT COUNT (*) FROM PROYEK; 

   COUNT (*) 
  --------- 
         16 
  SQL> SELECT COUNT (*) dari vendor; 

   COUNT (*) 
  --------- 
         22 
  SQL> 
ANALISIS:

Set echo pada memungkinkan Anda untuk melihat setiap pernyataan yang dieksekusi). Tetapkan pos pada menampilkan judul kolom COUNT (* untuk setiap pernyataan SELECT. Jika Anda memasukkan

  set umpan balik 

kemudian

  1 baris yang dipilih. 

akan ditampilkan setelah setiap hitungan. Contoh ini mengeksekusi skrip SQL dengan menggunakan perintah SQL * Plus MULAI. Namun, bagaimana jika Anda sedang berurusan dengan 50 tabel, bukan hanya 10?


CATATAN: Penggunaan yang tepat dari tanda kutip tunggal saat membuat skrip SQL sangat penting. Gunakan kutipan dengan murah hati dan pastikan bahwa Anda termasuk semua elemen yang akan membuat pernyataan yang dihasilkan Anda lengkap. Dalam contoh ini menyertakan tanda kutip tunggal komponen laporan Anda dihasilkan (output) yang tidak dapat dipilih dari meja, misalnya, 'SELECT COUNT (*) FROM' dan ';'.


Keistimewaan Pemberian System untuk Pengguna Multiple

Sebagai database administrator atau individu yang bertanggung jawab untuk menjaga pengguna, Anda akan sering menerima permintaan untuk ID pengguna. Selain memiliki untuk memberikan hak istimewa kepada pengguna yang memungkinkan mereka mengakses database yang tepat, Anda juga harus memodifikasi ‘hak pengguna untuk mengakomodasi perubahan kebutuhan mereka.Anda bisa mendapatkan database untuk menghasilkan laporan GRANT untuk memberikan hak istimewa sistem atau peran untuk banyak pengguna.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET berangkat 
  SQL> SET OFF KOMENTAR 
  SQL> spool GRANTS.SQL 
  SQL> SELECT 'GRANT CONNECT, RESOURCE ALAM ATAS' | | USERNAME | | ';' 
    2 DARI SYS.DBA_USERS 
    3 WHERE USERNAME TIDAK DI ('SYS', 'SYSTEM', 'SCOTT ",' Ryan ',' PO7 ',' DEMO ') 
    4 /
OUTPUT:
  GRANT CONNECT, RESOURCE ALAM ATAS KEVIN; 
  GRANT CONNECT, RESOURCE ALAM ATAS JOHN; 
  GRANT CONNECT, RESOURCE ALAM ATAS JUDITH; 
  GRANT CONNECT, RESOURCE ALAM ATAS Steve; 
  GRANT CONNECT, RESOURCE ALAM UNTUK RON; 
  GRANT CONNECT, RESOURCE ALAM ATAS MARY; 
  GRANT CONNECT, RESOURCE ALAM ATAS Debra; 
  GRANT CONNECT, RESOURCE ALAM UNTUK CHRIS; 
  GRANT CONNECT, RESOURCE ALAM ATAS CAROL; 
  GRANT CONNECT, RESOURCE ALAM ATAS EDWARD; 
  GRANT CONNECT, RESOURCE ALAM ATAS Brandon; 
  GRANT CONNECT, RESOURCE ALAM ATAS JACOB;
INPUT / OUTPUT:
 SQL> spool off> SQL mulai grants.sql SQL> CONNECT GRANT, RESOURCE ALAM ATAS KEVIN; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS JOHN; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS JUDITH, Grant berhasil>. SQL GRANT CONNECT , RESOURCE ALAM ATAS Steve; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM UNTUK RON; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS MARIA; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS Debra; Grant berhasil>. SQL GRANT CONNECT, RESOURCE UNTUK CHRIS; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS CAROL; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS EDWARD; Grant berhasil>. SQL GRANT CONNECT, RESOURCE ALAM ATAS Brandon; Grant berhasil>. SQL GRANT CONNECT, RESOURCE TO JACOB ; Grant berhasil.
ANALISIS:

Dalam contoh ini Anda disimpan keystrokes membosankan banyak dengan menghasilkan  GRANT laporan menggunakan pernyataan SQL sederhana, daripada mengetik setiap satu secara manual.


CATATAN: Contoh berikut menghilangkan langkah di mana Anda mengedit output file. Anda dapat mengasumsikan bahwa file sudah diedit.


Pemberian Keistimewaan pada Tabel Anda untuk Pengguna lain

Pemberian hak istimewa di atas meja untuk pengguna lain cukup sederhana, seperti memilih jumlah baris di atas meja. Tapi jika Anda memiliki beberapa tabel yang Anda ingin memberikan akses ke peran atau pengguna, Anda dapat membuat SQL menghasilkan script untuk Anda – kecuali jika Anda suka untuk mengetik.

Pertama, tinjauan GRANT sederhana untuk satu meja:

INPUT:
  SQL> GRANT SELECT ON SEJARAH ATAS Brandon;
OUTPUT:
  Grant berhasil. 

Apakah Anda siap beraksi beberapa? Pernyataan selanjutnya membuat pernyataan GRANT untuk masing-masing dari 10 tabel dalam skema Anda.

INPUT / OUTPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool GRANTS.SQL 
  SQL> SELECT 'GRANT SELECT ON' | | TABLE_NAME | | 'ATAS Brandon;' 
    2 DARI CAT 
    3 / 

  GRANT SELECT ON ACCT_PAY ATAS Brandon; 
  GRANT SELECT ON ACCT_REC ATAS Brandon; 
  GRANT SELECT ON NASABAH ATAS Brandon; 
  GRANT SELECT ON KARYAWAN ATAS Brandon; 
  GRANT SELECT ON SEJARAH ATAS Brandon; 
  GRANT SELECT ON faktur kepada Brandon; 
  GRANT SELECT ON perintah untuk Brandon; 
  GRANT SELECT ON PRODUK UNTUK Brandon; 
  SELECT GRANT PADA PROYEK ATAS Brandon; 
  GRANT SELECT ON vendor untuk Brandon; 
ANALISIS:

Pernyataan GRANT telah secara otomatis disiapkan untuk setiap tabel. Brandon adalah memiliki akses Pilih di meja masing-masing.

Sekarang tutup file output dengan perintah spool, dan dengan asumsi bahwa file tersebut telah diedit, file siap dijalankan.

INPUT / OUTPUT:
  SQL> spool MATI 

  SQL SET> ECHO ON 
  SQL> SET ON KOMENTAR 
  SQL> START GRANTS.SQL 

  SQL> GRANT SELECT ON ACCT_PAY ATAS Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON ACCT_REC ATAS Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON NASABAH ATAS Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON KARYAWAN ATAS Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON SEJARAH ATAS brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON faktur kepada Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON perintah untuk Brandon; 

  Grant berhasil. 

  SQL> SELECT GRANT PADA PRODUK UNTUK Brandon; 

  Grant berhasil. 

  SQL> GRANT SELECT ON PROYEK ATAS Brandon; 

  Grant berhasil. 

  SQL> SELECT ON GRANT vendor untuk Brandon; 

  Grant berhasil. 
ANALISIS:

Echo ditetapkan dan umpan balik di set pada juga. Setting umpan balik pada laporan Grant ditampilkan berhasil. Pilih hak yang telah diberikan kepada Brandon pada semua 10 meja dengan sedikit usaha yang sangat. Sekali lagi, ingatlah bahwa Anda akan sering berurusan dengan banyak lebih dari 10 tabel.

Menonaktifkan Kendala Tabel Load Data

Ketika memasukkan data ke dalam tabel, Anda kadang harus menonaktifkan kendala pada tabel Anda. Misalkan Anda telah dipotong meja Anda dan Anda memasukkan data ke tabel Anda dari nol. Kemungkinan besar, tabel Anda akan memiliki batasan integritas referensial, seperti kunci asing. Karena database tidak akan membiarkan Anda memasukkan baris data dalam tabel yang lain tabel referensi (jika kolom referensi tidak ada dalam tabel lain), Anda mungkin harus menonaktifkan kendala untuk awalnya beban data Anda. Tentu saja, setelah beban berhasil, Anda akan ingin mengaktifkan kendala.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET AKTIF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool DISABLE.SQL 
  SQL> SELECT 'ALTER TABLE' | TABLE_NAME | | | 
    2 'DISABLE kendala' | | CONSTRAINT_NAME | | ';' 
    3 DARI SYS.DBA_CONSTRAINTS 
    4 WHERE PEMILIK 'Ryan =' 
    5 /
OUTPUT:
  ALTER TABLE ACCT_PAY kendala FK_ACCT_ID DISABLE; 
  ALTER TABLE DISABLE kendala FK_ACCT_ID ACCT_REC; 
  ALTER TABLE PELANGGAN kendala FK_CUSTOMER_ID DISABLE; 
  ALTER TABLE SEJARAH kendala FK_ACCT_ID DISABLE; 
  ALTER TABLE Faktur kendala FK_ACCT_ID DISABLE; 
  Perintah ALTER TABLE DISABLE FK_ACCT_ID kendala; 
ANALISIS:

Tujuannya adalah untuk menghasilkan serangkaian laporan ALTER TABLE yang akan menonaktifkan kendala pada seluruh tabel yang dimiliki oleh Ryan. titik koma ini concatenated sampai akhir apa yang dipilih menyelesaikan setiap pernyataan SQL.

INPUT / OUTPUT:
SQL> spool MATI SQL> SET ECHO OFF SQL> SET ON KOMENTAR SQL> START DISABLE.SQL Kendala cacat. Kendala cacat. Kendala cacat. Kendala cacat. Kendala cacat. Kendala cacat.
ANALISIS:

Perhatikan bahwa echo diatur ke off, yang berarti bahwa Anda tidak akan melihat laporan individu. Karena umpan balik diatur ke atas, Anda dapat melihat hasilnya.

  Kendala cacat. 

Jika kedua gema dan umpan balik ditetapkan untuk mati, tidak akan ditampilkan. Tidak hanya akan jeda selama yang dibutuhkan untuk menjalankan ALTER TABLE dan kemudian laporan SQL>prompt akan dikembalikan.

Sekarang Anda dapat membuka data anda tanpa perlu khawatir menerima kesalahan yang disebabkan oleh kendala Anda. Kendala yang baik, tetapi mereka dapat hambatan selama data beban.Anda dapat menggunakan ide yang sama untuk mengaktifkan tabel kendala.

Sinonim Membuat Sejumlah dalam Single Bound

Lain dan melelahkan tugas yang membosankan adalah menciptakan banyak sinonim, apakah mereka pemerintah atau swasta. Hanya DBA dapat membuat sinonim publik, tetapi user dapat membuat sinonim pribadi.

Contoh berikut membuat sinonim umum untuk semua tabel yang dimiliki oleh Ryan.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET KOMENTAR MATI 
  SQL> SET berangkat 
  SQL> spool PUB_SYN.SQL 
  SQL> SELECT 'CREATE sinonim PUBLIK' | | TABLE_NAME | | 'FOR' | | 
    2 PEMILIK | | '. "  | | TABLE_NAME | | ';' 
    3 DARI SYS.DBA_TABLES 
    4 WHERE PEMILIK 'Ryan =' 
    5 /
OUTPUT:
 CREATE ACCT_PAY PUBLIK sinonim untuk RYAN.ACCT_PAY; CREATE ACCT_REC sinonim PUBLIK UNTUK RYAN.ACCT_REC; CREATE PUBLIK UNTUK NASABAH sinonim RYAN.CUSTOMERS; CREATE PUBLIK UNTUK KARYAWAN sinonim RYAN.EMPLOYEES; CREATE SEJARAH sinonim PUBLIK UNTUK RYAN.HISTORY; membuat tagihan sinonim PUBLIK UNTUK RYAN.INVOICES; perintah CREATE sinonim PUBLIK UNTUK RYAN.ORDERS; CREATE PUBLIK UNTUK PRODUK sinonim RYAN.PRODUCTS; CREATE sinonim PROYEK PUBLIK UNTUK RYAN.PROJECTS; CREATE vendor sinonim PUBLIK UNTUK RYAN.VENDORS;

Sekarang jalankan file.

INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> ED PUB_SYN.SQL 
  SQL SET> ECHO ON 
  SQL> SET ON KOMENTAR 
  SQL> START PUB_SYN.SQL 

  SQL> CREATE ACCT_PAY sinonim PUBLIK UNTUK RYAN.ACCT_PAY; 

  Sinonim dibuat. 

  SQL> CREATE ACCT_REC sinonim PUBLIK UNTUK RYAN.ACCT_REC; 

  Sinonim dibuat. 

  SQL> CREATE NASABAH sinonim PUBLIK UNTUK RYAN.CUSTOMERS; 

  Sinonim dibuat. 

  SQL> CREATE KARYAWAN sinonim PUBLIK UNTUK RYAN.EMPLOYEES; 

  Sinonim dibuat. 

  SQL> CREATE SEJARAH sinonim PUBLIK UNTUK RYAN.HISTORY; 

  Sinonim dibuat. 

  SQL> CREATE faktur sinonim PUBLIK UNTUK RYAN.INVOICES; 

  Sinonim dibuat. 

  SQL> CREATE perintah sinonim PUBLIK UNTUK RYAN.ORDERS; 

  Sinonim dibuat. 

  SQL> CREATE PUBLIK UNTUK PRODUK sinonim RYAN.PRODUCTS; 

  Sinonim dibuat. 

  SQL> CREATE sinonim PROYEK PUBLIK UNTUK RYAN.PROJECTS; 

  Sinonim dibuat. 

  SQL> CREATE vendor sinonim PUBLIK UNTUK RYAN.VENDORS; 

  Sinonim dibuat. 
ANALISIS:

Hampir segera, semua pengguna memiliki akses ke database sinonim umum untuk semua tabel yang memiliki Ryan. Sekarang pengguna tidak perlu memenuhi syarat meja ketika melakukan operasi SELECT. (Kualifikasi berarti mengidentifikasi pemilik meja, seperti di RYAN.VENDORS.)

Bagaimana jika nama-muradif publik tidak ada? Misalkan Brandon yang memiliki akses Pilih untuk seluruh tabel yang dimiliki oleh Ryan dan ingin membuat sinonim pribadi.

INPUT / OUTPUT:
  SQL> CONNECT Brandon 
  ENTER PASSWORD: ******* 
  Dihubungi. 

  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool PRIV_SYN.SQL 
  SQL> SELECT 'CREATE sinonim' | | TABLE_NAME | | 'FOR' | | 
    2 PEMILIK | | '. "  | | TABLE_NAME | | ';' 
    3 DARI ALL_TABLES 
    4 / 

  CREATE SYS.DUAL sinonim DUAL UNTUK; 
  CREATE sinonim AUDIT_ACTIONS UNTUK SYS.AUDIT_ACTIONS; 
  CREATE sinonim USER_PROFILE UNTUK SYSTEM.USER_PROFILE; 
  CREATE sinonim PELANGGAN UNTUK RYAN.CUSTOMERS; 
  CREATE sinonim pesanan untuk RYAN.ORDERS; 
  CREATE sinonim PRODUK UNTUK RYAN.PRODUCTS; 
  CREATE sinonim faktur untuk RYAN.INVOICES; 
  UNTUK MENCIPTAKAN sinonim ACCT_REC RYAN.ACCT_REC; 
  CREATE sinonim ACCT_PAY UNTUK RYAN.ACCT_PAY; 
  CREATE sinonim vendor untuk RYAN.VENDORS; 
  CREATE sinonim KARYAWAN UNTUK RYAN.EMPLOYEES; 
  CREATE sinonim PROYEK UNTUK RYAN.PROJECTS; 
  UNTUK MENCIPTAKAN SEJARAH sinonim RYAN.HISTORY;
INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> 

  SQL> SET ECHO OFF 
  SQL> SET ON KOMENTAR 
  SQL> START PRIV_SYN.SQL 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 

  Sinonim dibuat. 
ANALISIS:

Dengan hampir setiap usaha, Brandon telah sinonim untuk semua tabel yang dimiliki oleh Ryan dan tidak diperlukan lagi untuk memenuhi syarat nama tabel.

Membuat Tampilan pada Tabel Anda

Jika Anda ingin membuat pemandangan pada kelompok tabel, Anda bisa mencoba sesuatu yang mirip dengan contoh berikut:

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool VIEWS.SQL 
  SQL> SELECT 'CREATE VIEW' | TABLE_NAME | | | '_VIEW AS SELECT * FROM' | | 
    2 TABLE_NAME | | ';' 
    3 DARI CAT 
    4 /
OUTPUT:
 CREATE VIEW AS * ACCT_PAY_VIEW SELECT FROM ACCT_PAY; CREATE VIEW AS ACCT_REC_VIEW SELECT * FROM ACCT_REC; CREATE VIEW AS * SELECT CUSTOMERS_VIEW NASABAH; CREATE VIEW AS * EMPLOYEES_VIEW SELECT FROM KARYAWAN; CREATE VIEW AS * SELECT HISTORY_VIEW DARI SEJARAH; CREATE VIEW AS SELECT INVOICES_VIEW * FROM Faktur; CREATE VIEW AS ORDERS_VIEW SELECT * FROM pesanan; CREATE VIEW AS * SELECT PRODUCTS_VIEW DARI PRODUK; CREATE VIEW AS * SELECT PROJECTS_VIEW DARI PROYEK; CREATE VIEW AS * SELECT VENDORS_VIEW dari vendor;
INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> SET ECHO OFF 
  SQL> SET ON KOMENTAR 
  SQL> START VIEWS.SQL 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 

  Lihat Dibuat. 
ANALISIS:

The views.sql file ini dibuat oleh pernyataan SQL sebelumnya. Output file ini menjadi file lain pernyataan SQL dan berisi laporan untuk menciptakan pandangan pada semua tabel yang ditentukan.Setelah menjalankan views.sql, Anda dapat melihat bahwa pandangan telah diciptakan.

Truncating Semua Tabel dalam sebuah Skema

Truncating tabel adalah suatu peristiwa yang terjadi di lingkungan pengembangan. Untuk secara efektif mengembangkan dan menguji data rutinitas beban dan kinerja pernyataan SQL, data reloaded sering. Proses ini mengidentifikasi dan exterminates bug, dan aplikasi yang dikembangkan atau diuji adalah pindah ke sebuah lingkungan produksi.

Contoh berikut memotong semua tabel dalam skema tertentu.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool TRUNC.SQL 
  SQL> SELECT 'truncate TABLE' | | TABLE_NAME | | ';' 
    2 DARI ALL_TABLES 
    3 WHERE PEMILIK 'Ryan =' 
    4 /
OUTPUT:
  TABEL truncate ACCT_PAY; 
  TABEL truncate ACCT_REC; 
  Truncate TABEL NASABAH; 
  Truncate TABEL KARYAWAN; 
  TABEL truncate SEJARAH; 
  TABEL truncate Faktur; 
  Truncate TABLE pesanan; 
  Truncate TABEL PRODUK; 
  TABEL truncate PROYEK; 
  TABEL truncate Vendor; 

Silakan menjalankan script Anda jika Anda berani.

INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> SET ON KOMENTAR 
  SQL> START TRUNC.SQL 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 

  Tabel dipotong. 
ANALISIS:

Truncating seluruh tabel yang dimiliki oleh Ryan menghapus semua data dari tabel tersebut. Tabel pemotongan mudah. Anda dapat menggunakan teknik ini jika Anda berencana untuk terisi kembali meja Anda dengan data baru.


TIP: Sebelum melakukan operasi seperti tabel dalam skema truncating, Anda selalu harus memiliki cadangan yang baik dari tabel Anda berencana untuk memotong, bahkan jika Anda yakin bahwa Anda tidak akan memerlukan data lagi. (Anda akan – seseorang yakin meminta Anda untuk mengembalikan data yang lama.)


Menggunakan SQL untuk Menghasilkan Skrip Shell

Anda juga dapat menggunakan SQL untuk menghasilkan bentuk-bentuk lain dari script, seperti skrip shell. Sebagai contoh, sebuah RDBMS server Oracle dapat berjalan di lingkungan UNIX, yang biasanya jauh lebih besar dari lingkungan sistem operasi PC. Oleh karena itu, UNIX memerlukan pendekatan yang lebih terorganisir untuk file manajemen. Anda dapat menggunakan SQL dengan mudah untuk mengelola database file dengan membuat skrip shell.

Skenario berikut tetes tablespace di database. Meskipun tablespace dapat menjatuhkan menggunakan SQL, data sebenarnya file yang berhubungan dengan tablespace ini harus dihilangkan dari sistem operasi terpisah.

Langkah pertama adalah untuk menghasilkan skrip SQL untuk drop tablespace.

INPUT:
  SQL> SET ECHO OFF 
  SQL> SET OFF KOMENTAR 
  SQL> SET berangkat 
  SQL> spool DROP_TS.SQL 
  SQL> SELECT 'DROP Tablespace' | | TABLESPACE_NAME | | 'TERMASUK ISI;' 
    2 DARI SYS.DBA_TABLESPACES 
    3 /
OUTPUT:
  DROP tablespace SISTEM TERMASUK ISI; 
  DROP tablespace RBS TERMASUK ISI; 
  DROP tablespace TEMP TERMASUK ISI; 
  DROP tablespace TERMASUK ALAT ISI; 
  DROP tablespace TERMASUK PENGGUNA ISI; 

Selanjutnya Anda harus membuat script shell untuk menghapus data file dari sistem operasi setelah tablespace telah dijatuhkan.

INPUT / OUTPUT:
  SQL> spool MATI 
  SQL> spool RM_FILES.SH 
  SQL> SELECT 'RM-' | F FILE_NAME | 
    2 DARI SYS.DBA_DATA_FILES 
    3 / 

  rm-f / disk01/orasys/db01/system0.dbf 
  rm-f / disk02/orasys/db01/rbs0.dbf 
  rm-f / disk03/orasys/db01/temp0.dbf 
  rm-f / disk04/orasys/db01/tools0.dbf 
  rm-f / disk05/orasys/db01/users0.dbf 
  SQL> spool off 
  SQL> 
ANALISIS:

Sekarang bahwa Anda telah dihasilkan kedua script, Anda dapat menjalankan script untuk drop tablespace dan kemudian jalankan shell script sistem operasi untuk menghapus file data yang sesuai. Anda juga akan menemukan banyak cara lain untuk mengelola file dan menghasilkan script non-SQL menggunakan SQL.

Tabel Reverse Rekayasa dan Indeks

Meskipun banyak alat KASUS memungkinkan Anda untuk reverse-insinyur tabel dan indeks, Anda selalu bisa menggunakan SQL langsung untuk tujuan ini. Anda dapat mengambil semua informasi yang Anda butuhkan dari kamus data untuk membangun kembali tabel dan indeks, namun hal ini secara efektif adalah sulit tanpa menggunakan bahasa prosedural, seperti PL / SQL atau shell script.

Kami biasanya menggunakan embedded SQL dalam skrip shell. fungsi bahasa prosedural yang diperlukan untuk steker pada bahan yang sesuai sintaks, seperti koma. Script harus cukup pintar untuk tahu mana kolom adalah yang terakhir, sehingga tidak terjadi koma setelah kolom terakhir. Script juga harus tahu di mana menempatkan kurung, dan seterusnya. Carilah alat yang tersedia untuk menumbuhkan objek dari kamus data, apakah Anda menggunakan C, Perl, shell scripts, COBOL, atau PL / SQL.

Ringkasan

Membangkitkan laporan langsung dari database suku cadang pekerjaan Anda membosankan sering coding pernyataan SQL. Terlepas dari lingkup pekerjaan Anda, dengan menggunakan teknik generasi pernyataan SQL membebaskan Anda untuk bekerja pada fase-fase lain proyek Anda.

Apa yang telah Anda pelajari hari ini adalah dasar, dan meskipun contoh-contoh ini menggunakan database Oracle, Anda dapat menerapkan konsep-konsep untuk database relasional. Pastikan untuk memeriksa implementasi spesifik Anda untuk variasi dalam sintaks dan struktur data kamus. Jika Anda tetap berpikiran terbuka, Anda akan terus menemukan cara untuk menghasilkan script SQL, dari pernyataan sederhana untuk sistem manajemen tingkat tinggi yang kompleks.

Sumber ; http://www.webbasedprogramming.com

SQL Kamus data

Tinggalkan komentar

Tujuan

Hari ini kita membahas kamus data, juga dikenal sebagai sistem katalog. Pada akhir hari, Anda harus memiliki pemahaman yang kuat sebagai berikut:

  • Definisi kamus data
  • Jenis informasi berisi kamus data
  • Berbagai jenis tabel di dalam kamus data
  • Cara efektif untuk mengambil informasi yang berguna dari kamus data

Pengantar Data Kamus

Setiap database relasional memiliki beberapa bentuk kamus data, atau sistem katalog presentasi. (Kami menggunakan kedua istilah ini di.) Sebuah kamus data adalah area sistem dalam lingkungan database yang berisi informasi tentang bahan dari database. kamus data meliputi informasi seperti desain database, disimpan kode SQL, statistik pengguna, proses database, pertumbuhan database, dan kinerja statistik database.

Kamus data memiliki tabel yang mengandung informasi desain database, yang dihuni atas penciptaan database dan pelaksanaan Data Definition Language (DDL) seperti perintah CREATE TABLE.Ini bagian dari sistem katalog menyimpan informasi tentang sebuah kolom meja dan atribut, informasi-ukuran meja, hak meja, dan pertumbuhan meja. benda lain yang disimpan dalam kamus data mencakup indeks, memicu, prosedur, paket, dan pandangan.

Pengguna tabel laporan statistik status item seperti informasi konektivitas database dan hak untuk pengguna individu. Privileges tersebut dibagi menjadi dua komponen utama:-tingkat sistem dan hak-hak istimewa tingkat objek. Kewenangan untuk membuat pengguna lain adalah tingkat hak istimewa sistem, sedangkan kemampuan untuk mengakses tabel adalah tingkat keistimewaan objek. Peran juga digunakan untuk menegakkan keamanan dalam database. Informasi ini disimpan juga.

16 hari membentang apa yang Anda pelajari kemarin (15 Hari, “Memperlancar SQL Laporan untuk Peningkatan Kinerja”). Data diambil dari katalog sistem dapat digunakan untuk memantau kinerja database dan untuk mengubah parameter database yang akan meningkatkan kinerja database dan pernyataan SQL.

Kamus data adalah salah satu alat yang paling berguna yang tersedia dengan database. Ini adalah cara untuk menjaga database terorganisir, seperti file persediaan di toko ritel. Ini merupakan mekanisme yang menjamin integritas database. Misalnya, ketika Anda membuat sebuah tabel, bagaimana server database tahu apakah sebuah tabel dengan nama yang sama ada? Bila Anda membuat sebuah query untuk memilih data dari tabel, bagaimana bisa memverifikasi bahwa Anda telah diberi hak istimewa yang tepat untuk mengakses meja? Kamus data adalah jantung dari database, sehingga Anda perlu mengetahui bagaimana menggunakannya.

Pengguna Data Kamus

Akhir pengguna, insinyur sistem, dan administrator database semua menggunakan kamus data, apakah mereka menyadarinya atau tidak. akses mereka bisa baik langsung maupun tidak langsung.

Pengguna akhir, seringkali para pelanggan untuk database yang telah dibuat, akses katalog sistem tidak langsung. Ketika pengguna mencoba untuk log on ke database, kamus data dirujuk untuk memverifikasi bahwa user’s username, password, dan hak istimewa untuk menyambung ke database. database ini juga direferensikan untuk melihat apakah pengguna memiliki hak yang sesuai untuk mengakses data tertentu. Yang umum metode yang paling untuk pengguna akhir untuk mengakses kamus data melalui aplikasi front-end. Banyak antarmuka pengguna grafis (GUI) alat, yang memungkinkan pengguna untuk dengan mudah membangun sebuah pernyataan SQL, telah dikembangkan. Ketika login ke database, aplikasi front-end dapat segera melakukan pilih terhadap kamus data untuk mendefinisikan tabel yang memiliki akses pengguna. The-end aplikasi depan mungkin akan membangun sebuah “lokal” sistem katalog bagi pengguna individu berdasarkan data yang diambil dari kamus data. Pelanggan dapat menggunakan katalog setempat untuk memilih tabel yang spesifik ia ingin query.

Sistem insinyur adalah database pengguna yang bertanggung jawab untuk tugas-tugas seperti model database dan desain, pengembangan aplikasi, dan aplikasi manajemen. (Beberapa perusahaan menggunakan judul lainnya, seperti programer, analis pemrogram, dan modelers data, untuk merujuk Sistem insinyur sistem mereka.) Insinyur menggunakan kamus data secara langsung untuk mengelola proses pembangunan, serta mempertahankan proyek-proyek yang ada. Akses juga dapat dilakukan melalui aplikasi front-end, perangkat pengembangan, dan rekayasa perangkat lunak dibantu komputer (CASE) tools. area umum dari sistem katalog bagi para pengguna query objek-objek di bawah kelompok skema, permintaan terhadap peran aplikasi dan hak istimewa, dan permintaan untuk mengumpulkan statistik pada pertumbuhan skema mungkin. System juga insinyur menggunakan kamus data untuk reverse-engineer objek database dalam ditetapkan skema.

Database administrator (DBAs) yang paling jelas persentase terbesar pengguna langsung dari kamus data. Berbeda dengan kelompok lain dua pengguna, yang kadang-kadang menggunakan sistem katalog secara langsung, DBAs harus secara eksplisit mencakup penggunaan kamus data sebagai bagian dari rutinitas sehari-hari mereka. Akses biasanya melalui sebuah query SQL, tetapi juga dapat melalui alat administrasi seperti Oracle Server Manager. Seorang DBA menggunakan kamus data untuk mengelola informasi pengguna dan sumber daya dan akhirnya untuk mencapai database baik-tuned.

Seperti yang Anda lihat, semua pengguna database harus menggunakan kamus data. Bahkan lebih penting, sebuah database relasional tidak bisa ada tanpa beberapa bentuk kamus data.

Isi Kamus Data

Bagian ini mengkaji sistem katalog dua vendor RDBMS, Oracle dan Sybase. Meskipun kedua implementasi memiliki spesifikasi unik untuk kamus data, mereka melayani fungsi yang sama. Jangan keprihatinan sendiri dengan nama yang berbeda untuk tabel sistem, cukup memahami konsep kamus data dan data di dalamnya.

Kamus Oracle’s Data

Karena setiap meja harus memiliki pemiliknya, pemilik sistem tabel dalam kamus data Oracle adalah SYS. Oracle’s data tabel kamus dibagi menjadi tiga kategori dasar: diakses dilihat pengguna, dilihat DBA, dan tabel performa yang dinamis, yang juga muncul sebagai pandangan. Tampilan yang dapat diakses pengguna memungkinkan pengguna untuk permintaan data kamus untuk informasi tentang account database individu, seperti hak istimewa, atau katalog tabel dibuat. DBA dilihat bantuan dalam tugas sehari-hari dari seorang administrator database, yang memungkinkan DBA untuk mengelola pengguna dan objek dalam database. Tabel kinerja dinamis di Oracle juga digunakan oleh DBA dan menyediakan mendalam melihat lebih untuk memantau kinerja database.Pandangan-pandangan ini memberikan informasi seperti statistik pada proses, penggunaan dinamis segmen rollback, penggunaan memori, dan sebagainya. Tabel performa yang dinamis semua Vawalan $.

Data Sybase’s Dictionary

Seperti di Oracle, pemilik tabel dalam kamus data Sybase adalah SYS. Tabel dalam kamus data dibagi menjadi dua kategori: tabel sistem dan tabel database.

Tabel sistem berisi dengan database master saja. Tabel ini define obyek (seperti tabel dan indeks) yang umum melalui beberapa database kamus yang kedua. Set tabel dalam Sybase SQL Server data adalah tabel database. Tabel ini berkaitan hanya untuk obyek dalam setiap database.

A Look Inside’s Oracle Data Dictionary

Contoh dalam bagian ini menunjukkan cara untuk mengambil informasi dari kamus data dan dapat diterapkan ke database relasional pengguna kebanyakan, yaitu, sistem insinyur, end user, atau DBA. kamus data Oracle memiliki array yang luas dari tabel sistem dan pandangan untuk semua jenis pengguna database, itulah sebabnya mengapa kita memilih untuk mengeksplorasi kamus data Oracle secara lebih mendalam.

Tampilan Pengguna

dilihat pengguna data dilihat kamus yang umum untuk semua pengguna database. Hanya hak pengguna perlu permintaan terhadap pandangan pengguna adalah hak istimewa sistem CREATE SESSION, yang harus umum untuk semua pengguna.

Siapa Anda?

Sebelum merambah ke dalam pengetahuan yang tampaknya tak berujung yang terdapat dalam database, Anda harus tahu persis siapa Anda (dalam hal database) dan apa yang dapat Anda lakukan. Kedua berikut menunjukkan contoh laporan SELECT dari dua tabel: satu untuk mengetahui siapa Anda dan yang lainnya untuk melihat saham lain yang database.

INPUT:
  SQL> SELECT * 
    2 DARI USER_USERS;
OUTPUT:
  USERNAME USER_ID tablespace SEMENTARA DEFAULT_TABLESPACE DIBUAT 
  ---------- ------ -------------------- -------------- -------- ------ 
  JSMITH 29 USERS TEMP 14-MAR-97 

  1 baris yang dipilih. 
ANALISIS:

Tampilan USER_USERS memungkinkan Anda untuk melihat bagaimana Anda Oracle ID didirikan, ketika didirikan, dan ia juga menampilkan lainnya pengguna tertentu, statistik vital. The default tablespace dan tablespace sementara juga ditampilkan. The default tablespace, PENGGUNA, adalah tablespace yang objek akan dibuat di bawah sebagai pengguna tersebut. Sementara itu tablespace adalah tablespace ditujukan untuk digunakan selama jenis besar dan fungsi kelompok untuk JSMITH.

INPUT / OUTPUT:
  SQL> * SELECT 
    2 DARI All_users; 

  USERNAME USER_ID DIBUAT 
  -------------- ------- ------------ 
  SYS 0 01-JAN-97 
  SISTEM 5 01-JAN-97 
  SCOTT 8 01-JAN-97 
  JSMITH 10 14-MAR-97 
  TJONES 11 15-MAR-97 
  VJOHNSON 12 15-MAR-97 

Seperti yang dapat Anda lihat dalam hasil pencarian sebelumnya, Anda dapat melihat semua pengguna yang ada di database dengan menggunakan tampilan All_users. Namun, tampilan All_users tidak menyediakan informasi yang spesifik yang sama seperti tampilan sebelumnya (USER_USERS) disediakan karena tidak ada kebutuhan untuk informasi ini di tingkat pengguna. informasi spesifik lebih lanjut dapat diperlukan pada tingkat sistem.

Keistimewaan Apakah Anda?

Sekarang Anda tahu siapa Anda, akan menyenangkan untuk mengetahui apa yang dapat Anda lakukan. Beberapa pandangan kolektif, mampu untuk memberikan informasi tersebut. Pandangan USER_SYS_PRIVS dan tampilan USER_ROLE_PRIVS akan memberi Anda (pengguna) ide yang baik dari apa kewenangan yang Anda miliki.

Anda dapat menggunakan tampilan USER_SYS_PRIVS hak istimewa untuk memeriksa sistem anda. Ingat, hak istimewa sistem hak istimewa yang memungkinkan Anda untuk melakukan hal-hal tertentu dalam database secara keseluruhan. Privileges tersebut tidak spesifik untuk setiap obyek satu atau sekumpulan objek.

INPUT:
  SQL> SELECT * 
    2 DARI USER_SYS_PRIVS;
OUTPUT:
  USERNAME HAK ISTIMEWA ADM 
  -------- -------------------- --- 
  JSMITH UNLIMITED tablespace NO 
  CREATE JSMITH SESI NO 

  2 baris yang dipilih. 
ANALISIS:

JSMITH telah diberikan dua tingkat hak istimewa sistem, di luar dari setiap peran diberikan. Perhatikan kedua, misalnya CREATE SESSION. CREATE SESI juga terkandung dalam standar Oracle peran, CONNECT, yang tercakup dalam berikutnya.

Anda dapat menggunakan USER_ROLE_PRIVS tampilan untuk melihat informasi tentang peran Anda telah diberikan dalam database. Database peran sangat mirip dengan tingkat hak istimewa sistem. Peran dibuat seperti pengguna dan kemudian diberikan hak istimewa. Setelah peran telah diberikan hak istimewa, peran dapat diberikan kepada pengguna. Ingat bahwa tingkat hak objek juga mungkin terdapat dalam peran.

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI USER_ROLE_PRIVS; 

  USERNAME ADM DEF GRANTED_ROLE OS_ 
  ---------------- ------------ --- --- - 
  JSMITH TIDAK YA TIDAK CONNECT 
  JSMITH RESOURCE TIDAK YA TIDAK 

  2 baris yang dipilih. 
ANALISIS:

Tampilan USER_ROLE_PRIVS memungkinkan Anda untuk melihat peran yang telah diberikan kepada Anda. Seperti disebutkan sebelumnya, CONNECT berisi CREATE SESSION privilege sistem, serta hak lainnya. RESOURCE memiliki beberapa keistimewaan tersendiri. Anda dapat melihat bahwa kedua peran telah diberikan peran sebagai’s default user, user tidak dapat memberikan peran kepada pengguna lain, seperti dicatat oleh opsi Admin (ADM), dan peran belum diberikan oleh sistem operasi. (Lihat Hari 12, “Keamanan Database.”)

Apa yang Anda Memiliki Akses Untuk?

Sekarang Anda mungkin bertanya, Apa yang harus saya akses? Aku tahu siapa aku, aku tahu hak saya, tapi dimana saya bisa mendapatkan data saya? Anda dapat menjawab pertanyaan tersebut dengan melihat berbagai pandangan pengguna yang tersedia dalam data kamus. Bagian ini mengidentifikasi beberapa pandangan membantu.

Mungkin pengguna pandangan dasar yang paling adalah USER_CATALOG, yang hanyalah katalog meja, pandangan, sinonim, dan urutan yang dimiliki oleh pengguna saat ini.

INPUT:
  SQL> SELECT * 
    2 DARI USER_CATALOG;
OUTPUT:
  TABLE_NAME TABLE_TYPE 
  ---------- ---------------------------- 
  TABEL MAGAZINE_TBL 
  MAG_COUNTER URUTAN 
  MAG_VIEW VIEW 
  TABEL SPORTS 

  4 baris yang dipilih. 
ANALISIS:

Contoh ini memberikan daftar cepat tabel dan obyek terkait yang Anda miliki. Anda juga dapat menggunakan sinonim publik untuk USER_CATALOG untuk itu demi kesederhanaan: CAT. Artinya, mencoba * pilih dari kucing;.

Pandangan lain yang berguna adalah ALL_CATALOG, yang memungkinkan Anda untuk melihat tabel yang dimiliki oleh orang lain.

INPUT / OUTPUT:
 SQL> SELECT * 2 FROM ALL_CATALOG;
  PEMILIK TABLE_NAME TABLE_TYPE 
  -------------------- ------------------ ---------- 
  SYS DUAL TABEL 
  DUAL PUBLIK sinonim 
  JSMITH MAGAZINE_TBL TABEL  
  JSMITH MAG_COUNTER URUTAN 
  JSMITH MAG_VIEW VIEW 
  SPORTS JSMITH TABEL 
  VJOHNSON test1 TABEL 
  VJOHNSON Hobi TABEL 
  VJOHNSON CLASSES TABEL 
  MAHASISWA VJOHNSON VIEW 

  10 baris yang dipilih. 
ANALISIS:

objek Lebih dari muncul dalam daftar sebelumnya akan dapat diakses oleh Anda sebagai pengguna. (Tabel SISTEM sendiri akan menambah banyak tabel daftar.) Kami telah sekadar dipersingkat.Pandangan ALL_CATALOG sama dengan tampilan USER_CATALOG, tapi menampilkan semua tabel, pandangan, urutan, dan sinonim yang Anda memiliki akses (bukan hanya yang Anda sendiri).

INPUT:
  SQL> SELECT substr (OBJECT_TYPE, 1,15) OBJECT_TYPE, 
    2 substr (OBJECT_NAME, 1,30) OBJECT_NAME, 
    3 DIBUAT, 
    4 STATUS 
    5 DARI USER_OBJECTS 
    6 ORDER BY 1;
OUTPUT:
  OBJECT_NAME OBJECT_TYPE DIBUAT STATUS 
  -------------- -------------------- ------------ ---- - 
  INDEKS MAGAZINE_INX 14-MAR-97 Valid 
  INDEKS SPORTS_INX 14-MAR-97 Valid 
  INDEKS HOBBY_INX 14-MAR-97 Valid 
  TABEL MAGAZINE_TBL 01-MAR-97 Valid 
  TABEL SPORTS 14-MAR-97 Valid 
  TABEL HOBBY_TBL 16-MAR-97 Valid 

  6 baris yang dipilih. 
ANALISIS:

Anda dapat menggunakan tampilan USER_OBJECTS untuk memilih informasi umum mengenai obyek yang dimiliki pengguna, seperti nama, jenis, tanggal dibuat, tanggal dimodifikasi, dan status obyek. Dalam permintaan sebelumnya, kita memeriksa data yang dibuat dan validasi dari tiap objek yang dimiliki.

INPUT / OUTPUT:
  SQL> SELECT TABLE_NAME, INITIAL_EXTENT, NEXT_EXTENT 
    2 DARI USER_TABLES; 

  SEJAUH TABLE_NAME NEXT INITIAL_EXTENT 
  ---------------------------- -------------- -------- --- 
  MAGAZINE_TBL 1048576 540672 
  OLAHRAGA 114688 114688 
ANALISIS:

Jauh lebih data tersedia ketika memilih dari tampilan USER_TABLES, tergantung apa yang ingin Anda lihat. Sebagian data yang terdiri dari informasi penyimpanan.


CATATAN: Perhatikan pada output bahwa nilai awal dan selanjutnya Sejauh mana dalam bytes. Dalam beberapa implementasi anda dapat menggunakan kolom output format untuk membuat Anda lebih mudah dibaca dengan menambahkan tanda koma. Lihat Hari 19, “Transact-SQL: An Introduction,” dan Hari 20, “SQL * Plus.”


Tampilan ALL_TABLES adalah USER_TABLES sebagai tampilan ALL_CATALOG adalah untuk USER_CATALOG. Dengan kata lain, ALL_TABLES memungkinkan Anda untuk melihat semua tabel yang Anda memiliki akses, bukan hanya meja Anda sendiri. Pandangan ALL_TABLES mungkin termasuk tabel yang ada di katalog pengguna lain.

INPUT / OUTPUT:
 SQL SELECT substr> (PEMILIK, 1,15) PEMILIK, 2 substr (TABLE_NAME, 1,25) TABLE_NAME, 3 substr (TABLESPACE_NAME, 1,13) tablespace 4 DARI ALL_TABLES; PEMILIK tablespace --------- TABLE_NAME ----------- ---------------------------- ---------- SYS SISTEM DUAL JSMITH PENGGUNA MAGAZINE_TBL SMITH SPORTS PENGGUNA VJOHNSON test1 Hobi VJOHNSON USERS USERS CLASSES VJOHNSON PENGGUNA
ANALISIS:

Sekali lagi, Anda telah memilih hanya informasi yang diinginkan. Banyak kolom tambahan dalam ALL_TABLES juga mungkin berisi informasi yang bermanfaat.

Sebagai pengguna database, anda bisa memonitor pertumbuhan tabel dan indeks dalam katalog Anda dengan query tampilan USER_SEGMENTS. Seperti namanya, USER_SEGMENTS memberi Anda informasi tentang setiap segmen, seperti informasi penyimpanan dan luasan diambil. Sebuah segmen dapat terdiri dari sebuah tabel, indeks, kembalikan cluster, sementara, atau cache.Contoh berikut ini menunjukkan bagaimana Anda dapat mengambil informasi yang dipilih dari tampilan USER_SEGMENTS.

INPUT / OUTPUT:
 SQL SELECT substr> (SEGMENT_NAME, 1,30) SEGMENT_NAME, 2 substr (SEGMENT_TYPE, 1,8) SEG_TYPE, 3 substr (TABLESPACE_NAME, 1,25) TABLESPACE_NAME, 4 BYTES, luasan 5 DARI USER_SEGMENTS 6 ORDER BY DESC luasan; SEG_TYPE SEGMENT_NAME TABLESPACE_NAME BYTES luasan -------------------- ------------ --------------- ----- ------------ ------- TABEL PENGGUNA MAGAZINE_TBL 4292608 7 PENGGUNA INDEKS SPORTS_INX 573.440 4 TABEL PENGGUNA SPORTS 344.064 2 PENGGUNA INDEKS MAGAZINE_INX 1.589.248 1
  4 baris yang dipilih. 
ANALISIS:

Output dalam permintaan sebelumnya telah disortir oleh luasan dalam urutan; segmen dengan pertumbuhan paling (luasan diambil) muncul pertama dalam hasil.

Sekarang Anda tahu mana tabel Anda memiliki akses ke, Anda akan ingin mengetahui apa yang dapat Anda lakukan untuk setiap tabel. Apakah Anda hanya terbatas pada permintaan, atau dapat Anda memperbarui tabel? Pandangan ALL_TAB_PRIVS daftar semua hak istimewa yang telah Anda sebagai pengguna database pada setiap meja tersedia untuk Anda.

INPUT / OUTPUT:
 SQL> SELECT substr (TABLE_SCHEMA, 1,10) PEMILIK, 2 substr (TABLE_NAME, 1,25) TABLE_NAME, 3 HAK ISTIMEWA 4 DARI ALL_TAB_PRIVS; PEMILIK HAK ISTIMEWA TABLE_NAME ------------ ----- --------------- --------- SYS JSMITH INSERT SELECT DUAL MAGAZINE_TBL JSMITH JSMITH PILIH UPDATE MAGAZINE_TBL MAGAZINE_TBL JSMITH MAGAZINE_TBL SPORTS JSMITH JSMITH DELETE SELECT INSERT UPDATE SPORTS SPORTS JSMITH JSMITH SPORTS VJOHNSON VJOHNSON DELETE SELECT test1 test1 test1 VJOHNSON INSERT UPDATE DELETE VJOHNSON VJOHNSON Hobi test1 CLASSES VJOHNSON SELECT SELECT
ANALISIS:

Seperti yang Anda lihat, Anda dapat memanipulasi data dalam beberapa tabel, sedangkan Anda memiliki akses read-only (SELECT hanya) kepada orang lain.

Bila Anda membuat objek, Anda biasanya perlu tahu di mana untuk menempatkan mereka dalam database, kecuali Anda membiarkan tujuan target Anda untuk mengambil default. Sebuah database Oracle ini dipecah menjadi tablespace, yang masing-masing mampu menyimpan objek. Setiap tablespace dialokasikan sejumlah ruang disk, sesuai dengan apa yang tersedia pada sistem. ruang disk biasanya diperoleh melalui administrator sistem (SA).

Permintaan berikut ini dari pandangan disebut USER_TABLESPACES, yang akan daftar tablespace yang Anda memiliki akses ke, default dan selanjutnya ukuran awal objek diciptakan di dalamnya, dan status mereka.

INPUT / OUTPUT:
 SQL> SELECT substr (TABLESPACE_NAME, 1,30) TABLESPACE_NAME, 2 INITIAL_EXTENT, 3 NEXT_EXTENT, 4 PCT_INCREASE, 5 STATUS 6 DARI USER_TABLESPACES; TABLESPACE_NAME INITIAL_EXTENT ----------------- NEXT_EXTENT STATUS PCT_INCREASE ------------- -------------- ----------- ------------ ------ SISTEM 32768 16384 1 RBS ONLINE 2.097.152 2.097.152 1 ONLINE TEMP 114.688 114.688 1 32.768 16.384 ALAT ONLINE USERS ONLINE 1 32.768 16.384 1 ONLINE
  5 baris yang dipilih. 
ANALISIS:

Jenis permintaan ini sangat berguna ketika Anda membuat objek, seperti tabel dan indeks, yang membutuhkan penyimpanan. Ketika sebuah tabel atau indeks dibuat, jika berikutnya penyimpanan parameter dan awal tidak ditentukan dalam DDL, tabel atau indeks akan mengambil nilai default tablespace’s tersebut. Konsep yang sama berlaku untuk PCT KENAIKAN, yang merupakan parameter Oracle menetapkan persentase ruang yang dialokasikan obyek harus diambil saat itu tumbuh. Jika nilai untuk PCT KENAIKAN tidak ditentukan ketika tabel atau indeks dibuat, database server akan mengalokasikan nilai default yang ditentukan untuk tablespace yang sesuai. Melihat nilai-nilai default memungkinkan Anda untuk menentukan apakah Anda perlu menggunakan klausa penyimpanan dalam pernyataan CREATE.

Kadang-kadang, namun Anda perlu tahu lebih dari yang tablespace Anda dapat mengakses, yaitu, membangun tabel di bawah. Misalnya, Anda mungkin perlu tahu apa batas Anda dalam tablespace sehingga Anda bisa mengatur pembentukan dan ukuran benda-benda Anda. Pandangan USER_TS_QUOTAS menyediakan informasi yang diperlukan. Menampilkan permintaan berikutnya pengguna ruang batas untuk membuat objek dalam database.

INPUT / OUTPUT:
  SQL> substr SELECT (TABLESPACE_NAME, 1,30) TABLESPACE_NAME, 
    2 BYTES, MAX_BYTES 
    3 DARI USER_TS_QUOTAS; 

  TABLESPACE_NAME BYTES MAX_BYTES 
  ------------------------------ ---------- ---------- 
  SISTEM 0 0 
  ALAT 5242880 16384 
  573.440 PENGGUNA -1 

  3 baris yang dipilih. 
ANALISIS:

Hasil sebelumnya khas output dari data Oracle kamus. BYTES mengidentifikasi jumlah byte dalam tablespace yang berkaitan dengan user BYTES. MAX mengidentifikasi maksimum byte yang diberikan kepada pengguna, atau user kuota, di tablespace tersebut. Dua yang pertama nilai dalam kolom ini adalah diri-jelas baris. Para -1 pada ketiga berarti kuota tak terbatas – yaitu, tidak ada batas yang ditempatkan pada user untuk tablespace tersebut.


CATATAN: Fungsi substr banyak muncul dalam permintaan sebelumnya data dilihat kamus. Anda dapat menggunakan banyak fungsi yang Anda pelajari sebelumnya untuk meningkatkan readablility data Anda mengambil. Penggunaan standar penamaan yang konsisten dalam database Anda mungkin mengizinkan anda membatasi ukuran data dalam output Anda, seperti yang telah kita lakukan dalam contoh ini.


Contoh-contoh ini menunjukkan bagaimana semua pengguna database biasa dapat mengekstraksi informasi dari kamus data. Pandangan ini adalah hanya beberapa dari sekian banyak yang ada di kamus’s data Oracle. Penting untuk memeriksa implementasi database Anda untuk melihat apa yang tersedia bagi Anda di kamus data Anda. Ingat, Anda harus menggunakan data kamus untuk mengelola kegiatan database Anda. Meskipun sistem katalog berbeda dengan implementasi, Anda hanya perlu memahami konsep ini dan mengetahui bagaimana untuk mengambil data yang diperlukan untuk melengkapi pekerjaan Anda.

Sistem DBA Tampilan

Pandangan DBA yang berada dalam sebuah kamus data Oracle biasanya yang utama, atau yang paling umum, pandangan bahwa DBA akan akses. Pandangan-pandangan ini tidak ternilai dengan produktivitas dari setiap DBA. Mengambil tabel ini jauh dari DBA akan seperti merampas seorang tukang kayu dari palu.

Seperti yang Anda harapkan, Anda harus memiliki hak istimewa sistem SELECT_ANY_TABLE, yang terkandung dalam peranan DBA, untuk mengakses tabel DBA. Misalnya, Anda JSMITH, yang tidak memiliki hak istimewa yang diperlukan untuk memilih dari tabel DBA.

INPUT:
  SQL> SELECT * 
    2 DARI USER_ROLE_PRIVS;
OUTPUT:
 USERNAME               GRANTED_ROLE            ADM    DEF    OS_
------------------     --------------------    ---    ---    --
JSMITH                 CONNECT                 NO     YES    NO
JSMITH                 RESOURCE                NO     YES    NO
INPUT / OUTPUT:
 SQL> SELECT *
  2 FROM SYS.DBA_ROLES;
FROM SYS.DBA_ROLES;
       * 

  ERROR pada baris 2: 
ORA-00942: table or view does not exist
ANALISIS:

When you try to access a table to which you do not have the appropriate privileges, an error is returned stating that the table does not exist. This message can be a little misleading. Virtually, the table does not exist because the user cannot “see” the table. A solution to the problem above would be to grant the role DBA to JSMITH. This role would have to be granted by a DBA, of course.

Database User Information

The USER_USERS dan dilihat All_users memberikan informasi minimal tentang pengguna.Pandangan DBA disebut DBA_USERS (dimiliki oleh SYS) memberi Anda informasi tentang semua pengguna jika Anda memiliki peran DBA atau hak istimewa SELECT_ANY_TABLE, seperti ditunjukkan pada contoh berikut.

INPUT:
 SQL> SELECT * 2 FROM SYS.DBA_USERS;
OUTPUT:
  USER_ID USERNAME PASSWORD 
  -------------------------------- ------ ------------ ----------------- 
  TEMPORARY_TABLESPACE DEFAULT_TABLESPACE DIBUAT 
  ------------------------------ -------------------- ---------- -------- 
  PROFIL 
  ------------------------------ 
  SYS 0 4012DA490794C16B 
  SISTEM TEMP 06-Juni-96 
  DEFAULT 

  JSMITH 5 A4A94B17405C10B7 
  PENGGUNA TEMP 06-Juni-96 
  DEFAULT 

  2 baris yang dipilih. 
ANALISIS:

Bila Anda memilih semua dari tampilan DBA_USERS, Anda dapat melihat informasi penting pada setiap pengguna. Perhatikan bahwa password dienkripsi. DBA_USERS adalah pandangan utama yang digunakan oleh DBA untuk mengelola pengguna.

Keamanan Database

Tiga kamus data dasar dilihat berurusan dengan keamanan, meskipun pandangan ini dapat dikaitkan dengan-gether dengan pandangan yang terkait lainnya untuk informasi lebih lengkap. Ketiga dilihat berurusan dengan peran database, peran yang diberikan kepada pengguna, dan sistem hak istimewa yang diberikan kepada pengguna. Tiga pandangan yang diperkenalkan di bagian ini adalah DBA_ROLES, DBA_ROLE_PRIVS, dan DBA_SYS_PRIVS. Permintaan contoh berikut menunjukkan bagaimana untuk memperoleh informasi yang berkaitan dengan keamanan database.

INPUT:
  SQL> SELECT * 
    2 DARI SYS.DBA_ROLES;
OUTPUT:
  PERAN PASSWORD 
  ------------------------------ -------- 
  NO CONNECT 
  RESOURCE NO 
  NO DBA 
  NO EXP_FULL_DATABASE 
  NO IMP_FULL_DATABASE 
  NO END_USER_ROLE 

  6 baris yang dipilih. 
ANALISIS:

Tampilan DBA_ROLES daftar semua peran yang telah dibuat di dalam database. Hal ini memberi nama peran dan apakah atau tidak peran memiliki password.

INPUT:
  SQL> SELECT * 
    2 DARI SYS.DBA_ROLE_PRIVS 
    3 WHERE Grantee = 'RJENNINGS'; 

  Penerima beasiswa GRANTED_ROLE ADM DEF 
  ------------------------------ -------------------- ---------- --- --- 
  YA NO CONNECT RJENNINGS 
  YA NO RJENNINGS DBA 
  YA NO RJENNINGS RESOURCE 

  3 baris yang dipilih. 
ANALISIS:

Pandangan DBA_ROLE_PRIVS memberikan informasi tentang peran database yang telah diberikan kepada pengguna. Kolom pertama adalah penerima beasiswa, atau pengguna. Menampilkan kolom kedua peran yang diberikan. Perhatikan bahwa setiap peran yang diberikan kepada user sesuai dengan catatan dalam tabel. ADM mengidentifikasi apakah peran itu diberikan dengan opsi Admin, yang berarti bahwa pengguna dapat memberikan peran yang cocok untuk pengguna lain. Kolom terakhir adalah DEFAULT, menyatakan apakah peran yang cocok peran default untuk pengguna.

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI SYS.DBA_SYS_PRIVS 
    3 WHERE Grantee = 'RJENNINGS'; 

  Penerima beasiswa HAK ISTIMEWA ADM 
  ------------------------------ -------------------- -------------------- --- 
  CREATE RJENNINGS SESI NO 
  RJENNINGS UNLIMITED tablespace NO 

  2 baris yang dipilih. 
ANALISIS:

Pandangan DBA_SYS_PRIVS daftar semua level hak istimewa sistem yang telah diberikan kepada pengguna. Pandangan ini mirip dengan DBA_ROLE_PRIVS. Anda dapat menyertakan sistem hak istimewa dalam peran tersebut dengan memberikan hak istimewa sistem untuk peran, karena Anda akan ke pengguna.

Database Objects

Database objek fokus utama lain untuk DBA. Beberapa pandangan dalam kamus data memberikan informasi tentang objek, seperti tabel dan indeks. Pandangan ini dapat berisi informasi umum atau mereka dapat berisi informasi rinci tentang objek yang berada dalam database.

INPUT:
  SQL> SELECT * 
    2 DARI SYS.DBA_CATALOG 
    3 WHERE ROWNUM <5;
OUTPUT:
  PEMILIK TABLE_NAME TABLE_TYPE 
  ------------------------------ -------------------- ---------- ---------- 
  CDEF $ TABEL SYS 
  TAB SYS $ TABEL 
  SYS IND $ TABEL 
  SYS CLU $ TABEL 

  4 baris yang dipilih. 
ANALISIS:

DBA_CATALOG adalah hal yang sama seperti USER_CATALOG, hanya pemilik meja ini disertakan. Sebaliknya, tampilan USER_CATALOG berhubungan semata-mata dengan tabel yang dimiliki pengguna saat ini. DBA_CATALOG adalah pandangan bahwa DBA dapat digunakan untuk mengambil cepat melihat semua tabel.

Permintaan berikut ini menunjukkan jenis objek yang ada di database tertentu.


TIP: Anda dapat menggunakan ROWNUM untuk mempersempit hasil pencarian Anda ke nomor baris tertentu untuk tujuan pengujian panggilan. Oracle ROWNUM sebuah pseudocolumn,.ROWNUM seperti ROWID, dapat digunakan pada setiap tabel database atau melihat.


INPUT / OUTPUT:
 SQL> SELECT DISTINCT(OBJECT_TYPE)
  2  FROM SYS.DBA_OBJECTS;

OBJECT_TYPE
  ------------ 
CLUSTER
DATABASE LINK
  FUNGSI 
INDEX
  PAKET 
PACKAGE BODY
  PROSEDUR 
SEQUENCE
SYNONYM
  TABEL 
TRIGGER
VIEW

12 rows selected.
ANALISIS:

Fungsi berbeda dalam permintaan sebelumnya daftar semua jenis objek yang unik yang ada di database. Query ini adalah cara yang baik untuk mengetahui apa jenis objek database desainer dan pengembang yang menggunakan.

Pandangan DBA_TABLES memberikan informasi spesifik tentang tabel database, kebanyakan tentang penyimpanan.

INPUT / OUTPUT:
 SQL> SELECT SUBSTR(OWNER,1,8) OWNER,
  2       SUBSTR(TABLE_NAME,1,25) TABLE_NAME,
  3 SUBSTR(TABLESPACE_NAME,1,30) TABLESPACE_NAME
  4 FROM SYS.DBA_TABLES
  5  WHERE OWNER = 'JSMITH';

OWNER    TABLE_NAME                TABLESPACE_NAME
-------- ------------------------  --------------------
JSMITH   MAGAZINE_TBL              USERS
JSMITH   HOBBY_TBL                 USERS
JSMITH   ADDRESS_TBL               SYSTEM
JSMITH   CUSTOMER_TBL              USERS

4 rows selected.
ANALISIS:

Semua tabel dalam tablespace USERS kecuali ADDRESS_TBL, yang ada di tablespace SYSTEM. Karena hanya Anda yang pernah tabel harus simpan di tablespace SYSTEM adalah tabel SYSTEM, DBA perlu mengetahui situasi ini. Ini merupakan hal yang baik Anda berlari query ini!

JSMITH harus segera diminta untuk memindahkan mejanya ke tablespace lain yang memenuhi syarat.

Tampilan DBA_SYNONYMS menyediakan daftar semua sinonim yang ada di database.DBA_SYNONYMS memberikan daftar sinonim untuk semua pengguna database, tidak seperti USER_SYNONYMS, yang berisi hanya nama-muradif pribadi pengguna saat ini.

INPUT / OUTPUT:
 SQL> SELECT SYNONYM_NAME,
  2 SUBSTR(TABLE_OWNER,1,10) TAB_OWNER,
  3  SUBSTR(TABLE_NAME,1,30) TABLE_NAME
  4 FROM SYS.DBA_SYNONYMS
  5 WHERE OWNER = 'JSMITH';

SYNONYM_NAME                   TAB_OWNER  TABLE_NAME
------------------------------ ---------- ----------
TRIVIA_SYN                     VJOHNSON   TRIVIA_TBL

  1 baris yang dipilih. 
ANALISIS:

Menunjukkan output sebelumnya bahwa JSMITH memiliki sinonim disebut TRIVIA_SYN di atas meja yang disebut TRIVIA_TBL yang dimiliki oleh VJOHNSON.

Sekarang anggaplah bahwa Anda ingin mendapatkan daftar semua tabel dan indeks mereka milik JSMITH. Anda akan menulis permintaan serupa dengan berikut ini, menggunakan DBA_INDEXES.

INPUT / OUTPUT:
 SQL> SELECT substr (TABLE_OWNER, 1,10) TBL_OWNER, 2 substr (TABLE_NAME, 1,30) TABLE_NAME, 3 substr (INDEX_NAME, 1,30) INDEX_NAME 4 5 WHERE SYS.DBA_INDEXES DARI PEMILIK 'JSMITH =' 6 DAN ROWNUM < 5 7 ORDER BY TABLE_NAME; TBL_OWNER TABLE_NAME INDEX_NAME ---------- ------------------------------ - ----------- JSMITH ADDRESS_TBL ADDR_INX JSMITH CUSTOMER_TBL CUST_INX JSMITH HOBBY_TBL HOBBY_PK JSMITH MAGAZINE_TBL MAGAZINE_INX 4 baris yang dipilih.
ANALISIS:

Sebuah query seperti sebelumnya adalah metode yang mudah dari daftar semua indeks yang termasuk dalam skema dan mencocokkannya dengan tabel terkait mereka.

INPUT / OUTPUT:
 SQL> SELECT substr (TABLE_NAME, 1,15) TABLE_NAME, 2 substr (INDEX_NAME, 1,30) INDEX_NAME, 3 substr (COLUMN_NAME, 1,15) COLUMN_NAME, 4 COLUMN_POSITION 5 DARI SYS.DBA_IND_COLUMNS 6 WHERE TABLE_OWNER 'JSMITH =' 7 DAN <ROWNUM 10 8 ORDER BY 1,2,3; COLUMN_NAME TABLE_NAME INDEX_NAME COLUMN_POSITION -------------- ------------------- ----------- -------------- ADDRESS_TBL ADDR_INX --------------- PERS_ID 1 ADDR_INX NAMA ADDRESS_TBL ADDRESS_TBL ADDR_INX 2 KOTA 3 CUSTOMER_TBL CUST_INX CUST_ID 1 CUSTOMER_TBL CUST_INX CUST_NAME 2 CUSTOMER_TBL CUST_INX CUST_ZIP 3 HOBBY_TBL HOBBY_PK SAKEY 1 MAGAZINE_TBL MAGAZINE_INX ISSUE_NUM 1 MAGAZINE_TBL MAGAZINE_INX EDITOR 2 9 baris yang dipilih.
ANALISIS:

Sekarang Anda telah memilih setiap kolom yang diindeks dalam setiap tabel dan memerintahkan hasil dengan urutan kolom yang muncul dalam indeks. Anda telah belajar tentang meja, tapi apa memegang meja? Tablespace berada pada tingkat yang lebih tinggi daripada objek seperti tabel, indeks dan sebagainya. Tablespace adalah Oracle’s mekanisme untuk mengalokasikan ruang untuk basis data. Untuk mengalokasikan ruang, Anda harus tahu apa tablespace saat ini tersedia. Anda dapat melakukan pilih dari DBA_TABLESPACES untuk melihat daftar semua tablespace dan status mereka, seperti ditunjukkan pada contoh berikut.

INPUT / OUTPUT:
 SQL SELECT TABLESPACE_NAME>, STATUS 2 STATUS TABLESPACE_NAME DARI SYS.DBA_TABLESPACES ------ ------------------------------ SISTEM RBS ONLINE ONLINE ALAT TEMP ONLINE ONLINE USERS ONLINE ONLINE DATA_TS INDEX_TS ONLINE 7 baris yang dipilih.
ANALISIS:

Hasil sebelumnya memberitahu Anda bahwa semua tablespace sedang online, yang berarti bahwa mereka yang tersedia untuk digunakan. Jika sebuah tablespace offline, maka objek database di dalamnya (yaitu, tabel) tidak dapat diakses.

Apakah kuota JSMITH di semua tablespace yang ia memiliki akses? Dengan kata lain, berapa banyak ruang yang tersedia untuk objek database JSMITH’s?

INPUT / OUTPUT:
 SQL> SELECT TABLESPACE_NAME,
  2     BYTES,
  3   MAX_BYTES
  4  FROM SYS.DBA_TS_QUOTAS
  5 WHERE USERNAME = 'JSMITH'

TABLESPACE_NAME                     BYTES  MAX_BYTES
------------------------------  ---------- ----------
DATA_TS                         134111232         -1
INDEX_TS                        474390528         -1

2 rows selected.
ANALISIS:

JSMITH memiliki kuota terbatas di kedua tablespace untuk yang memiliki akses. Dalam hal ini jumlah byte yang tersedia di tablespace tersebut tersedia pada pertama-datang pertama-dilayani. Misalnya, jika JSMITH menggunakan semua ruang bebas di DATA_TS, maka tidak ada orang lain yang dapat membuat objek di sini.

Pertumbuhan Database

Bagian ini membahas dua pandangan bahwa bantuan dalam pengukuran pertumbuhan database: DBA_SEGMENTS dan DBA_EXTENTS. DBA_SEGMENTS menyediakan informasi tentang masing-masing segmen, atau objek dalam database seperti alokasi penyimpanan, ruang digunakan, dan luasan. Setiap kali sebuah tabel atau indeks tumbuh dan harus mengambil lebih banyak tempat seperti yang telah diidentifikasi oleh NEXT_EXTENT, meja mengambil sejauh lain. tabel biasanya menjadi terpecah ketika tumbuh dengan cara ini.DBA_EXTENTS menyediakan informasi tentang masing-masing segmen tingkat.

INPUT:
 SQL> SELECT SUBSTR(SEGMENT_NAME,1,30) SEGMENT_NAME,
  2  SUBSTR(SEGMENT_TYPE,1,12) SEGMENT_TYPE,
  3  BYTES,
  4   EXTENTS,
  5 FROM SYS.DBA_SEGMENTS
  6 WHERE OWNER = 'TWILLIAMS'
  7  AND ROWNUM < 5;
OUTPUT:
 SEGMENT_NAME                   SEGMENT_TYPE      BYTES    EXTENTS
------------------------------ ------------ ---------- ----------
INVOICE_TBL                    TABLE            163840         10
COMPLAINT_TBL                  TABLE           4763783          3
HISTORY_TBL                    TABLE         547474996         27
HISTORY_INX                    INDEX         787244534         31

4 rows selected.
ANALISIS:

Dengan melihat output dari DBA_SEGMENTS, Anda dapat dengan mudah mengidentifikasi tabel yang paling mengalami pertumbuhan dengan mengacu pada jumlah luasan. Kedua HISTORY_TBL dan HISTORY_INXhave tumbuh lebih dari dua tabel lainnya.

Selanjutnya Anda dapat melihat setiap tingkat salah satu meja. Anda bisa mulai dengan INVOICE_TBL.

INPUT / OUTPUT:
SQL> SELECT SUBSTR(OWNER,1,10) OWNER, 2 SUBSTR(SEGMENT_NAME,1,30) SEGMENT_NAME, 3 EXTENT_ID, 4 BYTES 5 FROM SYS.DBA_EXTENTS 6 WHERE OWNER = 'TWILLIAMS' 7 AND SEGMENT_NAME = 'INVOICE_TBL' 8 ORDER BY EXTENT_ID; OWNER      SEGMENT_NAME                    EXTENT_ID     BYTES ---------- ------------------------------ ---------- -------- TWILLIAMS  INVOICE_TBL                            0      16384 TWILLIAMS  INVOICE_TBL                            1      16384 TWILLIAMS  INVOICE_TBL                            2      16384 TWILLIAMS  INVOICE_TBL                            3      16384 TWILLIAMS  INVOICE_TBL                            4      16384 TWILLIAMS  INVOICE_TBL                            5      16384 TWILLIAMS  INVOICE_TBL                            6      16384 TWILLIAMS  INVOICE_TBL                            7      16384 TWILLIAMS  INVOICE_TBL                            8      16384 TWILLIAMS  INVOICE_TBL                            9      16384 10 rows selected.
ANALISIS:

Contoh ini menampilkan setiap tingkat meja, extent_id, dan ukuran sejauh dalam bytes. Setiap tingkat hanya 16K, dan karena ada 10 luasan, Anda mungkin ingin untuk membangun kembali meja dan meningkatkan ukuran initial_extent untuk mengoptimalkan penggunaan ruang.Membangun kembali meja akan memungkinkan semua data tabel untuk masuk ke tingkat satu, dan karenanya, tidak terpecah-pecah.

Ruang yang dialokasikan

Oracle mengalokasikan ruang untuk basis data dengan menggunakan “file data.” Ruang secara logis ada dalam tablespace, tapi file data adalah entitas fisik tablespace. Dalam implementasi lain, data juga akhirnya terdapat dalam file data, meskipun file-file data dapat dirujuk oleh nama lain. Tampilan disebut DBA_DATA_FILES memungkinkan Anda untuk melihat apa sebenarnya dialokasikan untuk sebuah tablespace.

INPUT / OUTPUT:
SQL> SELECT SUBSTR(TABLESPACE_NAME,1,25) TABLESPACE_NAME, 2 SUBSTR(FILE_NAME,1,40) FILE_NAME, 3 BYTES 4 FROM SYS.DBA_DATA_FILES; TABLESPACE_NAME           FILE_NAME                                     BYTES ------------------------- ---------------------------------------- ---------- SYSTEM                    /disk01/system0.dbf                        41943040 RBS                       /disk02/rbs0.dbf                          524288000 TEMP                      /disk03/temp0.dbf                         524288000 TOOLS                     /disk04/tools0.dbf                         20971520 USERS                     /disk05/users0.dbf                         20971520 DATA_TS                   /disk06/data0.dbf                         524288000 INDEX_TS                  /disk07/index0.dbf                        524288000 7 rows selected.
ANALISIS:

Anda sekarang dapat melihat berapa banyak ruang telah dialokasikan untuk setiap tablespace yang ada di database. Perhatikan nama file data sesuai dengan tablespace yang mereka milik.

Space Available

Sebagai contoh berikut menunjukkan, tampilan DBA_FREE_SPACE memberitahu Anda berapa banyak ruang kosong tersedia dalam tablespace masing-masing.

INPUT:
 SQL> SELECT TABLESPACE_NAME, SUM(BYTES)
  2 FROM SYS.DBA_FREE_SPACE
  3 GROUP BY TABLESPACE_NAME;
OUTPUT:
TABLESPACE_NAME                SUM(BYTES) ------------------------------ ---------- SYSTEM                           23543040 RBS                             524288000 TEMP                            524288000 TOOLS                            12871520 USERS                              971520 DATA_TS                            568000 INDEX_TS                          1288000 7 rows selected.
ANALISIS:

The preceding example lists the total free space for each tablespace. You can also view each segment of free space by simply selecting bytes from DBA_FREE_SPACE instead of SUM(bytes) .

Rollback Segments

Sebagai daerah untuk menggulingkan transaksi adalah bagian penting untuk kinerja database, Anda perlu tahu apa segmen rollback yang tersedia.DBA_ROLLBACK_SEGS menyediakan informasi ini.

INPUT:
 SQL> SELECT OWNER,
  2 SEGMENT_NAME
  3  FROM SYS.DBA_ROLLBACK_SEGS;
OUTPUT:
 OWNER  SEGMENT_NAME
------ ------------
SYS    SYSTEM
SYS    R0
SYS    R01
SYS    R02
SYS    R03
SYS    R04
SYS    R05

  7 baris yang dipilih. 
ANALISIS:

Contoh ini melaksanakan pilih sederhana untuk daftar segmen rollback semua nama. Jauh lebih banyak data yang tersedia untuk evaluasi Anda.

Dynamic Performance Views

Oracle DBAs dilihat kinerja sering mengakses dinamis karena mereka memberikan detail yang lebih besar tentang ukuran kinerja internal dari banyak data lainnya dilihat kamus. (Pandangan DBA mengandung beberapa informasi yang sama.)

Pandangan ini melibatkan rincian luas, yang merupakan implementasi khusus. Bagian ini hanya menyediakan tinjauan tentang jenis informasi sebuah kamus berisi data yang diberikan.

Sesi Informasi

Sebuah perintah DESCRIBE V SESI $ dilihat berikut. (DESCRIBE adalah perintah SQL * Plus dan akan dibahas pada Hari 20) Anda bisa melihat detail yang terdapat di dalam view..

INPUT:
 SQL> DESCRIBE V$SESSION
OUTPUT:
 Nama Null? Type ------------------------------  -------  ---- SADDR                                    RAW(4) SID                                      NUMBER SERIAL#                                  NUMBER AUDSID                                   NUMBER PADDR                                    RAW(4) USER#                                    NUMBER USERNAME                                 VARCHAR2(30) COMMAND                                  NUMBER TADDR                                    VARCHAR2(8) LOCKWAIT                                 VARCHAR2(8) STATUS                                   VARCHAR2(8) SERVER                                   VARCHAR2(9) SCHEMA#                                  NUMBER SCHEMANAME                               VARCHAR2(30) OSUSER                                   VARCHAR2(15) PROCESS                                  VARCHAR2(9) MACHINE                                  VARCHAR2(64) TERMINAL                                 VARCHAR2(10) PROGRAM                                  VARCHAR2(48) TYPE                                     VARCHAR2(10) SQL_ADDRESS                              RAW(4) SQL_HASH_VALUE                           NUMBER PREV_SQL_ADDR                            RAW(4) PREV_HASH_VALUE                          NUMBER MODULE                                   VARCHAR2(48) MODULE_HASH                              NUMBER ACTION                                   VARCHAR2(32) ACTION_HASH                              NUMBER CLIENT_INFO                              VARCHAR2(64) FIXED_TABLE_SEQUENCE                     NUMBER ROW_WAIT_OBJ#                            NUMBER ROW_WAIT_FILE#                           NUMBER ROW_WAIT_BLOCK#                          NUMBER ROW_WAIT_ROW#                            NUMBER LOGON_TIME                               DATE LAST_CALL_ET                             NUMBER

To get information about current database sessions, you could write a SELECT statement similar to the one that follows from V$SESSION.

INPUT / OUTPUT:
SQL> SELECT USERNAME, COMMAND, STATUS 2 FROM V$SESSION 3 WHERE USERNAME IS NOT NULL; USERNAME                          COMMAND STATUS ------------------------------ ---------- -------- TWILLIAMS                               3 ACTIVE JSMITH                                  0 INACTIVE 2 rows selected.
ANALISIS:

TWILLIAMS ini login ke database dan melakukan pilih dari database, yang diwakili oleh perintah 3.

JSMITH hanyalah login ke database. sesi-Nya tidak aktif, dan ia tidak melakukan semua jenis perintah. Lihat dokumentasi database anda untuk mengetahui bagaimana perintah yang diidentifikasi dalam kamus data. Perintah termasuk SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, dan DROP TABLE.

Statistik Kinerja

Data statistik mengenai kinerja luar wilayah sesi pengguna juga tersedia dalam data kamus.Jenis data yang lebih spesifik dari implementasi pandangan lain yang dibahas hari ini.

Statistik Kinerja meliputi data seperti membaca / menulis tingkat, hit sukses pada tabel, gunakan sistem area global, penggunaan cache memori, informasi kembalikan segmen rinci, informasi transaksi log rinci, dan kunci meja dan menunggu. Pengetahuan baik tentang hampir tak berdasar.

Rencana Tabel

Tabel Rencana adalah tabel default yang digunakan dengan alat pernyataan Oracle SQL, MENJELASKAN RENCANA. (Lihat Hari 15) Tabel ini. Dibuat oleh Oracle disebut script UTLXPLAN.SQL, yang disalin ke server bila perangkat lunak telah diinstal. Data yang dihasilkan oleh alat RENCANA MENJELASKAN, yang Mempopulai RENCANA meja dengan informasi tentang objek yang sedang diakses dan langkah-langkah dalam rencana pelaksanaan pernyataan SQL.

Ringkasan

Meskipun rincian dari kamus data bervariasi dari satu implementasi ke yang lain, konten tetap konseptual sama pada semua database relasional. Anda harus mengikuti aturan sintaks dan sistem manajemen database, tapi contoh hari ini akan memberikan Anda kepercayaan diri untuk permintaan data kamus Anda dan untuk menjadi kreatif ketika melakukan itu.

Catatan: Menjelajahi kamus data petualangan, dan Anda akan perlu untuk mengeksplorasi untuk belajar untuk menggunakannya secara efektif.

1. Dalam Oracle, bagaimana Anda bisa mencari tahu apa tabel dan tampilan Anda sendiri?
2. Jenis informasi yang disimpan dalam kamus data?
3. Bagaimana Anda bisa menggunakan statistik kinerja?
4. Apa sajakah objek database?

Sumber ; http://www.webbasedprogramming.com

SQL Tuning

Tinggalkan komentar

Definisi

Memperlancar SQL adalah sebagai banyak bagian dari kinerja aplikasi sebagai database merancang dan tuning. Tidak peduli bagaimana menyempurnakan database atau bagaimana suara struktur database, Anda tidak akan menerima hasil query tepat waktu yang diterima kepada Anda, atau bahkan lebih buruk lagi, pelanggan, jika Anda tidak mengikuti beberapa pedoman dasar.Mempercayai kami, jika pelanggan tidak puas, maka Anda bisa bertaruh atasan Anda tidak akan puas baik.

Tujuan

Anda sudah tahu tentang komponen utama dari bahasa database relasional dari SQL dan bagaimana berkomunikasi dengan database, sekarang saatnya untuk menerapkan pengetahuan Anda untuk hidup kinerja keprihatinan-nyata. Tujuan Hari 15 adalah untuk merekomendasikan metode untuk memperbaiki kinerja, atau pelurusan, pernyataan SQL. Pada akhir hari ini, Anda harus

  • Memahami konsep perampingan kode SQL Anda
  • Memahami perbedaan antara beban batch dan pengolahan transaksi dan pengaruhnya terhadap kinerja database
  • Mampu untuk memanipulasi kondisi dalam query Anda untuk mempercepat pengambilan data
  • database Jadilah akrab dengan dasar beberapa elemen yang mempengaruhi seluruh tuning

Berikut analogi untuk membantu Anda memahami frase merampingkan pernyataan SQL: Tujuan dari perenang kompetitif adalah untuk menyelesaikan peristiwa dalam waktu sedikit mungkin tanpa didiskualifikasi. Para perenang harus memiliki teknik yang dapat diterima, dapat torpedo diri mereka sendiri melalui air, dan penggunaan semua sumber daya fisik mereka seefektif mungkin.Dengan setiap stroke dan napas mereka mengambil, perenang kompetitif tetap efisien dan bergerak melalui air dengan sedikit hambatan yang sangat.

Lihatlah query SQL Anda dengan cara yang sama. Anda harus selalu tahu persis apa yang ingin Anda capai dan kemudian berusaha untuk mengikuti jalan sedikit perlawanan. Semakin banyak waktu yang Anda habiskan untuk merencanakan, semakin sedikit waktu Anda harus menghabiskan merevisi nanti. Tujuan Anda harus selalu untuk mengambil data yang akurat dan untuk melakukannya dalam waktu sesedikit mungkin. Seorang pengguna akhir menunggu di lambat permintaan seperti restoran lapar tak sabar menunggu makan lambat. Meskipun Anda dapat menulis permintaan yang paling dalam beberapa cara, susunan komponen dalam permintaan adalah faktor yang membuat perbedaan detik, menit, dan kadang-kadang jam saat Anda mengeksekusi querySQL. Memperlancar adalah proses menemukan pengaturan optimal unsur-unsur dalam permintaan Anda.

Selain perampingan pernyataan SQL Anda, Anda juga harus mempertimbangkan beberapa faktor lain ketika mencoba untuk meningkatkan kinerja database umum, misalnya, transaksi pengguna konkuren yang terjadi dalam database, tabel pengindeksan, dan turun database tuning-dalam.


CATATAN: Today’s contoh penggunaan pribadi Oracle7 dan alat-alat yang tersedia dengan sistem manajemen database relasional Oracle7.3;. Konsep dibahas saat ini tidak terbatas pada Oracle mereka dapat diterapkan untuk lain sistem manajemen database relasional.


Membuat Laporan SQL Anda Readable

Meskipun mudah dibaca tidak mempengaruhi kinerja aktual statemen SQL, praktek pemrograman yang baik panggilan untuk kode dibaca. Keterbacaan terutama penting jika Anda memiliki beberapa kondisi di klausa WHERE. Siapa pun membaca klausul harus dapat menentukan apakah tabel yang bergabung dengan benar dan harus mampu memahami urutan kondisi.

Cobalah untuk membaca pernyataan ini:

  SQL> SELECT EMPLOYEE_TBL.EMPLOYEE_ID, EMPLOYEE_TBL.NAME, EMPLOYEE_PAY_TBL.SALARY, EMPLOYEE_PAY_TBL.HIRE_DATE 
    2 DARI EMPLOYEE_TBL, EMPLOYEE_PAY_TBL 
    3 WHERE EMPLOYEE_TBL.EMPLOYEE_ID = EMPLOYEE_PAY_TBL.EMPLOYEE_ID DAN 
    4 EMPLOYEE_PAY_TBL.SALARY> 30.000 ATAU (ANTARA EMPLOYEE_PAY_TBL.SALARY 25.000 
    5 DAN 30.000 DAN EMPLOYEE_PAY_TBL.HIRE_DATE <SYSDATE - 365); 

Berikut adalah permintaan yang sama diformat ulang untuk meningkatkan mudah dibaca:

 SQL> SELECT EMPLOYEE_ID E., E. NAME, P. GAJI, P. HIRE_DATE 2 DARI EMPLOYEE_TBL E, 3 P EMPLOYEE_PAY_TBL 4 WHERE EMPLOYEE_ID E. = P EMPLOYEE_ID 5 DAN GAJI P> 30.000 6 ATAU (ANTARA GAJI P. 25.000 DAN 30.000 7 DAN P. HIRE_DATE SYSDATE <- 365);

CATATAN: Perhatikan penggunaan alias tabel dalam permintaan sebelumnya. EMPLOYEE_TBL sejalan 2 telah diberi alias E, dan EMPLOYEE_PAY_TBL sejalan 3 telah ditetapkan alias P.Anda dapat melihat bahwa di jalur 4, 5, 6, dan 7, E dan P berdiri untuk nama tabel penuh. Alias kurang mengetik membutuhkan banyak daripada mengeja nama tabel lengkap, dan bahkan lebih penting, query yang menggunakan alias lebih terorganisir dan lebih mudah untuk dibaca daripada permintaan yang penuh dengan nama lengkap tidak perlu meja panjang.


Dua pertanyaan yang identik, tapi yang kedua adalah jelas jauh lebih mudah dibaca. Hal ini sangat terstruktur, yaitu komponen logis dari query telah dipisahkan oleh spasi dan tombol enter konsisten. Anda dapat dengan cepat melihat apa yang sedang dipilih (klausa SELECT), apa tabel sedang diakses (DARI klausa), dan kondisi apa perlu dipenuhi (klausa WHERE).

Tabel-Scan Penuh

Sebuah meja penuh scan terjadi ketika server database membaca setiap catatan dalam tabel dalam rangka untuk menjalankan pernyataan SQL. Kendali-tabel scan biasanya menjadi masalah ketika berhadapan dengan pertanyaan atau pernyataan SELECT. Namun, meja penuh scan juga dapat ikut bermain ketika berhadapan dengan update dan menghapus. Sebuah meja penuh scan terjadi ketika kolom di klausa WHERE tidak memiliki indeks yang terkait dengan mereka. Sebuah meja penuh scan seperti membaca buku dari depan sampai belakang, mencoba mencari kata kunci. Seringkali, Anda akan memilih untuk menggunakan indeks.

Anda dapat menghindari meja penuh scan dengan membuat indeks pada kolom yang digunakan sebagai kondisi di klausa WHERE sebuah pernyataan SQL. Indeks menyediakan jalur langsung ke data dengan cara yang sama suatu indeks dalam sebuah buku pembaca merujuk ke nomor halaman. Menambahkan indeks kecepatan akses data.

Meskipun biasanya programmer mengerut atas meja-scan penuh, mereka kadang-kadang sesuai. Sebagai contoh:

  • Anda sebagian besar memilih baris dari tabel.
  • Anda mengupdate setiap baris dalam sebuah tabel.
  • Meja kecil.

Dalam kasus pertama dua Indeks akan tidak efisien karena database server akan harus merujuk ke indeks, membaca meja, merujuk ke indeks lagi, membaca meja lagi, dan sebagainya. Di sisi lain, indeks yang paling efisien ketika mengakses data Anda adalah persentase kecil, biasanya tidak ada lebih dari 10 hingga 15 persen, dari total data yang terdapat dalam tabel.

Selain itu, indeks yang terbaik digunakan pada tabel besar. Anda harus selalu mempertimbangkan ukuran tabel saat Anda merancang tabel dan indeks. tabel pengindeksan Benar keakraban dengan melibatkan data, mengetahui kolom yang akan diakses paling, dan mungkin memerlukan eksperimen untuk melihat indeks karya terbaik.


CATATAN: Ketika berbicara tentang sebuah meja yang besar “,” besar adalah istilah relatif. Sebuah meja yang sangat besar untuk satu individu mungkin menit ke lain. Ukuran meja relatif ke ukuran tabel lain dalam database, untuk ruang disk yang tersedia, dengan jumlah disk yang tersedia, dan akal sehat sederhana. Jelas, 2GB meja besar, sedangkan meja 16KB kecil. Dalam lingkungan database dimana tabel ukuran rata-rata 100MB, 500MB meja dapat dianggap besar.


Menambahkan Indeks Baru

Anda akan sering menemukan situasi di mana pernyataan SQL sedang berjalan untuk jumlah yang tidak masuk akal waktu, meskipun kinerja laporan lain tampaknya dapat diterima, misalnya, ketika kondisi bagi perubahan pengambilan data atau ketika mengubah struktur tabel.

Kami juga telah melihat jenis perlambatan ketika layar atau jendela baru telah ditambahkan ke akhir aplikasi depan. Salah satu hal pertama yang harus dilakukan ketika Anda mulai memecahkan masalah adalah untuk mengetahui apakah meja target memiliki indeks. Dalam sebagian besar kasus kita lihat, tabel target memiliki indeks, namun salah satu kondisi baru dalam klausul WHEREmungkin kurang indeks. Melihat klausa WHERE dari pernyataan SQL, kita bertanya, Haruskah kita menambahkan indeks lain? Jawabannya mungkin ya jika:

  • Yang membatasi kondisi yang paling (s) mengembalikan kurang dari 10 persen dari baris dalam tabel.
  • Kondisi yang paling restriktif (s) akan sering digunakan dalam pernyataan SQL.
  • Kondisi (s) pada kolom dengan indeks akan kembali nilai-nilai yang unik.
  • Kolom ini sering dirujuk di ORDER BY dan GROUP BY klausa.

Komposit indeks juga dapat digunakan. Sebuah indeks komposit indeks pada dua atau lebih kolom dalam sebuah tabel. Indeks ini dapat lebih efisien daripada-kolom indeks tunggal jika diindeks kolom sering digunakan bersama sebagai kondisi di klausa WHERE dari pernyataan SQL. Apabila kolom diindeks digunakan secara terpisah juga sama, terutama dalam permintaan lain, satu-kolom indeks mungkin lebih sesuai dan. Anda Gunakan pertimbangan menjalankan tes pada data Anda untuk melihat jenis pakaian terbaik indeks database yang mana.

Pengaturan Unsur dalam sebuah Permintaan

Pengaturan terbaik dari unsur-unsur dalam permintaan Anda, khususnya pada klausa WHERE, benar-benar tergantung pada urutan langkah-langkah proses dalam pelaksanaan tertentu. Penyusunan kondisi tergantung pada kolom yang diindeks, serta kondisi yang akan mengambil paling sedikit catatan.

Anda tidak harus menggunakan kolom yang diindeks pada klausa WHERE, tetapi jelas lebih bermanfaat untuk melakukannya. Cobalah untuk mempersempit hasil dari pernyataan SQL dengan menggunakan indeks yang mengembalikan jumlah baris yang paling sedikit. Kondisi yang mengembalikan catatan paling sedikit dalam sebuah tabel dikatakan dalam kondisi yang paling ketat.Sebagai pernyataan umum, anda harus menempatkan membatasi kondisi yang paling terakhir dalam klausa WHERE. (Query optimizer’s Oracle membaca klausa WHERE dari bawah ke atas, sehingga dalam arti tertentu, Anda akan menempatkan pembatasan kondisi yang paling pertama.)

Ketika optimizer membaca membatasi kondisi yang paling pertama, ia mampu mempersempit hasil set pertama sebelum melanjutkan ke kondisi berikutnya. Kondisi berikutnya, bukannya melihat seluruh meja, harus melihat pada subset yang dipilih oleh kondisi yang paling selektif. Akhirnya, data yang diambil lebih cepat. Yang selektif kondisi yang paling mungkin tidak jelas dalam permintaan kompleks dengan kondisi beberapa, subqueries, perhitungan, dan beberapa kombinasi dari DAN, ATAU, dan SEPERTI.


TIP: Selalu cek dokumentasi database Anda untuk melihat bagaimana SQL diproses dalam pelaksanaan Anda.


Tes berikut adalah salah satu dari banyak kami telah menjalankan untuk mengukur perbedaan waktu berlalu antara dua unik diatur query dengan konten yang sama. Contoh-contoh ini menggunakan sistem manajemen database relasional Oracle7.3. Ingat, pengoptimasi dalam implementasi ini membaca klausa WHERE dari bawah ke atas.

Sebelum membuat pernyataan SELECT, kami memilih jumlah baris yang berbeda pada setiap kondisi yang kita rencanakan untuk digunakan. Berikut adalah nilai-nilai yang dipilih untuk setiap kondisi:

Kondisi Nilai yang berbeda
calc_ytd = '-2109490,8' 13.000 +
dt_stmp = '01-September-96 ' 15
output_cd = '001 ' 13
activity_cd = 'IN' 10
status_cd = 'A' 4
function_cd = '060 ' 6

CATATAN: Yang membatasi kondisi yang paling juga kondisi dengan nilai yang paling berbeda.


Pada contoh berikut tempat yang terbatas kondisi yang paling pertama di klausa WHERE:

INPUT:
  SQL> SET WAKTU ON 
    2 SELECT COUNT (*) 
    3 DARI FACT_TABLE 
    4 WHERE CALC_YTD = '-2109490,8' 
    5 DAN DT_STMP = '01-September-96 ' 
    6 DAN OUTPUT_CD = '001 ' 
    7 DAN ACTIVITY_CD = 'IN' 
    8 DAN STATUS_CD = 'A' 
    9 DAN FUNCTION_CD = '060 ';
OUTPUT:
  COUNT (*) 
  -------- 
         8 
  1 baris yang dipilih. 
  Berlalu: 00:00:15.37 

Contoh ini menempatkan membatasi kondisi yang paling terakhir di klausa WHERE:

INPUT / OUTPUT:
  SQL> SET WAKTU ON 
    2 SELECT COUNT (*) 
    3 DARI FACT_TABLE 
    4 WHERE = FUNCTION_CD '060 ' 
    5 DAN STATUS_CD = 'A' 
    6 DAN ACTIVITY_CD = 'IN' 
    7 DAN OUTPUT_CD = '001 ' 
    8 DAN DT_STMP = '01-September-96 ' 
    9 DAN CALC_YTD = '-2109490,8'; 

  COUNT (*) 
  -------- 
         8 
  1 baris yang dipilih. 
  Berlalu: 00:00:01.80 
ANALISIS:

Perhatikan perbedaan waktu berlalu. Cukup mengubah urutan kondisi sesuai dengan tabel statistik yang diberikan, pertanyaan kedua berlari hampir 14 detik lebih cepat dari yang pertama.Bayangkan perbedaannya pada query yang terstruktur buruk yang berlangsung selama tiga jam!

Prosedur

Untuk query yang dijalankan secara teratur, cobalah untuk menggunakan prosedur. Prosedur adalah kelompok berpotensi besar pernyataan SQL. (Lihat Hari 13, “Topik Lanjutan SQL.”)

Prosedur yang dikompilasi oleh mesin database dan kemudian dieksekusi. Tidak seperti pernyataan SQL, database engine tidak perlu mengoptimalkan prosedur sebelum dijalankan,. Prosedur sebagai lawan dari individu banyak pertanyaan, mungkin lebih mudah bagi pengguna untuk memelihara dan lebih efisien untuk database.

Menghindari ATAU

Hindari menggunakan operator OR logis dalam query jika mungkin. ATAU pasti melambat hampir semua query terhadap tabel ukuran besar. Kami menemukan bahwa DI pada umumnya jauh lebih cepat daripada OR. Saran ini tentu saja tidak setuju dengan dokumentasi yang menyatakan bahwa pengoptimalan mengkonversi DI argumen untuk kondisi OR. Namun demikian, di sini adalah contoh query menggunakan OR beberapa s:

INPUT:
 SQL> SELECT * 2 FROM WHERE 3 FACT_TABLE STATUS_CD = 'A' 4 ATAU STATUS_CD 'B =' 5 ATAU STATUS_CD 'C =' 6 OR STATUS_CD = 'D' 7 OR STATUS_CD = 'E' 8 OR STATUS_CD = 'F' 9 ORDER BY STATUS_CD;

Berikut ini adalah permintaan yang sama menggunakan substr dan IN:

INPUT:
  SQL> SELECT * 
    2 DARI FACT_TABLE 
    3 STATUS_CD DI MANA ('A', 'B', 'C', 'D', 'E', 'F') 
    4 ORDER BY STATUS_CD; 
ANALISIS:

Coba uji sesuatu yang serupa untuk diri sendiri. Meskipun buku merupakan sumber yang sangat baik untuk standar dan arah, Anda akan menemukan seringkali berguna untuk datang ke kesimpulan sendiri pada hal-hal tertentu, seperti kinerja.

Berikut ini adalah contoh lain menggunakan substr dan IN. Perhatikan bahwa permintaan pertama SEPERTI menggabungkan dengan OR.

INPUT:
  SQL> SELECT * 
    2 DARI FACT_TABLE 
    3 WHERE PROD_CD LIKE 'AB%' 
    4 ATAU PROD_CD LIKE 'AC%' 
    5 ATAU PROD_CD LIKE 'BB%' 
    6 ATAU PROD_CD LIKE '% BC 
    7 ATAU PROD_CD LIKE '% CC' 
    8 ORDER BY PROD_CD; 
  SQL> SELECT * 
    2 DARI FACT_TABLE 
    3 WHERE substr (PROD_CD, 1,2) IN ('AB', 'AC', 'BB', 'SM', 'CC') 
    4 ORDER BY PROD_CD; 
ANALISIS:

Contoh kedua tidak hanya menghindari OR, tetapi juga menghilangkan kombinasi dari OR dan operator SEPERTI. Anda mungkin ingin mencoba misalnya ini untuk melihat apa perbedaan kinerja waktu-nyata adalah untuk data Anda.

OLTP versus OLAP

Ketika tuning database, Anda harus terlebih dahulu menentukan apa database digunakan untuk. Sebuah pengolahan analisis online (OLAP) database adalah sebuah sistem yang berfungsi untuk menyediakan kemampuan permintaan kepada pengguna akhir untuk tujuan umum informasi dan statistik. Data yang diambil dalam jenis lingkungan sering digunakan untuk laporan statistik yang membantu dalam proses pengambilan keputusan perusahaan. Jenis sistem juga disebut sebagai sistem pendukung keputusan (DSS). Sebuah proses transaksi online (OLTP) database adalah sebuah sistem yang utama berfungsi untuk menyediakan lingkungan bagi-masukan pengguna akhir dan juga mungkin melibatkan query terhadap-hari informasi hari. sistem OLTP digunakan untuk memanipulasi informasi dalam database setiap hari gudang data. dan DSSS mendapatkan data mereka dari database transaksi online dan kadang-kadang dari sistem OLAP lainnya.

OLTP Tuning

Sebuah database transaksional adalah sebuah sistem yang sangat rumit diakses dalam bentuk transaksi dan permintaan terhadap-hari informasi hari. Namun, sebuah OLTP biasanya tidak memerlukan areal yang luas semacam, paling tidak sejauh yang diperlukan dalam lingkungan OLAP. Kebanyakan OLTP transaksi cepat dan tidak melibatkan banyak penyortiran.

Salah satu masalah terbesar dalam database transaksional adalah segmen rollback. Jumlah dan ukuran segmen rollback sangat bergantung pada berapa banyak pengguna secara bersamaan mengakses database, serta jumlah pekerjaan di setiap transaksi. Pendekatan yang terbaik adalah memiliki beberapa segmen rollback di lingkungan transaksional.

Keprihatinan lain di lingkungan transaksi adalah integritas transaksi log, yang ditulis untuk setelah setiap transaksi. Log ini ada untuk tujuan pemulihan. Oleh karena itu, setiap implementasi SQL membutuhkan cara untuk membuat cadangan log untuk digunakan dalam titik “pada waktu pemulihan.” SQL Server menggunakan perangkat sampah; Oracle menggunakan modus database yang dikenal sebagai modus ARCHIVELOG. Transaksi log juga melibatkan pertimbangan kinerja karena back up log membutuhkan overhead tambahan.

OLAP Tuning

OLAP tuning sistem, seperti sebuah gudang data atau mendukung sistem pengambilan keputusan, jauh berbeda dengan tuning database transaksi. Biasanya, diperlukan lebih banyak ruang untuk menyortir.

Karena tujuan dari jenis sistem adalah untuk mengambil keputusan membuat data yang berguna, Anda dapat berharap banyak pertanyaan yang kompleks, yang biasanya melibatkan pengelompokan dan penyortiran data. Dibandingkan dengan database transaksi, sistem OLAP biasanya mengambil lebih banyak tempat untuk area ruang semacam tetapi kurang untuk daerah rollback.

Kebanyakan transaksi dalam sistem OLAP terjadi sebagai bagian dari proses batch. Daripada memiliki beberapa daerah rollback masukan pengguna, Anda mungkin resor untuk satu daerah rollback besar untuk beban, yang dapat diambil offline selama kegiatan sehari-hari untuk mengurangi overhead.

Beban Batch Versus Pengolahan Transaksional

Faktor utama dalam kinerja database dan pernyataan SQL adalah jenis pemrosesan yang terjadi dalam database. Salah satu jenis pengolahan OLTP, dibahas tadi pagi. Ketika kita berbicara tentang proses transaksi, kami akan merujuk ke dua jenis: user input dan beban batch.

input pengguna Reguler biasanya terdiri dari pernyataan SQL seperti INSERT, UPDATE, dan DELETE. Jenis transaksi ini sering dilakukan oleh pengguna akhir, atau pelanggan. Pengguna akhir biasanya menggunakan aplikasi front-end seperti PowerBuilder untuk berinteraksi dengan database, dan karena itu mereka mengeluarkan pernyataan SQL jarang terlihat. Namun demikian, SQL kode telah dihasilkan untuk pengguna akhir oleh aplikasi depan.

Fokus utama Anda saat mengoptimalkan kinerja database harus menjadi pengguna-akhir transaksi. Setelah semua, “pelanggan tidak” sama dengan “ada database,” yang pada gilirannya berarti bahwa Anda berada di luar pekerjaan. Selalu mencoba untuk membuat pelanggan Anda senang, meskipun ekspektasi mereka terhadap sistem / database kinerja kadang-kadang mungkin tidak masuk akal. Salah satu pertimbangan dengan-masukan pengguna akhir adalah jumlah pengguna secara bersamaan. Database pengguna bersamaan yang Anda miliki, semakin besar kemungkinan penurunan kinerja.

Apa yang dimaksud dengan beban batch? Sebuah beban tumpukan batch melakukan transaksi terhadap database sekaligus. Misalnya, Anda tahun pengarsipan’s data terakhir ke tabel sejarah besar. Anda mungkin perlu memasukkan ribuan atau bahkan jutaan, dari baris data ke dalam tabel sejarah Anda. Anda mungkin tidak ingin melakukan tugas ini secara manual, sehingga Anda cenderung untuk menciptakan sebuah pekerjaan batch atau script untuk mengotomatisasi proses ini. (Berbagai teknik tersedia untuk memuat data dalam batch sumber daya. Batch) muatan terkenal untuk database dan sistem perpajakan. Sumber daya ini termasuk akses database meja, katalog mengakses sistem, segmen rollback database, dan area ruang semacam; sumber daya sistem dapat mencakup CPU yang tersedia dan berbagi memori. Banyak faktor lain yang terlibat, tergantung pada sistem operasi Anda dan server database.

Kedua-pengguna akhir transaksi dan beban batch diperlukan untuk database yang paling berhasil, tetapi sistem Anda bisa mengalami masalah kinerja yang serius jika kedua jenis tanduk kunci pengolahan. Oleh karena itu, Anda harus tahu perbedaan antara mereka dan menjaga mereka dipisahkan sebisa mungkin. Misalnya, Anda tidak akan ingin memuat sejumlah besar data ke dalam database ketika aktivitas pengguna tinggi. Tanggapan database sudah mungkin lambat karena jumlah pengguna secara bersamaan. Selalu mencoba untuk menjalankan beban batch ketika aktivitas pengguna adalah minimal. Banyak toko cadangan kali di malam hari atau dini hari untuk memuat data dalam batch untuk menghindari gangguan dengan pemrosesan harian.

Anda harus selalu merencanakan waktu untuk beban batch besar, berhati-hati untuk menghindari penjadwalan mereka saat database ini diharapkan akan tersedia untuk penggunaan normal.Gambar 15,1 melukiskan update batch berat berjalan bersamaan dengan proses beberapa pengguna, semua bersaing untuk sumber daya sistem.

Gambar 15,1.
Sistem sumber daya contention.

Seperti yang Anda lihat, banyak proses yang bersaing untuk sumber daya sistem. Update batch berat yang dilakukan melempar geser monyet dalam perhitungan. Alih-alih sumber daya sistem tersebar agak merata di antara para pengguna, pembaruan batch tampak memonopoli mereka. Situasi ini hanyalah permulaan pertengkaran sumber daya. Sebagai transaksi batch dilanjutkan, akhirnya proses pengguna dapat dipaksa keluar dari gambar. Kondisi ini bukan cara yang baik dalam berbisnis. Bahkan jika sistem hanya memiliki satu pengguna, pendapat yang signifikan untuk itu pengguna bisa terjadi.

Masalah lain dengan proses batch adalah bahwa proses itu mungkin memegang kunci di atas meja seorang pengguna mencoba untuk mengakses. Jika ada kunci di atas meja, pengguna akan menolak akses sampai mengunci dibebaskan oleh proses batch, yang dapat jam. Proses Batch harus dilakukan ketika sumber daya sistem terbaik mereka jika mungkin. Jangan membuat transaksi pengguna bersaing dengan batch. Tidak ada yang memenangkan permainan itu.

Mengoptimalkan Beban Data oleh Dropping Indeks

Salah satu cara untuk mempercepat update batch dengan menjatuhkan indeks. Bayangkan meja sejarah dengan ribuan barisan. Itu tabel sejarah juga cenderung memiliki satu atau lebih indeks.Ketika Anda memikirkan indeks, Anda biasanya memikirkan akses tabel lebih cepat, tetapi dalam hal beban batch, Anda bisa mendapatkan keuntungan dengan menjatuhkan indeks (es).

Ketika data beban Anda ke dalam tabel dengan indeks, Anda biasanya dapat mengharapkan banyak menggunakan indeks, terutama jika Anda memperbarui persentase tinggi baris dalam tabel.Lihatlah dengan cara ini. Jika Anda mempelajari buku dan menyoroti poin-poin penting untuk referensi di masa mendatang, Anda mungkin merasa lebih cepat untuk menelusuri buku dari awal sampai akhir daripada menggunakan indeks untuk mencari poin kunci Anda. (Menggunakan indeks akan efisien jika Anda hanya menyoroti sebagian kecil dari buku itu.)

Untuk memaksimalkan efisiensi beban batch / update yang mempengaruhi persentase tinggi baris dalam sebuah tabel, Anda dapat mengambil tiga langkah dasar untuk menonaktifkan indeks:

1. Drop indeks yang sesuai (es).
2. Load / update data meja.
3. Membangun kembali meja indeks.

A COMMIT Menyimpan Sering DBA yang Jauh

Ketika melakukan transaksi batch, Anda harus tahu seberapa sering untuk melakukan “komit 11.” Seperti yang Anda pelajari pada hari, “Transaksi Pengendalian,” COMMIT finalizes pernyataan transaksi. A COMMIT menyimpan transaksi atau menulis perubahan ke meja yang berlaku (s). Di belakang layar, namun lebih banyak yang terjadi. Beberapa daerah di database dicadangkan untuk menyimpan menyelesaikan transaksi sebelum perubahan benar-benar ditulis ke meja target. Oracle panggilan ini rollback segmen daerah. Ketika Anda mengeluarkan pernyataan COMMIT,transaksi yang terkait dengan sesi SQL Anda di segmen rollback diperbarui dalam tabel target. Setelah update terjadi, isi dari segmen rollback dihapus,. ROLLBACK Perintah di sisi lain, membersihkan isi segmen rollback tanpa memperbarui tabel target.

Seperti yang Anda bisa menebak, jika Anda tidak pernah mengeluarkan perintah COMMIT atau ROLLBACK, transaksi terus membangun dalam segmen rollback. Selanjutnya, jika data Anda yang memuat dalam ukuran lebih besar daripada ruang yang tersedia di segmen rollback, database dasarnya akan berhenti dan larangan aktivitas transaksi lebih lanjut. Tidak mengeluarkan perintahCOMMIT adalah perangkap pemrograman umum; COMMIT reguler s membantu memastikan kinerja yang stabil dari seluruh sistem database.

Manajemen segmen rollback adalah penting database administrator dan kompleks (DBA) tanggung jawab karena mempengaruhi transaksi dinamis segmen rollback, dan pada gilirannya, mempengaruhi kinerja keseluruhan database serta laporan SQL individu. Jadi, ketika Anda yang memuat sejumlah besar data, pastikan untuk mengeluarkan perintah COMMIT secara teratur.Periksa dengan DBA Anda untuk nasihat tentang seberapa sering untuk melakukan saat transaksi batch. (Lihat Gambar 15,2.)

Gambar 15,2.
Daerah rollback.

Seperti yang dapat Anda lihat pada Gambar 15.2, bila pengguna melakukan transaksi, perubahan tersebut disimpan di daerah rollback.

Membangun kembali Tabel dan Indeks dalam Lingkungan Dinamis

Database lingkungan yang dinamis merujuk ke database besar yang berada dalam keadaan konstan berubah. Perubahan yang kita mengacu kepada yang sering update batch dan pengolahan transaksi harian terus-menerus. Dynamic database OLTP biasanya memerlukan sistem yang berat, tetapi juga dapat merujuk pada DSSS atau gudang data, tergantung pada volume dan frekuensi beban data.

Hasil perubahan tinggi volume konstan untuk database adalah pertumbuhan, yang pada gilirannya menghasilkan fragmentasi. Fragmentasi dapat dengan mudah keluar dari tangan jika pertumbuhan ini tidak dikelola dengan baik. Oracle mengalokasikan rupa awal untuk tabel ketika mereka diciptakan. Bila data yang dimuat dan mengisi meja tingkat awal, tingkat berikutnya, yang juga dialokasikan bila meja diciptakan, diambil.

Ukuran tabel dan indeks pada dasarnya adalah sebuah fungsi DBA dan drastis dapat mempengaruhi kinerja pernyataan SQL. Langkah pertama dalam manajemen pertumbuhan adalah proaktif. Biarkan ruang untuk tabel untuk tumbuh dari hari pertama, dalam alasan. Juga berencana untuk defragment database secara teratur, bahkan jika hal itu berarti mengembangkan rutinitas mingguan. Berikut adalah langkah-langkah dasar konseptual yang terlibat dalam defragmenting tabel dan indeks dalam sistem manajemen database relasional:

1. Dapatkan cadangan yang baik dari tabel (s) dan / atau indeks (es).
2. Drop tabel (s) dan / atau indeks (es).
3. Membangun kembali tabel (s) dan / atau indeks (es) dengan alokasi ruang baru.
4. Mengembalikan data ke dalam tabel yang baru dibangun (s).
5. Re membuat indeks (es) jika perlu.
6 pengguna. Memulihkan hak akses peran / di meja jika diperlukan.
7. Simpan cadangan dari meja Anda sampai Anda benar-benar yakin bahwa tabel yang baru dibangun dengan sukses. Jika Anda memilih untuk membuang cadangan dari tabel asli, pertama-tama Anda harus membuat cadangan tabel baru setelah data telah sepenuhnya pulih.

PERINGATAN: Jangan pernah membuang cadangan tabel Anda sampai Anda yakin bahwa tabel baru dibangun dengan sukses.


Contoh berikut menunjukkan penggunaan praktis dari mailing list tabel dalam lingkungan database Oracle.

INPUT:
  CREATE TABLE MAILING_TBL_BKUP AS 
  SELECT * FROM MAILING_TBL;
OUTPUT:
  Tabel Dibuat.
INPUT / OUTPUT:
 mailing_tbl drop tabel; Tabel Turun TABLE. CREATE MAILING_TBL (INDIVIDUAL_ID VARCHAR2 (12) TIDAK NULL, INDIVIDUAL_NAME VARCHAR2 (30) TIDAK NULL, ALAMAT VARCHAR (40) TIDAK NULL, KOTA VARCHAR (25) TIDAK NULL, NEGARA VARCHAR (2) NOT NULL , ZIP_CODE VARCHAR (9) TIDAK NULL,) tablespace TABLESPACE_NAME PENYIMPANAN (AWAL NEW_SIZE, NEXT NEW_SIZE); Tabel dibuat mailing_tbl_bkup. INSERT INTO * MAILING_TBL pilih dari; 93.451 baris INDEKS dimasukkan. CREATE TABLE SURAT MAILING_IDX ON (INDIVIDUAL_ID) tablespace TABLESPACE_NAME PENYIMPANAN (AWAL NEW_SIZE, NEXT NEW_SIZE); Indeks Dibuat.. hibah pilih pada mailing_tbl kepada publik; Grant Pengganti meja mailing_tbl_bkup drop; Tabel Turun.
ANALISIS:

Membangun kembali tabel dan indeks yang telah berkembang memungkinkan Anda untuk mengoptimalkan penyimpanan, yang meningkatkan kinerja secara keseluruhan. Ingatlah untuk drop tabel cadangan hanya setelah Anda memverifikasi bahwa tabel yang baru telah berhasil diciptakan. Juga perlu diingat bahwa Anda dapat mencapai hasil yang sama dengan metode lain. Periksa pilihan yang tersedia bagi Anda di dokumentasi database Anda.

Tuning database

Tuning database adalah proses fine-tuning database kinerja server. Sebagai pendatang baru SQL, Anda mungkin tidak akan terkena tuning database kecuali Anda adalah seorang DBA DBA baru atau pindah ke lingkungan database relasional. Apakah Anda akan mengelola database atau menggunakan SQL pada aplikasi atau program, Anda akan mendapatkan keuntungan dengan mengetahui sesuatu tentang proses tuning-database. Kunci keberhasilan setiap database bagi semua pihak untuk bekerja sama. Beberapa tips umum untuk tuning database ikuti.

  • Minimalkan ukuran keseluruhan yang dibutuhkan untuk database. Ini bagus untuk memungkinkan ruang untuk pertumbuhan ketika mendesain database, tapi jangan pergi ke laut. Jangan mengikat sumber daya yang Anda mungkin perlu untuk mengakomodasi pertumbuhan database.
  • Percobaan dengan variabel waktu-slice proses pengguna. Variabel ini mengatur jumlah waktu database server scheduler mengalokasikan untuk pengguna setiap proses.
  • Optimalkan jaringan paket ukuran yang digunakan oleh aplikasi. Semakin besar jumlah data yang dikirim melalui jaringan, semakin besar ukurannya jaringan paket seharusnya. Tanyakan database dan dokumentasi jaringan untuk rincian lebih lanjut.
  • Store transaksi log pada hard disk yang terpisah. Untuk setiap transaksi yang terjadi, server harus menulis perubahan transaksi log. Jika Anda menyimpan log file-file pada disk yang sama seperti Anda menyimpan data, Anda dapat menciptakan hambatan kinerja. (Lihat Gambar 15.3.)
  • Stripe sangat besar tabel di beberapa disk. Jika pengguna mengakses bersamaan sebuah meja besar yang banyak tersebar di disk, ada kurang banyak kesempatan harus menunggu sumber daya sistem. (Lihat Gambar 15.3.)
  • Toko semacam database daerah, sistem kawasan katalog, dan daerah kembalikan pada hard disk yang terpisah. Ini adalah semua wilayah di database yang paling sering akses pengguna. Dengan menyebarkan daerah-daerah tersebut selama beberapa disk drive, Anda memaksimalkan penggunaan sumber daya sistem 15.3. (Lihat Gambar.)
  • Tambah CPU. Fungsi ini administrator sistem dapat secara drastis meningkatkan kinerja database. Menambahkan CPU dapat mempercepat pemrosesan data karena alasan yang jelas. Jika Anda memiliki beberapa CPU pada mesin, maka Anda mungkin dapat menerapkan strategi pemrosesan paralel,. Database Anda Lihat dokumentasi lebih untuk informasi paralel pada pemrosesan jika tersedia dengan implementasi Anda.
  • Tambah memori.  Secara umum, lebih banyak lebih baik.
  • Toko tabel dan indeks pada hard disk yang terpisah. Anda harus menyimpan indeks dan tabel terkait pada disk drive yang pernah terpisah bila memungkinkan. Susunan ini memungkinkan meja untuk dibaca pada saat yang sama indeks ini direferensikan pada disk lain. Kemampuan untuk menyimpan objek pada beberapa disk tergantung pada berapa banyak disk yang terhubung ke controller. (Lihat Gambar 15.3.)

Gambar 15.3 memperlihatkan contoh sederhana tentang bagaimana Anda dapat memisahkan wilayah utama dari database Anda.

Gambar 15.3.
Menggunakan disk yang tersedia untuk meningkatkan kinerja.

Skenario di Gambar 15.3 menggunakan empat perangkat: disk01 melalui disk04. Tujuan database berat dalam penyebaran daerah Anda dan benda-benda adalah untuk menjaga area penggunaan yang tinggi dari masing-masing lain.

  • Disk01 – Sistem Katalog menyimpan informasi tentang tabel, indeks, pengguna, statistik, database file, ukuran, informasi pertumbuhan, dan data terkait lainnya yang sering diakses oleh persentase yang tinggi dari transaksi.
  • Disk02 – Transaksi log diperbarui setiap kali perubahan dibuat untuk suatu tabel (insert, update, atau menghapus). Transaksi log adalah faktor besar dalam sebuah basis data transaksi online.Mereka tidak menjadi perhatian besar dalam lingkungan hanya membaca, seperti sebuah gudang data atau DSS.
  • Disk03 – segmen Rollback juga signifikan di lingkungan transaksi,. Namun jika ada sedikit aktivitas transaksional (insert, update, menghapus), segmen rollback tidak akan sering digunakan.
  • Disk04 – Agak Database daerah, di sisi lain, digunakan sebagai area sementara untuk memproses pernyataan SQL ketika menyortir data, seperti dalam sebuah OLEH GROUP atau klausa ORDER BY. Urutkan daerah biasanya menjadi masalah dalam sebuah gudang data atau DSS. Namun, penggunaan wilayah semacam juga harus dipertimbangkan dalam lingkungan transaksional.

TIP: Juga perhatikan bagaimana aplikasi tabel dan indeks telah ditempatkan pada setiap disk. Tabel dan indeks harus tersebar sebanyak mungkin.


Pendapatan Internet Layanan Internet bahwa dalam indeks 15,3 Gambar Dan disimpan tabel PADA perangkat berbeda yang. Nama dan Kembali ada posting juga dapat berlangganan My bagaimana “Tabel Besar” Danijel mungkin indeks bergaris melintasi doa perangkat Danijel lebih.Teknik Suami membagi tabel menjadi segmen Yang Kecil Yang lebih dapat diakses secara bersamaan. Striping tabel atau indeks di beberapa perangkat adalah cara untuk mengontrol fragmentasi. Dalam skenario ini, tabel dapat dibaca sementara indeks yang sesuai mereka direferensikan, yang meningkatkan kecepatan akses data secara keseluruhan.

Contoh ini sangat sederhana. Tergantung pada fungsi, ukuran, dan isu-isu yang terkait dengan sistem database Anda, Anda mungkin menemukan metode yang sama untuk mengoptimalkan sumber daya sistem yang bekerja yang lebih baik. Di dunia yang sempurna di mana uang ada kendala, konfigurasi terbaik adalah dengan memiliki disk entitas yang terpisah untuk setiap database utama, termasuk meja besar dan indeks.

Catatan: DBA dan administrator sistem harus bekerja sama untuk menyeimbangkan database alokasi ruang dan mengoptimalkan memori yang tersedia pada server.
Tuning database sangat tergantung pada sistem database tertentu yang Anda gunakan. Jelas, tuning database memerlukan lebih dari sekedar mempersiapkan pertanyaan dan membiarkan mereka terbang. Di sisi lain, Anda tidak akan mendapatkan pahala banyak untuk tuning database ketika aplikasi SQL tidak menyempurnakan itu sendiri. Profesional database lagu yang selama hidup sering mengkhususkan pada satu produk database dan belajar sebanyak mungkin tentang fitur dapat dan keanehan. Meskipun tuning database sering dilihat sebagai tugas menyakitkan, dapat menyediakan lapangan kerja yang sangat menguntungkan bagi orang-orang yang benar-benar memahaminya.

Hambatan Kinerja

Kita telah menyebutkan beberapa perangkap yang tak terhitung jumlahnya kemungkinan yang dapat menghambat kinerja umum database. Ini biasanya kemacetan umum yang melibatkan tingkat pemeliharaan sistem, pemeliharaan database, dan manajemen pengolahan pernyataan SQL.

Bagian ini merangkum kendala paling umum di dalam sistem dan waktu respon database.

Tidak membuat penggunaan perangkat yang tersedia di server – Sebuah perusahaan pembelian beberapa disk drive karena suatu alasan. Jika Anda tidak menggunakannya sesuai dengan menyebarkan terpisah database komponen penting, Anda membatasi kemampuan kinerja.Memaksimalkan penggunaan sumber daya sistem adalah sama pentingnya dengan memaksimalkan penggunaan kemampuan database server.

Tidak sering melakukan COMMIT s – Gagal untuk menggunakan s COMMIT atau ROLLBACK periodik selama beban batch s berat akhirnya akan mengakibatkan kemacetan database.

Membiarkan batch beban mengganggu pemrosesan harian – Menjalankan beban batch selama waktu ketika database diharapkan akan tersedia akan menyebabkan masalah untuk semua orang. Proses batch akan berada dalam pertempuran terus-menerus dengan pengguna akhir sumber daya sistem.

Karena ceroboh saat membuat laporan SQL – sembarangan membuat laporan kompleks SQL akan lebih dari mungkin berkontribusi ke waktu respons di bawah standar.

TIP: Anda dapat menggunakan berbagai cara untuk mengoptimalkan struktur pernyataan SQL, tergantung pada langkah-langkah yang diambil oleh server database selama proses statemen SQL.
Menjalankan beban batch dengan indeks tabel – Anda bisa berakhir dengan beban batch yang berjalan sepanjang hari dan malam semua, sebagai lawan dari beban batch yang selesai dalam beberapa jam. Indeks memperlambat batch beban yang mengakses persentase tinggi baris pada tabel.

Setelah pengguna konkuren terlalu banyak memori yang dialokasikan – Sebagai jumlah database secara bersamaan dan pengguna sistem tumbuh, Anda mungkin perlu mengalokasikan memori untuk proses berbagi. Lihat administrator sistem Anda.

Membuat indeks pada kolom dengan nilai-nilai unik beberapa – Pengindeksan pada kolom seperti GENDER, yang hanya memiliki dua nilai yang unik, sangat tidak efisien. Sebaliknya, cobalah untuk indeks kolom yang akan kembali persentase rendah baris dalam query.

Membuat indeks pada meja kecil – Pada saat indeks direferensikan dan data membaca, meja penuh bisa memindai telah selesai dilaksanakan.

Tidak sistem pengelolaan sumber daya secara efisien – pengelolaan Miskin sumber daya sistem dapat hasil dari menyia-nyiakan ruang selama inisialisasi database, pembuatan meja, fragmentasi tidak terkontrol, dan sistem yang tidak teratur / pemeliharaan database.

Bukan ukuran tabel dan indeks benar – perkiraan Miskin untuk tabel dan indeks yang tumbuh pesat dalam lingkungan database yang besar dapat mengakibatkan masalah fragmentasi yang serius, yang jika tidak cenderung, akan snowball menjadi masalah yang lebih serius.

Built-In Peralatan Tuning

Periksa dengan Anda DBA atau database vendor untuk menentukan apa alat yang tersedia bagi Anda untuk mengukur kinerja dan tuning. Anda dapat menggunakan alat-tuning kinerja untuk mengidentifikasi kekurangan dalam jalur akses data, di samping itu, alat ini kadang-kadang dapat menyarankan perubahan untuk meningkatkan kinerja SQL pernyataan tertentu.

Oracle memiliki dua alat populer untuk mengelola kinerja pernyataan SQL. Alat ini menjelaskan rencana dan tkprof. Alat ini menjelaskan rencana mengidentifikasi jalur akses yang akan diambil saat pernyataan SQL dijalankan. tkprof mengukur kinerja oleh waktu yang telah berlalu selama setiap tahap proses pernyataan SQL. Oracle Corporation juga menyediakan alat-alat lain yang membantu dengan pernyataan SQL dan analisis database, tetapi dua disebutkan di sini adalah yang paling populer. Jika Anda hanya ingin mengukur waktu yang telah berlalu dari query di Oracle, Anda dapat menggunakan SQL * Plus perintah SET WAKTU ON.

WAKTU SET ON dan perintah SET lainnya yang tercakup dalam lebih mendalam pada Hari 20, “SQL * Plus.”

Sybase SQL Server memiliki alat untuk laporan diagnostik SQL. Pilihan tersebut dalam bentuk perintah SET yang dapat Anda tambahkan untuk pernyataan SQL Anda. (Perintah-perintah ini mirip dengan perintah Oracle’sSET). Beberapa perintah umum yang SHOWPLAN SET ON, SET STATISTIK IO ON, dan SET STATISTIK ON TIME. Perintah-perintah ini SET menampilkan output tentang langkah-langkah yang dilakukan dalam query, jumlah membaca dan menulis yang dibutuhkan untuk melakukan query, dan laporan-parsing informasi umum. SQL Server perintah SET tercakup pada Hari 19, “Transact-SQL: Sebuah Pengantar.”

Ringkasan

Dua unsur utama pelurusan, atau tuning, secara langsung mempengaruhi kinerja pernyataan SQL: tuning tuning aplikasi dan database. Masing-masing memiliki peran sendiri, tapi tidak dapat secara optimal disetel tanpa yang lain. Langkah pertama menuju kesuksesan adalah untuk tim teknis dan insinyur sistem untuk bekerja sama untuk menyeimbangkan sumber daya dan mengambil keuntungan penuh dari database fitur yang membantu meningkatkan kinerja.Banyak fitur tersebut dibangun ke dalam perangkat lunak database yang disediakan oleh vendor.

Aplikasi pengembang harus tahu data. Kunci untuk desain database yang optimal adalah pengetahuan menyeluruh data aplikasi. Pengembang dan programer produksi harus tahu kapan menggunakan indeks, kapan harus menambah indeks, dan kapan harus memungkinkan untuk menjalankan pekerjaan batch. Selalu merencanakan dan beban batch batch processing tetap terpisah dari pengolahan transaksi harian.

Database dapat disetel untuk meningkatkan kinerja aplikasi individu yang mengaksesnya.Database administrator harus peduli dengan operasi sehari-hari dan kinerja database. Selain tuning cermat yang terjadi di belakang layar, DBA biasanya dapat memberikan saran kreatif untuk mengakses data lebih efisien, seperti misalnya memanipulasi indeks atau membangun kembali pernyataan SQL. DBA juga harus akrab dengan alat-alat yang dapat segera tersedia dengan software database untuk mengukur kinerja dan memberikan saran untuk tweaker pernyataan.

Sumber ; http://www.webbasedprogramming.com

SQL Dinamik

Tinggalkan komentar

Tujuan

Tujuan dari pelajaran hari ini adalah untuk menunjukkan tempat untuk mulai menerapkan apa yang telah Anda pelajari sejauh ini. Hari ini mencakup pelajaran, dalam stroke sangat luas, aplikasi praktis dari SQL. Kami fokus pada aplikasi dalam lingkungan Microsoft Windows, tetapi prinsip-prinsip yang terlibat hanya berlaku untuk platform perangkat lunak lain. Hari ini Anda akan mempelajari yang berikut:

  • Bagaimana berbagai produk komersial – Personal Oracle7, konektivitas database terbuka (ODBC), Interbase ISQL, Microsoft’s Visual C + +, dan Borland Delphi – berhubungan dengan SQL
  • Cara mengatur lingkungan Anda untuk SQL
  • Cara membuat database menggunakan Oracle7, Microsoft Query, dan Interbase ISQL
  • Cara menggunakan SQL di dalam aplikasi yang ditulis dalam Visual C + + dan Delphi

Setelah membaca materi ini, Anda akan tahu di mana untuk mulai menerapkan keahlian Anda SQL baru.

A Trip Cepat

Bagian ini membahas beberapa produk komersial dalam konteks sistem operasi Microsoft Windows dan secara ringkas menjelaskan bagaimana mereka berhubungan dengan SQL. Prinsip-prinsip, jika tidak produk itu sendiri, berlaku di seluruh platform berbagai perangkat lunak.

ODBC

Salah satu teknologi yang mendasari dalam sistem operasi Windows adalah ODBC, yang memungkinkan program-program berbasis Windows untuk mengakses database melalui sopir. Daripada memiliki antarmuka kustom untuk setiap database, sesuatu yang mungkin sangat baik harus menulis diri sendiri, Anda dapat terhubung ke database pilihan Anda melalui sopir. Konsep ODBC sangat mirip dengan konsep driver printer Windows, yang memungkinkan Anda untuk menulis program anda tanpa untuk printer. perbedaan individual, yang DOS pemrograman memaksa Anda untuk alamat, sangat mudah ditangani oleh driver printer. Hasilnya adalah bahwa Anda menghabiskan waktu Anda bekerja pada tugas-tugas khusus untuk program anda, bukan pada penulisan driver printer.

ODBC menerapkan ide ini untuk database. Bagian visual ODBC berada di panel kontrol pada Windows 3.1, 3.11, dan Windows 95 dan dalam kelompok program sendiri pada Windows NT.

Kami menutup ODBC lebih terinci ketika kita membahas membuat database hari ini.

Oracle7 Pribadi

Oracle7 Pribadi adalah database populer serangan terbaru ke pasar PC pribadi. Jangan menunda dengan jumlah program yang Oracle7 menginstal – kami membangun semua contoh yang digunakan dalam beberapa hari pertama hanya menggunakan Oracle Database Manager dan SQL * Plus 3.3. SQL * Plus adalah ditunjukkan pada Gambar 14.1.

Gambar 14.1.

Oracle7’s SQL * Plus.

Interbase SQL (ISQL)

Alat yang digunakan dalam contoh-contoh lain adalah Borland ISQL. Hal ini pada dasarnya sama dengan Oracle7 kecuali bahwa Oracle7 adalah karakter berorientasi dan ISQL lebih mirip Windows.

Sebuah layar ISQL ditunjukkan pada Gambar 14.2. Anda ketik pertanyaan Anda di bagian atas kotak edit, dan hasilnya muncul di kotak bawah. Dan tombol Previous Next gulir Anda melalui daftar semua query Anda buat selama sesi.

Gambar 14.2.

Interbase’s Interaktif SQL.

Visual C + +

Puluhan buku telah ditulis tentang Visual C + +. Untuk contoh dalam buku ini, kami menggunakan versi 1,52. Prosedur kita digunakan adalah yang berlaku untuk versi 32-bit, C + + 2.0. Digunakan di sini karena antarmuka yang sederhana dengan ODBC. Bukan hanya compiler dengan kemampuan untuk koneksi ke ODBC. Jika Anda menggunakan compiler yang berbeda, bagian ini memberikan titik keberangkatan baik.

Visual C + + cukup menginstal beberapa alat. Kami hanya menggunakan dua: compiler dan editor sumber daya.

Delphi

Alat terakhir kita kaji adalah Borland Delphi, yang merupakan subjek buku baru. Delphi menyediakan antarmuka scalable untuk berbagai database.

Delphi memiliki dua program yang kita gunakan: Interbase Server (Ibmgr) dan ISQL Windows (Wisql).

Menyiapkan

Cukup dengan perkenalan – mari mulai bekerja. Setelah Anda menginstal mesin SQL atau ODBC-compiler yang kompatibel, Anda harus melakukan sejumlah panggung pengaturan sebelum dapat melakukan hal-hal bintang mereka. Dengan kedua Oracle7 dan Interbase, Anda perlu untuk login dan membuat account untuk diri Anda sendiri. Prosedur ini pada dasarnya sama. Bagian tersulit adalah sorting melalui hard copy dan dokumentasi online untuk password default. Kedua sistem memiliki account default sistem administrator. (Lihat Gambar 14.3.)

Gambar 14.3.

Keamanan Interbase manajer layar.

Setelah login dan membuat account, Anda siap untuk membuat database.

Membuat database

Langkah ini di mana semua pelatihan SQL Anda mulai untuk melunasi. Pertama, Anda harus memulai database yang ingin Anda gunakan. Gambar lampu merah menunjukkan 14,4 metafora visual yang Oracle7.

Gambar 14.4.

Oracle7 Database Manager.

Setelah Anda mendapatkan lampu hijau, Anda dapat membuka SQL * Plus 3,3 alat ditunjukkan pada Gambar 14,5.

Gambar 14,5.

Oracle SQL * Plus.

Pada titik ini Anda dapat membuat tabel Anda dan masukkan data Anda dengan menggunakan kata kunci CREATE dan INSERT. Cara lain umum membuat tabel dan memasukkan data dengan file script. Sebuah file script biasanya sebuah file teks dengan perintah SQL mengetik dalam urutan yang benar. Lihat ini kutipan dari script file dikirim dengan Oracle7:

 -------------------------------------------------- ---------- - Script untuk membangun database Oracle bibit untuk Pribadi ------------------------------ ---------------------------- - NTES Dipanggil dari buildall.sql - MODIFIKASI - rs 12/04/94 - Komentar, bersih-bersih, mengubah ukuran, untuk ------------------------------------------- produksi ----------------- pfile nomount startup =% rdbms71% \ init.ora - Buat database untuk Windows RDBMS membuat database oracle logfile controlfile menggunakan kembali '% \% oracle DBS \ wdblog1. ukuran ora 400K menggunakan kembali, '% \% oracle DBS wdblog2.ora \' ulang ukuran datafile '% 400K \% oracle DBS wdbsys.ora \' ukuran 10M karakter set ulang WE8ISO8859P1;

Sintaks sedikit bervariasi dengan implementasi dari SQL dan database yang Anda gunakan, jadi pastikan untuk memeriksa dokumentasi Anda. Pilih File | Open untuk memuat script ini menjadi mesin SQL Anda.

Borland Interbase banyak data dengan cara yang sama. Kutipan berikut adalah dari salah satu file untuk menyisipkan data:

 / * * Tambahkan negara. * / INSERT INTO negara (negara, mata uang) VALUES ('AS', 'Dolar'); INSERT INTO negara (negara, mata uang) VALUES ('Inggris', 'Pound'); INSERT INTO negara ( negara, mata uang) VALUES ('Kanada', 'CdnDlr'); INSERT INTO negara (negara, mata uang) VALUES ('Swiss', 'SFranc'); INSERT INTO negara (negara, mata uang) VALUES ('Jepang', 'Yen ! '); INSERT INTO negara (negara, mata uang) VALUES (' Italia ',' Lira "); INSERT INTO negara (negara, mata uang) VALUES ('Prancis", "FFranc"); INSERT INTO negara (negara, mata uang) VALUES ('Jerman', 'D-Mark'); INSERT INTO negara (negara, mata uang) VALUES ('Australia', 'ADollar'); INSERT INTO negara (negara, mata uang) VALUES ('Hong Kong', 'HKDollar') ; INSERT INTO negara (negara, mata uang) VALUES ('Belanda', 'guilder'); INSERT INTO negara (negara, mata uang) VALUES ('Belgia', 'BFranc'); INSERT INTO negara (negara, mata uang) VALUES (' Austria ',' Schilling '); INSERT INTO negara (negara, mata uang) VALUES (' Fiji ',' fdollar ');
ANALISIS:

Ini contoh menyisipkan nama negara dan mata uang jenis yang digunakan di negara tersebut ke dalam tabel COUNTRY. (Lihat Hari 8, “Memanipulasi Data,” untuk pengenalan perintah INSERT.)

Tidak ada sihir di sini. Programmer selalu menemukan cara untuk menyimpan keystrokes. Bila Anda bermain bersama di rumah, masukkan tabel berikut:

INPUT:
  / * Table: PELANGGAN, Pemilik: PERKINS * / 
  CREATE TABEL PELANGGAN (NAMA CHAR (10), 
          ALAMAT CHAR (10), 
          NEGARA CHAR (2), 
          ZIP CHAR (10), 
          PHONE CHAR (11), 
          KOMENTAR CHAR (10));
INPUT:
  / * Tabel: Orders, Pemilik: PERKINS * / 
  CREATE TABLE pesanan (DATE ORDEREDON, 
          NAME CHAR (10), 
          PARTNUM INTEGER, 
          KUANTITAS INTEGER, 
          KOMENTAR CHAR (10));
INPUT:
  / * Tabel: BAGIAN, Pemilik: PERKINS * / 
  CREATE TABLE BAGIAN (INTEGER PARTNUM, 
          URAIAN CHAR (20), 
          HARGA numeric (9, 2)); 

Sekarang mengisi tabel tersebut dengan data sebagai berikut:

INPUT / OUTPUT:
  SELECT * FROM PELANGGAN 

  ALAMAT NAMA NEGARA ZIP PHONE KOMENTAR 
  ========== ========== ====== ====== ======== ========== 

  WHEEL TRUE 55O HUSKER NE 58.702 555-4.545 NONE 
  SEPEDA SPEC CPT mendengarkan pengakuan dosa dan LA 45678 555-1234 NONE 
  LE KS Hometown Shoppe 54678 555-1278 NONE 
  SEPEDA AAA 10 OLDTOWN NE 56.784 555-3.421 JOHN-Mgr 
  Jacks SEPEDA 24 Eglin FL 34.567 555-2.314 NONE
INPUT / OUTPUT:
  SELECT * FROM Orders 

           NAMA ORDEREDON KUANTITAS PARTNUM KOMENTAR 
         =========== ========== =========== =========== ======= 
  15-MAY-1996 WHEEL TRUE 23 6 DISETOR 
  19-MAY-1996 WHEEL TRUE 76 3 DISETOR 
   2-SEP 1996 TRUE WHEEL-10 1 DISETOR 
  30-JUN 1996 TRUE WHEEL-42 8 DISETOR 
  30-JUN-1996 SEPEDA SPEC 54 10 DISETOR 
  30-MAY-1996 SEPEDA SPEC 10 2 DISETOR 
  30-MAY-1996 SEPEDA SPEC 23 8 DISETOR 
  17-JAN-1996 SEPEDA SPEC 76 11 DISETOR 
  17-JAN-1996 LE Shoppe 76 5 DISETOR 
   1-JUN-1996 LE Shoppe 10 3 DISETOR 
   1-SEPEDA AAA-1996 10 Jun 1 DISETOR 
   1-JUL-1996 SEPEDA AAA 76 4 DISETOR 
   1-JUL-1996 SEPEDA AAA 46 14 DISETOR 
  11-JUL-1996 jack SEPEDA 76 14 DISETOR
INPUT / OUTPUT:
  SELECT * FROM BAGIAN 

      PARTNUM URAIAN HARGA 
  =========== ==================== =========== 

           54 pedal 54,25 
           42 Kursi 24,50 
           46 Ban 15,25 
           23 SEPEDA GUNUNG 350,45 
           76 JALAN SEPEDA 530,00 
           10 Tandem 1.200,00 

Setelah Anda memasukkan data ini, langkah berikutnya adalah membuat koneksi ODBC. Buka Control Panel (jika Anda berada di 3,1 Win 3.11,, atau Windows 95) dan double-klik ikon ODBC.


CATATAN: Beberapa rasa beban mesin ODBC SQL. Visual C + +, Delphi, dan beban Oracle7 ODBC sebagai bagian dari setup mereka. Untungnya, ODBC menjadi yang biasa seperti driver printer.


Layar ODBC awal ditunjukkan pada Gambar 14.6.

Gambar 14.6.

Sumber data ODBC’s seleksi.

Layar ini menampilkan koneksi ODBC saat ini. Anda ingin membuat koneksi baru,. Asumsi yang Anda gunakan Interbase dan database baru yang disebut TYSSQL (bonus sendiri 10 memberikan poin jika Anda tahu apa singkatan TYSSQL) tekan tombol Add dan pilih Driver Interbase, seperti yang ditunjukkan pada Gambar 14,7.

14,7 Gambar.

Driver seleksi.

Dari pilihan Anda pindah ke layar setup. Isi dalam seperti yang ditunjukkan pada Gambar 14,8.

Gambar 14,8.

Driver setup.

Anda dapat menggunakan nama Anda sendiri atau sesuatu yang singkat dan mudah untuk mengetik, tergantung pada account Anda tetapkan untuk diri sendiri. The sedikit rumit hanya di sini, setidaknya untuk kami, adalah mencari tahu apa yang ingin Interbase sebagai nama database. Bagi Anda yang berasal dari PC atau latar belakang database kecil harus terbiasa dengan beberapa nama path yang tampak aneh. Nama path ini memberitahu mesin SQL mana untuk mencari database di galaksi komputer yang dapat terhubung melalui LAN.

Query Menggunakan Microsoft untuk Melakukan Gabung

Sekarang bahwa Anda telah membuat koneksi ODBC, kita perlu membuat sedikit memutar ke alat yang berguna bukan bernama Microsoft Query. Program ini dimuat bersama dengan Visual C + +. Kami telah menggunakannya untuk menyelesaikan database yang cukup dan masalah coding untuk membayar biaya compiler beberapa kali. Query biasanya menginstal sendiri dalam kelompok program sendiri. Menemukannya dan membukanya. Seharusnya terlihat seperti Gambar 14.9.

Gambar 14.9.

Microsoft Query.

Pilih File Query Baru |. Anda TYSSQL link ODBC tidak muncul, jadi klik tombol lain untuk membuka dialog ODBC Data Sources kotak, yang ditunjukkan pada Gambar 14,10, dan TYSSQL pilih.

Gambar 14.10.

Sumber Data kotak dialog.

Klik OK untuk kembali ke kotak dialog Pilih Sumber Data. Pilih TYSSQL dan Penggunaan klik, seperti yang ditunjukkan pada Gambar 14,11.

Gambar 14,11.

Pilih Sumber Data kotak dialog.

Sekali lagi, pengguna database kecil tidak terbiasa untuk log on. Namun demikian, ketik sandi Anda untuk bergerak melalui layar.

Tambah Tabel kotak dialog, yang ditunjukkan pada Gambar 14,12, menyajikan tabel yang terkait dengan database yang Anda tersambung. Pilih BAGIAN, pesanan, dan PELANGGAN, dan klik Tutup.

Gambar 14,12.

Memilih tabel dalam Query.

layar Anda akan terlihat seperti Gambar 14,13. Klik dua kali ALAMAT dan NAMA dari tabel PELANGGAN. Kemudian klik dua kali ORDEREDON dan PARTNUM dari perintah.

Gambar 14,13.

Representasi visual dari sebuah tabel dalam Query.

Sekarang untuk sihir! Klik tombol bertanda SQL di toolbar. layar Anda sekarang akan tampak seperti Gambar 14,14.

Gambar 14,14.

Permintaan Permintaan yang dibangun.

Alat ini memiliki dua fungsi. Yang pertama adalah untuk memeriksa koneksi ODBC. Jika bekerja di sini, itu harus bekerja dalam program ini. Langkah ini dapat membantu Anda menentukan apakah suatu masalah dalam database atau program. Penggunaan kedua adalah untuk menghasilkan dan memeriksa permintaan. Tambahkan baris berikut ke kotak SQL dan klik OK:

  WHERE CUSTOMER.NAME = ORDERS.NAME DAN PART.PARTNUM = ORDERS.PARTNUM 

Gambar 14,15 menunjukkan hasil yang luar biasa.

Gambar 14,15.

Permintaan itu grafis representasi dari bergabung.

Anda baru saja melakukan bergabung! Tidak hanya itu, tapi field yang telah bergabung di grafis yang terhubung dalam diagram tabel (perhatikan garis zigzag antara NAMA dan PARTNUM).

Query adalah suatu alat yang penting untuk memiliki di arsenal SQL Anda pada platform perangkat lunak Windows. Ini memungkinkan Anda memeriksa dan memanipulasi tabel dan query. Anda juga dapat menggunakannya untuk membuat tabel dan memanipulasi data. Jika Anda bekerja pada Windows dengan ODBC dan SQL, baik membeli alat ini sendiri atau perusahaan Anda atau klien membelinya untuk Anda,. Hal ini tidak semenarik jaringan versi DOOM tetapi akan menghemat waktu dan uang. Sekarang bahwa Anda telah membuat sebuah link ODBC, Anda dapat menggunakannya dalam sebuah program.

Visual Menggunakan C + + dan SQL


CATATAN: Kode sumber untuk contoh ini terletak di Lampiran B, “Kode Sumber Listings for C + + Program Digunakan pada Hari 14.”


Menelepon Visual C + + dan AppWizard pilih, seperti yang ditunjukkan pada Gambar 14,16. Nama dan subdirektori untuk proyek Anda tidak harus identik.

Figur 14,16.

Proyek awal setup.

Klik tombol Options dan mengisi layar seperti tampak pada Gambar 14,17.

Gambar 14,17.

Options dialog box.

Klik OK dan kemudian pilih Pilihan Database. Pilih Database Dukungan, Tidak Dukungan file seperti yang ditunjukkan pada Gambar 14,18.

Gambar 14,18.

Database kotak dialog Pilihan.

Klik tombol Data Sumber dan membuat pilihan yang ditunjukkan pada Gambar 14,19.

Gambar 14,19.

Memilih sumber data.

Kemudian pilih tabel PELANGGAN dari kotak dialog Pilih Tabel, ditunjukkan dalam Gambar 14,20.

Gambar 14,20.

Memilih meja.

Sekarang Anda telah memilih tabel dari database PELANGGAN TYSSQL. Kembali ke dasar layar AppWizard dengan mengklik OK dua kali. Lalu klik OK lagi untuk menampilkan informasi aplikasi baru (lihat Gambar 14,21), menunjukkan spesifikasi dari suatu aplikasi kerangka baru.

Gambar 14,21.

AppWizard baru aplikasi informasi.

Setelah program ini dihasilkan, Anda perlu menggunakan editor sumber daya untuk merancang layar utama Anda. Pilih Tools | App Studio untuk memulai App Studio. Bentuk desain Anda akan sederhana – hanya cukup untuk menampilkan beberapa kolom dalam tabel Anda sebagai Anda menggulir melalui baris. formulir selesai Anda akan terlihat seperti Gambar 14,22.

Gambar 14,22.

Selesai formulir di App Studio.

Untuk kesederhanaan kami beri nama kotak edit IDC_NAME, IDC_ADDRESS, IDC_STATE, dan IDC_ZIP, meskipun Anda dapat nama mereka apa pun yang Anda pilih. Tekan Ctrl + W untuk mengirim halaman Wizard Class ke Variabel Anggota dan mengatur variabel menurut Gambar 14,23.

Gambar 14,23.

Menambahkan variabel anggota Kelas Wizard.


CATATAN: Program ini cukup baik untuk memberikan link ke meja yang Anda tersambung. Link adalah salah satu manfaat dari kerja melalui’s penyihir Microsoft atau yang ahli Borland.


Menyimpan pekerjaan Anda, kemudian tekan Alt + Tab untuk kembali ke compiler dan kompilasi program. Jika semua berjalan lancar, output akan terlihat seperti Gambar 14,24. Jika tidak, menelusuri kembali langkah-langkah Anda dan coba lagi.

Gambar 14,24.

Sebuah bersih untuk mengkompilasi program pengujian.

Sekarang jalankan program anda. Ini akan muncul, setelah itu layar logon sial, dan terlihat seperti Gambar 14,25.

Gambar 14,25.

Program uji.

Program mengesankan, mengingat yang telah Anda tulis nol baris kode sejauh ini. Gunakan tombol panah pada toolbar untuk bergerak maju mundur dalam database. Perhatikan bahwa urutan data yang sama dengan perintah input. Bukan abjad (kecuali Anda ketik dengan cara itu). Bagaimana Anda dapat mengubah urutan?

Koneksi Anda ke database dirumuskan dalam kelas yang disebut Ctyssqlset, yang AppWizard diciptakan untuk Anda. Lihat file header (tyssqset.h):

  / / Tyssqset.h: antarmuka dari kelas CTyssqlSet 
  / / 
  ////////////////////////////////////////////////// ////////////////////// 
  kelas CTyssqlSet: CRecordset publik 
  ( 
  DECLARE_DYNAMIC (CTyssqlSet) 
  publik: 
  CTyssqlSet (CDatabase * pDatabase = NULL); 
  / / Lapangan / Data Param 
  / ((AFX_FIELD (CTyssqlSet, CRecordset) 
  Cstring m_NAME; 
  Cstring m_ADDRESS; 
  Cstring m_STATE; 
  Cstring m_ZIP; 
  Cstring m_PHONE; 
  Cstring m_REMARKS; 
  / /)) AFX_FIELD 
  / / Pelaksanaan 
  dilindungi: 
  virtual CString GetDefaultConnect ();// koneksi string Default 
  virtual CString GetDefaultSQL ();// standar SQL untuk Recordset 
  virtual void DoFieldExchange (CFieldExchange * PFX); / / RFX dukungan 
  ); 
ANALISIS:

Perhatikan bahwa variabel member telah dibangun untuk semua kolom dalam tabel. Juga perhatikan fungsi GetDefaultConnect dan GetDefaultSQL; inilah implementasinya dari tyssqset.cpp:

  CString CTyssqlSet:: GetDefaultConnect () 
  ( 
  kembali ODBC, DSN = TYSSQL; "; 
  ) 
  CString CTyssqlSet:: GetDefaultSQL () 
  ( 
  kembali "PELANGGAN"; 
  ) 

GetDefaultConnect membuat koneksi ODBC. Anda tidak harus mengubah itu. Namun, GetDefaultSQL memungkinkan Anda untuk melakukan beberapa hal yang menarik. Ubah ke ini:

  kembali "SELECT * FROM PELANGGAN ORDER BY NAMA"; 

Ulang, dan ajaib meja Anda yang diurutkan menurut nama, seperti yang ditunjukkan pada Gambar 14,26.

Gambar 14,26.

Database order diubah oleh SQL.

Tanpa masuk ke tutorial Microsoft Foundation Class, mari kita katakan saja bahwa Anda dapat memanipulasi CRecordSet dan objek Cdatabase, bergabung dan drop tabel, update dan memasukkan baris, dan umumnya memiliki semua kesenangan yang mungkin di SQL. Anda telah melihat sampai di tepi mungkin, dan kami telah menunjukkan cara untuk mengintegrasikan SQL ke aplikasi C + +. Topik disarankan untuk studi lebih lanjut CRecordSet dan Cdatabase (baik di + + buku online C yang harus datang sebagai bagian dari + + perangkat lunak C), ODBC API (subjek beberapa buku), dan API yang disediakan oleh Oracle dan Sybase (yang keduanya sama untuk API ODBC).

Menggunakan Delphi dan SQL

Database alat lain yang penting pada platform perangkat lunak Windows Delphi. The splash yang muncul sebagai program ini mengambil memiliki gambaran dari Oracle di Delphi, dikelilingi oleh huruf SQL. Pada contoh C + + Anda menulis ulang satu baris kode. Menggunakan Delphi, Anda akan bergabung dengan dua meja tanpa menulis satu baris kode!


CATATAN: Kode untuk program ini terletak pada Lampiran C, Kode Sumber “Daftar untuk Program Delphi Digunakan pada Hari 14.”


Klik dua kali ikon Delphi untuk memulainya. Pada program lain seperti Gambar 14,27.

Gambar 14,27.

Lingkungan pemrograman Delphi.

Delphi mengharuskan Anda untuk mendaftar koneksi ODBC Anda akan digunakan dalam program Anda. Pilih BDE (Borland Database Environment) dari menu Tools dan kemudian mengisi kotak dialog yang ditampilkan pada Gambar 14,28.

Gambar 14,28.

Pendaftaran koneksi Anda.

Klik tab Alias ditampilkan di bagian bawah Gambar 14,28 dan menetapkan nama TYSSQL, seperti yang ditunjukkan pada Gambar 14,29.

Gambar 14,29.

Menambahkan sebuah alias baru.

Pilih File | New Form untuk membuat pilihan berikut. Mulailah dengan memilih Formulir Database dari tab Expert, seperti yang ditunjukkan pada Gambar 14,30.

Gambar 14,30.

Halaman Ahli dalam galeri Browse.

Kemudian pilih master / detail bentuk dan benda TQuery, seperti yang ditunjukkan pada Gambar 14,31.

Gambar 14,31.

Bentuk kotak dialog Database Expert.


CATATAN: Delphi memungkinkan Anda untuk bekerja dengan baik permintaan atau meja. Jika Anda membutuhkan fleksibilitas, kami sarankan objek TQuery. Jika Anda memerlukan seluruh meja tanpa modifikasi, gunakan objek ttabel.


Sekarang pilih sumber data TYSSQL Anda tetapkan sebelumnya, seperti yang ditunjukkan pada Gambar 14,32.

Gambar 14,32.

Memilih sumber data.

Pilih tabel BAGIAN sebagai master, seperti yang ditunjukkan pada Gambar 14,33.

Gambar 14,33.

Memilih meja.

Pilih semua yang bidang, seperti yang ditunjukkan pada Gambar 14,34.

Gambar 14,34.

Menambahkan semua bidang.

Pilih mode tampilan Horisontal, seperti yang ditunjukkan pada Gambar 14,35.

Gambar 14,35.

Tampilan modus seleksi.

Kemudian pilih perintah, pilih semua bidang, dan pilih Grid untuk modus tampilan nya, seperti yang ditunjukkan pada Gambar 14,36 14,37, dan 14,38.

Gambar 14,36.

Memilih tabel untuk bagian detail formulir.

Gambar 14,37.

Memilih semua bidang.

Gambar 14,38.

Memilih orientasi.

Sekarang perangkat lunak dapat digunakan untuk membuat sebuah bergabung. Buatlah bergabung pada PARTNUM, seperti yang ditunjukkan pada Gambar 14,39.

Gambar 14,39.

Membuat bergabung.

Sekarang pergi ke depan dan menghasilkan bentuk. Hasilnya seperti Gambar 14,40.

Gambar 14,40.

Bentuk selesai.

Mengkompilasi dan menjalankan program. Seperti yang Anda pilih bagian yang berbeda, agar mereka akan muncul dalam tabel yang lebih rendah, seperti yang ditunjukkan pada Gambar 14,41.

Gambar 14,41.

Program selesai.

Tutup proyek dan klik salah satu atau kedua objek query pada formulir. Ketika Anda mengklik objek, Inspektur Obyek di sebelah kiri layar pada Gambar 14,42 menunjukkan berbagai properti.

Gambar 14,42.

Permintaan di objek TQuery.

Cobalah bereksperimen dengan query untuk melihat apa yang terjadi. Hanya berpikir apa yang dapat Anda lakukan ketika Anda mulai menulis kode!

Ringkasan

Hari ini Anda belajar di mana untuk mulai menerapkan SQL menggunakan sehari-hari, hal-hal biasa Anda menemukan berbaring pada hard drive Anda. Cara terbaik untuk mengembangkan apa yang telah Anda pelajari adalah pergi keluar dan permintaan. Permintaan sebanyak yang Anda bisa.

Sumber ; http://www.webbasedprogramming.com

Tulisan 133-165

Tinggalkan komentar

Nomor

Judul Tulisan

Penulis

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

GSM

Pentium Over Drive

GPRS

Webmaster

Drupal

Mambo

Fantastisco

Konten Web

Sistem Manajemen Konten

WordPress

ASDL

Kegunaan Komda

Streaming Media

VoIP

Toturial HTML

XAMPP

MySQL Workbench

Postgre SQL

Visual Basic

GNU C Compiler

Free Basic

SQL Pengenalan

SQL Query

SQL Operator

SQL Fungsi Molding

SQL Klausa

SQL Gabung Tabel

SQL Select Tertanam

SQL Memanipulasi Data

SQL Membuat Tabel

SQL Membuat Tampilan

SQL Pengendalian Transaksi

SQL Keamanan Database

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

Visi lubai

SQL Keamanan Database

Tinggalkan komentar

Hari ini kita membahas keamanan database. Kami secara khusus melihat berbagai pernyataan SQL dan konstruksi yang memungkinkan Anda untuk mengelola dan efektif mengelola database relasional. Seperti banyak topik lain Anda telah mempelajari sejauh ini, bagaimana sebuah sistem manajemen database yang menerapkan keamanan sangat bervariasi antara produk-produk.Kami fokus pada produk database yang populer Oracle7 untuk memperkenalkan topik ini. Pada akhir hari, Anda akan memahami dan dapat melakukan hal berikut:

  • Buat pengguna
  • Ubah password
  • Buat peran
  • Gunakan dilihat untuk tujuan keamanan
  • Gunakan sinonim di tempat dilihat

Dicari: Database Administrator

Keamanan merupakan aspek yang sering diabaikan dari desain database. Kebanyakan komputer profesional memasuki dunia komputer dengan beberapa pengetahuan tentang pemrograman komputer atau perangkat keras, dan mereka cenderung untuk berkonsentrasi pada bidang-bidang. Misalnya, jika bos Anda meminta Anda untuk bekerja pada proyek baru merek yang jelas diperlukan beberapa jenis desain database relasional, apa yang akan menjadi langkah pertama Anda? Setelah memilih beberapa jenis perangkat keras dan dasar perangkat lunak, Anda mungkin akan mulai dengan merancang database dasar untuk proyek masyarakat ini. Akan tahap secara bertahap akan berpisah beberapa kalangan – salah satu dari mereka seorang desainer grafis antarmuka pengguna, yang lain rendah tingkat komponen-a pembangun. Mungkin Anda, setelah membaca buku ini, mungkin akan diminta untuk kode query SQL untuk memberikan keberanian aplikasi. Seiring dengan tugas ini datang benar-benar tanggung jawab administrasi dan memelihara database.

Banyak kali, pikir sedikit atau perencanaan masuk ke dalam tahap produksi aktual aplikasi. Apa yang terjadi ketika banyak pengguna yang diizinkan untuk menggunakan aplikasi ini di jaringan area luas (WAN)? Dengan perangkat lunak komputer pribadi yang kuat hari ini dan dengan teknologi seperti Microsoft Open Database Connectivity (ODBC), setiap pengguna dengan akses ke jaringan Anda dapat menemukan cara untuk mendapatkan pada database Anda. (Kami bahkan tidak akan memunculkan kompleksitas terlibat bila perusahaan Anda memutuskan untuk menghubungkan LAN Anda ke Internet atau beberapa-jaringan yang luas mulai komputer lain situasi!) Apakah Anda siap untuk menghadapi ini?

Untungnya untuk Anda, produsen perangkat lunak yang tersedia sebagian besar perangkat yang diperlukan untuk menangani masalah keamanan. Setiap rilis baru dari sebuah sistem operasi jaringan wajah persyaratan keamanan yang lebih ketat dari pendahulunya. Selain itu, sebagian vendor database utama membangun beberapa tingkat keamanan ke dalam produk mereka, yang ada secara independen dari sistem operasi Anda atau keamanan jaringan. Implementasi ini sangat beragam fitur keamanan dari produk ke produk.

Populer Database Produk dan Keamanan

Seperti yang Anda ketahui sekarang, banyak sistem basis data relasional berlomba untuk bisnis Anda. Setiap vendor ingin Anda untuk pendek dan jangka panjang alasan. Selama tahap pengembangan proyek, Anda bisa membeli sejumlah lisensi produk untuk pengujian, pengembangan, dan sebagainya. Namun, jumlah izin yang diperlukan untuk database produksi Anda dapat mencapai ratusan atau bahkan ribuan. Selain itu, ketika Anda memutuskan untuk menggunakan produk database tertentu, kemungkinan yang baik bahwa Anda akan tinggal dengan produk untuk tahun-tahun mendatang. Berikut adalah beberapa poin yang perlu diingat ketika Anda memeriksa produk ini:

  • Microsoft FoxPro sistem manajemen database adalah sistem database yang handal yang digunakan terutama di lingkungan single-user. FoxPro menggunakan subset terbatas dari SQL. Tidak ada langkah-langkah keamanan yang disediakan dengan sistem. Ia juga menggunakan format file Xbase, dengan masing-masing file yang berisi satu meja. Indeks disimpan dalam file terpisah.
  • Microsoft Access sistem manajemen database relasional menerapkan lebih dari SQL. Akses masih ditujukan untuk penggunaan pada platform PC, meskipun tidak berisi sistem keamanan dasar. Produk ini memungkinkan Anda untuk membangun query dan menyimpannya dalam database. Selain itu, seluruh database dan semua benda yang ada dalam satu file.
  • Oracle7 sistem manajemen database relasional mendukung SQL standar hampir penuh. Selain itu, Oracle telah menambahkan ekstensi ke SQL sendiri, yang disebut PL * SQL. Ini berisi fitur keamanan penuh, termasuk kemampuan untuk membuat peran dan memberikan izin dan hak pada objek dalam database.
  • Sybase SQL Server yang sama dalam kekuasaan dan fitur untuk produk Oracle. SQL Server juga menyediakan berbagai fitur keamanan dan memiliki ekstensi sendiri ke bahasa SQL, yang disebut Transact-SQL.

Tujuan di balik menggambarkan produk ini adalah untuk menggambarkan bahwa tidak semua perangkat lunak yang cocok untuk setiap aplikasi. Bila Anda berada di sebuah lingkungan bisnis, pilihan Anda mungkin terbatas. Faktor-faktor seperti biaya dan kinerja sangat penting. Namun, tanpa langkah-langkah keamanan yang memadai, ada tabungan menciptakan database Anda dapat dengan mudah diimbangi dengan masalah keamanan.

Bagaimana sebuah Database Menjadi Aman?

Sampai tahap ini, Anda tidak khawatir banyak tentang keamanan “” dari database yang telah Anda buat. Apakah terpikir oleh Anda bahwa Anda mungkin tidak ingin pengguna lain untuk masuk dan merusak dengan informasi database yang begitu cermat memasuki? Apa reaksi Anda jika Anda login ke server suatu pagi dan menemukan bahwa database Anda telah bekerja keras selama telah menjatuhkan (ingat bagaimana diam itu perintah DROP DATABASE ini)? Kami memeriksa secara rinci bagaimana satu sistem manajemen database populer (Personal Oracle7) memungkinkan Anda untuk membuat sebuah database yang aman. Anda akan dapat menerapkan sebagian besar informasi ini untuk sistem manajemen basis data lainnya, jadi pastikan Anda membaca informasi ini bahkan jika tidak sistem Oracle adalah pilihan Anda.


TIP: Jauhkan pertanyaan berikut dalam pikiran ketika Anda rencana sistem keamanan Anda:

  • Siapa yang bisa mendapatkan peran DBA?
  • Berapa banyak pengguna memerlukan akses ke database?
  • Mana pengguna akan membutuhkan hak istimewa yang mana dan peran?
  • Bagaimana Anda akan menghapus user yang tidak lagi membutuhkan akses ke database?

Oracle7 Pribadi dan Keamanan

Oracle7 mengimplementasikan keamanan dengan menggunakan tiga konstruksi:

  • Pengguna
  • Peran
  • Keistimewaan

Menciptakan Pengguna

Pengguna account nama yang diizinkan untuk login ke database Oracle. SQL sintaks yang digunakan untuk membuat pengguna baru berikut.

Sintaks:
  CREATE USER user 
  Diidentifikasi (BY password | eksternal) 
  [DEFAULT tablespace tablespace] 
  [SEMENTARA tablespace tablespace] 
  [QUOTA (integer [K | M] | UNLIMITED) ON] tablespace 
  [PROFIL] Profil 

Jika opsi password BY dipilih, sistem meminta user untuk memasukkan password setiap kali dia log on. Sebagai contoh, membuat username sendiri:

INPUT / OUTPUT:
  SQL> CREATE USER diidentifikasi oleh Bryan CUTIGER; 

  Pengguna diciptakan. 

Setiap kali saya login dengan username saya Bryan, saya diminta untuk memasukkan password saya: CUTIGER.

Jika opsi eksternal dipilih, Oracle bergantung pada nama komputer Anda login dan password sistem. Ketika Anda log on ke sistem, Anda memiliki dasarnya login ke Oracle.


CATATAN: Beberapa implementasi memungkinkan Anda untuk menggunakan eksternal, atau sistem operasi, password sebagai default saat menggunakan SQL (diidentifikasieksternal). Namun, kami menyarankan Anda memaksa pengguna untuk memasukkan password dengan memanfaatkan BY klausa diidentifikasi (diidentifikasi denganpassword).


Seperti yang dapat Anda lihat dari melihat sisa sintaks CREATE USER, Oracle juga memungkinkan Anda untuk mengatur tablespace default dan kuota. Anda dapat mempelajari lebih lanjut tentang topik ini dengan memeriksa dokumentasi Oracle.

Seperti halnya dengan setiap perintah CREATE lain yang telah Anda pelajari di buku ini, ada juga perintah ALTER USER. Ini terlihat seperti ini:

Sintaks:
  ALTER USER pengguna 
  [Diidentifikasi (BY password | eksternal)] 
  [DEFAULT tablespace tablespace] 
  [SEMENTARA tablespace tablespace] 
  [QUOTA (integer [K | M] | UNLIMITED) ON] tablespace 
  [PROFIL] Profil 
  [DEFAULT PERAN ([peran,] peran ... 
    | SEMUA [KECUALI peran [,] peran ...] | NONE)] 

Anda dapat menggunakan perintah ini untuk mengubah pilihan semua pengguna, termasuk password dan profil. Misalnya, untuk mengubah password user Bryan, Anda jenis ini:

INPUT / OUTPUT:
  SQL> ALTER Bryan PENGGUNA 
    2 diidentifikasi oleh Rosebud; 

  Pengguna berubah. 

Untuk mengubah default tablespace, ketik ini:

INPUT / OUTPUT:
  SQL> ALTER RON PENGGUNA 
    DEFAULT 2 tablespace USERS; 

  Pengguna berubah. 

Untuk menghapus pengguna, hanya masalah PENGGUNA perintah DROP, yang menghapus user masuk dalam database sistem. Berikut sintaks untuk perintah ini:

Sintaks:
 DROP USER user_name [CASCADE];

Jika opsi CASCADE digunakan, semua benda yang dimiliki oleh pengguna yang turun bersama dengan user account. Jika CASCADE tidak digunakan dan pengguna dilambangkan oleh user_namemasih memiliki objek, pengguna yang tidak jatuh. Fitur ini agak membingungkan, tetapi akan sangat berguna jika Anda pernah ingin meletakkan pengguna.

Menciptakan Peran

peran adalah hak istimewa atau serangkaian hak istimewa yang memungkinkan user untuk menjalankan fungsi tertentu dalam database. Untuk memberikan peran kepada pengguna, gunakan sintaks berikut:

Sintaks:
  Peran GRANT UNTUK [pengguna DENGAN ADMIN OPTION]; 

Jika DENGAN ADMIN OPTION digunakan, user yang kemudian dapat memberikan peran kepada pengguna lain. Bukankah daya menggembirakan?

Untuk menghapus peran, gunakan perintah REVOKE:

Sintaks:
  REVOKE peran DARI pengguna; 

Bila Anda log on ke sistem dengan menggunakan account yang Anda buat sebelumnya, Anda telah kehabisan batas izin Anda. Anda dapat log on, tapi itu adalah tentang semua yang dapat Anda lakukan. Oracle memungkinkan Anda mendaftar sebagai salah satu dari tiga peran:

  • Menghubungkan
  • Sumber
  • DBA (atau database administrator)

Ketiga peran memiliki berbagai tingkat hak istimewa.


CATATAN: Jika Anda memiliki hak istimewa yang sesuai, Anda dapat membuat peran Anda sendiri, hak istimewa hibah untuk peran Anda, dan kemudian memberikan peran Anda ke pengguna untuk keamanan lebih lanjut.


Peran Connect

Peran Connect dapat dianggap sebagai peran entry-level. Seorang pengguna yang telah diberikan akses peran Connect dapat diberikan berbagai hak istimewa yang memungkinkan dia untuk melakukan sesuatu dengan database.

INPUT / OUTPUT:
  SQL> GRANT CONNECT ATAS Bryan; 

  Grant berhasil. 

Peran Connect memungkinkan pengguna untuk memilih, memasukkan, update, dan menghapus catatan dari tabel milik pengguna lain (setelah perizinan yang sesuai telah diberikan). Pengguna juga dapat membuat tabel, pandangan, urutan, cluster, dan sinonim.

Peran Sumber Daya

Peran Sumber Daya memberi pengguna lebih banyak akses ke database Oracle. Selain izin yang dapat diberikan kepada peran Connect, peran Sumber Daya dapat juga diberikan izin untuk membuat prosedur, memicu, dan indeks.

INPUT / OUTPUT:
  SQL> GRANT RESOURCE ALAM ATAS Bryan; 

  Grant berhasil. 

Peran DBA

Peran DBA memuat segala hak istimewa. Pengguna dengan peran ini mampu melakukan dasarnya apapun yang mereka mau ke sistem database. Anda harus menjaga jumlah pengguna dengan peran untuk minimum sistem untuk memastikan integritas.

INPUT / OUTPUT:
  SQL> GRANT DBA TO Bryan; 

  Grant berhasil. 

Setelah tiga langkah sebelumnya, pengguna diberikan Bryan Connect, Resource, dan peran DBA. Hal ini agak berlebihan karena peranan DBA meliputi dua peran lainnya, sehingga Anda bisa drop mereka sekarang:

INPUT / OUTPUT:
  SQL> CONNECT REVOKE DARI Bryan; 

  Batalkan berhasil. 

  SQL> REVOKE RESOURCE DARI Bryan; 

  Batalkan berhasil. 

Bryan bisa melakukan semua yang dia perlu lakukan dengan peranan DBA.

Keistimewaan Pengguna

Setelah Anda memutuskan peran untuk memberikan pengguna Anda, langkah selanjutnya adalah memutuskan izin ini pengguna akan memiliki database pada objek. (Oracle7 panggilan izin hak hak istimewa ini.) Jenis bervariasi, tergantung pada peran apa yang telah diberikan. Jika Anda benar-benar membuat objek, Anda dapat memberikan hak istimewa pada objek yang ke pengguna lain selama peran mereka izin akses ke hak istimewa yang . Oracle mendefinisikan dua jenis hak istimewa yang dapat diberikan kepada pengguna: sistem hak dan hak istimewa objek.. (Lihat Tabel 12.1 dan 12.2)

Sistem hak systemwide berlaku. sintaks yang digunakan untuk memberikan hak istimewa sistem adalah sebagai berikut:

Sintaks:
  system_privilege GRANT ATAS (user_name | Peran | PUBLIK) 
  [DENGAN] OPSI ADMIN; 

DENGAN ADMIN OPTION memungkinkan penerima beasiswa untuk memberikan hak istimewa ini kepada orang lain.

Akses Pengguna ke Tampilan

Perintah berikut mengijinkan semua user sistem untuk memiliki CREATE VIEW akses dalam skema mereka sendiri.

INPUT:
  GRANT SQL> CREATE VIEW 
    2 UNTUK PUBLIK;
OUTPUT:
  Grant berhasil. 
ANALISIS:

Kata kunci umum berarti bahwa setiap orang memiliki hak pengaturan CREATE VIEW. Jelas, sistem ini memungkinkan penerima hibah hak istimewa yang memiliki banyak akses ke hampir semua sistem. Sistem hak harus diberikan hanya untuk pengguna khusus atau untuk pengguna yang memiliki kebutuhan untuk menggunakan hak istimewa ini. Tabel 12.1 menunjukkan keistimewaan sistem Anda akan menemukan dalam membantu file yang disertakan dengan Personal Oracle7.


PERINGATAN: Gunakan hati saat pemberian hak istimewa kepada publik. Pemberian publik memberikan semua pengguna dengan hak akses ke database Anda mungkin tidak ingin mereka miliki.


Tabel 12.1. Sistem hak istimewa di Oracle7.

Sistem Privilege Diizinkan Operasi
ALTER INDEX APAPUN Memungkinkan penerima untuk mengubah setiap indeks dalam skema apapun.
PROSEDUR ALTER APAPUN Memungkinkan penerima untuk mengubah setiap prosedur yang tersimpan, fungsi, atau paket dalam skema apapun.
ALTER PERAN APAPUN Memungkinkan penerima untuk mengubah apapun peran dalam database.
ALTER TABLE APAPUN Memungkinkan penerima untuk mengubah setiap meja atau melihat dalam skema tersebut.
ALTER TRIGGER APAPUN Memungkinkan penerima untuk mengaktifkan, menonaktifkan, atau kompilasi pun memicu database dalam skema apapun.
ALTER DATABASE Memungkinkan penerima untuk mengubah database.
ALTER USER Memungkinkan penerima untuk mengubah setiap user. hak istimewa ini kewenangan kepada penerima beasiswa untuk mengubah password user lain atau metode otentikasi, memberikan kuota pada setiap tablespace, set default dan tablespace sementara, dan memberikan profil dan peran default.
CREATE INDEKS APAPUN Memungkinkan penerima untuk membuat indeks pada setiap meja dalam skema apapun.
CREATE PROSEDUR APAPUN Memungkinkan penerima untuk membuat disimpan prosedur, fungsi, dan paket dalam skema apapun.
CREATE TABLE APAPUN Memungkinkan penerima untuk membuat tabel dalam skema apapun. Pemilik skema yang berisi tabel harus memiliki kuota ruang pada tablespace yang berisi meja.
CREATE TRIGGER APAPUN Memungkinkan penerima untuk membuat memicu database dalam setiap skema terkait dengan tabel dalam skema apapun.
CREATE VIEW APAPUN Memungkinkan penerima untuk membuat pemandangan dalam skema apapun.
CREATE PROSEDUR Memungkinkan penerima untuk membuat disimpan prosedur, fungsi, dan paket dalam skema mereka sendiri.
CREATE PROFIL Memungkinkan penerima untuk membuat profil.
CREATE PERAN Memungkinkan penerima untuk menciptakan peran.
CREATE sinonim Memungkinkan penerima untuk membuat nama-muradif dalam skema mereka sendiri.
CREATE TABLE Memungkinkan penerima untuk membuat tabel dalam skema mereka sendiri. Untuk membuat meja, para penerima hibah juga harus memiliki kuota ruangan di tablespace untuk berisi meja.
CREATE TRIGGER Memungkinkan penerima untuk membuat database dalam skema memicu mereka sendiri.
CREATE USER Memungkinkan penerima untuk membuat pengguna. hak istimewa ini juga memungkinkan pencipta untuk menetapkan kuota pada setiap tablespace, set default dan tablespace sementara, dan memberikan profil sebagai bagian dari pernyataan CREATE USER.
CREATE VIEW Memungkinkan penerima untuk membuat pemandangan dalam skema mereka sendiri.
HAPUS TABEL APAPUN Memungkinkan penerima untuk menghapus baris dari tabel atau dilihat dalam skema atau tabel truncate dalam skema apapun.
INDEKS DROP APAPUN Memungkinkan penerima untuk menjatuhkan indeks dalam skema apapun.
PROSEDUR DROP APAPUN Memungkinkan penerima untuk drop disimpan prosedur, fungsi, atau paket dalam skema apapun.
DROP PERAN APAPUN Memungkinkan penerima untuk drop peran.
DROP sinonim APAPUN Memungkinkan penerima untuk menjatuhkan nama-muradif swasta dalam skema apa pun.
DROP TABEL APAPUN Memungkinkan penerima untuk drop tabel dalam skema apapun.
DROP TRIGGER APAPUN Memungkinkan penerima untuk drop database memicu dalam skema apapun.
DROP VIEW APAPUN Memungkinkan penerima untuk menjatuhkan dilihat dalam skema apapun.
DROP PENGGUNA Memungkinkan penerima untuk drop pengguna.
Jalankan PROSEDUR APAPUN Memungkinkan penerima untuk melaksanakan prosedur atau fungsi (mandiri atau dikemas) atau referensi variabel paket publik dalam skema apapun.
GRANT APAPUN HAK ISTIMEWA Memungkinkan penerima untuk memberikan hak istimewa apapun sistem.
GRANT PERAN APAPUN Memungkinkan penerima untuk memberikan peran apa pun dalam database.
INSERT TABEL APAPUN Memungkinkan penerima untuk memasukkan baris ke dalam tabel dan tampilan dalam skema apapun.
LOCK TABLE APAPUN Memungkinkan penerima untuk mengunci tabel dan tampilan dalam skema apapun.
PILIH URUTAN APAPUN Memungkinkan penerima untuk sekuens referensi dalam skema apapun.
TABEL SELECT APAPUN Memungkinkan penerima untuk tabel query, pandangan, atau snapshot dalam skema apapun.
UPDATE SETIAP ROWS Memungkinkan penerima untuk memperbarui baris dalam tabel.

Obyek hak adalah hak istimewa yang dapat digunakan objek-objek database tertentu 12.2. Tabel daftar hak istimewa objek dalam Oracle7.

Tabel 12.2. Obyek hak diaktifkan bawah Oracle7.

SEMUA
ALTER
HAPUS
Melaksanakan
INDEKS
INSERT
DAFTAR PUSTAKA
SELECT
UPDATE

Anda dapat menggunakan formulir berikut pernyataan GRANT untuk memberikan pengguna lain mengakses ke meja Anda:

Sintaks:
  GRANT (object_priv | SEMUA [PRIVILEGES]) [(kolom 
  [, Kolom ]...)] 
  [, (Object_priv | SEMUA [PRIVILEGES]) [(kolom 
  [,] Kolom ...)]] ... 
  ON skema [.] Objek 
  UNTUK (user | Peran | PUBLIK) [, (pengguna | Peran | PUBLIK)] ... 
  [DENGAN OPSI] GRANT 

Untuk menghapus objek hak Anda telah memberikan kepada seseorang, gunakan perintah REVOKE dengan sintaks berikut:

Sintaks:
  REVOKE (object_priv | SEMUA [PRIVILEGES]) 
  [, (Object_priv | SEMUA [PRIVILEGES])] 
  ON skema [.] Objek 
  DARI (user | peran | PUBLIK) [, (pengguna | Peran | PUBLIK)] 
  KENDALA CASCADE [] 

Dari Membuat Tabel untuk Pemberian Peran

Buat tabel bernama GAJI dengan struktur sebagai berikut:

INPUT:
  NAMA, CHAR (30) 
  GAJI, NOMOR 
  UMUR, NOMOR 

  SQL> CREATE TABLE GAJI ( 
    2 NAME CHAR (30), 
    3 GAJI NUMBER, 
    4 UMUR NUMBER);
OUTPUT:
  Tabel dibuat. 

Sekarang, buat dua pengguna – Jack dan Jill:

INPUT / OUTPUT:
  SQL> membuat pengguna Jack diidentifikasi oleh Jack; 

  Pengguna diciptakan. 

  SQL> membuat user diidentifikasi oleh Jill Jill; 

  Pengguna diciptakan. 

  SQL> hibah terhubung ke Jack; 

  Grant berhasil. 

  SQL> memberikan sumber daya kepada Jill; 

  Grant berhasil. 
ANALISIS:

Sejauh ini, Anda telah membuat dua pengguna dan masing-masing diberikan peran yang berbeda. Oleh karena itu, mereka akan memiliki kemampuan yang berbeda ketika bekerja dengan database. Pertama menciptakan tabel GAJI dengan informasi berikut:

INPUT / OUTPUT:
  SQL> SELECT * FROM GAJI; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  35.000 JACK 29 
  48.000 JILL 42 
  JOHN 61.000 55 

Anda kemudian dapat memberikan berbagai hak istimewa untuk tabel ini didasarkan pada beberapa alasan sewenang-wenang untuk contoh ini. Kita menganggap bahwa saat ini Anda memiliki hak DBA dan dapat memberikan hak istimewa apapun sistem. Bahkan jika Anda tidak memiliki hak DBA, Anda masih dapat memberikan hak istimewa objek di meja GAJI karena Anda sendiri itu (asumsi Anda baru saja dibuat itu).

Karena hanya milik Jack peran Connect, Anda ingin dia hanya memiliki hak SELECT.

INPUT / OUTPUT:
 SQL> GRANT SELECT PADA GAJI KE JACK; Grant berhasil.

Karena milik Jill peran Resource, Anda membiarkan dia untuk memilih dan memasukkan beberapa data ke dalam tabel. Untuk menghidupkan hal-hal sedikit, memungkinkan Jill untuk memperbarui nilai-nilai hanya dalam bidang GAJI tabel GAJI.

INPUT / OUTPUT:
  GRANT SQL> SELECT, UPDATE (GAJI) PADA GAJI KE Jill; 

  Grant berhasil. 

Sekarang ini meja dan para pengguna telah dibuat, Anda perlu melihat bagaimana pengguna mengakses sebuah meja yang dibuat oleh user lain. Kedua Jack dan Jill telah diberikan akses SELECTpada tabel GAJI. Namun, jika Jack mencoba mengakses meja GAJI, ia akan tahu bahwa itu tidak ada karena Oracle memerlukan nama pengguna atau skema yang memiliki tabel mendahului nama tabel.

Kualifikasi Tabel

Catat username Anda gunakan untuk membuat tabel GAJI (saya adalah Bryan). Untuk Jack untuk memilih data dari tabel GAJI, ia harus mengatasi GAJI tabel dengan nama pengguna tersebut.

INPUT:
  SQL> SELECT * FROM GAJI; 
  SELECT * FROM GAJI 
                *
OUTPUT:
  ERROR pada baris 1: 
  ORA-00942: table atau melihat tidak ada 

Berikut Jack memperingatkan bahwa meja tidak ada. Sekarang menggunakan username pemilik untuk mengidentifikasi meja:

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI Bryan.SALARIES; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 61.000 55 
ANALISIS:

Anda dapat melihat bahwa sekarang permintaan bekerja. Sekarang menguji hak akses Jill log. Pertama dari Jack’s logon dan login lagi sebagai Jill (menggunakan password Jill).

INPUT / OUTPUT:
  SQL> SELECT * 
    2 DARI Bryan.SALARIES; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 61.000 55 

Yang bekerja baik-baik saja. Sekarang cobalah untuk memasukkan catatan baru ke dalam tabel.

INPUT / OUTPUT:
  SQL> INSERT INTO Bryan.SALARIES 
    2 VALUES ('JOE', 85000,38); 
  INSERT INTO Bryan.SALARIES 
                      * 
  ERROR pada baris 1: 
  ORA-01031: hak istimewa tidak cukup 
ANALISIS:

Operasi ini tidak bekerja karena Jill tidak memiliki hak INSERT pada tabel GAJI.

INPUT / OUTPUT:
  SQL> UPDATE Bryan.SALARIES 
    2 SET UMUR = 42 
    3 WHERE NAME "JOHN = '; 
  UPDATE Bryan.SALARIES 
                 * 
  ERROR pada baris 1: 
  ORA-01031: hak istimewa tidak cukup 
ANALISIS:

Sekali lagi, Jill berusaha berkeliling hak istimewa bahwa ia telah diberikan. Tentu, Oracle menangkap kesalahan ini dan diperbaiki dengan cepat.

INPUT / OUTPUT:
  SQL> UPDATE Bryan.SALARIES 
    2 SET GAJI = 35.000 
    3 WHERE NAME 'JOHN ='; 

  1 baris diperbarui. 

  SQL> SELECT * 
    2 DARI Bryan.SALARIES; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 35.000 55 
ANALISIS:

Anda dapat melihat sekarang bahwa memperbarui bekerja selama Jill mematuhi hak istimewa dia telah diberikan.

Menggunakan Tampilan untuk Tujuan Keamanan

Seperti yang telah disebutkan di Hari ke-10, “Tampilan Menciptakan dan Indeks,” pandangan adalah tabel virtual yang dapat Anda gunakan untuk menyajikan tampilan data yang berbeda dari cara secara fisik ada di database. Hari ini Anda akan mempelajari lebih lanjut tentang bagaimana menggunakan pandangan untuk melaksanakan langkah-langkah keamanan. Pertama, bagaimanapun, kami menjelaskan bagaimana laporan pandangan dapat menyederhanakan SQL.

Sebelumnya Anda telah belajar bahwa ketika pengguna harus mengakses sebuah tabel atau database objek yang memiliki pengguna lain, bahwa objek harus direferensikan dengan nama pengguna. Seperti yang dapat Anda bayangkan, prosedur ini bisa bertele-tele jika Anda harus menulis menulis beberapa query SQL berturut-turut. Lebih penting lagi, pengguna pemula akan diperlukan untuk menentukan pemilik meja sebelum mereka bisa memilih isi dari sebuah tabel, yang tidak sesuatu yang Anda ingin semua user Anda untuk melakukan. Satu solusi sederhana ditunjukkan dalam paragraf berikut.

Solusi A untuk Kualifikasi Tabel atau Lihat

Asumsikan bahwa Anda logon sebagai Jack, teman Anda dari contoh sebelumnya. Anda tahu bahwa bagi Jack untuk melihat isi tabel GAJI, ia harus menggunakan pernyataan berikut:

INPUT:
  SQL> SELECT * 
    2 DARI Bryan.SALARIES;
OUTPUT:
  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 35.000 55 

Jika Anda adalah untuk membuat tampilan bernama SALARY_VIEW, pengguna hanya dapat memilih dari pandangan itu.

INPUT / OUTPUT:
 SQL> CREATE VIEW SALARY_VIEW 2 AS SELECT * FROM Bryan.SALARIES 3; Lihat menciptakan DARI. SQL> SELECT * SALARY_VIEW; NAMA UMUR GAJI ---------------------- -------- --------- --------- 29 JACK JILL 48.000 35.000 35.000 55 42 JOHN
ANALISIS:

Permintaan sebelumnya kembali nilai-nilai yang sama dengan catatan kembali dari Bryan.SALARIES.

Menggunakan Sinonim di Tempat Tampilan

SQL juga menyediakan objek yang dikenal sebagai sebuah sinonim. Sebuah sinonim memberikan alias untuk meja untuk menyederhanakan atau meminimalkan penekanan tombol ketika menggunakan tabel dalam pernyataan SQL. Ada dua jenis sinonim: swasta dan publik. Setiap pengguna dengan peran sumber daya dapat membuat sinonim pribadi. Di sisi lain, hanya pengguna dengan peran DBA dapat membuat sinonim publik.

Sintaks untuk sebuah sinonim publik berikut.

Sintaks:
  CREATE [PUBLIC] Sinonim [skema sinonim.] 
  UNTUK Skema [.] Obyek [@ dblink] 

Dalam contoh sebelumnya, Anda bisa mengeluarkan perintah berikut untuk mencapai hasil yang sama:

INPUT / OUTPUT:
  SQL> CREATE GAJI sinonim PUBLIK UNTUK GAJI 
  Sinonim dibuat. 

Kemudian login kembali ke Jack dan jenis ini:

INPUT / OUTPUT:
  SQL> SELECT * FROM GAJI; 

  NAMA GAJI UMUR 
  ------------------------------ --------- --------- 
  JACK 35.000 29 
  48.000 JILL 42 
  JOHN 35.000 55 

Menggunakan Tampilan untuk Memecahkan Masalah Keamanan

Misalnya, Anda berubah pikiran tentang Jack dan Jill dan memutuskan bahwa keduanya tidak harus dapat melihat tabel GAJI sepenuhnya. Anda dapat menggunakan pandangan untuk mengubah situasi ini dan memungkinkan mereka hanya memeriksa informasi mereka sendiri.

INPUT / OUTPUT:
  SQL> JACK_SALARY CREATE VIEW AS 
    2 SELECT * FROM BRYAN.SALARIES 
    3 WHERE NAME 'JACK ='; 

  Lihat dibuat.
INPUT / OUTPUT:
  SQL> CREATE VIEW AS JILL_SALARY 
    2 SELECT * FROM BRYAN.SALARIES 
    3 WHERE NAME 'JILL ='; 

  Lihat dibuat.
INPUT / OUTPUT:
  SQL> GRANT SELECT ON JACK_SALARY 
    2 ATAS JACK; 

  Grant berhasil.
INPUT / OUTPUT:
 SQL> GRANT SELECT ON JILL_SALARY 2 ATAS JILL; Grant berhasil.
INPUT / OUTPUT:
  R SQL> SELECT ON Menimbulkan GAJI DARI JACK; 

  Batalkan berhasil.
INPUT / OUTPUT:
  SQL> SELECT ON REVOKE DARI GAJI JILL; 

  Batalkan berhasil. 

Sekarang login sebagai Jack dan menguji tampilan yang Anda buat untuknya.

INPUT / OUTPUT:
  SQL> SELECT * FROM Bryan.JACK_SALARY; 

  NAMA GAJI UMUR 
  ---------- ---------- ---- 

  Jack 35.000 29 
INPUT / OUTPUT:
  SQL> SELECT * FROM PERKINS.SALARIES; 
  SELECT * FROM PERKINS.SALARIES 
                        * 
  ERROR pada baris 1: 
  ORA-00942: table atau melihat tidak ada 

Log out dari account Jack dan Jill uji:

INPUT / OUTPUT:
  SQL> SELECT * FROM Bryan.JILL_SALARY; 

  NAMA GAJI UMUR 
  ------------------ ------------- ---- 

  Jill 48.000 42 
ANALISIS:

Anda dapat melihat bahwa akses ke meja GAJI benar-benar dikontrol menggunakan pandangan. SQL memungkinkan Anda untuk membuat pandangan yang Anda inginkan dan kemudian memberikan izin kepada pengguna lain. Teknik ini memungkinkan banyak fleksibilitas.

Sintaks untuk menjatuhkan sinonim adalah

Sintaks:
  SQL drop> [sinonim synonym_name] publik; 

CATATAN: Sekarang, Anda harus memahami pentingnya menjaga hingga minimum jumlah orang dengan peran DBA. Seorang pengguna dengan tingkat akses dapat memiliki akses lengkap untuk semua perintah dan operasi dalam database. Catatan, bagaimanapun, bahwa dengan Oracle dan Sybase Anda harus memiliki tingkat akses DBA (atau SA-tingkat di Sybase) mengimpor atau mengekspor data pada database.


Menggunakan Klausul DENGAN GRANT OPTION

Bagaimana menurut Anda yang akan terjadi jika Jill berusaha untuk lulus kehormatan UPDATE di atas untuk Jack? Sepintas Anda mungkin berpikir bahwa Jill, karena ia dipercayakan dengan hak istimewa UPDATE, harus dapat menyebarkannya ke pengguna lain yang diizinkan hak istimewa itu. Namun, dengan menggunakan pernyataan GRANT seperti yang Anda lakukan sebelumnya, Jill tidak dapat melewati hak-nya kepada orang lain:

  GRANT SQL> SELECT, UPDATE (GAJI) PADA Bryan.SALARIES ATAS Jill; 

Berikut adalah sintaks untuk laporan GRANT yang diperkenalkan sebelumnya hari ini:

Sintaks:
  GRANT (object_priv | SEMUA [PRIVILEGES]) [(kolom 
  [, Kolom ]...)] 
  [, (Object_priv | SEMUA [PRIVILEGES]) [(kolom 
  [,] Kolom ...)]] ... 
  ON skema [.] Objek 
  UNTUK (user | Peran | PUBLIK) [, (pengguna | Peran | PUBLIK)] ... 
  [DENGAN OPSI] GRANT 

Apa yang Anda cari adalah DENGAN GRANT OPTION klausa di akhir pernyataan GRANT. Ketika obyek hak istimewa yang diberikan dan DENGAN GRANT OPTION digunakan, hak istimewa ini dapat ditularkan kepada orang lain. Jadi jika Anda ingin memperbolehkan Jill untuk menyampaikan hak istimewa ini pada Jack, Anda akan melakukan hal berikut:

INPUT:
  GRANT SQL> SELECT, UPDATE (GAJI) 
    2 PADA Bryan.SALARIES ATAS JILL 
    3 DENGAN GRANT OPTION;
OUTPUT:
  Grant berhasil. 

Jill kemudian bisa log on dan masalah perintah berikut:

INPUT / OUTPUT:
  GRANT SQL> SELECT, UPDATE (GAJI) 
    2 PADA Bryan.SALARIES ATAS JACK; 

  Grant berhasil. 

Ringkasan

Keamanan merupakan topik yang sering diabaikan-yang dapat menyebabkan banyak masalah jika tidak benar dipikirkan dan dikelola. Untungnya, SQL menyediakan beberapa perintah yang berguna untuk menerapkan keamanan pada database.

Pengguna awalnya diciptakan dengan menggunakan perintah CREATE USER, yang mendirikan sebuah username dan password untuk pengguna. Setelah account pengguna telah dibentuk, pengguna ini harus diberikan peran dalam rangka untuk menyelesaikan pekerjaan apapun. Ketiga tersedia peran dalam Oracle7 adalah Connect, Sumber Daya, dan DBA. Setiap peran memiliki tingkat yang berbeda akses ke database, dengan Hubungkan menjadi sederhana dan DBA memiliki akses untuk segala sesuatu.

Perintah GRANT memberikan izin atau hak istimewa kepada user. Perintah REVOKE dapat mengambil bahwa izin atau hak istimewa menjauh dari pengguna. Kedua jenis hak istimewa adalah obyek hak dan hak istimewa sistem. Hak istimewa sistem harus diawasi dengan baik dan tidak boleh diberikan kepada pengguna berpengalaman. Memberikan akses pengguna berpengalaman untuk perintah memungkinkan mereka untuk (secara tidak sengaja mungkin) menghancurkan data atau database Anda telah susah payah menyiapkan. Obyek hak dapat diberikan untuk memberikan pengguna akses ke objek individu yang ada dalam skema’s database pemilik.

Semua teknik dan pernyataan SQL SQL menyediakan pengguna dengan berbagai alat untuk digunakan ketika mengatur keamanan sistem. Meskipun kami berfokus pada fitur keamanan Oracle7, Anda dapat menerapkan banyak informasi ini ke sistem database di situs Anda. Hanya ingat bahwa apa pun produk yang Anda gunakan, penting untuk menegakkan beberapa tingkat keamanan database.

Sumber ; http://www.webbasedprogramming.com

Older Entries