DB2 Hızlı Kılavuz

Bu bölümde DB2'nin geçmişi, sürümleri, basımları ve ilgili özellikleri açıklanmaktadır.

Genel Bakış

DB2, IBM'in bir veritabanı ürünüdür. İlişkisel Veritabanı Yönetim Sistemidir (RDBMS). DB2, verileri verimli bir şekilde depolamak, analiz etmek ve almak için tasarlanmıştır. DB2 ürünü, Nesneye Yönelik özelliklerin ve XML ile ilişkisel olmayan yapıların desteğiyle genişletilmiştir.

Tarih

Başlangıçta IBM, kendi özel platformu için DB2 ürünü geliştirmişti. 1990 yılından bu yana, Linux, UNIX ve Windows gibi tüm yetkili işletim sistemlerinde çalışabilen bir Evrensel Veritabanı (UDB) DB2 Sunucusu geliştirmeye karar verdi.

Versiyonlar

IBM DB2 için, UDB'nin mevcut sürümü, BLU Acceleration özellikleriyle 10.5'tir ve kod adı 'Kepler' şeklindedir. DB2'nin bugüne kadarki tüm sürümleri aşağıda listelenmiştir:

Sürüm Kod adı
3.4 Örümcek ağı
8.1, 8.2 Stinger
9.1 Engerek
9.5 Engerek 2
9.7 Kobra
9.8 Only PureScale ile özellikler ekledi
10.1 Galileo
10.5 Kepler

Veri sunucusu sürümleri ve özellikleri

Kuruluşlar, DB2'nin gerekli özelliklerinin gereksinimine bağlı olarak uygun DB2 sürümünü seçer. Aşağıdaki tablo, DB2 sunucu sürümlerini ve özelliklerini gösterir:

Sürümler Özellikleri
Advanced Enterprise Server Edition ve Enterprise Server Edition (AESE / ESE) Orta ve büyük ölçekli işletme kuruluşları için tasarlanmıştır. Platform - Linux, UNIX ve Windows. Tablo bölümleme Yüksek Kullanılabilirlik Felaket Kurtarma (HARD) Materyalleştirilmiş Sorgu Tablosu (MQT'ler) Çok Boyutlu Kümeleme (MDC) Bağlantı yoğunlaştırıcı Saf XML Yedek sıkıştırma Homojen Federasyonlar
Workgroup Server Sürümü (WSE) Çalışma Grubu veya orta ölçekli işletme organizasyonları için tasarlanmıştır. Bu WSE'yi kullanarak birlikte çalışabilirsiniz - Yüksek Kullanılabilirlikli Olağanüstü Durum Kurtarma (HARD) Çevrimiçi Yeniden Düzenleme Saf XML Web Hizmeti Federasyon desteği DB2 Homojen Federasyonlar Homojen SQL çoğaltması Yedek sıkıştırma
Ekspres -C DB2'nin tüm yeteneklerini sıfır ücret karşılığında sağlar. Her boyutta konfigürasyona sahip herhangi bir fiziksel veya sanal sistem üzerinde çalışabilir.
Express Sürümü Giriş seviyesi ve orta ölçekli işletme organizasyonları için tasarlanmıştır. Tam özellikli bir DB2 veri sunucusudur. Yalnızca sınırlı hizmetler sunar. Bu Sürüm, - Web Hizmeti Federasyonları DB2 homojen federasyonları Homojen SQL Çoğaltmaları Yedek sıkıştırması ile birlikte gelir
Enterprise Developer Edition Yalnızca tek uygulama geliştiricisi sunar. Herhangi bir IBM sunucusunda devreye alınmak üzere uygulamaların tasarlanması, oluşturulması ve prototipinin oluşturulması yararlıdır. Yazılım, uygulama geliştirmek için kullanılamaz.

Bu bölüm, DB2 sunucusunun kuruluş adımlarını açıklar.

Giriş

DB2 Server deneme sürümünü indirebilir ya da ürün lisansını www.ibm.com adresinden satın alabilirsiniz . Üzerinde çalıştırılması amaçlanan işletim sisteminin boyutuna bağlı olarak indirilebilecek iki ayrı DB2 sunucusu vardır. Örneğin, 32 bit Linux ya da UNIX işletim sistemi için bir DB2 sunucusu indirmek istiyorsanız, 32 bitlik bir DB2 sunucusu yüklemeniz gerekir. Aynısı 64bit DB2 sunucusu için de geçerlidir.

Donanım Gereksinimleri

İşlemci: Minimum Core 2Duo

Ram: minimum 1 GB

Sabit disk: minimum 30 GB

Yazılım gereksinimleri

DB2 sunucusunu kurmadan önce, sisteminizin üzerinde gerekli olan yazılımı hazırlaması gerekir. Linux için, “libstdc ++ 6.0” kurmanız gerekir.

Sistem uyumluluğunun kontrol edilmesi

DB2 Sunucusunu kurmadan önce, sisteminizin DB2 sunucusuyla uyumlu olup olmadığını doğrulamanız gerekir. Uyumluluğu doğrulamak için komut konsolunda 'db2prereqcheck' komutunu çağırmanız gerekir.

DB2'nin Linux işletim sistemine kurulması

Terminal'i açın ve “CD <DB2 kuruluş klasörü>” komutunu kullanarak konsolda db2 kuruluş görüntü klasörü yolunu ayarlayın. Ardından, sisteminizin DB2 sunucusuyla uyumluluğunu doğrulayan “./db2prereqcheck” komutunu yazın.

./db2prereqcheck

Şekil-1, Linux işletim sistemi ve donanım sisteminin uyumluluk gereksinimlerini göstermektedir.

DB2'yi Linux sisteminize kurmak için verilen adımları izleyin:

  • Terminali açın.
  • Kök kullanıcı olarak oturum açın.
  • DB2 Kuruluş klasörünü açın.
  • “./Db2setup” yazın ve Enter'a basın.

Bu işlem, DB2 sunucusu kurulumunun yürütülmesine başlayacaktır.

DB2 Sunucusunun kurulum sürecini başlatmak için "./db2setup" yazın ve kök terminalde Enter tuşuna basın.

Bunu yaptığınızda, "Kurulum Başlatma Pedi" ekranı görünür. [Şekil 2]

Setup Launch pad sayfasında, sol taraftaki menüden "Install a Product" seçeneğini seçin. "DB2 Advanced Enterprise Server Edition" seçeneğini seçin. "Yeni Yükle" Düğmesini seçin.

"DB2 kurulum sihirbazı" adıyla yeni bir çerçeve görüntülenir. Sonrakine tıkla". [Figür 3]

DB2 lisans sözleşmesiyle birlikte sonraki ekran görünür. "Şartları kabul ediyorum ..." u seçin "İleri" yi tıklayın. [Şekil 4]

Sonraki ekran, varsayılan olarak "Tipik" olarak ayarlanan Kurulum türü teklifi ile gelir.

Aynı seçimi koruyun. Sonrakine tıkla". [Şekil-5]

Kurulum eylemiyle birlikte sonraki ekran görüntülenir.

“DB2 Advanced Enterprise Server Edition'ı Kur…” öğesini seçin

Sonrakine tıkla". [Şekil-6]

Sonraki ekranda, kurulum programı kurulum dizininin seçilmesini ister.

Varsayılanı koruyun ve "İleri" yi tıklayın.

Bir sonraki ekran, kullanıcı kimlik doğrulaması ile birlikte gelir. "Dasusr1" kullanıcısı için şifrenizi girin.

(Parolanız kullanıcı adınızla aynı olabilir, böylece hatırlanması daha kolay olur.)

Aşağıdaki ekranda, kurulum sizden DB2 Sunucusu Eşgörünümü yaratmanızı isteyecektir.

Burada, "db2inst1" adıyla bir DB2 yönetim ortamı yaratıyor.

Bir sonraki ekran, varsayılan örneğiniz için ihtiyacınız olan bölüm sayısını sorar.

"Tekli veya Çoklu" bölüm seçeneklerine sahipsiniz.

"Tek bölüm örneğini" seçin. Sonrakine tıkla".

Sonraki ekranda, kurulum sizden yaratılan DB2 yönetim ortamı için kimlik doğrulaması yapmanızı ister.

Burada varsayılan olarak kullanıcı adı "db2inst1" olarak oluşturulur. Kullanıcı adı ile aynı şifreyi girebilirsiniz.

Sonrakine tıkla".

Sonraki ekranda, kurulum "db2fenc" kullanıcısı için kimlik doğrulama bilgilerini girmenizi ister.

Burada, kullanıcı adı ile aynı şifreyi girebilirsiniz.

Sonrakine tıkla".

Sonraki ekranda, "Bu sefer bildirim göndermek için db2 sunucunuzu kurmayın" seçeneğini seçebilirsiniz.

Sonrakine tıkla".

Bir sonraki ekran size db2 kurulumuyla ilgili bilgileri gösterir.

"Bitir" i tıklayın.

DB2 Kuruluş prosedürü bu aşamada tamamlanır.

DB2 kurulumunu doğrulama

Kullanışlılığı için DB2 sunucusunun kuruluşunu doğrulamanız gerekir. DB2 Sunucusu kuruluşunu tamamladıktan sonra, geçerli kullanıcı kipinden çıkın ve "db2inst1" kullanıcısında oturum açın. "Db2inst1" kullanıcı ortamında, db2 ürününüzün doğru kurulup kurulmadığını doğrulamak için terminali açabilir ve aşağıdaki komutları çalıştırabilirsiniz.

db2level

Bu komut, kurulu DB2 ürününün geçerli yönetim ortamı için geçerli sürümünü ve hizmet düzeyini gösterir.

Syntax:

db2level

Example:

db2level

Output:

DB21085I Instance "db2inst2" uses "64" bits       
And DB2 code release "SQL10010" with level     
identifier "0201010E". Informational tokens     
are "DB2 v10.1.0.0", "s120403",     
"LINUXAMD64101", and Fix Pack "0".  
Product is installed at "/home/db2inst2/sqllib".

db2licm

Bu komut, DB2 Ürünümüzün lisansla ilgili tüm bilgilerini gösterir.

Syntax:

db2licm <parameter>

Example:

db2licm -l

Output:

Product name:                     "DB2 Advanced Enterprise Server Edition" 
License type:                     "Trial" 
Expiry date:                      "10/02/2014" 
Product identifier:               "db2aese" 
Version information:              "10.1"  
Product name:                     "DB2 Connect Server" 
License type:                     "Trial" 
Expiry date:                      "10/02/2014" 
Product identifier:               "db2consv" 
Version information:              "10.1"

Komut Satırı İşlemcisi (CLP)

CLP, üç moddan birinde başlatılabilir:

  • Command mode: Bu modda, her komutun ve SQL ifadesinin önüne “db2” gelmelidir. Örneğin, "db2 aktif veritabanı örneği" sorgusu.

  • Interactive input mode: Bu modu “db2” komutunu kullanarak başlatabilirsiniz. Burada, SQL ifadelerini önek olmadan geçirebilirsiniz. Örneğin, "veritabanı örneğini etkinleştir".

  • Batch mode: Burada tüm SQL gereksinim sorgularını içeren bir betik dosyası oluşturmanız ve dosyayı “.db2” uzantısıyla kaydetmeniz gerekir. “Db2 –tf <dosyaadı.db2>” sözdizimini kullanarak bunu komut satırında çağırabilirsiniz.

Giriş

Bir Eşgörünüm, DB2 Veritabanı Yöneticisi için mantıksal bir ortamdır. Örneği kullanarak veritabanlarını yönetebilirsiniz. Gereksinimlerimize bağlı olarak, tek bir fiziksel makinede birden çok örnek oluşturabilirsiniz. Örnek dizininin içeriği şunlardır:

  • Veritabanı Yöneticisi Yapılandırma dosyası
  • Sistem Veritabanı Dizini
  • Düğüm Dizini
  • Düğüm Yapılandırma Dosyası [db2nodes.cfg]
  • Dosyaları ayıklama, dosyaları döküm

DB2 Veritabanı Sunucusu için varsayılan yönetim ortamı "DB2" dir. Eşgörünüm dizininin konumunu oluşturulduktan sonra değiştirmek mümkün değildir. Bir örnek birden çok veritabanını yönetebilir. Bir örnekte, her veritabanının benzersiz bir adı, kendi katalog tabloları, yapılandırma dosyaları, yetkileri ve ayrıcalıkları vardır.

DB2 ürününde eşgörünüm mimarisi

Birden fazla örnek

Linux, UNIX ve Windows üzerindeki tek bir DB2Server'da birden çok eşgörünüm oluşturabilirsiniz. Fiziksel bir makineye birden çok DB2Servers kurmak mümkündür.

Linux'ta örnek oluşturma

DB2 Sunucusu kök kullanıcı olarak kurulursa, Linux ve UNIX üzerinde birden çok eşgörünüm oluşturabilirsiniz. Örnek, Linux ve UNIX üzerinde aynı anda bağımsız olarak çalışabilir. Aynı anda veritabanı yöneticisinin tek bir örneği içinde çalışabilirsiniz.

Bir Örnek klasörü, veritabanı yapılandırma dosyalarını ve klasörlerini içerir. Örnek dizini, işletim sistemi sürümlerine bağlı olarak Windows'ta farklı konumlarda saklanır.

Örnekleri listeleme

Örnekleri listelemek için aşağıdaki komut kullanılır:

db2ilist

Bu komut, bir sistemde bulunan tüm örnekleri listeler.

Syntax:

db2ilist

Example:[DB2 kopyasında kaç eşgörünüm oluşturulduğunu görmek için]

db2ilist

Output:

db2inst1 
db2inst2 
db2inst3

Örnek ortam komutları

Bu komutlar, DB2 CLI'da yönetim ortamı düzenlemesiyle çalışmak için kullanışlıdır.

Örnek alın

Bu komut, o anda çalışan örneğin ayrıntılarını gösterir.

Syntax:

db2 get instance

Example:[Mevcut kullanıcıyı etkinleştiren mevcut örneği görmek için]

db2 get instance

Output:

The current database manager instance is : db2inst1

Örnek ayarla

DB2 UDB üzerindeki bir yönetim ortamının veritabanı yöneticisini başlatmak veya durdurmak için, geçerli yönetim ortamı için aşağıdaki komut yürütülür.

Syntax:

set db2instance=<instance_name>

Example:["Db2inst1" ortamını mevcut kullanıcıya göre düzenlemek için]

set db2instance=db2inst1

db2start

Bu komutu kullanarak bir örnek başlatabilirsiniz. Bundan önce, "örnek belirleme" yi çalıştırmanız gerekir.

Syntax:

db2start

Example:[Bir örnek başlatmak için]

db2start

Output:

SQL1063N DB2START processing was successful

db2stop

Bu komutu kullanarak çalışan bir örneği durdurabilirsiniz.

Syntax:

db2stop

Output:

SQL1064N DB2STOP processing was successful.

Bir örnek oluşturma

Nasıl yeni bir örnek oluşturacağımızı görelim.

db2icrt

Yeni bir örnek oluşturmak istiyorsanız, root ile oturum açmanız gerekir. Örnek kimliği, bir kök kimliği veya kök adı değildir.

Yeni bir örnek oluşturmanın adımları şunlardır:

Step1: Örneğin bir işletim sistemi kullanıcısı oluşturun.

Syntax:

useradd -u <ID> -g <group name> -m -d <user location> <user name> 
-p <password>

Example: [Örneğin 'db2iadm1' grubunda 'db2inst2' adında ve 'db2inst2' şifresinde bir kullanıcı oluşturmak için]

useradd -u 1000 -g db2iadm1 -m -d /home/db2inst2 db2inst2 -p db2inst2

Step2: Yeni yönetim ortamı yaratmak için kök kullanıcıda DB2 yönetim ortam dizinine gidin.

Location:

cd /opt/ibm/db2/v10.1/instance

Step3: Aşağıdaki sözdizimini kullanarak örnek oluşturun:

Syntax:

./db2icrt -s ese -u <inst id> <instance name>

Example: ["Db2inst2" kullanıcısında "ESE" (Enterprise Server Edition) özelliklerine sahip yeni bir "db2inst2" örneği oluşturmak için]

./db2icrt -s ese -u db2inst2 db2inst2

Output:

DBI1446I The db2icrt command is running, please wait.
 ….
 ….. 
DBI1070I Program db2icrt completed successfully.

Bir örnek için iletişim bağlantı noktasını ve ana bilgisayarı düzenleme

/ Etc / services dosyasını düzenleyin ve bağlantı noktası numarasını ekleyin. Aşağıda verilen sözdiziminde, "inst_name", Örnek adını ve "inst_port", örneğin bağlantı noktası numarasını belirtir.

Syntax:

db2c_<inst name> <inst_port>/tcp

Example: ["Services" dosyasında "db2c_db2inst2" değişkeniyle "db2inst2" örneğine "50001 / tcp" bağlantı noktası numarası ekleniyor]

db2c_db2inst2 50001/tcp

Syntax 1: [Veritabanı Yöneticisi Yapılandırmasını hizmet adıyla güncelleyin. Aşağıdaki sözdizimi 'svcename' örnek hizmet adını ve 'inst_name' örnek adını belirtir]

db2 update database manager configuration using svcename db2c_&<inst_name>

Example 1: [DBM Yapılandırmasını değişken svcename ile "db2c_db2inst2" değeriyle güncelleme "db2inst2" örneği

db2 update database manager configuration using svcename db2c_db2inst2

Output

DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.

Syntax 2: mevcut örnek için "tcpip" iletişim protokolünü ayarlayın

db2set DB2COMM=tcpip

Syntax 3: [Veritabanı yöneticisi yapılandırmasından güncellenmiş değerleri almak için mevcut örneği durdurma ve başlatma]

db2stop 
db2start

Bir örneği güncelleme

Aşağıdaki komutu kullanarak bir örneği güncelleyebilirsiniz:

db2iupdt

Bu komut, örneği aynı sürüm sürümü içinde güncellemek için kullanılır. Bu komutu çalıştırmadan önce, "db2stop" komutunu kullanarak örnek veritabanı yöneticisini durdurmanız gerekir. "İnst_name" nin altındaki sözdizimi, daha yeni sürüme veya kurulu db2 sunucu sürümüne güncellemek istediğiniz önceki yayımlanmış veya kurulmuş db2 sunucusu örnek adını gösterir.

Syntax 1: Normal modda bir örneği güncellemek için

db2iupdt <inst_name>

Example1:

./db2iupdt db2inst2

Syntax 2: Hata ayıklama modunda bir örneği güncellemek için

db2iupdt -D <inst_name>

Example

db2iupdt -D db2inst2

Bir örneği yükseltme

Bir yönetim ortamını DB2 kopyasının önceki sürümünden yeni kurulan mevcut DB2 kopyasının sürümüne yükseltebilirsiniz.

db2iupgrade

Linux ya da UNIX sisteminde bu komut DB2DIR / instance dizininde bulunur. Aşağıdaki sözdizimlerinde, "inst_name" önceki sürüm DB2 yönetim ortamını ve "inst_username" kurulu sürüm DB2 kopya yönetim ortamı kullanıcısını belirtir.

Syntax 2:

db2iupgrade -d -k -u <inst_username> <inst_name>

Example:

db2iupgrade -d -k -u db2inst2 db2inst2

Command Parameters:

-d : Hata ayıklama modunu açar.

-k : Bu komutu çalıştırdığınız DB2 kopyasında destekleniyorsa, yükseltme öncesi yönetim ortamı tipini korur.

Linux'ta db2iupgrade komutu için Süper Kullanıcı (su) kullanıyorsanız, “-” seçeneğiyle “su” komutunu vermelisiniz.

Bir örneği düşürme

"Db2icrt" komutuyla oluşturulan örneği bırakabilir veya silebilirsiniz.

db2idrop

Linux ve UNIX işletim sisteminde bu komut DB2_installation_folder / instance dizininde bulunur.

Syntax: [aşağıdaki sözdiziminde, 'inst_username' örneğin kullanıcı adını ve 'inst_name' örnek adını belirtir]

db2idrop -u <inst_username> <inst_name>

Example: [Db2inst2'yi bırakmak için]

./db2idrop -u db2inst2 db2inst2

Örnekte diğer komutları kullanma

Şu anda hangi DB2 yönetim ortamı üzerinde çalıştığımızı bulmak için komut.

Syntax 1: [veritabanı yöneticisi tarafından etkinleştirilen mevcut örneği kontrol etmek için]

db2 get instance

Output:

The current database manager instance is:  db2inst1

Syntax 2: [İşletim bitleri ve yayın sürümü ile mevcut örneği görmek için]

db2pd -inst | head -2

Example:

db2pd -inst | head -2

Output:

Instance db2inst1 uses 64 bits and DB2 code release SQL10010

Syntax 3: [Şu anda çalışan örneğin adını kontrol etmek için]

db2 select inst_name from sysibmadm.env_inst_info

Example:

db2 select inst_name from sysibmadm.env_inst_info

Output:

INST_NAME  --------------------------------------  
db2inst1              
1 record(s) selected.

Syntax: [Yeni bir örneği varsayılan olarak ayarlamak için]

db2set db2instdef=<inst_name> -g

Example: [Yeni oluşturulan örneği varsayılan örnek olarak dizmek için]

db2set db2instdef=db2inst2 -g

Bu bölümde, ilgili sözdizimi ile veritabanlarının oluşturulması, etkinleştirilmesi ve devre dışı bırakılması açıklanmaktadır.

Veritabanı mimarisi

Veritabanı, veritabanı işlemlerini verimli bir şekilde yürütmek için birlikte çalışan Tablolar, Şemalar, Ara Havuzlar, Günlükler, Depolama grupları ve Tablo Alanları koleksiyonudur.

Veritabanı dizini

Veritabanı dizini, veritabanlarının organize edilmiş bir deposudur. Bir veritabanı oluşturduğunuzda, veritabanı hakkındaki tüm ayrıntılar, varsayılan depolama cihazlarının ayrıntıları, yapılandırma dosyaları ve geçici tablo listesi vb. Gibi bir veritabanı dizininde saklanır.

Örnek klasörde bölüm genel dizini oluşturulur. Bu dizin, veritabanıyla ilgili tüm genel bilgileri içerir. Bu bölüm genel dizini NODExxxx / SQLyyy olarak adlandırılır; burada xxxx veri bölüm numarasıdır ve yyy veritabanı belirtecidir.

Bölüm genel dizininde üyeye özel bir dizin oluşturulur. Bu dizin yerel veritabanı bilgilerini içerir. Üyeye özel dizin MEMBERxxxx olarak adlandırılır, burada xxxx bir üye numarasıdır. DB2 Enterprise Server Edition ortamı tek bir üye üzerinde çalışır ve yalnızca bir üyeye özel dizine sahiptir. Bu üyeye özel dizin benzersiz bir şekilde ÜYE0000 olarak adlandırılır.

Bölümlendirilmiş genel dizin

Dizin Konumu: <örnek> / NODExxx / SQLxxx

Bölüm genel dizini, aşağıda listelenen veritabanıyla ilgili dosyaları içerir.

  • Global kilitlenme dosyaya yazma olay izleme dosyaları
  • Tablo alanı bilgi dosyaları [SQLSPCS.1, SQLSPCS.2]
  • Depolama grubu kontrol dosyaları [SQLSGF.1, SQLSGF.2]
  • Geçici tablo alanı kapsayıcı dosyaları. [/ depolama yolu / /T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA]
  • Global Yapılandırma dosyası [SQLDBCONF]
  • Geçmiş dosyaları [DB2RHIST.ASC, DB2RHIST.BAK, DB2TSCHG.HIS, DB2TSCHG.HIS]
  • Günlük kaydı ile ilgili dosyalar [SQLOGCTL.GLFH.1, SQLOGCTL.GLFH.2]
  • Dosyaları kilitleme [SQLINSLK, SQLTMPLK]
  • Otomatik Saklama kapları

Üyeye özel dizin

Dizin konumu: / NODExxxx / SQLxxxx / MEMBER0000

Bu dizin şunları içerir:

  • Veritabanları ile ilişkili nesneler
  • Arabellek havuzu bilgi dosyaları [SQLBP.1, SQLBP.2]
  • Yerel olay izleme dosyaları
  • Günlük kaydı ile ilgili dosyalar [SQLOGCTL.LFH.1, SQLOGCTL.LFH.2, SQLOGMIR.LFH].
  • Yerel yapılandırma dosyaları
  • Deadlocks olay izleme dosyası. Ayrıntılı kilitlenme olayları izleme dosyaları, ESE ve bölümlenmiş veritabanı ortamında katalog düğümünün veritabanı dizininde saklanır.

Veritabanı oluşturma

"CREATE DATABASE" komutunu kullanarak bir veritabanı oluşturabilirsiniz. Tüm veritabanları, bir eşgörünüm yaratılırken oluşturulan varsayılan depolama grubu "IBMSTOGROUP" ile oluşturulur. DB2'de, tüm veritabanı tabloları, ilgili depolama gruplarını kullanan "tablo alanında" saklanır.

Veritabanı ayrıcalıkları otomatik olarak KAMU [CREATETAB, BINDADD, CONNECT, IMPLICIT_SCHEMA ve SELECT] olarak ayarlanır, ancak, RESTRICTIVE seçeneği mevcutsa, ayrıcalıklar KAMU olarak verilmez.

Kısıtlayıcı olmayan veritabanı oluşturma

Bu komut, kısıtlayıcı olmayan bir veritabanı oluşturmak için kullanılır.

Syntax: [Yeni bir Veritabanı oluşturmak için. 'veritabanı_adı' oluşturmak istediğiniz yeni bir veritabanı adını belirtir.]

db2 create database <database name>

Example: ['Bir' adıyla yeni bir kısıtlayıcı olmayan veritabanı oluşturmak için]

db2 create database one

Output:

DB20000I The CREATE DATABASE command completed successfully.

Kısıtlayıcı veritabanı oluşturma

Bu komutun çalıştırılmasıyla kısıtlayıcı veritabanı oluşturulur.

Syntax: [Aşağıdaki sözdiziminde, "db_name" veritabanı adını belirtir.]

db2 create database <db_name> restrictive

Example: ['İki' adıyla yeni bir kısıtlayıcı veritabanı oluşturmak için]

db2 create database two restrictive

Farklı kullanıcı tanımlı lokasyon ile veri tabanı oluşturma

Farklı yolda varsayılan depolama grubu “IBMSTOGROUP” ile bir veritabanı oluşturun. Daha önce, veritabanını belirli bir konumda depolamak veya oluşturmak için kullanıcı tanımlı herhangi bir konum olmadan "veritabanı oluştur" komutunu çalıştırmıştınız. Veritabanını kullanıcı tanımlı veritabanı konumunu kullanarak oluşturmak için aşağıdaki prosedür izlenir:

Syntax: [Aşağıdaki sözdiziminde, 'db_name', 'veritabanı adını' ve 'veri_konumu', verilerin klasörlerde nerede saklanması gerektiğini ve 'db_path_location', 'veri_konumu'nun sürücü konumunu belirtir.]

db2 create database '<db_name>' on '<data location>' dbpath on '<db_path_location>'

Example: [Verilerin "veri1" de depolandığı ve bu klasörün "dbpath1" de depolandığı "dört" adlı veritabanı oluşturmak için]

db2 create database four on '/data1' dbpath on '/dbpath1'

Yerel veya sistem veritabanı dizin dosyalarını görüntüleme

Geçerli örnekte mevcut olan dizinlerin listesini görmek için bu komutu çalıştırırsınız.

Syntax:

db2 list database directory

Example:

db2 list database directory

Output:

System Database Directory  
 Number of entries in the directory = 6  
 Database 1 entry:  
 Database alias                       = FOUR  
 Database name                        = FOUR  
 Local database directory             = 
 /home/db2inst4/Desktop/dbpath  
 Database release level               = f.00  
 Comment                              =  
 Directory entry type                 = Indirect  
 Catalog database partition number    = 0  
 Alternate server hostname            =  
 Alternate server port number         =  
Database 2 entry: 
Database alias                       = SIX  
Database name                        = SIX  
Local database directory             = /home/db2inst4  
Database release level               = f.00  
Comment                              =  
Directory entry type                 = Indirect  
Catalog database partition number    = 0  
Alternate server hostname            =  
Alternate server port number         =

Veritabanının etkinleştirilmesi

Bu komut, belirli bir veritabanı için gerekli tüm hizmetleri başlatır, böylece veritabanı uygulama için kullanılabilir olur.

Syntax: ['db_name' veritabanı adını belirtir]

db2 activate db <db_name>

Example: ['Bir' veritabanının etkinleştirilmesi]

db2 activate db one

Veritabanının devre dışı bırakılması

Bu komutu kullanarak veritabanı hizmetlerini durdurabilirsiniz.

Syntax:

db2 deactivate db <db_name>

Example: [Veritabanı 'bir'i devre dışı bırakmak için]

db2 deactivate db one

Veritabanına bağlanma

Bir veritabanı oluşturduktan sonra, onu kullanmak için, veritabanına bağlanmanız veya veritabanını başlatmanız gerekir.

Syntax:

db2 connect to <database name>

Example: [Veritabanı Birini mevcut CLI'ye Bağlamak İçin]

db2 connect to one

Output:

Database Connection Information  
 Database server        = DB2/LINUXX8664 10.1.0  
 SQL authorization ID   = DB2INST4  
 Local database alias   = ONE

Veritabanının kısıtlayıcı olup olmadığını doğrulama

Bu veritabanının kısıtlayıcı olup olmadığını kontrol etmek için sözdizimi şöyledir:

Syntax: [Aşağıdaki söz diziminde 'db' Veritabanını, 'cfg' yapılandırmayı, 'db_name' veritabanı adını belirtir]

db2 get db cfg for <db_name> | grep -i restrict

Example: ['Bir' veritabanının kısıtlı olup olmadığını kontrol etmek için]

db2 get db cfg for one | grep -i restrict

Output:

Restrict access                       = NO

Veritabanı yöneticisini ve veritabanını yapılandırma

Örnek yapılandırması (Veritabanı yöneticisi yapılandırması), 'db2system' adlı bir dosyada saklanır ve veritabanıyla ilgili yapılandırma, 'SQLDBCON' adlı bir dosyada saklanır. Bu dosyalar doğrudan düzenlenemez. API'yi çağıran araçları kullanarak bu dosyaları düzenleyebilirsiniz. Komut satırı işlemcisini kullanarak bu komutları kullanabilirsiniz.

Veritabanı Yöneticisi Yapılandırma Parametreleri

Syntax: [Örnek Veritabanı yöneticisi bilgilerini almak için]

db2 get database manager configuration
db2 get dbm cfg

Syntax: [Örnek veritabanı yöneticisini güncellemek için]

db2 update database manager configuration
db2 update dbm cfg

Syntax: [Önceki yapılandırmaları sıfırlamak için]

db2 reset database manager configuration
db2 reset dbm cfg

Veritabanı Yapılandırma Parametreleri

Syntax: [Veritabanı bilgilerini almak için]

db2 get database configuration
db2 get db cfg

Syntax: [Veritabanı yapılandırmasını güncellemek için]

db2 update database configuration
db2 update db cfg

Syntax: [Veritabanı yapılandırmasında önceden yapılandırılmış değerleri sıfırlamak için

db2 reset database configuration
db2 reset db cfg

Syntax: [Mevcut Aktif Veritabanının boyutunu kontrol etmek için]

db2 "call get_dbsize_info(?,?,?,-1)"

Example: [Şu Anda Etkinleştirilen Veritabanının boyutunu doğrulamak için]

db2 "call get_dbsize_info(?,?,?,-1)"

Output:

Value of output parameters   
--------------------------   
Parameter Name  : SNAPSHOTTIMESTAMP   
Parameter Value : 2014-07-02-10.27.15.556775  
Parameter Name  : DATABASESIZE   
Parameter Value : 105795584  
Parameter Name  : DATABASECAPACITY   
Parameter Value : 396784705536  
Return Status = 0

Veritabanı için gerekli alanı tahmin etme

Bir veritabanının boyutunu tahmin etmek için aşağıdaki faktörlerin katkısı dikkate alınmalıdır:

  • Sistem Katalog Tabloları
  • Kullanıcı Tablosu Verileri
  • Uzun Alan Verileri
  • Büyük Nesne (LOB) Verileri
  • Dizin Alanı
  • Geçici Çalışma Alanı
  • XML verileri
  • Günlük dosyası alanı
  • Yerel veritabanı dizini
  • Sistem dosyaları

Veritabanı yetkililerinin kontrol edilmesi

Kısıtlayıcı olmayan veritabanında PUBLIC'e hangi veritabanı yetkilerinin verildiğini kontrol etmek için aşağıdaki sözdizimini kullanabilirsiniz.

Step 1: kimlik doğrulama kullanıcı kimliği ve örnek parolası ile veritabanına bağlanın.

Syntax: [Kullanıcı adı ve şifre ile veritabanına bağlanmak için]

db2 connect to <db_name> user <userid> using <password>

Example: ['Db2inst4' kullanıcı kimliği ve 'db2inst4' şifresiyle "bir" Veritabanına bağlanmak için]

db2 connect to one user db2inst4 using db2inst4

Output:

Database Connection Information  
 Database server        = DB2/LINUXX8664 10.1.0  
 SQL authorization ID   = DB2INST4  
 Local database alias   = ONE

Step2: Veritabanının yetkilerini doğrulamak için.

Syntax: [Aşağıdaki sözdizimi, mevcut veritabanı için yetki hizmetlerinin sonucunu gösterir]

db2 "select substr(authority,1,25) as authority, d_user, d_group, 
d_public, role_user, role_group, role_public,d_role from table( 
sysproc.auth_list_authorities_for_authid ('public','g'))as t 
order by authority"

Example:

db2 "select substr(authority,1,25) as authority, d_user, d_group, 
d_public, role_user, role_group, role_public,d_role from table( 
sysproc.auth_list_authorities_for_authid ('PUBLIC','G'))as t 
order by authority"

Output:

AUTHORITY                 D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE  
------------------------- ------ ------- -------- --------- ---------- ----------- ------  
ACCESSCTRL                *      *       N        *         *          N           *       
BINDADD                   *      *       Y        *         *          N           *       
CONNECT                   *      *       Y        *         *          N           *       
CREATETAB                 *      *       Y        *         *          N           *       
CREATE_EXTERNAL_ROUTINE   *      *       N        *         *          N           *       
CREATE_NOT_FENCED_ROUTINE *      *       N        *         *          N           *       
CREATE_SECURE_OBJECT      *      *       N        *         *          N           *       
DATAACCESS                *      *       N        *         *          N           *       
DBADM                     *      *       N        *         *          N           *       
EXPLAIN                   *      *       N        *         *          N           *       
IMPLICIT_SCHEMA           *      *       Y        *         *          N           *       
LOAD                      *      *       N        *         *          N           *       
QUIESCE_CONNECT           *      *       N        *         *          N           *       
SECADM                    *      *       N        *         *          N           *       
SQLADM                    *      *       N        *         *          N           *       
SYSADM                    *      *       *        *         *          *           *       
SYSCTRL                   *      *       *        *         *          *           *       
SYSMAINT                  *      *       *        *         *          *           *       
SYSMON                    *      *       *        *         *          *           *       
WLMADM                    *      *       N        *         *          N           *         
20 record(s) selected.

Veritabanı Bırakılıyor

Drop komutunu kullanarak veritabanımızı örnek veritabanı dizininden kaldırabilirsiniz. Bu komut tüm nesnelerini, tablosunu, boşluklarını, kapsayıcılarını ve ilişkili dosyalarını silebilir.

Syntax: [Bir örnekten herhangi bir veritabanını bırakmak için]

db2 drop database <db_name>

Example: ['Altı' veritabanını örnekten çıkarmak için]

db2  drop database six

Output:

DB20000I The DROP DATABASE command completed successfully

Bu bölüm size veritabanındaki Bufferpool'ları tanıtır.

Giriş

Tampon havuzu, veritabanı yöneticisi tarafından tahsis edilen ana hafıza alanının bir parçasıdır. Tampon havuzlarının amacı, tabloyu önbelleğe almak ve diskteki verileri indekslemektir. Tüm veritabanlarının kendi tampon havuzları vardır. Yeni veritabanı oluşturulurken varsayılan bir arabellek havuzu oluşturulur. "IBMDEFAULTBP" olarak adlandırıldı. Kullanıcı gereksinimlerine bağlı olarak, bir dizi arabellek havuzu oluşturmak mümkündür. Arabellek havuzunda, veritabanı yöneticisi tablo satırı verilerini bir sayfa olarak yerleştirir. Bu sayfa, veritabanı kapatılıncaya veya alan yeni verilerle yazılıncaya kadar arabellek havuzunda kalır. Arabellek havuzundaki verilerle güncellenen ancak diske yazılmayan sayfalara "Kirli" sayfalar denir. Arabellek havuzundaki güncellenmiş veri sayfaları diske yazıldıktan sonra, arabellek havuzu başka bir veri almaya hazırdır.

Tablo alanları ve tampon havuzları arasındaki ilişki

Her tablo alanı, bir veritabanındaki belirli bir arabellek havuzuyla ilişkilendirilir. Bir tablo alanı, bir tampon havuzuyla ilişkilendirilir. Arabellek havuzu ve tablo alanının boyutu aynı olmalıdır. Birden çok arabellek havuzu, genel performansını artırmak için veritabanı tarafından kullanılan belleği yapılandırmanıza olanak tanır.

Bufferpool boyutları

Arabellek havuzu sayfasının boyutu, "CREATE DATABASE" komutunu kullandığınızda belirlenir. Sayfa boyutunu belirtmezseniz, 4KB olan varsayılan sayfa boyutunu alacaktır. Arabellek havuzu oluşturulduktan sonra, sayfa boyutunu daha sonra değiştirmek mümkün değildir

Mevcut veritabanı dizinindeki mevcut arabellek havuzlarını listeleme

Syntax: [Aşağıdaki sözdizimi, veritabanındaki tüm kullanılabilir arabellek havuzlarını gösterir]

db2 select * from syscat.bufferpools

Example: [Mevcut veri tabanındaki mevcut tampon havuzlarını görmek için]

db2 select * from syscat.bufferpools

Output:

BPNAME      BUFFERPOOLID DBPGNAME   NPAGES      PAGESIZE    ESTORE 
NUMBLOCKPAGES BLOCKSIZE   NGNAME
------------------------------------------------------------ 
IBMDEFAULTBP                                                                                                                
 1 -                                                                                                  
 -2        4096 N                  0           0 -     
 
 1 record(s) selected.

Tampon havuzunun oluşturulması

Veritabanı sunucusu için yeni bir arabellek havuzu oluşturmak için, "arabellek havuzu adı" ve "sayfa boyutu" olmak üzere iki parametreye ihtiyacınız vardır. Aşağıdaki sorgu, yeni bir arabellek havuzu oluşturmak için yürütülür.

Sözdizimi: [Aşağıdaki sözdiziminde, "bp_name" arabellek havuzu adını belirtir ve "boyut" arabellek havuzları için bildirmeniz gereken sayfanın boyutunu belirtir (4K, 8K, 16K, 32K)]

db2 create bufferpool <bp_name> pagesize <size>

Example: ["Bpnew" adında ve "8192" (8Kb) boyutunda yeni bir arabellek havuzu oluşturmak için.]

db2 create bufferpool bpnew pagesize 8192

Output

DB20000I The SQL command completed successfully.

Arabellek havuzunu düşürmek

Arabellek havuzunu bırakmadan önce, ona herhangi bir tablo alanı atanıp atanmadığını kontrol etmek gerekir.

Syntax: [Arabellek havuzunu bırakmak için]

drop bufferpool <bp_name>

Example: ['Bpnew' adlı bufferpool'u bırakmak için]

db2 drop bufferpool bpnew

Output

DB20000I The SQL command completed successfully.

Bu bölüm tablo alanlarını ayrıntılı olarak açıklar

Giriş

Tablo alanı bir depolama yapısıdır, tablolar, dizinler, büyük nesneler ve uzun veriler içerir. Bir veritabanındaki verileri, bir sistemde depolanan verilerin nerede depolandığı ile ilgili mantıksal depolama grubuna düzenlemek için kullanılabilir. Bu tablo alanları veritabanı bölüm gruplarında saklanır

Veritabanındaki tablo alanlarının faydaları

Tablo alanları veri tabanında aşağıdaki gibi çeşitli şekillerde faydalıdır:

Recoverability: Tablo alanları yedekleme ve geri yükleme işlemlerini daha kolay hale getirir. Tek bir komut kullanarak, tablo alanlarındaki tüm veritabanı nesnelerini yedekleyebilir veya geri yükleyebilirsiniz.

Automatic storage Management: Veritabanı yöneticisi, ihtiyaçlara göre konteynerler oluşturur ve genişletir.

Memory utilization: Tek bir arabellek havuzu birden çok tablo alanını yönetebilir. Sıralama veya birleştirme gibi etkinliklerin performansını artırmak için kendi tampon havuzlarına geçici tablo alanları atayabilirsiniz.

Konteyner

Tablo alanları bir veya daha fazla kapsayıcı içerir. Bir kapsayıcı bir dizin adı, bir aygıt adı veya bir dosya adı olabilir. Bir veritabanında, tek bir tablo alanı aynı fiziksel depolama cihazı üzerinde birkaç konteynere sahip olabilir. Tablo alanı otomatik depolama tablo alanı seçeneğiyle oluşturulursa, konteynerlerin oluşturulması ve yönetimi veritabanı yöneticisi tarafından otomatik olarak yapılır. Otomatik depolama tablo alanı seçeneği ile oluşturulmamışsa, konteynerleri kendiniz tanımlamanız ve yönetmeniz gerekir.

Varsayılan tablo alanları

Yeni bir veritabanı oluşturduğunuzda, veritabanı yöneticisi veritabanı için bazı varsayılan tablo alanları oluşturur. Bu tablo alanı, kullanıcı ve geçici veriler için bir depolama alanı olarak kullanılır. Her veritabanı, burada verildiği gibi en az üç tablo alanı içermelidir:

  1. Katalog tablo alanı
  2. Kullanıcı tablo alanı
  3. Geçici tablo alanı

Catalog tablespace: Veritabanı için sistem katalog tablolarını içerir. SYSCATSPACE olarak adlandırılır ve bırakılamaz.

User tablespace: Bu tablo alanı, kullanıcı tanımlı tabloları içerir. Bir veritabanında, USERSPACE1 adında bir varsayılan kullanıcı tablo alanımız vardır. Oluşturduğunuz anda bir tablo için kullanıcı tanımlı tablo alanı belirtmezseniz, veritabanı yöneticisi sizin için varsayılan kullanıcı tablo alanını seçer.

Temporary tablespace: Geçici bir tablo alanı, geçici tablo verilerini içerir. Bu tablo alanı, sistem geçici tablo alanlarını veya kullanıcı geçici tablo alanını içerir.

Sistem geçici tablo alanı, sıralama veya birleştirme gibi işlemleri gerçekleştirirken veritabanı yöneticisi tarafından ihtiyaç duyulan geçici verileri tutar. Bir veritabanı, en az bir sistem geçici tablo alanına sahip olmalıdır ve TEMPSPACE1 olarak adlandırılır. Veritabanının oluşturulması sırasında oluşturulur. Kullanıcı geçici tablo alanı, tablolardan geçici verileri tutar. DECLARE GLOBAL TEMPORARY TABLE veya CREATE GLOBAL TEMPORARY TABLE ifadesiyle oluşturulur. Bu geçici tablo alanı, veritabanı oluşturma sırasında varsayılan olarak oluşturulmaz.

Tablespaces and storage management:

Tablo alanları, onları nasıl kullanmak istediğinize bağlı olarak farklı şekillerde ayarlanabilir. İşletim sistemini tablo alanı tahsisini yönetmek için kurabilir, veritabanı yöneticisinin alan tahsis etmesine izin verebilir veya verileriniz için otomatik tablo alanı tahsisini seçebilirsiniz.

Aşağıdaki üç tür yönetilen alan mevcuttur:

System Managed Space (SMS): İşletim sisteminin dosya sistemi yöneticisi, tablonun depolandığı alanı tahsis eder ve yönetir. Depolama alanı talep üzerine tahsis edilir. Bu model, veritabanı nesnelerini temsil eden dosyalardan oluşur. Bu tablo alanı türü, kullanıcı tanımlı tablo alanları için Sürüm 10.1'de kullanımdan kaldırılmıştır ve katalog ve geçici tablo alanları için kullanımdan kaldırılmamıştır.

Database Managed Space (DMS): Veritabanı Sunucusu, depolama alanını kontrol eder. Depolama alanı, DMS tablo alanını oluştururken belirttiğiniz konteyner tanımına göre dosya sisteminde önceden tahsis edilir. Kullanıcı tanımlı tablo alanları için sürüm 10.1 düzeltme paketi 1'den kaldırılmıştır, ancak sistem tablo alanı ve geçici tablo alanı için kullanımdan kaldırılmamıştır.

Automatic Storage Tablespace: Veritabanı sunucusu otomatik olarak yönetilebilir. Veritabanı sunucusu, veritabanındaki verilere bağlı olarak kapsayıcıları oluşturur ve genişletir. Otomatik depolama yönetimi ile konteyner tanımlarının sağlanması gerekli değildir. Veritabanı sunucusu, veritabanına ayrılan depolamayı kullanmak için kapsayıcıları oluşturup genişletmeye bakar. Bir depolama grubuna depolama alanı eklerseniz, mevcut konteyner maksimum kapasitesine ulaştığında yeni konteynerler otomatik olarak oluşturulur. Yeni eklenen depolamayı hemen kullanmak istiyorsanız, tablo alanını yeniden dengeleyebilirsiniz.

Page, table and tablespace size:

Geçici DMS ve otomatik depolama tablo alanları, veritabanınız için seçtiğiniz sayfa boyutu, tablo alanı boyutu için maksimum sınırı belirler. Tablo SMS ve geçici otomatik depolama tablo alanları için, sayfa boyutu tablonun kendisinin boyutunu sınırlar. Sayfa boyutları 4kb, 8kb, 16kb veya 32kb olabilir.

Tablo alanı türü 4K sayfa boyutu sınırı 8K sayfa boyutu sınırı 16K sayfa boyutu sınırı 32K sayfa boyutu sınırı
DMS, geçici olmayan otomatik depolama tablo alanı düzenli 64G 128G 256G 512G
DMS, geçici DMS ve geçici olmayan otomatik depolama tablosu alanı büyük 1892G 16384G 32768G 65536G

Bu bölümde Veritabanı Depolama Grupları açıklanmaktadır.

Giriş

Veritabanı tablosunu veya nesnelerini depolamak için bir dizi Depolama yolu, bir depolama grubudur. Tablo alanlarını depolama grubuna atayabilirsiniz. Bir veritabanı oluşturduğunuzda, tüm tablo alanları varsayılan depolama alanı alır. Bir veritabanı için varsayılan depolama grubu 'IBMSTOGROUP'tur. Yeni bir veritabanı oluşturduğunuzda, "CREATE DATABASE" komutunun sonunda "AUTOMATIC STOGROUP NO" parametresini geçerseniz, varsayılan depolama grubu aktif olur. Veritabanının herhangi bir varsayılan depolama grubu yoktur.

Depolama gruplarını listeleme

Veritabanındaki tüm depolama gruplarını listeleyebilirsiniz.

Syntax: [Mevcut veri tabanındaki mevcut depolama gruplarının listesini görmek için]

db2 select * from syscat.stogroups

Example: [Mevcut veri tabanındaki mevcut depolama alanlarının listesini görmek için]

db2 select * from syscat.stogroups

Bir depolama grubu oluşturma

Veritabanında bir depolama grubu oluşturmak için bir sözdizimi:

Syntax: [Yeni bir stok grubu oluşturmak için. 'Stogropu_name' yeni depolama grubunun adını ve 'yol' verilerin (tabloların) depolandığı konumu belirtir]

db2 create stogroup 
      
        on ‘path’ 
      

Example: ['Data1' klasörü yolunda yeni bir stogroup 'stg1' oluşturmak için]

db2 create stogroup stg1 on ‘/data1’

Output:

DB20000I The SQL command completed succesfully

Stogroup ile tablo alanı oluşturma

Mağaza grubu ile bir tablo alanını nasıl oluşturabileceğiniz aşağıda açıklanmıştır:

Syntax: [Mevcut depolama grubunu kullanarak yeni bir tablo alanı oluşturmak için]

db2 create tablespace <tablespace_name>  using stogroup <stogroup_name>

Example: [Mevcut depolama grubu 'stg1' kullanarak 'ts1' adlı yeni bir tablo alanı oluşturmak için]

db2 create tablespace ts1 using stogroup stg1

Output:

DB20000I The SQL command completed succesfully

Bir depolama grubunu değiştirme

Aşağıdaki sözdizimini kullanarak bir mağaza grubunun konumunu değiştirebilirsiniz:

Syntax: [Bir depolama grubunu eski konumdan yeni konuma taşımak için]

db2 alter stogroup 
      
        add ‘location’, ‘location’ 
      

Example: ['Sg1' adlı depolama grubu için eski konumdan yeni konuma konum yolunu değiştirmek için]

db2 alter stogroup sg1 add ‘/path/data3’, ‘/path/data4’

Depolama grubunun klasör yolu bırakılıyor

Storagegroup klasör yolunu bırakmadan önce, alter komutunu kullanarak depolama grubu için yeni konum ekleyebilirsiniz.

Syntax: [Eski yolu depolama grubu konumundan çıkarmak için]

db2 alter stogroup 
      
        drop ‘/path’ 
      

Example: [Depolama grubu konumunu 'stg1'den çıkarmak için]

db2 alter stogroup stg1 drop ‘/path/data1’

Bir tablo alanını yeniden dengelemek

İşlemler veritabanı üzerinde yürütülürken tablo alanı dolduğunda depolama grubu veya tablo alanları için yeni bir klasör oluşturduğumuzda tablo alanının yeniden dengelenmesi gerekir. Yeniden dengeleme, veritabanı yapılandırma dosyalarını yeni depolama grubu ile günceller.

Syntax: [Tablo alanını eski depolama grubu yolundan yeni depolama grubuna yeniden dengelemek için]

db2 alter tablspace <ts_name> rebalance

Example: [Yeniden dengelemek için]

db2 alter tablespace ts1 rebalance

Bir depolama grubunu yeniden adlandırma

Syntax: [Mevcut depolama adının adını değiştirmek için]

db2 rename stogroup <old_stg_name> to <new_stg_name>

Example: [Depolama grubunun adını 'sg1'den yeni' sgroup1 'adına değiştirmek için]

db2 rename stogroup sg1 to sgroup1

Bir depolama grubunu düşürmek

Step 1: Herhangi bir depolama grubunu bırakmadan önce, tablo alanları için bazı farklı depolama grupları atayabilirsiniz.

Syntax: [Tablo alanı için başka bir depolama grubu atamak için.]

db2 alter tablspace <ts_name> using stogroup <another sto_group_name>

Example: [Tablo alanı 'ts1' için eski bir stok grubundan 'sg2' adlı yeni stok grubuna geçmek için]

db2 alter tablespace ts1 using stogroup sg2

Step 2:

Syntax: [Mevcut stok grubunu kaldırmak için]

db2 drop stogorup <stogroup_name>

Example: ['Stg1' stok grubunu veritabanından kaldırmak için]

db2 drop stogroup stg1

Bu bölüm, Şema kavramını tanıtmakta ve açıklamaktadır.

Giriş

Şema, veritabanında mantıksal olarak sınıflandırılan adlandırılmış nesnelerin bir koleksiyonudur.

Bir veritabanında, aynı ada sahip birden çok veritabanı nesnesi oluşturamazsınız. Bunu yapmak için şema bir grup ortamı sağlar. Bir veritabanında birden çok şema oluşturabilir ve farklı şema grupları ile aynı ada sahip birden çok veritabanı nesnesi oluşturabilirsiniz.

Bir şema tablolar, fonksiyonlar, indeksler, tablo alanları, prosedürler, tetikleyiciler vb. İçerebilir. Örneğin, bir "çalışan" veritabanı için "Profesyonel" ve "Kişisel" olarak adlandırılan iki farklı şema oluşturursunuz. Aynı adla “Çalışan” ile iki farklı tablo yapmak mümkündür. Bu ortamda bir tabloda profesyonel bilgiler bulunurken diğerinde çalışanın kişisel bilgileri bulunur. Aynı isimde iki tabloya sahip olmalarına rağmen, "Kişisel" ve "Profesyonel" olmak üzere iki farklı şemaya sahiptirler. Böylelikle kullanıcı herhangi bir problem yaşamadan her ikisiyle de çalışabilir. Bu özellik, tabloların adlandırılmasında kısıtlamalar olduğunda kullanışlıdır.

Şema ile ilgili birkaç komut görelim:

Şu anda etkin olan şema alınıyor

Syntax:

db2 get schema

Example: [Mevcut veritabanı şemasını almak için]

db2 get schema

Mevcut ortama başka bir şema ayarlama

Syntax:

db2 set schema=<schema_name>

Example: ['Schema1'i mevcut örnek ortamına göre düzenlemek için]

db2 set schema=schema1

Yeni Şema Oluşturmak

Syntax: [Yetkili kullanıcı kimliğiyle yeni bir şema oluşturmak için]

db2 create schema <schema_name> authroization <inst_user>

Example: ["Db2inst2" ile yetkilendirilmiş "şema1" şeması oluşturmak için]

db2 create schema schema1 authorization db2inst2

Egzersiz yapmak

Aynı isimde fakat iki farklı şemada iki farklı tablo oluşturalım. Burada, biri kişisel diğeri profesyonel bilgi için olmak üzere iki farklı şema ile çalışan tablosu oluşturursunuz.

Step 1: İki şema oluşturun.

Schema 1: [Professional adlı şema oluşturmak için]

db2 create schema professional authorization db2inst2

Schema 2: [Kişisel adlı şema oluşturmak için]

db2 create schema personal authorization db2inst2

Step 2: Çalışan ayrıntıları için aynı ada sahip iki tablo oluşturun

Table1: professional.employee

[Veritabanında 'profesyonel' şema adını kullanarak yeni bir 'çalışan' tablosu oluşturmak için]

db2 create table professional.employee(id number, name 
varchar(20), profession varchar(20), join_date date, 
salary number);

Table2: kişisel. çalışan

[Aynı veritabanında "kişisel" şema adıyla yeni bir "çalışan" tablosu oluşturmak için]

db2 create table personal.employee(id number, name 
varchar(20), d_birth date, phone bigint, address 
varchar(200));

Bu adımları uyguladıktan sonra, iki farklı şemaya sahip aynı 'çalışan' adlı iki tablo elde edersiniz.

Bu bölüm, DB2'de kullanılan çeşitli veri türlerini tanıtır.

Giriş

DB2 Veritabanı tablolarında, geliştiricinin gereksinimlerine bağlı olarak her sütunun kendi veri türü vardır. Veri türünün, bir tablonun sütunlarındaki değerlerin türü ve aralığı olduğu söylenir.

Yerleşik veri türleri

  • Tarih saat
    • TIME: Günün saatini saat, dakika ve saniye olarak gösterir.
    • TIMESTAMP: Yıl, ay, gün, saat, dakika, saniye ve mikrosaniye şeklinde tarih ve saatin yedi değerini temsil eder.
    • DATE: Günün tarihini yıl, ay ve gün şeklinde üç kısımda temsil eder.
  • String
    • Character
  • CHAR (fixed length): Karakter dizilerinin sabit uzunluğu.
    • Değişen uzunluk
  • VARCHAR: Değişen uzunlukta karakter dizeleri.
  • CLOB: büyük nesne dizeleri, bunu bir karakter dizesi VARCHAR veri türünün sınırlarını aştığında kullanırsınız.
    • Graphic
  • GRAPHIC
    • Fixed length: Çift baytlık karakterler içeren sabit uzunlukta grafik dizeleri
    • Değişen uzunluk
  • VARGRAPHIC: Çift bayt karakterleri içeren değişken karakterli grafik dizesi.
  • DBCLOB: büyük nesne türü
    • Binary
  • BLOB (değişen uzunluk): büyük nesnede ikili dize
  • BOOLEAN: 0 ve 1 şeklinde.
  • Signed numeric
    • Exact
  • Binary integer
    • SMALLINT [16BIT]: Bunu kullanarak sütunlara küçük int değerleri ekleyebilirsiniz
    • INTEGER [32BIT]: Bunu kullanarak sütunlara büyük int değerleri ekleyebilirsiniz
    • BIGINT [64BIT]: Bunu kullanarak sütunlara daha büyük int değerleri ekleyebilirsiniz
  • Decimal
    • ONDALIK (paketlenmiş)
    • DECFLOAT (ondalık kayan nokta): Bunu kullanarak ondalık kayan nokta sayıları ekleyebilirsiniz
    • Approximate
  • Floating points
    • REAL (tek duyarlık): Bu veri türünü kullanarak, tek duyarlıklı kayan noktalı sayılar ekleyebilirsiniz.
    • DOUBLE (çift kesinlik): Bu veri türünü kullanarak, çift duyarlıklı kayan noktalı sayılar ekleyebilirsiniz.
  • eXtensible Mark-up Language
    • XML: XML verilerini bu veri türü sütununda saklayabilirsiniz.

Tablolar, Veritabanı yöneticisi tarafından tutulan mantıksal yapıdır. Bir tabloda her dikey blok sütun (Tuple) ve her yatay blok satır (Varlık) olarak adlandırılır. Sütunlar ve satırlar şeklinde depolanan verilerin toplanması tablo olarak bilinir. Tablolarda her sütunun farklı veri türü vardır. Tablolar kalıcı verileri depolamak için kullanılır.

Tablo türleri

  • Base Tables: Kalıcı verileri tutarlar. Aşağıdakiler dahil farklı temel tablo türleri vardır:
    • Regular Tables: Genel amaçlı tablolar, İndeksli ortak tablolar genel amaçlı tablolardır.
    • Multidimensional Clustering Table (MDC): Bu tür bir tablo fiziksel olarak birden fazla anahtar üzerinde kümelenmiştir ve büyük veritabanı ortamlarını korumak için kullanılır. Bu tür tablolar DB2 pureScale'de desteklenmez.
    • Insert time clustering Table (ITC): MDC tablolarına benzer şekilde, satırlar tablolara eklendikleri zamana göre kümelenir. Bölümlenmiş tablolar olabilirler. Onlar da pureScale ortamını desteklemez.
    • Range-Clustered tables Table (RCT): Bu tür tablolar verilere hızlı ve doğrudan erişim sağlar. Bunlar sıralı kümeler olarak uygulanır. Tablodaki her kaydın bir kayıt kimliği vardır. Bu tür tablolar, verilerin tabloda bir veya daha fazla sütunla sıkı bir şekilde kümelendiği durumlarda kullanılır. Bu tür tablolar, DB2 pureScale'de de desteklenmez.
    • Partitioned Tables: Bu tür tablolar, tablo verilerinin birden çok depolama nesnesine bölündüğü veri organizasyon şemasında kullanılır. Veri bölümleri, bölümlenmiş bir tabloya eklenebilir, tabloya eklenebilir ve buradan çıkarılabilir. Bir tablodan birden çok veri bölümünü tek bir tablo alanında depolayabilirsiniz.
    • Temporal Tables: Veritabanındaki bir tablonun geçmişi, önceden yapılan değişikliklerin ayrıntıları gibi geçici tablolarda saklanır.
  • Temporary Tables: Farklı veritabanı işlemlerinin geçici çalışması için geçici tablolar kullanmanız gerekir. Geçici tablolar (DGTT'ler) sistem kataloğunda görünmez, XML sütunları oluşturulan geçici tablolarda kullanılamaz.
  • Materialized Query Tables: MQT, sorguların performansını artırmak için kullanılabilir. Bu tür tablolar, tablolardaki verileri belirlemek için kullanılan bir sorgu tarafından tanımlanır.

Tablolar Oluşturma

Aşağıdaki sözdizimi tablo oluşturur:

Syntax: [Yeni bir tablo oluşturmak için]

db2 create table <schema_name>.<table_name>
(column_name column_type....) in <tablespace_name>

Example: “Çalışan” detaylarını “profesyonel” şemasında saklamak için bir tablo oluşturuyoruz. Bu tablo "id, name, jobrole, joindate, maaş" alanlarına sahiptir ve bu tablo verileri "ts1" tablo alanında saklanacaktır.

db2 create table professional.employee(id int, name 
varchar(50),jobrole varchar(30),joindate date, 
salary double) in ts1

Output:

DB20000I The SQL command completed successfully.

Liste tablosu ayrıntıları

Tablo ayrıntılarını listelemek için aşağıdaki sözdizimi kullanılır:

Syntax: [Şemalarla oluşturulan tabloların listesini görmek için]

db2 select tabname, tabschema, tbspace from syscat.tables

Example: [Mevcut veri tabanındaki tabloların listesini görmek için]

db2 select tabname, tabschema, tbspace from syscat.tables

Output:

TABNAME      TABSCHEMA     TBSPACE 
------------ ------------- -------- 
EMPLOYEE     PROFESSIONAL    TS1  


 1 record(s) selected.

Bir tablodaki sütunları listeleme

Aşağıdaki söz dizimi, bir tablodaki sütunları listeler:

Syntax: [Bir tablonun sütunlarını ve veri türlerini görmek için]

db2 describe table <table_name>

Example: ['Çalışan' tablosunun sütunlarını ve veri türlerini görmek için]

db2 describe table professional.employee

Output:

Data type                   Column 
Column name  schema    Data type name    Length    Scale Nulls 
------ ----- --------- ----------------- --------- ----- ------ 
ID           SYSIBM    INTEGER             4         0     Yes 
NAME         SYSIBM    VARCHAR             50        0     Yes 
JOBROLE      SYSIBM    VARCHAR             30        0     Yes 
JOINDATE     SYSIBM    DATE                4         0     Yes 
SALARY       SYSIBM    DOUBLE              8         0     Yes  

  5 record(s) selected.

Gizli Sütunlar

Bir tablonun tüm sütununu gizleyebilirsiniz. Sorgudan "* seçin" çağrısı yaparsanız, ortaya çıkan tabloda gizli sütunlar döndürülmez. Bir tabloya veri eklediğinizde, sütun listesi olmayan bir “INSERT” ifadesi, örtük olarak gizlenmiş herhangi bir sütun için değer beklemez. Bu tür sütunlara, somutlaştırılmış sorgu tablolarında yüksek oranda başvurulur. Bu tür sütunlar, geçici tablolar oluşturmayı desteklemez.

Gizli sütunlu tablo oluşturma

Aşağıdaki sözdizimi, gizli sütunlara sahip bir tablo oluşturur:

Syntax: [Gizli sütunlara sahip bir tablo oluşturmak için]

db2 create table <tab_name> (col1 datatype,col2 datatype 
implicitly hidden)

Example: [Gizli 'telefon' sütunlarıyla bir 'müşteri' tablosu oluşturmak için]

db2 create table professional.customer(custid integer not 
null, fullname varchar(100), phone char(10) 
implicitly hidden)

Veri değerlerini tabloya eklemek

Aşağıdaki sözdizimi, tabloya değerler ekler:

Syntax: [Bir tabloya değer eklemek için]

db2 insert into <tab_name>(col1,col2,...)
 values(val1,val2,..)

Example: ['Müşteri' tablosuna değer girmek için]

db2 insert into professional.customer(custid, fullname, phone) 
values(100,'ravi','9898989')


db2 insert into professional.customer(custid, fullname, phone) 
values(101,'krathi','87996659')


db2 insert into professional.customer(custid, fullname, phone) 
values(102,'gopal','768678687')

Output:

DB20000I  The SQL command completed successfully.

Tablodan değerlerin alınması

Aşağıdaki sözdizimi, tablodan değerleri alır:

Syntax: [Bir tablodan değerleri almak için]

db2 select * from &lttab_name>

Example: ['Müşteri' tablosundan değerleri almak için]

db2 select * from professional.customer

Output:

CUSTID      FULLNAME 
----------- ------------------------ 
        100 ravi
		
        101 krathi
		
        102 gopal  
		
  3 record(s) selected.

Gizli sütunlar dahil bir tablodan değerleri alma

Aşağıdaki sözdizimi, seçili sütunlardan değerleri alır:

Syntax: [Bir tablodan seçili gizli sütun değerlerini almak için]

db2 select col1,col2,col3 from <tab_name>

Example: [Bir tablodan seçilen sütun değerlerini almak için]

db2 select custid,fullname,phone from professional.customer

Output:

CUSTID  FULLNAME    PHONE 
------- ---------   ------------ 
100     ravi        9898989
 
101     krathi      87996659 

102     gopal       768678687 

  3 record(s) selected.

Verileri gizli sütunlarda görmek istiyorsanız, “DESCRIBE” komutunu uygulamanız gerekir.

Syntax:

db2 describe table <table_name> show detail

Example:

db2 describe table professional.customer show detail

Output:

Column name     Data type schema     Data type name  Column
           column    Partitionkey  code 
                                       Length   Scale    Nulls     
number     sequence      page     Hidden      Default 
--------------- -------------------- --------------- -------- ----
---- -------- ---------- ------------- -------- ----------- ------ 
---  
CUSTID          SYSIBM               INTEGER         4        0 
No       0          0         0        No 
FULLNAME        SYSIBM               VARCHAR         100      0
Yes      1          0        1208     No     

PHONE           SYSIBM               CHARACTER       10       0     
Yes      2          0             1208     Implicitly  
  
3 record(s) selected.

Tablo sütunlarının türünü değiştirme

Bu "değiştir" komutunu kullanarak tablo yapımızı aşağıdaki gibi değiştirebilirsiniz:

Syntax:

db2 alter table <tab_name> alter column <col_name> set data type <data_type>

Example: [Çalışan tablosu için "id" sütununun "int" olan veri türünü "bigint" e değiştirmek için]

db2 alter table professional.employee alter column id set data type bigint

Output::

DB20000I The SQL command completed successfully.

Sütun adını değiştirme

Sütun adını aşağıda gösterildiği gibi değiştirebilirsiniz:

Syntax: [Sütun adını bir tablonun eski adından yeni adına değiştirmek için]

db2 alter table <tab_name> rename column <old_name> to <new_name>

Example: ["Müşteriler" tablosundaki sütun adını "tam ad" dan "müşteri adı" na değiştirmek için.]

db2 alter table professional.customer rename column fullname to custname

Masaları düşürmek

Herhangi bir tabloyu silmek için, "DROP" komutunu aşağıdaki gibi kullanmanız gerekir:

Syntax:

db2 drop table <tab_name>

Example: [Müşteri tablosu form veritabanını bırakmak için]

db2 drop table professional.customers

Tablonun tüm hiyerarşisini (tetikleyiciler ve ilişki dahil) silmek için, “DROP TABLE HIERARCHY” komutunu kullanmanız gerekir.

Syntax:

db2 drop table hierarchy <tab_name>

Example: [Bir "müşteri" tablosunun tüm hiyerarşisini kaldırmak için]

db2 drop table hierarchy professional.customers

Bu bölüm, veritabanı nesnelerinin takma adlarını kullanarak diğer adların oluşturulmasını ve verilerin alınmasını açıklar.

Giriş

Alias, veritabanı nesneleri için alternatif bir addır. Veritabanı nesnesine başvurmak için kullanılabilir. Veritabanı nesneleri için bir takma ad olduğunu söyleyebilirsiniz. Takma adlar, nesnelerin adlarını kısa tutması için tanımlanır, böylece sorgu boyutunu azaltır ve sorgunun okunabilirliğini artırır.

Veritabanı nesnesi takma adları oluşturma

Aşağıda gösterildiği gibi veritabanı nesnesi takma adı oluşturabilirsiniz:

Syntax:

db2 create alias <alias_name> for <table_name>

Example: "Professional.customer" tablosu için takma ad oluşturma

db2 create alias pro_cust for professional.customer

"SELECT * FROM PRO_CUST" veya "SELECT * FROM PROFESSIONAL.CUSTOMER" ı geçerseniz, veritabanı sunucusu aynı sonucu gösterecektir.

Syntax: [Doğrudan şema adıyla bir tablodan değerleri almak için]

db2 select * from <schema_name>.<table_name>

Example: [Tablo müşterisinden değerleri almak için]

db2 select * from professional.customer

Output:

CUSTID  FULLNAME    PHONE
------- ---------   ------------ 
100     ravi        9898989 
101     krathi      87996659 
102     gopal       768678687 
  
  3 record(s) selected.

Tablonun takma adını kullanarak değerleri alma

Aşağıda gösterildiği gibi takma ad kullanarak veritabanından değerler alabilirsiniz:

Syntax: [Tablonun takma adını çağırarak tablodan değerleri almak için]

db2 select * from <alias_name>

Example: [Takma adı kullanarak tablo müşterisinden değerleri almak için]

db2 select * from pro_cust

Output:

CUSTID  FULLNAME    PHONE
------- ---------   ------------ 
100     ravi        9898989 
101     krathi      87996659 
102     gopal       768678687 
  
  3 record(s) selected.

Bu bölüm, veri tabanındaki çeşitli kısıtlamaları açıklamaktadır.

Giriş

Veritabanı bütünlüğünü güçlendirmek için kısıtlar adı verilen bir dizi kural tanımlanır. Kısıtlamalar, sütunlardaki değerlere izin verir veya yasaklar.

Gerçek zamanlı veritabanı etkinliklerinde, veriler belirli kısıtlamalarla eklenmelidir. Örneğin, bir satış veritabanında satış kimliği veya işlem kimliği benzersiz olmalıdır. Kısıtlama türleri şunlardır:

  • GEÇERSİZ DEĞİL
  • Unique
  • Birincil anahtar
  • Yabancı anahtar
  • Check
  • Informational

Kısıtlamalar yalnızca tablolarla ilişkilidir. Yalnızca belirli tablolara uygulanırlar. Tablo oluşturma sırasında tanımlanır ve tabloya uygulanır.

Her kısıtlamanın açıklaması:

GEÇERSİZ DEĞİL

Tablodaki bir veya daha fazla sütundan boş değerleri yasaklamak bir kuraldır.

Syntax:

db2 create table <table_name>(col_name col_type not null,..)

Example: [Tabloda herhangi bir boş hücre oluşmasını önlemek için tüm sütunlara "boş olmayan" kısıtlamalar ekleyen dört sütuna (id, itemname, qty, price) sahip bir satış tablosu oluşturmak için.]

db2 create table shopper.sales(id bigint not null, itemname 
varchar(40) not null, qty int not null,price double not null)

NOT NULL değerleri tabloya ekleme

Aşağıda gösterildiği gibi tabloya değerler ekleyebilirsiniz:

Example: [ERRORoneous Query]

db2 insert into shopper.sales(id,itemname,qty) 
values(1,'raagi',12)

Output: [Doğru sorgu]

DB21034E  The command was processed as an SQL statement because 
it was not a 

valid Command Line Processor command.  During SQL processing 
it returned: 

SQL0407N  Assignment of a NULL value to a NOT NULL column 
"TBSPACEID=5, 

TABLEID=4, COLNO=3" is not allowed.  SQLSTATE=23502

Example: [Doğru sorgu]

db2 insert into shopper.sales(id,itemname,qty,price) 
values(1,'raagi',12, 120.00)  

db2 insert into shopper.sales(id,itemname,qty,price) 
values(1,'raagi',12, 120.00)

Output:

DB20000I The SQL command completed successfully.

Benzersiz kısıtlamalar

Bu kısıtlamaları kullanarak, sütunların değerlerini benzersiz şekilde ayarlayabilirsiniz. Bunun için benzersiz kısıtlamalar, tablo yaratılırken "boş değil" kısıtlamasıyla bildirilir.

Syntax:

db2 create table <tab_name>(<col> <col_type> not null unique, ...)

Example:

db2 create table shopper.sales1(id bigint not null unique, 
itemname varchar(40) not null, qty int not null,price 
double not null)

Değerleri tabloya eklemek

Example: 1, 2, 3 ve 4 gibi benzersiz kimliklere sahip dört farklı satır eklemek için.

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(1, 'sweet', 100, 89)  

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(2, 'choco', 50, 60)  

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(3, 'butter', 30, 40)  

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(4, 'milk', 1000, 12)

Example: "İd" değeri 3 olan yeni bir satır eklemek için

db2 insert into shopper.sales1(id, itemname, qty, price) 
values(3, 'cheese', 60, 80)

Output: mevcut id değerine sahip yeni bir satır eklemeye çalıştığınızda, şu sonucu gösterecektir:

DB21034E  The command was processed as an SQL statement 
because it was not a 

valid Command Line Processor command.  During 
SQL processing it returned: 

SQL0803N  One or more values in the INSERT statement, 
UPDATE statement, or foreign key update caused by a
DELETE statement are not valid because the primary key, 
unique constraint or unique index identified by "1" constrains 
table "SHOPPER.SALES1" from having duplicate values for the 
index key. SQLSTATE=23505

Birincil anahtar

Benzersiz kısıtlamalara benzer şekilde, birden çok tablo arasındaki ilişkileri bildirmek için bir "birincil anahtar" ve bir "yabancı anahtar" kısıtlaması kullanabilirsiniz.

Syntax:

db2 create table <tab_name>( 
      
       ,.., primary key ()) 
      

Example: Birincil anahtar olarak "sid" ile "satıcılar" tablosu oluşturmak için

db2 create table shopper.salesboys(sid int not null, name 
varchar(40) not null, salary double not null, constraint 
pk_boy_id primary key (sid))

Yabancı anahtar

Yabancı anahtar, başka bir tablodaki bir satırın en az bir birincil anahtarıyla eşleşmesi için gerekli olan bir tablodaki sütun kümesidir. Bu bir bilgi kısıtlaması veya bilgi tutarlılığı kısıtlamasıdır. Bir veya daha fazla tablodaki birden çok sütundaki değerler hakkında mantıksal bir kuraldır. Tablolar arasında gerekli ilişkiyi sağlar.

Daha önce, "shopper.salesboys" adlı bir tablo oluşturdunuz. Bu tablo için birincil anahtar "sid" dir. Şimdi "çalışan" adlı farklı şema ve "satıcılar" adlı tablo ile satış elemanının kişisel detaylarının bulunduğu yeni bir tablo oluşturuyorsunuz. Bu durumda, "sid" yabancı anahtardır.

Syntax:

db2 create table <tab_name>(<col> <col_type>,constraint 
<const_name> foreign key (<col_name>)  
                  reference <ref_table> (<ref_col>)

Example: [Yabancı anahtar sütunu 'sid' ile 'salesboys' adlı bir tablo oluşturmak için]

db2 create table employee.salesboys( 
            sid int,  
            name varchar(30) not null,  
            phone int not null,  
            constraint fk_boy_id  
            foreign key (sid)  
            references shopper.salesboys (sid) 
			 on delete restrict 
                       )

Example: ["Shopper.salesboys" birincil anahtar tablosuna değerler ekleme]

db2 insert into shopper.salesboys values(100,'raju',20000.00), 
(101,'kiran',15000.00), 
(102,'radha',10000.00), 
(103,'wali',20000.00), 
(104,'rayan',15000.00)

Example: ["Employee.salesboys" yabancı anahtar tablosuna değerler ekleme [hatasız]]

db2 insert into employee.salesboys values(100,'raju',98998976), 
(101,'kiran',98911176), 
(102,'radha',943245176), 
(103,'wali',89857330),  
(104,'rayan',89851130)

“Shopper.salesboys” tablosunda saklanmayan bilinmeyen bir numara girdiyseniz, size SQL hatası gösterecektir.

Example: [hata yürütme]

db2 insert into employee.salesboys values(105,'rayan',89851130)

Output:

DB21034E  The command was processed as an SQL statement because it 
was not a valid Command Line Processor command.  During SQL 
processing it returned: SQL0530N  The insert or update value of 
the FOREIGN KEY "EMPLOYEE.SALESBOYS.FK_BOY_ID" is not equal to any 
value of the parent key of the parent table.  SQLSTATE=23503

Kısıtlama kontrol ediliyor

Bir tablodaki belirli bir sütun için koşullu kısıtlamalar eklemek için bu kısıtlamayı kullanmanız gerekir.

Syntax:

db2 create table 
      
        (
        
        
          primary key (
         
          ), constraint 
          
            check (condition or condition) ) 
          
         
        
       
      

Example: [To create emp1 table with constraints values]

db2 create table empl                                                     
 (id           smallint not null,                                         
  name         varchar(9),                                                
  dept         smallint check (dept between 10 and 100), 
  job          char(5)  check (job in ('sales', 'mgr', 'clerk')), 
  hiredate     date,                                                      
  salary       decimal(7,2),                                              
  comm         decimal(7,2),                                              
  primary key (id),                                                       
  constraint yearsal check (year(hiredate) > 1986 or salary > 40500)  
 )
 

Inserting values

You can insert values into a table as shown below:

db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' , 
40000.00, 1000.00) 

Dropping the constraint

Let us see the syntaxes for dropping various constraints.

Dropping UNIQUE constraint

Syntax:

db2 alter table <tab_name> drop unique <const_name>

Dropping primary key

Syntax:

db2 alter table <tab_name> drop primary key 

Dropping check constraint

Syntax:

db2 alter table <tab_name> drop check <check_const_name>  

Dropping foreign key

Syntax:

db2 alter table <tab_name> drop foreigh key <foreign_key_name>  

DB2 Indexes

This chapter covers introduction to indexes, their types, creation and dropping.

Introduction

Index is a set of pointers, which can refer to rows in a table, blocks in MDC or ITC tables, XML data in an XML storage object that are logically ordered by the values of one or more keys. It is created on DB2 table columns to speed up the data access for the queries, and to cluster and partition the data efficiently. It can also improve the performance of operation on the view. A table with a unique index can have rows with unique keys. Depending on the table requirements, you can take different types of indexes.

Types of indexes

  • Unique and Non-Unique indexes
  • Clustered and non-clustered indexes

Creating indexes

For creating unique indexes, you use following syntax:

Syntax:

db2 create unique index <index_name> on 
&lttable_name>(<unique_column>) include (<column_names..>) 

Example: To create index for “shopper.sales1” table.

db2 create unique index sales1_indx on 
shopper.sales1(id) include (itemname) 

Dropping indexes

For dropping the index, you use the following syntax:

Syntax:

db2 create unique index <index_name> on 
&lttable_name>(<unique_column>) include (<column_names..>) 

Example:

db2 drop index sales_index 

DB2 Triggers

This chapter describes triggers, their types, creation and dropping of the triggers.

Introduction

A trigger is a set of actions, which are performed for responding to an INSERT, UPDATE or DELETE operation on a specified table in the database. Triggers are stored in the database at once. They handle governance of data. They can be accessed and shared among multiple applications. The advantage of using triggers is, if any change needs to be done in the application, it is done at the trigger; instead of changing each application that is accessing the trigger. Triggers are easy to maintain and they enforce faster application development. Triggers are defined using an SQL statement “CREATE TRIGGER”.

Types of triggers

There are two types of triggers:

1. BEFORE triggers

They are executed before any SQL operation.

2. AFTER triggers

They are executed after any SQL operation.

Creating a BEFORE trigger

Let us see how to create a sequence of trigger:

Syntax:

db2 create sequence <seq_name> 

Example: Creating a sequence of triggers for table shopper.sales1

db2 create sequence sales1_seq as int start with 1 increment by 1 

Syntax:

db2 create trigger <trigger_name> no cascade before insert on 
<table_name> referencing new as <table_object> for each row set 
<table_object>.<col_name>=nextval for <sequence_name> 

Example: Creating trigger for shopper.sales1 table to insert primary key numbers automatically

db2 create trigger sales1_trigger no cascade before insert on 
shopper.sales1 referencing new as obj for each row set 
obj.id=nextval for sales1_seq

Now try inserting any values:

db2 insert into shopper.sales1(itemname, qty, price) 
values('bicks', 100, 24.00) 

Retrieving values from table

Let us see how to retrieve values from a table:

Syntax:

db2 select * from <tablename>

Example:

db2 select * from shopper.sales1

Output:

  ID       ITEMNAME       QTY 
-------  ------------   ---------- 
    3      bicks            100 
    2      bread            100 
  
  2 record(s) selected. 

Creating an AFTER trigger

Let us see how to create an after trigger:

Syntax:

db2 create trigger <trigger_name> no cascade before insert on 
<table_name> referencing new as <table_object> for each row set
 <table_object>.<col_name>=nextval for <sequence_name> 

Example: [To insert and retrieve the values]

db2 create trigger sales1_tri_after after insert on shopper.sales1 
for each row mode db2sql begin atomic update shopper.sales1 
set price=qty*price; end  

Output:

//inseting values in shopper.sales1 
db2 insert into shopper.sales1(itemname,qty,price) 
values('chiken',100,124.00) 
//output 
ID    ITEMNAME       QTY         PRICE 
----- -------------- ----------- -----------                      
    3 bicks          100         2400.00 
    4 chiken         100         12400.00 
    2 bread          100         2400.00 

	3 record(s) selected. 

Dropping a trigger

Here is how a database trigger is dropped:

Syntax:

db2 drop trigger <trigger_name>  

Example:

db2 drop trigger slaes1_trigger   

DB2 - Sequences

This chapter introduces you to the concept of sequence, creation of sequence, viewing the sequence, and dropping them.

Introduction

A sequence is a software function that generates integer numbers in either ascending or descending order, within a definite range, to generate primary key and coordinate other keys among the table. You use sequence for availing integer numbers say, for employee_id or transaction_id. A sequence can support SMALLINT, BIGINT, INTEGER, and DECIMAL data types. A sequence can be shared among multiple applications. A sequence is incremented or decremented irrespective of transactions.

A sequence is created by CREATE SEQUENCE statement.

Types of Sequences

There are two type of sequences available:

  • NEXTVAL: It returns an incremented value for a sequence number.

  • PREVIOUS VALUE: It returns recently generated value.

Parameters of sequences

The following parameters are used for sequences:

Data type: This is the data type of the returned incremented value. (SMALLINT, BIGINT, INTEGER, NUMBER, DOUBLE)

START WITH: The reference value, with which the sequence starts.

MINVALUE: A minimum value for a sequence to start with.

MAXVALUE: A maximum value for a sequence.

INCREMENT BY: step value by which a sequence is incremented.

Sequence cycling: the CYCLE clause causes generation of the sequence repeatedly. The sequence generation is conducted by referring the returned value, which is stored into the database by previous sequence generation.

Creating a sequence

You can create sequence using the following syntax:

Syntax:

db2 create sequence <seq_name> 

Example: [To create a new sequence with the name ‘sales1_seq’ and increasing values from 1]

db2 create sequence sales1_seq as int start 
with 1 increment by 1  

Viewing the sequences

You can view a sequence using the syntax given below:

Syntax:

db2 value <previous/next> value for <seq_name>

Example: [To see list of previous updated value in sequence ‘sales1_seq’]

db2 values previous value for sales1_seq  

Output:

 1 
----------- 
  4 
  1 record(s) selected. 

Dropping the sequence

To remove the sequence, you need to use the “DROP SEQUENCE ” command. Here is how you do it:

Syntax:

db2 drop sequence <seq_name>>

Example: [To drop sequence ‘sales1_seq’ from database]

db2 drop sequence sales1_seq  

Output:

 DB20000I The SQL command completed successfully. 

DB2 Views

This chapter describes introduction of views, creating, modifying and dropping the views.

Introduction

A view is an alternative way of representing the data stored in the tables. It is not an actual table and it does not have any permanent storage. View provides a way of looking at the data in one or more tables. It is a named specification of a result table.

Creating a view

You can create a view using the following syntax:

Syntax:

db2 create view <view_name> (<col_name>,
<col_name1...) as select <cols>.. 
from <table_name> 

Example: Creating view for shopper.sales1 table

db2 create view view_sales1(id, itemname, qty, price) 
as select id, itemname, qty, price from 
shopper.sales1  

Modifying a view

You can modify a view using the following syntax:

Syntax:

db2 alter view <view_name> alter <col_name> 
add scope <table_or_view_name> 

Example: [To add new table column to existing view ‘view_sales1’]

db2 alter view view_sales1 alter id add 
scope shopper.sales1  

Dropping the view

You can drop a view using the following syntax:

Syntax:

db2 drop view <view_name> 

Example:

db2 drop view sales1_view  

DB2 with XML

This chapter describes use of XML with DB2.

Introduction

PureXML feature allows you to store well-formed XML documents in columns of database tables. Those columns have XML database. Data is kept in its native hierarchical form by storing XML data in XML column. The stored XML data can be accessed and managed by DB2 database server functionality. The storage of XML data in its native hierarchical form enables efficient search, retrieval, and update of XML. To update a value in XML data, you need to use XQuery, SQL or combination of both.

Creating a database and table for storing XML data

Create a database by issuing the following syntax:

Syntax:

db2 create database xmldb 

By default, databases use UTF-8 (UNICODE) code set. Activate the database and connect to it:

Syntax:

db2 activate db <db_name>
db2 connect to <db_name> 

Example:

db2 activate db xmldb 
db2 connect to xmldb  

Create a well-formed XML file and create a table with data type of the column as ‘XML’. It is mandatory to pass the SQL query containing XML syntax within double quotation marks.

Syntax:

db2 “create table <schema>.<table>(col <datatype>, 
col <xml datatype>)” 

Example:

db2 "create table shope.books(id bigint not null 
primary key, book XML)"   

Insert xml values into table, well-formed XML documents are inserted into XML type column using SQL statement ‘INSERT’.

Syntax:

db2 “insert into <table_name> values(value1, value2)” 

Example:

db2 "insert into shope.books values(1000, '<catalog>  
<book> 

<author> Gambardella Matthew</author> 
<title>XML Developers Guide</title> 
<genre>Computer</genre> 
<price>44.95</price> 
<publish_date>2000-10-01</publish_date> 
<description>An in-depth look at creating application 
with XML</description> 
</book> 

</catalog>')"   

Updating XML data in a table

You can update XML data in a table by using the following syntax:

Syntax:

db2 “update <table_name> set <column>=<value> where 
<column>=<value>”  

Example:

db2 "update shope.books set book='<catalog>  

<book> 
<author> Gambardella, Matthew</author>  
<title>XML Developers Guide</title>  
<genre>Computer</genre>  
<price>44.95</price>  
<publish_date>2000-10-01</publish_date>  
<description>An in-depth XML</description>
  
</book> 
 
</catalog>' where id=1000"  

DB2 - Backup and Recovery

This chapter describes backup and restore methods of database.

Introduction

Backup and recovery methods are designed to keep our information safe. In Command Line Interface (CLI) or Graphical User Interface (GUI) using backup and recovery utilities you can take backup or restore the data of databases in DB2 UDB.

Logging

Log files consist of error logs, which are used to recover from application errors. The logs keep the record of changes in the database. There are two types of logging as described below:

Circular logging

It is a method where the old transaction logs are overwritten when there is a need to allocate a new transaction log file, thus erasing the sequences of log files and reusing them. You are permitted to take only full back-up in offline mode. i.e., the database must be offline to take the full backup.

Archive logging

This mode supports for Online Backup and database recovery using log files called roll forward recovery. The mode of backup can be changed from circular to archive by setting logretain or userexit to ON. For archive logging, backup setting database require a directory that is writable for DB2 process.

Backup

Using Backup command you can take copy of entire database. This backup copy includes database system files, data files, log files, control information and so on.

You can take backup while working offline as well as online.

Offline backup

Syntax: [To list the active applications/databases]

db2 list application  

Output:

Auth Id  Application    Appl.      Application Id                                                
DB       # of   
         Name           Handle              
Name    Agents  
-------- -------------- ---------- ---------------------
----------------------------------------- -------- -----  
DB2INST1 db2bp          39         
*LOCAL.db2inst1.140722043938                                   
ONE      1  

Syntax: [To force application using app. Handled id]

db2 "force application (39)"   

Output:

DB20000I  The FORCE APPLICATION command completed 
successfully.  

DB21024I  This command is asynchronous and may not 
be effective immediately. 

Syntax: [To terminate Database Connection]

db2 terminate  

Syntax: [To deactivate Database]

db2 deactivate database one   

Syntax: [To take the backup file]

db2 backup database <db_name> to <location>   

Example:

db2 backup database one to /home/db2inst1/ 

Output:

Backup successful. The timestamp for this backup image is : 
20140722105345  

Online backup

To start, you need to change the mode from Circular logging to Archive Logging.

Syntax: [To check if the database is using circular or archive logging]

db2 get db cfg for one | grep LOGARCH   

Output:

First log archive method (LOGARCHMETH1) = OFF  
 Archive compression for logarchmeth1  (LOGARCHCOMPR1) = OFF 
 Options for logarchmeth1              (LOGARCHOPT1) =   
 Second log archive method             (LOGARCHMETH2) = OFF  
 Archive compression for logarchmeth2  (LOGARCHCOMPR2) = OFF  
 Options for logarchmeth2              (LOGARCHOPT2) =   

In the above output, the highlighted values are [logarchmeth1 and logarchmeth2] in off mode, which implies that the current database in “CIRCULLAR LOGGING” mode. If you need to work with ‘ARCHIVE LOGGING’ mode, you need to change or add path in the variables logarchmeth1 and logarchmeth2 present in the configuration file.

Updating logarchmeth1 with required archive directory

Syntax: [To make directories]

mkdir backup 
mkdir backup/ArchiveDest    

Syntax: [To provide user permissions for folder]

chown db2inst1:db2iadm1 backup/ArchiveDest 

Syntax: [To update configuration LOGARCHMETH1]

db2 update database configuration for one using LOGARCHMETH1 
'DISK:/home/db2inst1/backup/ArchiveDest'

You can take offline backup for safety, activate the database and connect to it.

Syntax: [To take online backup]

db2 backup database one online to 
/home/db2inst1/onlinebackup/ compress include logs   

Output:

db2 backup database one online to 
/home/db2inst1/onlinebackup/ compress include logs    

Verify Backup file using following command:

Syntax:

db2ckbkp <location/backup file>   

Example:

db2ckbkp 
/home/db2inst1/ONE.0.db2inst1.DBPART000.20140722112743.001 

Listing the history of backup files

Syntax:

db2 list history backup all for one    

Output:

                    List History File for one 
  
Number of matching file entries = 4 
 
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log  
Backup ID  
 -- --- ------------------ ---- --- ------------ ------------ 
 --------------
  B  D  20140722105345001   F    D  S0000000.LOG S0000000.LOG 

 ------------------------------------------------------------ 
 ----------------   
 
 Contains 4 tablespace(s): 
 00001 SYSCATSPACE  
 
 00002 USERSPACE1
 
 00003 SYSTOOLSPACE 
 
 00004 TS1 
  ------------------------------------------------------------ 
  ---------------- 
  Comment: DB2 BACKUP ONE OFFLINE  
  
 Start Time: 20140722105345  
 
   End Time: 20140722105347
   
     Status: A
 ------------------------------------------------------------ 
 ---------------- 
 EID: 3 Location: /home/db2inst1 

 
 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log  
 Backup ID
 -- --- ------------------ ---- --- ------------ ------------ 
 --------------  
  B  D  20140722112239000   N       S0000000.LOG S0000000.LOG   
 ------------------------------------------------------------ 
 ------------------------------------------------------------- 
 ------------------------------- 
 
 Comment: DB2 BACKUP ONE ONLINE  
 
 Start Time: 20140722112239 
 
   End Time: 20140722112240  
   
     Status: A 
 ------------------------------------------------------------ 
 ----------------  
  EID: 4 Location: 
SQLCA Information 
 
 sqlcaid : SQLCA     sqlcabc: 136   sqlcode: -2413   sqlerrml: 0 
 
 sqlerrmc:   
 sqlerrp : sqlubIni  
 sqlerrd : (1) 0                (2) 0                (3) 0 
 
           (4) 0                (5) 0                (6) 0  
		   
 sqlwarn : (1)      (2)      (3)      (4)        (5)       (6)  
 
           (7)      (8)      (9)      (10)       (11)  
 sqlstate: 
 
 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log  
 Backup ID
  -- --- ------------------ ---- --- ------------ ------------ 
  -------------- 
   B  D  20140722112743001   F    D  S0000000.LOG S0000000.LOG   
 
 ------------------------------------------------------------ 
 ---------------- 
 Contains 4 tablespace(s): 
 
 00001 SYSCATSPACE 
 
 00002 USERSPACE1 
 
 00003 SYSTOOLSPACE 
 
 00004 TS1
  ------------------------------------------------------------- 
  ---------------- 
  Comment: DB2 BACKUP ONE OFFLINE 
  
 Start Time: 20140722112743 
 
   End Time: 20140722112743 
   
     Status: A 
 ------------------------------------------------------------- 
  ---------------- 
 EID: 5 Location: /home/db2inst1 
 
 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log 
 Backup ID   
  ------------------------------------------------------------- 
  ----------------
  
R  D  20140722114519001   F                                
20140722112743 

 ------------------------------------------------------------ 
 ----------------  
 Contains 4 tablespace(s):  
 
 00001 SYSCATSPACE 
 
  00002 USERSPACE1 
  
 00003 SYSTOOLSPACE  
 
 00004 TS1
 ------------------------------------------------------------ 
 ----------------  
Comment: RESTORE ONE WITH RF
  
 Start Time: 20140722114519 
 
   End Time: 20140722115015  
     Status: A  
	 
 ------------------------------------------------------------ 
 ----------------  
  EID: 6 Location:  

Restoring the database from backup

To restore the database from backup file, you need to follow the given syntax:

Syntax:

db2 restore database <db_name> from <location> 
taken at <timestamp>    

Example:

db2 restore database one from /home/db2inst1/ taken at 
20140722112743  

Output:

SQL2523W  Warning!  Restoring to an existing database that is 
different from  
 
the database on the backup image, but have matching names. 
The target database  
 
will be overwritten by the backup version.  The Roll-forward 
recovery logs

associated with the target database will be deleted.  

Do you want to continue ? (y/n) y 
 
DB20000I  The RESTORE DATABASE command completed successfully.   

Roll forward all the logs located in the log directory, including latest changes just before the disk drive failure.

Syntax:

db2 rollforward db <db_name> to end of logs and stop   

Example:

db2 rollforward db one to end of logs and stop  

Output:

                                 Rollforward Status  
 Input database alias                   = one  
 Number of members have returned status = 1  
 Member ID                              = 0  
 Rollforward status                     = not pending  
 Next log file to be read               =  
 Log files processed                    = S0000000.LOG - 
 S0000001.LOG  
 Last committed transaction            = 2014-07-22- 
 06.00.33.000000 UTC  
DB20000I  The ROLLFORWARD command completed successfully. 

DB2 - Database Security

This chapter describes database security.

Introduction

DB2 database and functions can be managed by two different modes of security controls:

  1. Authentication
  2. Authorization

Authentication

Authentication is the process of confirming that a user logs in only in accordance with the rights to perform the activities he is authorized to perform. User authentication can be performed at operating system level or database level itself. By using authentication tools for biometrics such as retina and figure prints are in use to keep the database from hackers or malicious users.

The database security can be managed from outside the db2 database system. Here are some type of security authentication process:

  • Based on Operating System authentications.
  • Lightweight Directory Access Protocol (LDAP)

For DB2, the security service is a part of operating system as a separate product. For Authentication, it requires two different credentials, those are userid or username, and password.

Authorization

You can access the DB2 Database and its functionality within the DB2 database system, which is managed by the DB2 Database manager. Authorization is a process managed by the DB2 Database manager. The manager obtains information about the current authenticated user, that indicates which database operation the user can perform or access.

Here are different ways of permissions available for authorization:

Primary permission: Grants the authorization ID directly.

Secondary permission: Grants to the groups and roles if the user is a member

Public permission: Grants to all users publicly.

Context-sensitive permission: Grants to the trusted context role.

Authorization can be given to users based on the categories below:

  • System-level authorization
  • System administrator [SYSADM]
  • System Control [SYSCTRL]
  • System maintenance [SYSMAINT]
  • System monitor [SYSMON]

Authorities provide of control over instance-level functionality. Authority provide to group privileges, to control maintenance and authority operations. For instance, database and database objects.

  • Database-level authorization
  • Security Administrator [SECADM]
  • Database Administrator [DBADM]
  • Access Control [ACCESSCTRL]
  • Data access [DATAACCESS]
  • SQL administrator. [SQLADM]
  • Workload management administrator [WLMADM]
  • Explain [EXPLAIN]

Authorities provide controls within the database. Other authorities for database include with LDAD and CONNECT.

  • Object-Level Authorization: Object-Level authorization involves verifying privileges when an operation is performed on an object.
  • Content-based Authorization: User can have read and write access to individual rows and columns on a particular table using Label-based access Control [LBAC].

DB2 tables and configuration files are used to record the permissions associated with authorization names. When a user tries to access the data, the recorded permissions verify the following permissions:

  • Authorization name of the user
  • Which group belongs to the user
  • Which roles are granted directly to the user or indirectly to a group
  • Permissions acquired through a trusted context.

While working with the SQL statements, the DB2 authorization model considers the combination of the following permissions:

  • Permissions granted to the primary authorization ID associated with the SQL statements.
  • Secondary authorization IDs associated with the SQL statements.
  • Granted to PUBLIC
  • Granted to the trusted context role.

Instance level authorities

Let us discuss some instance related authorities.

System administration authority (SYSADM)

It is highest level administrative authority at the instance-level. Users with SYSADM authority can execute some databases and database manager commands within the instance. Users with SYSADM authority can perform the following operations:

  • Upgrade a Database
  • Restore a Database
  • Update Database manager configuration file.

System control authority (SYSCTRL)

It is the highest level in System control authority. It provides to perform maintenance and utility operations against the database manager instance and its databases. These operations can affect system resources, but they do not allow direct access to data in the database.

Users with SYSCTRL authority can perform the following actions:

  • Updating the database, Node, or Distributed Connect Service (DCS) directory
  • Forcing users off the system-level
  • Creating or Dropping a database-level
  • Creating, altering, or dropping a table space
  • Using any table space
  • Restoring Database

System maintenance authority (SYSMAINT)

It is a second level of system control authority. It provides to perform maintenance and utility operations against the database manager instance and its databases. These operations affect the system resources without allowing direct access to data in the database. This authority is designed for users to maintain databases within a database manager instance that contains sensitive data.

Only Users with SYSMAINT or higher level system authorities can perform the following tasks:

  • Taking backup
  • Restoring the backup
  • Roll forward recovery
  • Starting or stopping instance
  • Restoring tablespaces
  • Executing db2trc command
  • Taking system monitor snapshots in case of an Instance level user or a database level user.

A user with SYSMAINT can perform the following tasks:

  • Query the state of a tablespace
  • Updating log history files
  • Reorganizing of tables
  • Using RUNSTATS (Collection catalog statistics)

System monitor authority (SYSMON)

With this authority, the user can monitor or take snapshots of database manager instance or its database. SYSMON authority enables the user to run the following tasks:

  • GET DATABASE MANAGER MONITOR SWITCHES
  • GET MONITOR SWITCHES
  • GET SNAPSHOT
  • LIST
    • LIST ACTIVE DATABASES
    • LIST APPLICATIONS
    • LIST DATABASE PARTITION GROUPS
    • LIST DCS APPLICATIONS
    • LIST PACKAGES
    • LIST TABLES
    • LIST TABLESPACE CONTAINERS
    • LIST TABLESPACES
    • LIST UTITLITIES
  • RESET MONITOR
  • UPDATE MONITOR SWITCHES

Database authorities

Each database authority holds the authorization ID to perform some action on the database. These database authorities are different from privileges. Here is the list of some database authorities:

ACCESSCTRL: allows to grant and revoke all object privileges and database authorities.

BINDADD: Allows to create a new package in the database.

CONNECT: Allows to connect to the database.

CREATETAB: Allows to create new tables in the database.

CREATE_EXTERNAL_ROUTINE: Allows to create a procedure to be used by applications and the users of the databases.

DATAACCESS: Allows to access data stored in the database tables.

DBADM: Act as a database administrator. It gives all other database authorities except ACCESSCTRL, DATAACCESS, and SECADM.

EXPLAIN: Allows to explain query plans without requiring them to hold the privileges to access the data in the tables.

IMPLICIT_SCHEMA: Allows a user to create a schema implicitly by creating an object using a CREATE statement.

LOAD: Allows to load data into table.

QUIESCE_CONNECT: Allows to access the database while it is quiesce (temporarily disabled).

SECADM: Allows to act as a security administrator for the database.

SQLADM: Allows to monitor and tune SQL statements.

WLMADM: Allows to act as a workload administrator

Privileges

SETSESSIONUSER

Authorization ID privileges involve actions on authorization IDs. There is only one privilege, called the SETSESSIONUSER privilege. It can be granted to user or a group and it allows to session user to switch identities to any of the authorization IDs on which the privileges are granted. This privilege is granted by user SECADM authority.

Schema privileges

This privileges involve actions on schema in the database. The owner of the schema has all the permissions to manipulate the schema objects like tables, views, indexes, packages, data types, functions, triggers, procedures and aliases. A user, a group, a role, or PUBLIC can be granted any user of the following privileges:

  • CREATEIN: allows to create objects within the schema
  • ALTERIN: allows to modify objects within the schema.

DROPIN

This allows to delete the objects within the schema.

Tablespace privileges

These privileges involve actions on the tablespaces in the database. User can be granted the USE privilege for the tablespaces. The privileges then allow them to create tables within tablespaces. The privilege owner can grant the USE privilege with the command WITH GRANT OPTION on the tablespace when tablespace is created. And SECADM or ACCESSCTRL authorities have the permissions to USE privileges on the tablespace.

Table and view privileges

The user must have CONNECT authority on the database to be able to use table and view privileges. The privileges for tables and views are as given below:

CONTROL

It provides all the privileges for a table or a view including drop and grant, revoke individual table privileges to the user.

ALTER

It allows user to modify a table.

DELETE

It allows the user to delete rows from the table or view.

INDEX

It allows the user to insert a row into table or view. It can also run import utility.

REFERENCES

It allows the users to create and drop a foreign key.

SELECT

It allows the user to retrieve rows from a table or view.

UPDATE

It allows the user to change entries in a table, view.

Package privileges

User must have CONNECT authority to the database. Package is a database object that contains the information of database manager to access data in the most efficient way for a particular application.

CONTROL

It provides the user with privileges of rebinding, dropping or executing packages. A user with this privileges is granted to BIND and EXECUTE privileges.

BIND

It allows the user to bind or rebind that package.

EXECUTE

Allows to execute a package.

Index privileges

This privilege automatically receives CONTROL privilege on the index.

Sequence privileges

Sequence automatically receives the USAGE and ALTER privileges on the sequence.

Routine privileges

It involves the action of routines such as functions, procedures, and methods within a database.

DB2 - Roles

Introduction

A role is a database object that groups multiple privileges that can be assigned to users, groups, PUBLIC or other roles by using GRANT statement.

Restrictions on roles

  • A role cannot own database objects.
  • Permissions and roles granted to groups are not considered when you create the following database objects.
    • Package Containing static SQL
    • Views
    • Materialized Query Tables (MQT)
    • Triggers
    • SQL Routines

Creating and granting membership in roles

Syntax: [To create a new role]

db2 create role <role_name> 

Example: [To create a new role named ‘sales’ to add some table to be managed by some user or group]

db2 create role sales 

Output:

DB20000I The SQL command completed successfully. 

Granting role from DBADM to a particular table

Syntax: [To grant permission of a role to a table]

db2 grant select on table <table_name> to role <role_name> 

Example: [To add permission to manage a table ‘shope.books’ to role ‘sales’]

db2 grant select on table shope.books to role sales 

Output:

DB20000I  The SQL command completed successfully. 

Security administrator grants role to the required users. (Before you use this command, you need to create the users.)

Syntax: [To add users to a role]

db2 grant role <role_name> to user <username> 

Example: [To add a user ‘mastanvali’ to a role ‘sales’]

db2 grant sales to user mastanvali  

Output:

DB20000I  The SQL command completed successfully. 

Role hierarchies

For creating a hierarchies for roles, each role is granted permissions/ membership with another role.

Syntax: [before this syntax create a new role with name of “production”]

db2 grant role <roll_name> to role <role_name>

Example: [To provide permission of a role ‘sales’ to another role ‘production’]

db2 grant sales to role production 

DB2 - LDAP

Introduction

LDAP is Lightweight Directory Access Protocol. LDAP is a global directory service, industry-standard protocol, which is based on client-server model and runs on a layer above the TCP/IP stack. The LDAP provides a facility to connect to, access, modify, and search the internet directory.

The LDAP servers contain information which is organized in the form of a directory tree. The clients ask server to provide information or to perform some operation on a particular information. The server answers the client by providing required information if it has one, or it refers the client to another server for action on required information. The client then acquires the desired information from another server.

The tree structure of directory is maintained same across all the participating servers. This is a prominent feature of LDAP directory service. Hence, irrespective of which server is referred to by the client, the client always gets required information in an error-free manner. Here, we use LDAP to authenticate IBM DB2 as a replacement of operating system authentication.

There are two types of LDAP:

  1. Transparent
  2. Plug-in

Let us see how to configure a transparent LDAP.

Configuring transparent LDAP

To start with configuration of transparent LDAP, you need to configure the LDAP server.

LDAP server configuration

Create a SLAPD.conf file, which contains all the information about users and group object in the LDAP. When you install LDAP server, by default it is configured with basic LDAP directory tree on your machine.

The table shown below indicates the file configuration after modification.

The text highlighted with yellow the code box means for the following:

DBA user-id = “db2my1”, group = “db1my1adm”, password= “db2my1” Admin user-id = “my1adm”, group = “dbmy1ctl”.

# base dn: example.com 
dn: dc=example,dc=com 
dc: example 
o: example 
objectClass: organization 
objectClass: dcObject 
# pc box db 
dn: dc=db697,dc=example,dc=com 
dc: db697 
o: db697 
objectClass: organization 
objectClass: dcObject 
# 
# Group: db
      
       adm 
# 
dn: cn=dbmy1adm,dc=db697,dc=example,dc=com 
cn: dbmy1adm 
objectClass: top 
objectClass: posixGroup 
gidNumber: 400 
objectClass: groupOfNames 
member: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com 
memberUid: db2my1 
# 
# User: db2
       
         # dn: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com cn: db2my1 sn: db2my1 uid: db2my1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 400 gidNumber: 400 loginShell: /bin/csh homeDirectory: /db2/db2my1 # # Group: db
        
         ctl # dn: cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: dbmy1ctl objectClass: top objectClass: posixGroup gidNumber: 404 objectClass: groupOfNames member: uid=my1adm,cn=dbmy1adm,dc=db697,dc=example,dc=com memberUid: my1adm # # User: 
         
          adm # dn: uid=my1adm,cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: my1adm sn: my1adm uid: my1adm objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 404 gidNumber: 404 loginShell: /bin/csh homeDirectory: /home/my1adm 
         
        
       
      

Save the above file with name ‘/var/lib/slapd.conf’, then execute this file by following command to add these values into LDAP Server. This is a linux command; not a db2 command.

ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f 
/var/lib/slapd.conf 

After registering the DB2 users and the DB2 group at the LDAP Server, logon to the particular user where you have installed instance and database. You need to configure LDAP client to confirm to client where your server is located, be it remote or local.

LDAP client configuration

The LDAP Client configuration is saved in the file ‘ldap.conf’. There are two files available for configuration parameters, one is common and the other is specific. You should find the first one at ‘/etc/ldap.conf’ and the latter is located at ‘/etc/openldap/ldap.conf’.

The following data is available in common LDAP client configuration file

# File: /etc/ldap.conf  
# The file contains lots of more entries and many of them  
# are comments. You show only the interesting values for now  
host localhost  
base dc=example,dc=com  
ldap_version 3  
pam_password crypt  
pam_filter objectclass=posixAccount  
nss_map_attribute uniqueMember member 
nss_base_passwd dc=example,dc=com  
nss_base_shadow dc=example,dc=com  
nss_base_group dc=example,dc=com 

You need to change the location of server and domain information according to the DB2 configuration. If we are using server in same system then mention it as ‘localhost’ at ‘host’ and at ‘base’ you can configure which is mentioned in ‘SLAPD.conf’ file for LDAP server.

Pluggable Authentication Model (PAM) is an API for authentication services. This is common interface for LDAP authentication with an encrypted password and special LDAP object of type posixAccount. All LDAP objects of this type represent an abstraction of an account with portable Operating System Interface (POSIX) attributes.

Network Security Services (NSS) is a set of libraries to support cross-platform development of security-enabled client and server applications. This includes libraries like SSL, TLS, PKCS S/MIME and other security standards.

You need to specify the base DN for this interface and two additional mapping attributes. OpenLDAP client configuration file contains the entries given below:

host localhost  
base dc=example,dc=com

Till this you just define the host of LDAP serve and the base DN.

Validating OpenLDAP environment

After you configured your LDAP Server and LDAP Client, verify both for communication.

Step1: Check your Local LDAP server is running. Using below command:

ps -ef | grep -i ldap

This command should list the LDAP deamon which represents your LDAP server:

/usr/lib/openldap/slapd -h ldap:/// -u ldap -g ldap -o slp=on

This indicates that you LDAP server is running and is waiting for request from clients. If there is no such process for previous commands you can start LDAP server with the ’rcldap’ command.

rcldap start 

When the server starts, you can monitor this in the file ‘/var/log/messages/ by issuing the following command.

tail –f /var/log/messages 

Testing connection to LDAP server with ldapsearch

The ldapsearch command opens a connection to an LDAP server, binds to it and performs a search query which can be specified by using special parameters ‘-x’ connect to your LDAP server with a simple authentication mechanism by using the –x parameter instead of a more complex mechanism like Simple Authentication and Security Layer (SASL)

ldapsearch –x  

LDAP server should reply with a response given below, containing all of your LDAP entries in a LDAP Data Interchange Format(LDIF).

# extended LDIF  
#  
# LDAPv3  
# base <> with scope subtree  
# filter: (objectclass=*) 
# requesting: ALL  
# example.com  
dn: dc=example,
dc=com  dc: example  
o: example  
objectClass: organization  
objectClass: dcObject  
# search result  
search: 2  
result: 0 Success  
# numResponses: 2  
# numEntries: 1  

Configuring DB2

After working with LDAP server and client, you need to configure our DB2 database for use with LDAP. Let us discuss, how you can install and configure your database to use our LDAP environment for the DB2 user authentication process.

Configuring DB2 and LDAP interaction plug-ins

IBM provides a free package with LDAP plug-ins for DB2. The DB2 package includes three DB2 security plug-ins for each of the following:

  • server side authentication
  • client side authentication
  • group lookup

Depending upon your requirements, you can use any of the three plug-ins or all of them. This plugin do not support environments where some users are defined in LDAP and others in the operating Systems. If you decide to use the LDAP plug-ins, you need to define all users associated with the database in the LDAP server. The same principle applies to the group plug-in.

You have to decide which plug-ins are mandatory for our system. The client authentication plug-ins used in scenarios where the user ID and the password validation supplied on a CONNECT or ATTACH statement occurs on the client system. So the database manager configuration parameters SRVCON_AUTH or AUTHENTICATION need to be set to the value CLIENT. The client authentication is difficult to secure and is not generally recommended. Server plug-in is generally recommended because it performs a server side validation of user IDs and passwords, if the client executes a CONNECT or ATTACH statement and this is secure way. The server plug-in also provides a way to map LDAP user IDs DB2 authorization IDs.

Now you can start installation and configuration of the DB2 security plug-ins, you need to think about the required directory information tree for DB2. DB2 uses indirect authorization which means that a user belongs to a group and this group was granted with fewer authorities. You need to define all DB2 users and DB2 groups in LDAP directory.

Image

The LDIF file openldap.ldif should contain the code below:

#  
# LDAP root object  
# example.com  
#  
dn: dc=example,
dc=com  
dc: example  
o: example  
objectClass: organization  
objectClass: dcObject 
 #  
 # db2 groups  
 #  
 dn: cn=dasadm1,dc=example,dc=com  
 cn: dasadm1  
 objectClass: top  
 objectClass: posixGroup  
 gidNumber: 300  
 objectClass: groupOfNames 
 member: uid=dasusr1,cn=dasadm1,dc=example,dc=com  
 memberUid: dasusr1  
 dn: cn=db2grp1,dc=example,dc=com  
 cn: db2grp1  
 objectClass: top  
 objectClass: posixGroup  
 gidNumber: 301  
 objectClass: groupOfNames  
 member: uid=db2inst2,cn=db2grp1,dc=example,dc=com  memberUid: db2inst2  
 dn: cn=db2fgrp1,dc=example,dc=com  
 cn: db2fgrp1  
 objectClass: top 
 objectClass: posixGroup  
 gidNumber: 302  
 objectClass: groupOfNames 
 member: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com  
 memberUid: db2fenc1  
 #  
 # db2 users  
 #  
 dn: uid=dasusr1,
 cn=dasadm1,
 dc=example,dc=com  
 cn: dasusr1  
 sn: dasusr1  
 uid: dasusr1  
 objectClass: top  
 objectClass: inetOrgPerson 
 objectClass: posixAccount 
 uidNumber: 300  
 gidNumber: 300  
 loginShell: /bin/bash 
 homeDirectory: /home/dasusr1  
 dn: uid=db2inst2,cn=db2grp1,dc=example,dc=com  
 cn: db2inst2  
 sn: db2inst2  
 uid: db2inst2  
 objectClass: top  
 objectClass: inetOrgPerson  
 objectClass: posixAccount  
 uidNumber: 301  
 gidNumber: 301  
 loginShell: /bin/bash  
 homeDirectory: /home/db2inst2  
 dn: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com  
 cn: db2fenc1  
 sn: db2fenc1  
 uid: db2fenc1  
 objectClass: top  
 objectClass: inetOrgPerson  
 objectClass: posixAccount  
 uidNumber: 303  
 gidNumber: 303  
 loginShell: /bin/bash  
 homeDirectory: /home/db2fenc1 
 

Create a file named ‘db2.ldif’ and paste the above example into it. Using this file, add the defined structures to your LDAP directory.

To add the DB2 users and DB2 groups to the LDAP directory, you need to bind the user as ‘rootdn’ to the LDAP server in order to get the exact privileges.

Execute the following syntaxes to fill the LDAP information directory with all our objects defined in the LDIF file ‘db2.ldif’

ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif 

Perform the search result with more parameter

ldapsearch –x |more 

Preparing file system for DB2 usage

Creating instance for our LDAP user db2inst2. This user requires home directory with two empty files inside the home directory. Before you create a new instance, you need to create a user who will be the owner of the instance.

After creating the instance user, you should have to create the file ‘.profile’ and ‘.login’ in user home directory, which will be modified by DB2. To create this file in the directory, execute the following command:

mkdir /home/db2inst2  
mkdir /home/db2inst2/.login 
mkdir /home/db2inst2/.profile  

You have registered all users and groups related with DB2 in LDAP directory, now you can create an instance with the name ‘db2inst2’ with the instance owner id ‘db2inst2’ and use the fenced user id ‘db2fenc1’, which is needed for running user defined functions (UDFs)or stored procedures.

/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2  
DBI1070I Program db2icrt completed successfully.  

Now check the instance home directory. You can see new sub-directory called ‘sqllib’ and the .profile and .login files customized for DB2 usage.

Configuring authentication public-ins for LDAP support in DB2

Copy the required LDAP plug-ins to the appropriate DB2 directory:

cp            /
      
       /
       
        /v10/IBMLDAPauthserver.so /home/db2inst2/sqllib/security
        
         /plugin/server/. cp /
         
          /
          
           /v10/IBMLDAPgroups.so /home/db2inst2/sqllib/security
           
            /plugin/group/. 
           
          
         
        
       
      

Once the plug-ins are copied to the specified directory, you toned to login to DB2 instance owner and change the database manager configuration to use these plug-ins.

Su – db2inst2  
db2inst2> db2 update dbm cfg using svrcon_pw_plugin 
IBMLDAPauthserver 
db2inst2> db2 update dbm cfg using group_plugin 
IBMLDAPgroups 
db2inst2> db2 update dbm cfg using authentication 
SERVER_ENCRYPT 
db2inst2> db2stop 
db2inst2> db2start  

This modification comes into effect after you start DB2 instance. After restarting the instance, you need to install and configure the main DB2 LDAP configuration file named “IBMLDAPSecurity.ini” to make DB2 plug-ins work with the current LDAP configuration.

IBMLDAPSecurity.ini file contains

;-----------------------------------------------------------  
; SERVER RELATED VALUES  
;-----------------------------------------------------------  
; Name of your LDAP server(s).  
; This is a space separated list of LDAP server addresses,  
; with an optional port number for each one:  
; host1[:port] [host2:[port2] ... ]  
; The default port number is 389, or 636 if SSL is enabled.  
LDAP_HOST = my.ldap.server  
;-----------------------------------------------------------  
; USER RELATED VALUES  
;-----------------------------------------------------------  
rs  
; LDAP object class used for use USER_OBJECTCLASS = posixAccount  
; LDAP user attribute that represents the "userid"  
; This attribute is combined with the USER_OBJECTCLASS and  
; USER_BASEDN (if specified) to construct an LDAP search  
; filter when a user issues a DB2 CONNECT statement with an  
; unqualified userid. For example, using the default values 
; in this configuration file, (db2 connect to MYDB user bob  
; using bobpass) results in the following search filter:  
OrgPerson)(uid=bob)  
; &(objectClass=inet USERID_ATTRIBUTE = uid  
representing the DB2 authorization ID  
; LDAP user attribute, AUTHID_ATTRIBUTE = uid  
;-----------------------------------------------------------  
; GROUP RELATED VALUES  
;-----------------------------------------------------------  
ps  
; LDAP object class used for grou GROUP_OBJECTCLASS = groupOfNames  
at represents the name of the group  
; LDAP group attribute th GROUPNAME_ATTRIBUTE = cn  
; Determines the method used to find the group memberships  
; for a user. Possible values are:  
; SEARCH_BY_DN - Search for groups that list the user as  
; a member. Membership is indicated by the  
; group attribute defined as  
; GROUP_LOOKUP_ATTRIBUTE. 
; USER_ATTRIBUTE - A user's groups are listed as attributes  
; of the user object itself. Search for the  
; user attribute defined as  
TRIBUTE to get the groups.  
; GROUP_LOOKUP_AT GROUP_LOOKUP_METHOD = SEARCH_BY_DN  
; GROUP_LOOKUP_ATTRIBUTE  
; Name of the attribute used to determine group membership,  
; as described above.  
llGroups  
; GROUP_LOOKUP_ATTRIBUTE = ibm-a GROUP_LOOKUP_ATTRIBUTE = member 

Now locate the file IBMLDAPSecurity.ini file in the current instance directory. Copy the above sample contents into the same.

Cp 
/
      
       /db2_ldap_pkg/IBMLDAPSecurity.ini  
/home/db2inst2/sqllib/cfg/ 

      

Now you need to restart your DB2 instance, using two syntaxes given below:

db2inst2> db2stop 

Db2inst2> db2start 

At this point, if you try ‘db2start’ command, you will get security error message. Because, DB2 security configuration is not yet correctly configured for your LDAP environment.

Customizing both configurations

Keep LDAP_HOST name handy, which is configured in slapd.conf file.

Now edit IMBLDAPSecurity.ini file and type the LDAP_HOST name. The LDAP_HOST name in both the said files must be identical.

The contents of file are as shown below:

      ;-----------------------------------------------------------  
      ; SERVER RELATED VALUES  
      ;-----------------------------------------------------------  
      LDAP_HOST = localhost  
      ;-----------------------------------------------------------  
      ; USER RELATED VALUES  
      ----------------------------  
      ;-------------------------------  
      USER_OBJECTCLASS = posixAccount  
      USER_BASEDN = dc=example,dc=com  
      USERID_ATTRIBUTE = uid  
      AUTHID_ATTRIBUTE = uid  
      ;-----------------------------------------------------------  
      ; GROUP RELATED VALUES  
      ;-----------------------------------------------------------  
      GROUP_OBJECTCLASS = groupOfNames 
	  GROUP_BASEDN = dc=example,dc=com  
      GROUPNAME_ATTRIBUTE = cn  
      GROUP_LOOKUP_METHOD = SEARCH_BY_DN  
      GROUP_LOOKUP_ATTRIBUTE = member 

After changing these values, LDAP immediately takes effect and your DB2 environment with LDAP works perfectly.

You can logout and login again to ‘db2inst2’ user.

Now your instance is working with LDAP directory.

Next Page