คู่มือฉบับย่อ DB2

บทนี้จะอธิบายถึงประวัติของ DB2 เวอร์ชันเวอร์ชันและคุณลักษณะต่างๆตามลำดับ

ภาพรวม

DB2 เป็นผลิตภัณฑ์ฐานข้อมูลจาก IBM เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) DB2 ออกแบบมาเพื่อจัดเก็บวิเคราะห์และดึงข้อมูลอย่างมีประสิทธิภาพ ผลิตภัณฑ์ DB2 ถูกขยายด้วยการสนับสนุนคุณสมบัติเชิงวัตถุและโครงสร้างที่ไม่ใช่เชิงสัมพันธ์กับ XML

ประวัติศาสตร์

เริ่มแรก IBM ได้พัฒนาผลิตภัณฑ์ DB2 สำหรับแพลตฟอร์มเฉพาะของตน ตั้งแต่ปี 2533 เป็นต้นมาได้ตัดสินใจพัฒนาเซิร์ฟเวอร์ DB2 ฐานข้อมูลสากล (UDB) ซึ่งสามารถทำงานบนระบบปฏิบัติการที่เชื่อถือได้เช่น Linux, UNIX และ Windows

เวอร์ชัน

สำหรับ IBM DB2 เวอร์ชันปัจจุบันของ UDB คือ 10.5 พร้อมด้วยคุณลักษณะของ BLU Acceleration และชื่อรหัสเป็น 'Kepler' DB2 ทุกเวอร์ชันจนถึงวันนี้มีรายการด้านล่าง:

เวอร์ชัน รหัสชื่อ
3.4 ใยแมงมุม
8.1, 8.2 พลิ้วไหว
9.1 งูพิษ
9.5 งูพิษ 2
9.7 งูเห่า
9.8 เพิ่มคุณสมบัติด้วย PureScale เท่านั้น
10.1 กาลิเลโอ
10.5 เคปเลอร์

รุ่นและคุณสมบัติของเซิร์ฟเวอร์ข้อมูล

ขึ้นอยู่กับข้อกำหนดของคุณลักษณะที่จำเป็นของ DB2 องค์กรจะเลือกเวอร์ชัน DB2 ที่เหมาะสม ตารางต่อไปนี้แสดงเซิร์ฟเวอร์ DB2 และคุณลักษณะต่างๆ:

ฉบับ คุณสมบัติ
Advanced Enterprise Server Edition และ Enterprise Server Edition (AESE / ESE) ออกแบบมาสำหรับองค์กรธุรกิจขนาดกลางถึงขนาดใหญ่ แพลตฟอร์ม - Linux, UNIX และ Windows การแบ่งตารางการแบ่งตาราง High Availability Disaster Recovery (HARD) Materialized Query Table (MQTs) Multidimensional Clustering (MDC) Connection Concentrator การบีบอัดการสำรองข้อมูล XML บริสุทธิ์
Workgroup Server Edition (WSE) ออกแบบมาสำหรับ Workgroup หรือองค์กรธุรกิจขนาดกลาง การใช้ WSE นี้คุณสามารถใช้งานได้ - High Availability Disaster Recovery (HARD) Online Reorganization Pure XML Web Service Federation รองรับ DB2 Homogeneous Federations Homogeneous SQL replication
ด่วน -C ให้ความสามารถทั้งหมดของ DB2 ที่ค่าศูนย์ สามารถรันบนระบบจริงหรือระบบเสมือนที่มีการกำหนดค่าขนาดใดก็ได้
Express Edition ออกแบบมาสำหรับองค์กรธุรกิจระดับเริ่มต้นและขนาดกลาง เป็นเซิร์ฟเวอร์ข้อมูล DB2 ที่มีคุณลักษณะครบถ้วน ให้บริการที่ จำกัด เท่านั้น รุ่นนี้มาพร้อมกับ - Web Service Federations DB2 homogeneous federations Homogeneous SQL Replications Backup การบีบอัด
Enterprise Developer Edition ให้บริการเฉพาะนักพัฒนาแอปพลิเคชันเดียว มีประโยชน์ในการออกแบบสร้างและสร้างต้นแบบแอปพลิเคชันสำหรับการปรับใช้บนเซิร์ฟเวอร์ IBM ไม่สามารถใช้ซอฟต์แวร์สำหรับการพัฒนาแอพพลิเคชั่น

บทนี้อธิบายขั้นตอนการติดตั้งเซิร์ฟเวอร์ DB2

บทนำ

คุณสามารถดาวน์โหลดรุ่นทดลองใช้ DB2 เซิร์ฟเวอร์หรือซื้อใบอนุญาตผลิตภัณฑ์จากwww.ibm.com มีเซิร์ฟเวอร์ DB2 สองเซิร์ฟเวอร์แยกกันสำหรับการดาวน์โหลดขึ้นอยู่กับขนาดของระบบปฏิบัติการที่ต้องการดำเนินการ ตัวอย่างเช่นหากคุณต้องการดาวน์โหลดเซิร์ฟเวอร์ DB2 สำหรับระบบปฏิบัติการ 32 บิต Linux หรือ UNIX คุณต้องดาวน์โหลดเซิร์ฟเวอร์ DB2 32 บิต เช่นเดียวกับเซิร์ฟเวอร์ 64 บิต DB2

ข้อกำหนดฮาร์ดแวร์

หน่วยประมวลผล: Core 2Duo ขั้นต่ำ

Ram: ขั้นต่ำ 1GB

ฮาร์ดดิสก์: ขั้นต่ำ 30GB

ข้อกำหนดของซอฟต์แวร์

ก่อนติดตั้งเซิร์ฟเวอร์ DB2 ระบบของคุณต้องเตรียมซอฟต์แวร์ที่จำเป็นให้พร้อม สำหรับ Linux คุณต้องติดตั้ง“ libstdc ++ 6.0”

ตรวจสอบความเข้ากันได้ของระบบ

ก่อนติดตั้ง DB2 Server คุณต้องตรวจสอบว่าระบบของคุณเข้ากันได้กับเซิร์ฟเวอร์ DB2 หรือไม่ สำหรับการยืนยันความเข้ากันได้คุณต้องเรียกคำสั่ง 'db2prereqcheck' บนคอนโซลคำสั่ง

การติดตั้ง DB2 บนระบบปฏิบัติการ Linux

เปิด Terminal และตั้งค่าพา ธ โฟลเดอร์อิมเมจการติดตั้ง db2 บนคอนโซลโดยใช้คำสั่ง“ CD <DB2 installation folder>” จากนั้นพิมพ์คำสั่ง“ ./db2prereqcheck” ซึ่งยืนยันความเข้ากันได้ของระบบของคุณกับเซิร์ฟเวอร์ DB2

./db2prereqcheck

รูปที่ 1 แสดงข้อกำหนดความเข้ากันได้ของระบบปฏิบัติการ Linux และระบบฮาร์ดแวร์

ทำตามขั้นตอนที่กำหนดสำหรับการติดตั้ง DB2 บนระบบ Linux ของคุณ:

  • เปิดเทอร์มินัล
  • เข้าสู่ระบบในฐานะผู้ใช้รูท
  • เปิดโฟลเดอร์การติดตั้ง DB2
  • พิมพ์“ ./db2setup” แล้วกด Enter

กระบวนการนี้จะเริ่มดำเนินการตั้งค่าเซิร์ฟเวอร์ DB2

พิมพ์“ ./db2setup” แล้วกด Enter ที่รูทเทอร์มินัลเพื่อเริ่มกระบวนการตั้งค่าของ DB2 Server

ในการดำเนินการดังกล่าวหน้าจอ“ Set up Launch Pad” จะปรากฏขึ้น [รูปที่ 2]

ในหน้า Setup Launch pad เลือกตัวเลือก“ Install a Product” จากเมนูด้านซ้าย เลือกอ็อพชัน“ DB2 Advanced Enterprise Server Edition” เลือกปุ่ม“ ติดตั้งใหม่”

เฟรมใหม่ปรากฏขึ้นพร้อมชื่อ“ ตัวช่วยสร้างการตั้งค่า DB2” คลิก“ ถัดไป” [รูปที่ 3]

หน้าจอถัดไปจะปรากฏขึ้นพร้อมกับข้อตกลงสิทธิ์การใช้งาน DB2 เลือก“ ฉันยอมรับเงื่อนไข…” คลิก“ ถัดไป” [รูปที่ 4]

หน้าจอถัดไปมีข้อเสนอประเภทการติดตั้งซึ่งตั้งค่าเป็น "ทั่วไป" ตามค่าเริ่มต้น

เลือกเหมือนเดิม คลิก“ ถัดไป” [รูปที่ 5]

หน้าจอถัดไปจะปรากฏขึ้นพร้อมกับการติดตั้ง

เลือก“ ติดตั้ง DB2 Advanced Enterprise Server Edition …”

คลิก“ ถัดไป” [รูปที่ 6]

ในหน้าจอถัดไปโปรแกรมติดตั้งจะขอให้เลือกไดเร็กทอรีการติดตั้ง

ใช้ค่าเริ่มต้นและคลิก“ ถัดไป”

หน้าจอถัดไปมาพร้อมกับการตรวจสอบผู้ใช้ ป้อนรหัสผ่านของคุณสำหรับผู้ใช้“ dasusr1”

(รหัสผ่านของคุณอาจเหมือนกับชื่อผู้ใช้เพื่อให้ง่ายต่อการจดจำ)

ในหน้าจอต่อไปนี้การตั้งค่าจะขอให้คุณสร้างอินสแตนซ์เซิร์ฟเวอร์ DB2

นี่คือการสร้างอินสแตนซ์ DB2 ที่มีชื่อ“ db2inst1”

หน้าจอถัดไปจะถามคุณถึงจำนวนพาร์ติชันที่คุณต้องการสำหรับอินสแตนซ์เริ่มต้นของคุณ

คุณมีพาร์ติชัน“ เดี่ยวหรือหลายพาร์ติชัน” ให้เลือก

เลือก“ single partition instance” คลิก“ ถัดไป”

ในหน้าจอถัดไปการตั้งค่าจะขอให้คุณตรวจสอบสิทธิ์สำหรับอินสแตนซ์ DB2 ที่กำลังสร้างขึ้น

ที่นี่โดยค่าเริ่มต้นชื่อผู้ใช้จะถูกสร้างเป็น“ db2inst1” คุณสามารถป้อนรหัสผ่านเหมือนกับชื่อผู้ใช้

คลิก“ ถัดไป”

ในหน้าจอถัดไปการตั้งค่าจะขอให้ป้อนข้อมูลการตรวจสอบสิทธิ์สำหรับผู้ใช้“ db2fenc”

ที่นี่คุณสามารถป้อนรหัสผ่านเหมือนกับชื่อผู้ใช้

คลิก“ ถัดไป”

ในหน้าจอถัดไปคุณสามารถเลือกตัวเลือก“ อย่าตั้งค่าเซิร์ฟเวอร์ db2 ของคุณเพื่อส่งการแจ้งเตือนในเวลานี้”

คลิก” ถัดไป”

หน้าจอถัดไปจะแสดงข้อมูลเกี่ยวกับการตั้งค่า db2

คลิก "เสร็จสิ้น"

ขั้นตอนการติดตั้ง DB2 เสร็จสมบูรณ์ในขั้นตอนนี้

กำลังตรวจสอบการติดตั้ง DB2

คุณต้องตรวจสอบการติดตั้งเซิร์ฟเวอร์ DB2 เพื่อประโยชน์ของมัน เมื่อเสร็จสิ้นการติดตั้ง DB2 Server ให้ล็อกเอาต์จากโหมดผู้ใช้ปัจจุบันและล็อกอินเข้าสู่ผู้ใช้“ db2inst1” ในสภาพแวดล้อมผู้ใช้“ db2inst1” คุณสามารถเปิดเทอร์มินัลและดำเนินการคำสั่งต่อไปนี้เพื่อตรวจสอบว่าผลิตภัณฑ์ db2 ของคุณได้รับการติดตั้งอย่างถูกต้องหรือไม่

db2level

คำสั่งนี้แสดงเวอร์ชันปัจจุบันและระดับบริการของผลิตภัณฑ์ DB2 ที่ติดตั้งสำหรับอินสแตนซ์ปัจจุบัน

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

คำสั่งนี้แสดงข้อมูลที่เกี่ยวข้องกับไลเซนส์ทั้งหมดของผลิตภัณฑ์ DB2 ของเรา

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"

โปรเซสเซอร์บรรทัดคำสั่ง (CLP)

CLP สามารถเริ่มต้นได้ในหนึ่งในสามโหมด:

  • Command mode: ในโหมดนี้แต่ละคำสั่งและคำสั่ง SQL จะต้องนำหน้าด้วย“ db2” ตัวอย่างเช่นแบบสอบถาม“ db2 เปิดใช้งานตัวอย่างฐานข้อมูล”

  • Interactive input mode: คุณสามารถเปิดโหมดนี้ได้โดยใช้คำสั่ง“ db2” ที่นี่คุณสามารถส่งคำสั่ง SQL โดยไม่มีคำนำหน้า ตัวอย่างเช่น“ เปิดใช้งานตัวอย่างฐานข้อมูล”

  • Batch mode: ที่นี่คุณต้องสร้างไฟล์สคริปต์ซึ่งมีคำสั่ง SQL ของข้อกำหนดทั้งหมดและบันทึกไฟล์ด้วยนามสกุล“ .db2” คุณสามารถเรียกสิ่งนี้ในบรรทัดคำสั่งโดยใช้ไวยากรณ์“ db2 –tf <filename.db2>”

บทนำ

อินสแตนซ์เป็นสภาพแวดล้อมเชิงตรรกะสำหรับ DB2 Database Manager การใช้อินสแตนซ์คุณสามารถจัดการฐานข้อมูล ขึ้นอยู่กับความต้องการของเราคุณสามารถสร้างได้หลายอินสแตนซ์ในเครื่องเดียว เนื้อหาของไดเร็กทอรีอินสแตนซ์ ได้แก่ :

  • ไฟล์คอนฟิกูเรชันตัวจัดการฐานข้อมูล
  • ไดเรกทอรีฐานข้อมูลระบบ
  • ไดเรกทอรีโหนด
  • ไฟล์คอนฟิกูเรชันโหนด [db2nodes.cfg]
  • การดีบักไฟล์ดัมพ์ไฟล์

สำหรับ DB2 Database Server อินสแตนซ์ดีฟอลต์คือ“ DB2” ไม่สามารถเปลี่ยนตำแหน่งของไดเร็กทอรีอินสแตนซ์ได้หลังจากสร้างไดเร็กทอรี อินสแตนซ์สามารถจัดการหลายฐานข้อมูล ในตัวอย่างฐานข้อมูลแต่ละฐานข้อมูลจะมีชื่อที่ไม่ซ้ำกันชุดตารางแค็ตตาล็อกไฟล์การกำหนดค่าหน่วยงานและสิทธิพิเศษ

สถาปัตยกรรมของอินสแตนซ์ในผลิตภัณฑ์ DB2

หลายอินสแตนซ์

คุณสามารถสร้างหลายอินสแตนซ์ใน DB2Server เดียวบน Linux, UNIX และ Windows เป็นไปได้ที่จะติดตั้ง DB2Servers หลายตัวบนเครื่องจริง

การสร้างอินสแตนซ์บน Linux

คุณสามารถสร้างหลายอินสแตนซ์บน Linux และ UNIX ถ้า DB2 Server ถูกติดตั้งเป็นผู้ใช้รูท อินสแตนซ์สามารถทำงานพร้อมกันบน Linux และ UNIX ได้อย่างอิสระ คุณสามารถทำงานภายในอินสแตนซ์เดียวของตัวจัดการฐานข้อมูลในแต่ละครั้ง

โฟลเดอร์อินสแตนซ์มีไฟล์และโฟลเดอร์คอนฟิกูเรชันฐานข้อมูล ไดเร็กทอรีอินสแตนซ์ถูกเก็บไว้ที่ตำแหน่งต่างๆบน Windows ขึ้นอยู่กับเวอร์ชันของระบบปฏิบัติการ

การแสดงรายการอินสแตนซ์

คำสั่งต่อไปนี้ใช้เพื่อแสดงรายการอินสแตนซ์:

db2ilist

คำสั่งนี้แสดงรายการอินสแตนซ์ทั้งหมดที่พร้อมใช้งานบนระบบ

Syntax:

db2ilist

Example:[เพื่อดูจำนวนอินสแตนซ์ที่สร้างขึ้นในสำเนา DB2]

db2ilist

Output:

db2inst1 
db2inst2 
db2inst3

คำสั่งสภาพแวดล้อมอินสแตนซ์

คำสั่งเหล่านี้มีประโยชน์ในการทำงานกับการจัดเรียงอินสแตนซ์ใน DB2 CLI

รับอินสแตนซ์

คำสั่งนี้แสดงรายละเอียดของอินสแตนซ์ที่กำลังทำงานอยู่

Syntax:

db2 get instance

Example:[เพื่อดูอินสแตนซ์ปัจจุบันที่เปิดใช้งานผู้ใช้ปัจจุบัน]

db2 get instance

Output:

The current database manager instance is : db2inst1

ตั้งค่าอินสแตนซ์

เมื่อต้องการเริ่มหรือหยุดตัวจัดการฐานข้อมูลของอินสแตนซ์บน DB2 UDB คำสั่งต่อไปนี้จะถูกเรียกใช้สำหรับอินสแตนซ์ปัจจุบัน

Syntax:

set db2instance=<instance_name>

Example:[เพื่อจัดสภาพแวดล้อม“ db2inst1” ให้กับผู้ใช้ปัจจุบัน]

set db2instance=db2inst1

db2start

ใช้คำสั่งนี้คุณสามารถเริ่มอินสแตนซ์ได้ ก่อนหน้านี้คุณต้องเรียกใช้“ set instance”

Syntax:

db2start

Example:[เพื่อเริ่มอินสแตนซ์]

db2start

Output:

SQL1063N DB2START processing was successful

db2stop

การใช้คำสั่งนี้คุณสามารถหยุดอินสแตนซ์ที่กำลังทำงานอยู่

Syntax:

db2stop

Output:

SQL1064N DB2STOP processing was successful.

การสร้างอินสแตนซ์

ให้เราดูวิธีสร้างอินสแตนซ์ใหม่

db2icrt

หากคุณต้องการสร้างอินสแตนซ์ใหม่คุณต้องเข้าสู่ระบบด้วยรูท รหัสอินสแตนซ์ไม่ใช่รหัสรากหรือชื่อราก

ขั้นตอนในการสร้างอินสแตนซ์ใหม่มีดังนี้

Step1: สร้างผู้ใช้ระบบปฏิบัติการเช่น

Syntax:

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

Example: [ในการสร้างผู้ใช้เช่นชื่อ 'db2inst2' ในกลุ่ม 'db2iadm1' และรหัสผ่าน 'db2inst2']

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

Step2: ไปที่ไดเร็กทอรีอินสแตนซ์ DB2 ในผู้ใช้รูทเพื่อสร้างอินสแตนซ์ใหม่

Location:

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

Step3: สร้างอินสแตนซ์โดยใช้ไวยากรณ์ด้านล่าง:

Syntax:

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

Example: [ในการสร้างอินสแตนซ์ใหม่ 'db2inst2' ในผู้ใช้ 'db2inst2' ด้วยคุณสมบัติของ 'ESE' (Enterprise Server Edition)]

./db2icrt -s ese -u db2inst2 db2inst2

Output:

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

การจัดพอร์ตการสื่อสารและโฮสต์สำหรับอินสแตนซ์

แก้ไขไฟล์ / etc / services และเพิ่มหมายเลขพอร์ต ในไวยากรณ์ที่ระบุด้านล่าง 'inst_name' ระบุชื่ออินสแตนซ์และ 'inst_port' ระบุหมายเลขพอร์ตของอินสแตนซ์

Syntax:

db2c_<inst name> <inst_port>/tcp

Example: [การเพิ่มหมายเลขพอร์ต '50001 / tcp' สำหรับอินสแตนซ์ 'db2inst2' ด้วยตัวแปร 'db2c_db2inst2' ในไฟล์ 'services']

db2c_db2inst2 50001/tcp

Syntax 1: [อัปเดตการกำหนดค่าตัวจัดการฐานข้อมูลด้วยชื่อบริการ ไวยากรณ์ต่อไปนี้ 'svcename' ระบุชื่อบริการอินสแตนซ์และ 'inst_name' ระบุชื่ออินสแตนซ์]

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

Example 1: [การอัปเดตการกำหนดค่า DBM ด้วยตัวแปร svcename ที่มีค่า 'db2c_db2inst2' สำหรับอินสแตนซ์ 'db2inst2'

db2 update database manager configuration using svcename db2c_db2inst2

Output

DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.

Syntax 2: ตั้งค่าโปรโตคอลการสื่อสาร“ tcpip” สำหรับอินสแตนซ์ปัจจุบัน

db2set DB2COMM=tcpip

Syntax 3: [การหยุดและเริ่มต้นอินสแตนซ์ปัจจุบันเพื่อรับค่าที่อัปเดตจากการกำหนดค่าตัวจัดการฐานข้อมูล]

db2stop 
db2start

การอัปเดตอินสแตนซ์

คุณสามารถอัปเดตอินสแตนซ์โดยใช้คำสั่งต่อไปนี้:

db2iupdt

คำสั่งนี้ใช้เพื่ออัปเดตอินสแตนซ์ภายในรีลีสเวอร์ชันเดียวกัน ก่อนดำเนินการคำสั่งนี้คุณต้องหยุดตัวจัดการฐานข้อมูลอินสแตนซ์โดยใช้คำสั่ง“ db2stop” ไวยากรณ์ด้านล่าง“ inst_name” ระบุชื่ออินสแตนซ์เซิร์ฟเวอร์ db2 ที่ปล่อยหรือติดตั้งก่อนหน้านี้ซึ่งคุณต้องการอัปเดตเป็นเวอร์ชันเซิร์ฟเวอร์ db2 ที่ติดตั้งใหม่

Syntax 1: เพื่ออัปเดตอินสแตนซ์ในโหมดปกติ

db2iupdt <inst_name>

Example1:

./db2iupdt db2inst2

Syntax 2: เพื่ออัปเดตอินสแตนซ์ในโหมดดีบัก

db2iupdt -D <inst_name>

Example

db2iupdt -D db2inst2

การอัพเกรดอินสแตนซ์

คุณสามารถอัพเกรดอินสแตนซ์จากเวอร์ชันก่อนหน้าของสำเนา DB2 ไปเป็นเวอร์ชันปัจจุบันของสำเนา DB2 ที่ติดตั้งใหม่

db2iupgrade

บนระบบ Linux หรือ UNIX คำสั่งนี้อยู่ในไดเร็กทอรี DB2DIR / อินสแตนซ์ ในไวยากรณ์ต่อไปนี้“ inst_name” ระบุอินสแตนซ์ DB2 เวอร์ชันก่อนหน้าและ“ inst_username” ระบุผู้ใช้อินสแตนซ์การคัดลอก DB2 เวอร์ชันที่ติดตั้งปัจจุบัน

Syntax 2:

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

Example:

db2iupgrade -d -k -u db2inst2 db2inst2

Command Parameters:

-d : เปิดโหมดดีบัก

-k : เก็บประเภทอินสแตนซ์ก่อนการอัพเกรดหากได้รับการสนับสนุนในสำเนา DB2 จากที่ที่คุณรันคำสั่งนี้

หากคุณใช้คำสั่ง Super User (su) บน Linux สำหรับ db2iupgrade คุณต้องออกคำสั่ง“ su” พร้อมกับตัวเลือก“ -”

การทิ้งอินสแตนซ์

คุณสามารถวางหรือลบอินสแตนซ์ซึ่งสร้างโดยคำสั่ง“ db2icrt”

db2idrop

บนระบบปฏิบัติการ Linux และ UNIX คำสั่งนี้อยู่ในไดเร็กทอรี DB2_installation_folder / instance

Syntax: [ในไวยากรณ์ต่อไปนี้ 'inst_username' จะระบุชื่อผู้ใช้ของอินสแตนซ์และ 'inst_name' หมายถึงชื่ออินสแตนซ์]

db2idrop -u <inst_username> <inst_name>

Example: [เพื่อวาง db2inst2]

./db2idrop -u db2inst2 db2inst2

การใช้คำสั่งอื่นกับอินสแตนซ์

คำสั่งเพื่อค้นหาอินสแตนซ์ DB2 ที่เรากำลังทำงานอยู่

Syntax 1: [เพื่อตรวจสอบอินสแตนซ์ปัจจุบันที่เปิดใช้งานโดยผู้จัดการฐานข้อมูล]

db2 get instance

Output:

The current database manager instance is:  db2inst1

Syntax 2: [หากต้องการดูอินสแตนซ์ปัจจุบันพร้อมบิตปฏิบัติการและเวอร์ชันรีลีส]

db2pd -inst | head -2

Example:

db2pd -inst | head -2

Output:

Instance db2inst1 uses 64 bits and DB2 code release SQL10010

Syntax 3: [เพื่อตรวจสอบชื่อของอินสแตนซ์ที่กำลังทำงานอยู่]

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: [ในการตั้งค่าอินสแตนซ์ใหม่เป็นค่าเริ่มต้น]

db2set db2instdef=<inst_name> -g

Example: [เพื่อจัดเรียงอินสแตนซ์ที่สร้างขึ้นใหม่เป็นอินสแตนซ์เริ่มต้น]

db2set db2instdef=db2inst2 -g

บทนี้จะอธิบายถึงการสร้างการเปิดใช้งานและการปิดใช้งานฐานข้อมูลด้วยไวยากรณ์ที่เกี่ยวข้อง

สถาปัตยกรรมฐานข้อมูล

ฐานข้อมูลคือชุดของ Tables, Schemas, Bufferpools, Logs, Storage groups และ Tablespaces ที่ทำงานร่วมกันเพื่อจัดการการทำงานของฐานข้อมูลอย่างมีประสิทธิภาพ

ไดเร็กทอรีฐานข้อมูล

ไดเร็กทอรีฐานข้อมูลเป็นที่เก็บฐานข้อมูลที่มีการจัดระเบียบ เมื่อคุณสร้างฐานข้อมูลรายละเอียดทั้งหมดเกี่ยวกับฐานข้อมูลจะถูกเก็บไว้ในไดเร็กทอรีฐานข้อมูลเช่นรายละเอียดของอุปกรณ์จัดเก็บข้อมูลเริ่มต้นไฟล์การกำหนดค่าและรายการตารางชั่วคราวเป็นต้น

พาร์ติชันโกลบอลไดเร็กทอรีถูกสร้างขึ้นในโฟลเดอร์อินสแตนซ์ ไดเร็กทอรีนี้มีข้อมูลส่วนกลางทั้งหมดที่เกี่ยวข้องกับฐานข้อมูล ไดเร็กทอรีส่วนกลางของพาร์ติชันนี้มีชื่อว่า NODExxxx / SQLyyy โดยที่ xxxx คือหมายเลขพาร์ติชันข้อมูลและ yyy คือโทเค็นฐานข้อมูล

ในไดเร็กทอรีพาร์ติชันโกลบอลไดเร็กทอรีเฉพาะสมาชิกถูกสร้างขึ้น ไดเร็กทอรีนี้มีข้อมูลฐานข้อมูลโลคัล ไดเร็กทอรีเฉพาะสำหรับสมาชิกมีชื่อว่า MEMBERxxxx โดยที่ xxxx คือหมายเลขสมาชิก สภาพแวดล้อม DB2 Enterprise Server Edition รันบนสมาชิกเดียวและมีไดเร็กทอรีเฉพาะสมาชิกเดียว ไดเร็กทอรีเฉพาะของสมาชิกนี้มีชื่อไม่ซ้ำกันว่า MEMBER0000

พาร์ติชันโกลบอลไดเร็กทอรี

ตำแหน่งไดเร็กทอรี: <instance> / NODExxx / SQLxxx

ไดเร็กทอรีพาร์ติชันโกลบอลมีไฟล์ที่เกี่ยวข้องกับฐานข้อมูลตามรายการด้านล่าง

  • ไฟล์การตรวจสอบเหตุการณ์การเขียนไปยังไฟล์ที่หยุดชะงักส่วนกลาง
  • ไฟล์ข้อมูลพื้นที่ตาราง [SQLSPCS.1, SQLSPCS.2]
  • ไฟล์ควบคุมกลุ่มที่เก็บข้อมูล [SQLSGF.1, SQLSGF.2]
  • ไฟล์คอนเทนเนอร์พื้นที่ตารางชั่วคราว [/ เส้นทางการจัดเก็บ / /T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA]
  • ไฟล์คอนฟิกูเรชันส่วนกลาง [SQLDBCONF]
  • ไฟล์ประวัติ [DB2RHIST.ASC, DB2RHIST.BAK, DB2TSCHG.HIS, DB2TSCHG.HIS]
  • ไฟล์ที่เกี่ยวข้องกับการบันทึก [SQLOGCTL.GLFH.1, SQLOGCTL.GLFH.2]
  • การล็อกไฟล์ [SQLINSLK, SQLTMPLK]
  • ตู้คอนเทนเนอร์อัตโนมัติ

ไดเร็กทอรีเฉพาะของสมาชิก

ตำแหน่งไดเร็กทอรี: / NODExxxx / SQLxxxx / MEMBER0000

ไดเร็กทอรีนี้ประกอบด้วย:

  • วัตถุที่เกี่ยวข้องกับฐานข้อมูล
  • ไฟล์ข้อมูลบัฟเฟอร์พูล [SQLBP.1, SQLBP.2]
  • ไฟล์การตรวจสอบเหตุการณ์ในเครื่อง
  • ไฟล์ที่เกี่ยวข้องกับการบันทึก [SQLOGCTL.LFH.1, SQLOGCTL.LFH.2, SQLOGMIR.LFH]
  • ไฟล์การกำหนดค่าภายในเครื่อง
  • ไฟล์มอนิเตอร์เหตุการณ์ Deadlocks ไฟล์มอนิเตอร์เหตุการณ์การหยุดชะงักโดยละเอียดจะถูกเก็บไว้ในไดเร็กทอรีฐานข้อมูลของโหนดแค็ตตาล็อกในกรณีของ ESE และสภาพแวดล้อมฐานข้อมูลที่แบ่งพาร์ติชัน

การสร้างฐานข้อมูล

คุณสามารถสร้างฐานข้อมูลโดยใช้คำสั่ง "สร้างฐานข้อมูล" ฐานข้อมูลทั้งหมดถูกสร้างขึ้นด้วยกลุ่มหน่วยเก็บข้อมูลเริ่มต้น“ IBMSTOGROUP” ซึ่งสร้างขึ้นในขณะที่สร้างอินสแตนซ์ ใน DB2 ตารางฐานข้อมูลทั้งหมดจะถูกเก็บไว้ใน "พื้นที่ตาราง" ซึ่งใช้กลุ่มหน่วยเก็บข้อมูลตามลำดับ

สิทธิ์สำหรับฐานข้อมูลจะถูกตั้งค่าโดยอัตโนมัติเป็น PUBLIC [CREATETAB, BINDADD, CONNECT, IMPLICIT_SCHEMA และ SELECT] อย่างไรก็ตามหากมีตัวเลือก RESTRICTIVE อยู่จะไม่ได้รับสิทธิ์เป็นแบบสาธารณะ

การสร้างฐานข้อมูลที่ไม่ จำกัด

คำสั่งนี้ใช้เพื่อสร้างฐานข้อมูลที่ไม่ จำกัด

Syntax: [เพื่อสร้างฐานข้อมูลใหม่ 'database_name' แสดงชื่อฐานข้อมูลใหม่ที่คุณต้องการสร้าง]

db2 create database <database name>

Example: [ในการสร้างฐานข้อมูลใหม่ที่ไม่ จำกัด ด้วยชื่อ 'one']

db2 create database one

Output:

DB20000I The CREATE DATABASE command completed successfully.

การสร้างฐานข้อมูลที่ จำกัด

ฐานข้อมูลแบบ จำกัด ถูกสร้างขึ้นเมื่อเรียกใช้คำสั่งนี้

Syntax: [ในไวยากรณ์ด้านล่าง“ db_name” ระบุชื่อฐานข้อมูล]

db2 create database <db_name> restrictive

Example: [ในการสร้างฐานข้อมูลแบบ จำกัด ใหม่ด้วยชื่อ 'two']

db2 create database two restrictive

การสร้างฐานข้อมูลด้วยตำแหน่งที่ผู้ใช้กำหนดต่างกัน

สร้างฐานข้อมูลด้วยกลุ่มหน่วยเก็บข้อมูลเริ่มต้น“ IBMSTOGROUP” บนเส้นทางที่แตกต่างกัน ก่อนหน้านี้คุณเรียกใช้คำสั่ง“ สร้างฐานข้อมูล” โดยไม่มีตำแหน่งที่ตั้งที่ผู้ใช้กำหนดเพื่อจัดเก็บหรือสร้างฐานข้อมูลในตำแหน่งเฉพาะ ในการสร้างฐานข้อมูลโดยใช้ตำแหน่งฐานข้อมูลที่ผู้ใช้กำหนดให้ปฏิบัติตามขั้นตอนต่อไปนี้:

Syntax: [ในไวยากรณ์ด้านล่าง 'db_name' ระบุ 'ชื่อฐานข้อมูล' และ 'data_location' ระบุตำแหน่งที่ต้องจัดเก็บข้อมูลในโฟลเดอร์และ 'db_path_location' ระบุตำแหน่งไดรเวอร์ของ 'data_location']

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

Example: [ในการสร้างฐานข้อมูลชื่อ 'four' ซึ่งข้อมูลจะถูกเก็บไว้ใน 'data1' และโฟลเดอร์นี้จะถูกเก็บไว้ใน 'dbpath1']

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

การดูไฟล์ไดเร็กทอรีฐานข้อมูลโลคัลหรือระบบ

คุณดำเนินการคำสั่งนี้เพื่อดูรายการไดเร็กทอรีที่มีอยู่ในอินสแตนซ์ปัจจุบัน

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         =

กำลังเปิดใช้งานฐานข้อมูล

คำสั่งนี้เริ่มต้นบริการที่จำเป็นทั้งหมดสำหรับฐานข้อมูลเฉพาะเพื่อให้ฐานข้อมูลพร้อมใช้งานสำหรับแอปพลิเคชัน

Syntax: ['db_name' ระบุชื่อฐานข้อมูล]

db2 activate db <db_name>

Example: [การเปิดใช้งานฐานข้อมูล 'one']

db2 activate db one

กำลังปิดใช้งานฐานข้อมูล

เมื่อใช้คำสั่งนี้คุณสามารถหยุดบริการฐานข้อมูลได้

Syntax:

db2 deactivate db <db_name>

Example: [เพื่อปิดใช้งานฐานข้อมูล 'one']

db2 deactivate db one

กำลังเชื่อมต่อกับฐานข้อมูล

หลังจากสร้างฐานข้อมูลแล้วในการใช้งานคุณต้องเชื่อมต่อหรือเริ่มฐานข้อมูล

Syntax:

db2 connect to <database name>

Example: [เพื่อเชื่อมต่อฐานข้อมูลหนึ่งกับ CLI ปัจจุบัน]

db2 connect to one

Output:

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

ตรวจสอบว่าฐานข้อมูลมีข้อ จำกัด หรือไม่

ในการตรวจสอบว่าฐานข้อมูลนี้มีข้อ จำกัด หรือไม่นี่คือไวยากรณ์:

Syntax: [ในไวยากรณ์ต่อไปนี้ 'db' หมายถึงฐานข้อมูล 'cfg' ระบุการกำหนดค่า 'db_name' ระบุชื่อฐานข้อมูล]

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

Example: [เพื่อตรวจสอบว่าฐานข้อมูล 'one' ถูก จำกัด หรือไม่]

db2 get db cfg for one | grep -i restrict

Output:

Restrict access                       = NO

การกำหนดค่าตัวจัดการฐานข้อมูลและฐานข้อมูล

การกำหนดค่าอินสแตนซ์ (การกำหนดค่าตัวจัดการฐานข้อมูล) ถูกเก็บไว้ในไฟล์ชื่อ 'db2system' และการกำหนดค่าที่เกี่ยวข้องกับฐานข้อมูลจะถูกเก็บไว้ในไฟล์ชื่อ 'SQLDBCON' ไฟล์เหล่านี้ไม่สามารถแก้ไขได้โดยตรง คุณสามารถแก้ไขไฟล์เหล่านี้โดยใช้เครื่องมือที่เรียก API เมื่อใช้ตัวประมวลผลบรรทัดคำสั่งคุณสามารถใช้คำสั่งเหล่านี้

พารามิเตอร์การกำหนดค่าตัวจัดการฐานข้อมูล

Syntax: [หากต้องการรับข้อมูลของ Instance Database manager]

db2 get database manager configuration
db2 get dbm cfg

Syntax: [เพื่ออัปเดตตัวจัดการฐานข้อมูลอินสแตนซ์]

db2 update database manager configuration
db2 update dbm cfg

Syntax: [เพื่อรีเซ็ตการกำหนดค่าก่อนหน้า]

db2 reset database manager configuration
db2 reset dbm cfg

พารามิเตอร์การกำหนดค่าฐานข้อมูล

Syntax: [เพื่อรับข้อมูลของฐานข้อมูล]

db2 get database configuration
db2 get db cfg

Syntax: [เพื่ออัปเดตการกำหนดค่าฐานข้อมูล]

db2 update database configuration
db2 update db cfg

Syntax: [เพื่อรีเซ็ตค่าที่กำหนดไว้ก่อนหน้านี้ในการกำหนดค่าฐานข้อมูล

db2 reset database configuration
db2 reset db cfg

Syntax: [เพื่อตรวจสอบขนาดของฐานข้อมูลปัจจุบันที่ใช้งานอยู่]

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

Example: [เพื่อตรวจสอบขนาดของฐานข้อมูลปัจจุบันที่เปิดใช้งาน]

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

การประมาณพื้นที่ที่ต้องการสำหรับฐานข้อมูล

ในการประมาณขนาดของฐานข้อมูลต้องพิจารณาการมีส่วนร่วมของปัจจัยต่อไปนี้:

  • ตารางแค็ตตาล็อกระบบ
  • ข้อมูลตารางผู้ใช้
  • ข้อมูลฟิลด์ยาว
  • ข้อมูลวัตถุขนาดใหญ่ (LOB)
  • อินเด็กซ์สเปซ
  • พื้นที่ทำงานชั่วคราว
  • ข้อมูล XML
  • พื้นที่ล็อกไฟล์
  • ไดเร็กทอรีฐานข้อมูลท้องถิ่น
  • ไฟล์ระบบ

กำลังตรวจสอบผู้มีอำนาจในฐานข้อมูล

คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อตรวจสอบว่าหน่วยงานฐานข้อมูลใดที่มอบให้แก่สาธารณะในฐานข้อมูลที่ไม่ จำกัด

Step 1: เชื่อมต่อกับฐานข้อมูลด้วย ID ผู้ใช้และรหัสผ่านของอินสแตนซ์

Syntax: [เพื่อเชื่อมต่อกับฐานข้อมูลด้วยชื่อผู้ใช้และรหัสผ่าน]

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

Example: [เพื่อเชื่อมต่อฐานข้อมูล "หนึ่ง" ด้วยรหัสผู้ใช้ "db2inst4" และรหัสผ่าน "db2inst4"]

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: เพื่อตรวจสอบสิทธิ์ของฐานข้อมูล

Syntax: [ไวยากรณ์ด้านล่างแสดงผลลัพธ์ของบริการสิทธิสำหรับฐานข้อมูลปัจจุบัน]

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.

การลดฐานข้อมูล

ใช้คำสั่ง Drop คุณสามารถลบฐานข้อมูลของเราออกจากไดเร็กทอรีฐานข้อมูลอินสแตนซ์ คำสั่งนี้สามารถลบอ็อบเจ็กต์ตารางช่องว่างคอนเทนเนอร์และไฟล์ที่เกี่ยวข้องทั้งหมด

Syntax: [เพื่อวางฐานข้อมูลจากอินสแตนซ์]

db2 drop database <db_name>

Example: [เพื่อวางฐานข้อมูล 'หก' จากอินสแตนซ์]

db2  drop database six

Output:

DB20000I The DROP DATABASE command completed successfully

บทนี้แนะนำให้คุณรู้จักกับบัฟเฟอร์พูลในฐานข้อมูล

บทนำ

บัฟเฟอร์พูลเป็นส่วนหนึ่งของพื้นที่หน่วยความจำหลักซึ่งถูกจัดสรรโดยผู้จัดการฐานข้อมูล วัตถุประสงค์ของบัฟเฟอร์พูลคือการแคชตารางและดัชนีข้อมูลจากดิสก์ ฐานข้อมูลทั้งหมดมีบัฟเฟอร์พูลของตนเอง บัฟเฟอร์พูลดีฟอลต์ถูกสร้างขึ้นในขณะที่สร้างฐานข้อมูลใหม่ เรียกว่า "IBMDEFAULTBP" ขึ้นอยู่กับความต้องการของผู้ใช้เป็นไปได้ที่จะสร้างบัฟเฟอร์พูลจำนวนหนึ่ง ในบัฟเฟอร์พูลตัวจัดการฐานข้อมูลจะวางข้อมูลแถวตารางเป็นเพจ หน้านี้จะอยู่ในบัฟเฟอร์พูลจนกว่าฐานข้อมูลจะปิดตัวลงหรือจนกว่าช่องว่างจะถูกเขียนด้วยข้อมูลใหม่ เพจในบัฟเฟอร์พูลซึ่งอัปเดตด้วยข้อมูล แต่ไม่ได้เขียนลงในดิสก์เรียกว่าเพจ "สกปรก" หลังจากที่หน้าข้อมูลที่อัพเดตในบัฟเฟอร์พูลถูกเขียนลงบนดิสก์บัฟเฟอร์พูลก็พร้อมที่จะรับข้อมูลอื่น

ความสัมพันธ์ระหว่างพื้นที่ตารางและบัฟเฟอร์พูล

พื้นที่ตารางแต่ละส่วนเชื่อมโยงกับกลุ่มบัฟเฟอร์เฉพาะในฐานข้อมูล หนึ่งช้อนโต๊ะเกี่ยวข้องกับหนึ่งบัฟเฟอร์ ขนาดของบัฟเฟอร์พูลและพื้นที่ตารางต้องเท่ากัน บัฟเฟอร์พูลหลายตัวช่วยให้คุณกำหนดค่าหน่วยความจำที่ใช้โดยฐานข้อมูลเพื่อเพิ่มประสิทธิภาพโดยรวม

ขนาดบัฟเฟอร์พูล

ขนาดของเพจบัฟเฟอร์พูลจะถูกตั้งค่าเมื่อคุณใช้คำสั่ง“ สร้างฐานข้อมูล” หากคุณไม่ระบุขนาดหน้าจะใช้ขนาดหน้าเริ่มต้นซึ่งก็คือ 4KB เมื่อสร้างบัฟเฟอร์พูลแล้วจะไม่สามารถแก้ไขขนาดเพจได้ในภายหลัง

การแสดงรายการบัฟเฟอร์พูลที่มีอยู่ในไดเร็กทอรีฐานข้อมูลปัจจุบัน

Syntax: [ไวยากรณ์ด้านล่างแสดงบัฟเฟอร์พูลที่มีอยู่ทั้งหมดในฐานข้อมูล]

db2 select * from syscat.bufferpools

Example: [หากต้องการดูบัฟเฟอร์พูลที่มีอยู่ในฐานข้อมูลปัจจุบัน]

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.

การสร้างบัฟเฟอร์พูล

ในการสร้างบัฟเฟอร์พูลใหม่สำหรับเซิร์ฟเวอร์ฐานข้อมูลคุณต้องมีพารามิเตอร์สองตัว ได้แก่ "ชื่อบัฟเฟอร์พูล" และ "ขนาดของเพจ" แบบสอบถามต่อไปนี้ถูกเรียกใช้เพื่อสร้างบัฟเฟอร์พูลใหม่

ไวยากรณ์: [ในไวยากรณ์ด้านล่าง 'bp_name' ระบุชื่อบัฟเฟอร์พูลและ 'size' ระบุขนาดของหน้าที่คุณต้องการประกาศสำหรับบัฟเฟอร์พูล (4K, 8K, 16K, 32K)]

db2 create bufferpool <bp_name> pagesize <size>

Example: [เพื่อสร้างบัฟเฟอร์พูลใหม่โดยใช้ชื่อ“ bpnew” และขนาด“ 8192” (8Kb)]

db2 create bufferpool bpnew pagesize 8192

Output

DB20000I The SQL command completed successfully.

การทิ้งบัฟเฟอร์พูล

ก่อนที่จะปล่อยบัฟเฟอร์พูลจำเป็นต้องตรวจสอบว่ามีการกำหนดพื้นที่ตารางหรือไม่

Syntax: [เพื่อวางบัฟเฟอร์พูล]

drop bufferpool <bp_name>

Example: [เพื่อดร็อป 'bpnew' ที่มีชื่อว่า bufferpool]

db2 drop bufferpool bpnew

Output

DB20000I The SQL command completed successfully.

บทนี้จะอธิบายรายละเอียดของพื้นที่ตาราง

บทนำ

พื้นที่ตารางเป็นโครงสร้างการจัดเก็บประกอบด้วยตารางดัชนีวัตถุขนาดใหญ่และข้อมูลขนาดยาว สามารถใช้เพื่อจัดระเบียบข้อมูลในฐานข้อมูลให้เป็นกลุ่มการจัดเก็บแบบลอจิคัลซึ่งเกี่ยวข้องกับข้อมูลที่จัดเก็บในระบบ พื้นที่ตารางนี้ถูกเก็บไว้ในกลุ่มพาร์ติชันฐานข้อมูล

ประโยชน์ของพื้นที่ตารางในฐานข้อมูล

พื้นที่ตารางมีประโยชน์ในฐานข้อมูลในรูปแบบต่างๆดังต่อไปนี้:

Recoverability: Tablespaces ทำให้การสำรองข้อมูลและเรียกคืนการดำเนินการสะดวกยิ่งขึ้น ใช้คำสั่งเดียวคุณสามารถสำรองข้อมูลหรือกู้คืนวัตถุฐานข้อมูลทั้งหมดในพื้นที่ตาราง

Automatic storage Management: ผู้จัดการฐานข้อมูลสร้างและขยายคอนเทนเนอร์ขึ้นอยู่กับความต้องการ

Memory utilization: บัฟเฟอร์พูลเดียวสามารถจัดการหลายตาราง คุณสามารถกำหนดพื้นที่ตารางชั่วคราวให้กับบัฟเฟอร์พูลของตนเองเพื่อเพิ่มประสิทธิภาพของกิจกรรมต่างๆเช่นประเภทหรือการรวม

คอนเทนเนอร์

Tablespaces มีคอนเทนเนอร์อย่างน้อยหนึ่งคอนเทนเนอร์ คอนเทนเนอร์อาจเป็นชื่อไดเร็กทอรีชื่ออุปกรณ์หรือชื่อไฟล์ ในฐานข้อมูลพื้นที่ตารางเดียวสามารถมีหลายคอนเทนเนอร์บนอุปกรณ์จัดเก็บข้อมูลทางกายภาพเดียวกันได้ ถ้าพื้นที่ตารางถูกสร้างขึ้นด้วยตัวเลือกพื้นที่จัดเก็บข้อมูลอัตโนมัติการสร้างและการจัดการคอนเทนเนอร์จะถูกจัดการโดยอัตโนมัติโดยผู้จัดการฐานข้อมูล หากไม่ได้สร้างด้วยตัวเลือกพื้นที่จัดเก็บอัตโนมัติคุณต้องกำหนดและจัดการคอนเทนเนอร์ด้วยตัวเอง

ช้อนโต๊ะเริ่มต้น

เมื่อคุณสร้างฐานข้อมูลใหม่ผู้จัดการฐานข้อมูลจะสร้างพื้นที่ตารางเริ่มต้นสำหรับฐานข้อมูล พื้นที่ตารางเหล่านี้ใช้เป็นที่เก็บข้อมูลสำหรับผู้ใช้และข้อมูลชั่วคราว แต่ละฐานข้อมูลต้องมีอย่างน้อยสามตารางตารางตามที่ระบุไว้ที่นี่:

  1. ช้อนโต๊ะแคตตาล็อก
  2. พื้นที่โต๊ะของผู้ใช้
  3. ช้อนโต๊ะชั่วคราว

Catalog tablespace: ประกอบด้วยตารางแค็ตตาล็อกระบบสำหรับฐานข้อมูล มีชื่อว่า SYSCATSPACE และไม่สามารถหลุดได้

User tablespace: ตารางนี้ประกอบด้วยตารางที่ผู้ใช้กำหนดเอง ในฐานข้อมูลเรามีหนึ่งพื้นที่ตารางผู้ใช้เริ่มต้นชื่อ USERSPACE1 หากคุณไม่ได้ระบุพื้นที่ตารางที่ผู้ใช้กำหนดเองสำหรับตารางในขณะที่คุณสร้างตารางนั้นผู้จัดการฐานข้อมูลจะเลือกพื้นที่ตารางผู้ใช้เริ่มต้นให้คุณ

Temporary tablespace: พื้นที่ตารางชั่วคราวมีข้อมูลตารางชั่วคราว พื้นที่ตารางนี้ประกอบด้วยพื้นที่ตารางชั่วคราวของระบบหรือพื้นที่โต๊ะชั่วคราวของผู้ใช้

พื้นที่ตารางชั่วคราวของระบบเก็บข้อมูลชั่วคราวที่ผู้จัดการฐานข้อมูลต้องการในขณะที่ดำเนินการเช่นการเรียงลำดับหรือการรวม ฐานข้อมูลต้องมีอย่างน้อยหนึ่งพื้นที่ตารางชั่วคราวของระบบและตั้งชื่อเป็น TEMPSPACE1 มันถูกสร้างขึ้นในขณะที่สร้างฐานข้อมูล พื้นที่ตารางชั่วคราวของผู้ใช้เก็บข้อมูลชั่วคราวจากตาราง มันถูกสร้างขึ้นด้วยคำสั่ง DECLARE GLOBAL TEMPORARY TABLE หรือ CREATE GLOBAL TEMPORARY TABLE พื้นที่ตารางชั่วคราวนี้ไม่ได้ถูกสร้างขึ้นตามค่าเริ่มต้นในขณะสร้างฐานข้อมูล

Tablespaces and storage management:

พื้นที่โต๊ะสามารถตั้งค่าได้หลายวิธีขึ้นอยู่กับว่าคุณต้องการใช้งานอย่างไร คุณสามารถตั้งค่าระบบปฏิบัติการเพื่อจัดการการจัดสรรพื้นที่ตารางคุณสามารถให้ผู้จัดการฐานข้อมูลจัดสรรพื้นที่หรือคุณสามารถเลือกการจัดสรรพื้นที่ตารางโดยอัตโนมัติสำหรับข้อมูลของคุณ

มีช่องว่างที่มีการจัดการสามประเภทต่อไปนี้:

System Managed Space (SMS): ตัวจัดการระบบไฟล์ของระบบปฏิบัติการจะจัดสรรและจัดการพื้นที่ที่จัดเก็บตาราง พื้นที่จัดเก็บถูกจัดสรรตามความต้องการ โมเดลนี้ประกอบด้วยไฟล์ที่แสดงถึงอ็อบเจ็กต์ฐานข้อมูล ประเภทพื้นที่ตารางนี้เลิกใช้แล้วในเวอร์ชัน 10.1 สำหรับพื้นที่ตารางที่ผู้ใช้กำหนดและไม่ได้เลิกใช้สำหรับแค็ตตาล็อกและพื้นที่ตารางชั่วคราว

Database Managed Space (DMS): เซิร์ฟเวอร์ฐานข้อมูลควบคุมพื้นที่จัดเก็บ พื้นที่เก็บข้อมูลถูกจัดสรรไว้ล่วงหน้าบนระบบไฟล์ตามนิยามคอนเทนเนอร์ที่คุณระบุเมื่อคุณสร้างพื้นที่ตาราง DMS เลิกใช้งานจากเวอร์ชัน 10.1 ฟิกซ์แพ็ก 1 สำหรับพื้นที่ตารางที่ผู้ใช้กำหนด แต่ไม่ได้เลิกใช้สำหรับพื้นที่ตารางของระบบและพื้นที่ตารางชั่วคราว

Automatic Storage Tablespace: เซิร์ฟเวอร์ฐานข้อมูลสามารถจัดการได้โดยอัตโนมัติ เซิร์ฟเวอร์ฐานข้อมูลสร้างและขยายคอนเทนเนอร์ขึ้นอยู่กับข้อมูลบนฐานข้อมูล ด้วยการจัดการที่จัดเก็บอัตโนมัติไม่จำเป็นต้องระบุคำจำกัดความของคอนเทนเนอร์ เซิร์ฟเวอร์ฐานข้อมูลดูแลการสร้างและขยายคอนเทนเนอร์เพื่อใช้ประโยชน์จากหน่วยเก็บข้อมูลที่จัดสรรให้กับฐานข้อมูล หากคุณเพิ่มพื้นที่จัดเก็บในกลุ่มจัดเก็บคอนเทนเนอร์ใหม่จะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคอนเทนเนอร์ที่มีอยู่มีความจุสูงสุด หากคุณต้องการใช้พื้นที่จัดเก็บข้อมูลที่เพิ่มใหม่ทันทีคุณสามารถปรับสมดุลของพื้นที่ตารางได้

Page, table and tablespace size:

DMS ชั่วคราวและพื้นที่จัดเก็บอัตโนมัติขนาดเพจที่คุณเลือกสำหรับฐานข้อมูลจะกำหนดขีด จำกัด สูงสุดสำหรับขนาดพื้นที่ตาราง สำหรับ SMS ตารางและพื้นที่จัดเก็บอัตโนมัติชั่วคราวขนาดหน้าจะ จำกัด ขนาดของตารางเอง ขนาดของเพจสามารถเป็น 4kb, 8kb, 16kb หรือ 32kb

ประเภท Tablespace จำกัด ขนาดหน้า 4K จำกัด ขนาดหน้า 8K จำกัด ขนาดหน้า 16K จำกัด ขนาดหน้า 32K
DMS พื้นที่จัดเก็บอัตโนมัติแบบไม่ชั่วคราวปกติ 64 ก 128 ก 256G 512 ก
DMS, DMS ชั่วคราวและพื้นที่จัดเก็บข้อมูลอัตโนมัติแบบไม่ชั่วคราวขนาดใหญ่ พ.ศ. 2435 16384 ก 32768 ก 65536 ก

บทนี้อธิบายถึงกลุ่มการจัดเก็บฐานข้อมูล

บทนำ

ชุดของเส้นทางการจัดเก็บเพื่อจัดเก็บตารางฐานข้อมูลหรือวัตถุคือกลุ่มหน่วยเก็บข้อมูล คุณสามารถกำหนดพื้นที่ตารางให้กับกลุ่มการจัดเก็บ เมื่อคุณสร้างฐานข้อมูลพื้นที่ตารางทั้งหมดจะใช้พื้นที่จัดเก็บเริ่มต้น กลุ่มหน่วยเก็บข้อมูลเริ่มต้นสำหรับฐานข้อมูลคือ 'IBMSTOGROUP' เมื่อคุณสร้างฐานข้อมูลใหม่กลุ่มหน่วยเก็บข้อมูลเริ่มต้นจะทำงานอยู่หากคุณส่งพารามิเตอร์“ AUTOMATIC STOGROUP NO” ที่ท้ายคำสั่ง“ สร้างฐานข้อมูล” ฐานข้อมูลไม่มีกลุ่มหน่วยเก็บข้อมูลเริ่มต้น

รายชื่อกลุ่มการจัดเก็บ

คุณสามารถแสดงรายการกลุ่มหน่วยเก็บข้อมูลทั้งหมดในฐานข้อมูล

Syntax: [หากต้องการดูรายการกลุ่มการจัดเก็บที่มีอยู่ในฐานข้อมูลปัจจุบัน]

db2 select * from syscat.stogroups

Example: [หากต้องการดูรายการสตอเรจที่มีอยู่ในฐานข้อมูลปัจจุบัน]

db2 select * from syscat.stogroups

การสร้างกลุ่มการจัดเก็บ

นี่คือไวยากรณ์สำหรับสร้างกลุ่มการจัดเก็บในฐานข้อมูล:

Syntax: [เพื่อสร้างสโตกกรุ๊ปใหม่ 'stogropu_name' ระบุชื่อของกลุ่มการจัดเก็บใหม่และ 'path' ระบุตำแหน่งที่จัดเก็บข้อมูล (ตาราง))

db2 create stogroup 
      
        on ‘path’ 
      

Example: [ในการสร้าง stogroup ใหม่ 'stg1' บนพา ธ โฟลเดอร์ 'data1']

db2 create stogroup stg1 on ‘/data1’

Output:

DB20000I The SQL command completed succesfully

การสร้างพื้นที่ตารางด้วย stogroup

นี่คือวิธีสร้างพื้นที่ตารางด้วย storegroup:

Syntax: [ในการสร้างพื้นที่ตารางใหม่โดยใช้กลุ่มการจัดเก็บที่มีอยู่]

db2 create tablespace <tablespace_name>  using stogroup <stogroup_name>

Example: [ในการสร้างพื้นที่ตารางใหม่ชื่อ 'ts1' โดยใช้กลุ่มการจัดเก็บที่มีอยู่ 'stg1']

db2 create tablespace ts1 using stogroup stg1

Output:

DB20000I The SQL command completed succesfully

การแก้ไขกลุ่มการจัดเก็บ

คุณสามารถเปลี่ยนตำแหน่งของกลุ่มร้านค้าโดยใช้ไวยากรณ์ต่อไปนี้:

Syntax: [ในการเปลี่ยนกลุ่มพื้นที่เก็บข้อมูลจากตำแหน่งเก่าไปยังตำแหน่งใหม่]

db2 alter stogroup 
      
        add ‘location’, ‘location’ 
      

Example: [หากต้องการแก้ไขเส้นทางตำแหน่งจากตำแหน่งเก่าไปยังตำแหน่งใหม่สำหรับกลุ่มพื้นที่จัดเก็บชื่อ 'sg1']

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

การทิ้งพา ธ โฟลเดอร์ของ storagegroup

ก่อนทิ้งพา ธ โฟลเดอร์ของ storagegroup คุณสามารถเพิ่มตำแหน่งใหม่สำหรับ storagegroup ได้โดยใช้คำสั่ง alter

Syntax: [เพื่อวางเส้นทางเก่าจากตำแหน่งกลุ่มการจัดเก็บ]

db2 alter stogroup 
      
        drop ‘/path’ 
      

Example: [หากต้องการวางตำแหน่งกลุ่มพื้นที่เก็บข้อมูลจาก "stg1"]

db2 alter stogroup stg1 drop ‘/path/data1’

ปรับสมดุลช้อนโต๊ะใหม่

การปรับสมดุลของพื้นที่ตารางเป็นสิ่งที่จำเป็นเมื่อเราสร้างโฟลเดอร์ใหม่สำหรับกลุ่มการจัดเก็บหรือพื้นที่ตารางในขณะที่ธุรกรรมกำลังดำเนินการบนฐานข้อมูลและพื้นที่ตารางจะเต็ม การปรับสมดุลไฟล์การกำหนดค่าฐานข้อมูลอัพเดตด้วยกลุ่มหน่วยเก็บข้อมูลใหม่

Syntax: [เพื่อปรับสมดุลของพื้นที่ตารางจากพา ธ กลุ่มที่เก็บข้อมูลเก่าไปยังกลุ่มหน่วยเก็บข้อมูลใหม่]

db2 alter tablspace <ts_name> rebalance

Example: [เพื่อปรับสมดุล]

db2 alter tablespace ts1 rebalance

การเปลี่ยนชื่อกลุ่มการจัดเก็บ

Syntax: [ในการแก้ไขชื่อของชื่อที่เก็บข้อมูลที่มีอยู่]

db2 rename stogroup <old_stg_name> to <new_stg_name>

Example: [หากต้องการแก้ไขชื่อกลุ่มการจัดเก็บจาก "sg1" เป็นชื่อใหม่ "sgroup1"]

db2 rename stogroup sg1 to sgroup1

การทิ้งกลุ่มหน่วยเก็บข้อมูล

Step 1: ก่อนที่จะทิ้งกลุ่มการจัดเก็บคุณสามารถกำหนดกลุ่มหน่วยเก็บข้อมูลที่แตกต่างกันสำหรับพื้นที่ตารางได้

Syntax: [เพื่อกำหนดกลุ่มการจัดเก็บอื่นสำหรับพื้นที่ตาราง]

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

Example: [หากต้องการเปลี่ยนจากกลุ่มสโตกกรุ๊ปเก่าเป็นกลุ่มสโตกกรุ๊ปใหม่ชื่อ 'sg2' สำหรับพื้นที่ตาราง 'ts1']

db2 alter tablespace ts1 using stogroup sg2

Step 2:

Syntax: [เพื่อทิ้งกลุ่มที่มีอยู่]

db2 drop stogorup <stogroup_name>

Example: [ในการทิ้ง stogroup 'stg1' จากฐานข้อมูล]

db2 drop stogroup stg1

บทนี้แนะนำและอธิบายแนวคิดของ Schema

บทนำ

สคีมาคือชุดของอ็อบเจ็กต์ที่มีชื่อซึ่งจัดประเภทตามเหตุผลในฐานข้อมูล

ในฐานข้อมูลคุณไม่สามารถสร้างวัตถุฐานข้อมูลหลายรายการที่มีชื่อเดียวกันได้ ในการทำเช่นนั้นสคีมาจัดเตรียมสภาพแวดล้อมกลุ่ม คุณสามารถสร้างสคีมาหลายชุดในฐานข้อมูลและคุณสามารถสร้างอ็อบเจ็กต์ฐานข้อมูลหลายตัวที่มีชื่อเดียวกันโดยมีกลุ่มสคีมาที่แตกต่างกัน

สคีมาสามารถมีตารางฟังก์ชันดัชนีตารางขั้นตอนกระบวนการทริกเกอร์ ฯลฯ ตัวอย่างเช่นคุณสร้างสคีมาที่แตกต่างกันสองแบบโดยมีชื่อว่า“ Professional” และ“ Personal” สำหรับฐานข้อมูล“ พนักงาน” เป็นไปได้ที่จะสร้างตารางสองตารางที่แตกต่างกันโดยมีชื่อเดียวกันว่า "พนักงาน" ในสภาพแวดล้อมนี้ตารางหนึ่งมีข้อมูลทางวิชาชีพและอีกโต๊ะหนึ่งมีข้อมูลส่วนบุคคลของพนักงาน แม้ว่าจะมีสองตารางที่มีชื่อเดียวกัน แต่ก็มีสคีมาสองแบบคือ "ส่วนบุคคล" และ "มืออาชีพ" ดังนั้นผู้ใช้สามารถทำงานกับทั้งสองอย่างได้โดยไม่พบปัญหาใด ๆ คุณลักษณะนี้มีประโยชน์เมื่อมีข้อ จำกัด ในการตั้งชื่อตาราง

ให้เราดูคำสั่งสองสามคำที่เกี่ยวข้องกับ Schema:

กำลังรับสคีมาที่ใช้งานอยู่ในปัจจุบัน

Syntax:

db2 get schema

Example: [เพื่อรับสคีมาฐานข้อมูลปัจจุบัน]

db2 get schema

การตั้งค่า schema อื่นให้เป็นสภาพแวดล้อมปัจจุบัน

Syntax:

db2 set schema=<schema_name>

Example: [เพื่อจัดเรียง "schema1" ให้เป็นสภาพแวดล้อมของอินสแตนซ์ปัจจุบัน]

db2 set schema=schema1

การสร้าง Schema ใหม่

Syntax: [ในการสร้างสคีมาใหม่ด้วยรหัสผู้ใช้ที่ได้รับอนุญาต]

db2 create schema <schema_name> authroization <inst_user>

Example: [ในการสร้าง "schema1" สคีมาที่ได้รับอนุญาตด้วย "db2inst2"]

db2 create schema schema1 authorization db2inst2

ออกกำลังกาย

ให้เราสร้างตารางที่แตกต่างกันสองตารางที่มีชื่อเดียวกัน แต่มีสคีมาที่แตกต่างกันสองตาราง ที่นี่คุณสร้างตารางพนักงานด้วยสคีมาที่แตกต่างกันสองแบบหนึ่งสำหรับส่วนบุคคลและอีกแบบสำหรับข้อมูลระดับมืออาชีพ

Step 1: สร้างสคีมาสองรายการ

Schema 1: [ในการสร้างสคีมาชื่อ professional]

db2 create schema professional authorization db2inst2

Schema 2: [ในการสร้างสคีมาชื่อส่วนบุคคล]

db2 create schema personal authorization db2inst2

Step 2: สร้างตารางสองตารางที่มีชื่อเดียวกันสำหรับรายละเอียดพนักงาน

Table1: professional.employee

[ในการสร้างตารางใหม่ "พนักงาน" ในฐานข้อมูลโดยใช้ชื่อสคีมา "มืออาชีพ"]

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

Table2: personal.employee

[ในการสร้างตารางใหม่ "พนักงาน" ในฐานข้อมูลเดียวกันโดยใช้ชื่อสคีมา "ส่วนบุคคล"]

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

หลังจากดำเนินการตามขั้นตอนเหล่านี้คุณจะได้รับตารางสองตารางที่มีชื่อ 'พนักงาน' เหมือนกันโดยมีสคีมาที่แตกต่างกันสองตาราง

บทนี้แนะนำประเภทข้อมูลต่างๆที่ใช้ใน DB2

บทนำ

ในตารางฐานข้อมูล DB2 แต่ละคอลัมน์จะมีชนิดข้อมูลของตัวเองขึ้นอยู่กับความต้องการของผู้พัฒนา ชนิดข้อมูลกล่าวว่าเป็นประเภทและช่วงของค่าในคอลัมน์ของตาราง

ประเภทข้อมูลในตัว

  • วันเวลา
    • TIME: แสดงเวลาของวันในหน่วยชั่วโมงนาทีและวินาที
    • TIMESTAMP: แสดงค่าเจ็ดค่าของวันที่และเวลาในรูปแบบของปีเดือนวันชั่วโมงนาทีวินาทีและไมโครวินาที
    • DATE: แสดงวันที่ของวันในสามส่วนในรูปแบบของปีเดือนและวัน
  • String
    • Character
  • CHAR (fixed length): ความยาวคงที่ของสตริงอักขระ
    • ความยาวต่างกัน
  • VARCHAR: การเปลี่ยนแปลงสตริงอักขระที่มีความยาว
  • CLOB: สตริงอ็อบเจ็กต์ขนาดใหญ่คุณใช้สิ่งนี้เมื่อสตริงอักขระอาจเกินขีด จำกัด ของชนิดข้อมูล VARCHAR
    • Graphic
  • GRAPHIC
    • Fixed length: สตริงกราฟิกที่มีความยาวคงที่ซึ่งประกอบด้วยอักขระแบบไบต์คู่
    • ความยาวต่างกัน
  • VARGRAPHIC: การเปลี่ยนสตริงกราฟิกอักขระที่มีอักขระลาก่อน
  • DBCLOB: ประเภทวัตถุขนาดใหญ่
    • Binary
  • BLOB (ความยาวต่างกัน): สตริงไบนารีในวัตถุขนาดใหญ่
  • BOOLEAN: ในรูปแบบของ 0 และ 1
  • Signed numeric
    • Exact
  • Binary integer
    • SMALLINT [16BIT]: การใช้สิ่งนี้คุณสามารถแทรกค่า int ขนาดเล็กลงในคอลัมน์
    • INTEGER [32BIT]: การใช้สิ่งนี้คุณสามารถแทรกค่า int ขนาดใหญ่ลงในคอลัมน์ได้
    • BIGINT [64BIT]: การใช้สิ่งนี้คุณสามารถแทรกค่า int ที่ใหญ่กว่าลงในคอลัมน์ได้
  • Decimal
    • DECIMAL (บรรจุ)
    • DECFLOAT (ทศนิยมทศนิยม): เมื่อใช้สิ่งนี้คุณสามารถแทรกตัวเลขทศนิยม
    • Approximate
  • Floating points
    • REAL (ความแม่นยำเดียว): เมื่อใช้ประเภทข้อมูลนี้คุณสามารถแทรกตัวเลขทศนิยมตำแหน่งเดียวได้
    • DOUBLE (ความแม่นยำสองเท่า): เมื่อใช้ประเภทข้อมูลนี้คุณสามารถแทรกตัวเลขทศนิยมที่มีความแม่นยำสองเท่าได้
  • eXtensible Mark-up Language
    • XML: คุณสามารถจัดเก็บข้อมูล XML ลงในคอลัมน์ชนิดข้อมูลนี้

ตารางเป็นโครงสร้างเชิงตรรกะที่ดูแลโดยผู้จัดการฐานข้อมูล ในตารางแต่ละบล็อกแนวตั้งเรียกว่าคอลัมน์ (Tuple) และแต่ละบล็อกแนวนอนเรียกว่าเป็นแถว (เอนทิตี) การรวบรวมข้อมูลที่จัดเก็บในรูปแบบของคอลัมน์และแถวเรียกว่าตาราง ในตารางแต่ละคอลัมน์มีชนิดข้อมูลที่แตกต่างกัน ตารางใช้เพื่อจัดเก็บข้อมูลถาวร

ประเภทของตาราง

  • Base Tables: พวกเขาเก็บข้อมูลถาวร โต๊ะฐานมีหลายประเภท ได้แก่ :
    • Regular Tables: ตารางเอนกประสงค์ตารางทั่วไปที่มีดัชนีคือตารางเอนกประสงค์
    • Multidimensional Clustering Table (MDC): ตารางประเภทนี้คลัสเตอร์ทางกายภาพบนคีย์มากกว่าหนึ่งคีย์และใช้เพื่อรักษาสภาพแวดล้อมฐานข้อมูลขนาดใหญ่ ตารางประเภทนี้ไม่สนับสนุนใน DB2 pureScale
    • Insert time clustering Table (ITC): คล้ายกับตาราง MDC แถวจะถูกจัดกลุ่มตามเวลาที่แทรกลงในตาราง พวกเขาสามารถแบ่งตาราง พวกเขาก็เช่นกันไม่สนับสนุนสภาพแวดล้อม pureScale
    • Range-Clustered tables Table (RCT): ตารางประเภทนี้ให้การเข้าถึงข้อมูลที่รวดเร็วและตรงไปตรงมา สิ่งเหล่านี้ถูกนำไปใช้เป็นคลัสเตอร์ตามลำดับ แต่ละระเบียนในตารางมี ID เร็กคอร์ด ตารางประเภทนี้ใช้ในกรณีที่ข้อมูลถูกรวมกลุ่มอย่างแน่นหนาโดยมีคอลัมน์อย่างน้อยหนึ่งคอลัมน์ในตาราง ตารางประเภทนี้ยังไม่รองรับใน DB2 pureScale
    • Partitioned Tables: ตารางประเภทนี้ใช้ในสคีมาการจัดระเบียบข้อมูลซึ่งข้อมูลตารางจะถูกแบ่งออกเป็นออบเจ็กต์หน่วยเก็บข้อมูลหลายรายการ พาร์ติชันข้อมูลสามารถเพิ่มแนบและแยกออกจากตารางที่แบ่งพาร์ติชันได้ คุณสามารถจัดเก็บข้อมูลหลายพาร์ติชันจากตารางในหนึ่งตาราง
    • Temporal Tables: ประวัติของตารางในฐานข้อมูลจะถูกเก็บไว้ในตารางชั่วคราวเช่นรายละเอียดของการแก้ไขที่ทำก่อนหน้านี้
  • Temporary Tables: สำหรับการทำงานชั่วคราวของการดำเนินการฐานข้อมูลที่แตกต่างกันคุณจำเป็นต้องใช้ตารางชั่วคราว ตารางชั่วคราว (DGTTs) ไม่ปรากฏในแค็ตตาล็อกระบบไม่สามารถใช้คอลัมน์ XML ในตารางชั่วคราวที่สร้างขึ้น
  • Materialized Query Tables: MQT สามารถใช้เพื่อปรับปรุงประสิทธิภาพของแบบสอบถาม ตารางประเภทนี้กำหนดโดยคิวรีซึ่งใช้ในการกำหนดข้อมูลในตาราง

การสร้างตาราง

ไวยากรณ์ต่อไปนี้สร้างตาราง:

Syntax: [เพื่อสร้างตารางใหม่]

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

Example: เราสร้างตารางเพื่อจัดเก็บรายละเอียด "พนักงาน" ในสคีมาของ "มืออาชีพ" ตารางนี้มีฟิลด์ "id, name, jobrole, joindate, เงินเดือน" และข้อมูลตารางนี้จะถูกเก็บไว้ในพื้นที่ตาราง "ts1"

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.

รายละเอียดตารางรายการ

ไวยากรณ์ต่อไปนี้ใช้เพื่อแสดงรายละเอียดตาราง:

Syntax: [หากต้องการดูรายการตารางที่สร้างด้วยสกีมา]

db2 select tabname, tabschema, tbspace from syscat.tables

Example: [หากต้องการดูรายการตารางในฐานข้อมูลปัจจุบัน]

db2 select tabname, tabschema, tbspace from syscat.tables

Output:

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


 1 record(s) selected.

รายการคอลัมน์ในตาราง

ไวยากรณ์ต่อไปนี้แสดงรายการคอลัมน์ในตาราง:

Syntax: [หากต้องการดูคอลัมน์และประเภทข้อมูลของตาราง]

db2 describe table <table_name>

Example: [หากต้องการดูคอลัมน์และประเภทข้อมูลของตาราง "พนักงาน"]

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.

คอลัมน์ที่ซ่อนอยู่

คุณสามารถซ่อนทั้งคอลัมน์ของตาราง หากคุณเรียกใช้แบบสอบถาม“ เลือก * จาก” คอลัมน์ที่ซ่อนไว้จะไม่ส่งคืนในตารางผลลัพธ์ เมื่อคุณแทรกข้อมูลลงในตารางคำสั่ง“ INSERT” ที่ไม่มีรายการคอลัมน์จะไม่คาดหวังค่าสำหรับคอลัมน์ที่ซ่อนอยู่โดยปริยาย คอลัมน์ประเภทนี้มีการอ้างอิงอย่างมากในตารางแบบสอบถามที่เป็นรูปธรรม คอลัมน์ประเภทนี้ไม่รองรับการสร้างตารางชั่วคราว

การสร้างตารางด้วยคอลัมน์ที่ซ่อนอยู่

ไวยากรณ์ต่อไปนี้สร้างตารางที่มีคอลัมน์ที่ซ่อนอยู่:

Syntax: [ในการสร้างตารางที่มีคอลัมน์ที่ซ่อนอยู่]

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

Example: [ในการสร้างตาราง "ลูกค้า" ด้วยคอลัมน์ที่ซ่อนอยู่ "phone"]

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

การแทรกค่าข้อมูลในตาราง

ไวยากรณ์ต่อไปนี้แทรกค่าในตาราง:

Syntax: [ในการแทรกค่าลงในตาราง]

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

Example: [ในการแทรกค่าในตาราง "ลูกค้า"]

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.

การดึงค่าจากตาราง

ไวยากรณ์ต่อไปนี้ดึงค่าจากตาราง:

Syntax: [ในการดึงค่าจากตาราง]

db2 select * from &lttab_name>

Example: [เพื่อดึงค่าจากตาราง "ลูกค้า"]

db2 select * from professional.customer

Output:

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

การดึงค่าจากตารางรวมถึงคอลัมน์ที่ซ่อนอยู่

ไวยากรณ์ต่อไปนี้ดึงค่าจากคอลัมน์ที่เลือก:

Syntax: [เพื่อดึงค่าคอลัมน์ที่ซ่อนอยู่ที่เลือกจากตาราง]

db2 select col1,col2,col3 from <tab_name>

Example: [ในการดึงค่าคอลัมน์ที่เลือกเป็นผลลัพธ์จากตาราง]

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.

หากคุณต้องการดูข้อมูลในคอลัมน์ที่ซ่อนอยู่คุณต้องดำเนินการคำสั่ง“ DESCRIBE”

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.

การเปลี่ยนประเภทของคอลัมน์ในตาราง

คุณสามารถแก้ไขโครงสร้างตารางของเราได้โดยใช้คำสั่ง“ alter” ดังนี้:

Syntax:

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

Example: [ในการแก้ไขประเภทข้อมูลสำหรับคอลัมน์“ id” จาก“ int” เป็น“ bigint” สำหรับตารางพนักงาน]

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

Output::

DB20000I The SQL command completed successfully.

กำลังเปลี่ยนชื่อคอลัมน์

คุณสามารถเปลี่ยนชื่อคอลัมน์ตามที่แสดงด้านล่าง:

Syntax: [ในการแก้ไขชื่อคอลัมน์จากชื่อเก่าเป็นชื่อใหม่ของตาราง]

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

Example: [ในการแก้ไขชื่อคอลัมน์จาก“ fullname” เป็น“ custname” ในตาราง“ customers”]

db2 alter table professional.customer rename column fullname to custname

วางตาราง

ในการลบตารางใด ๆ คุณต้องใช้คำสั่ง“ DROP” ดังนี้:

Syntax:

db2 drop table <tab_name>

Example: [เพื่อวางฐานข้อมูลแบบฟอร์มตารางลูกค้า]

db2 drop table professional.customers

ในการลบลำดับชั้นทั้งหมดของตาราง (รวมถึงทริกเกอร์และความสัมพันธ์) คุณต้องใช้คำสั่ง“ DROP TABLE HIERARCHY”

Syntax:

db2 drop table hierarchy <tab_name>

Example: [ในการวางลำดับชั้นทั้งหมดของตาราง "ลูกค้า"]

db2 drop table hierarchy professional.customers

บทนี้อธิบายการสร้างนามแฝงและการดึงข้อมูลโดยใช้นามแฝงของวัตถุฐานข้อมูล

บทนำ

นามแฝงเป็นชื่อทางเลือกสำหรับอ็อบเจ็กต์ฐานข้อมูล สามารถใช้อ้างอิงวัตถุฐานข้อมูล คุณสามารถพูดได้ว่าเป็นชื่อเล่นสำหรับวัตถุฐานข้อมูล นามแฝงถูกกำหนดให้ออบเจ็กต์ตั้งชื่อให้สั้นจึงช่วยลดขนาดคิวรีและเพิ่มความสามารถในการอ่านแบบสอบถาม

การสร้างนามแฝงวัตถุฐานข้อมูล

คุณสามารถสร้างนามแฝงวัตถุฐานข้อมูลดังที่แสดงด้านล่าง:

Syntax:

db2 create alias <alias_name> for <table_name>

Example: การสร้างชื่อแทนสำหรับตาราง“ professional.customer” ตาราง

db2 create alias pro_cust for professional.customer

หากคุณผ่าน“ SELECT * FROM PRO_CUST” หรือ“ SELECT * FROM PROFESSIONAL.CUSTOMER” เซิร์ฟเวอร์ฐานข้อมูลจะแสดงผลลัพธ์เดียวกัน

Syntax: [ในการดึงค่าจากตารางโดยตรงด้วยชื่อสคีมา]

db2 select * from <schema_name>.<table_name>

Example: [เพื่อดึงค่าจากลูกค้าโต๊ะ]

db2 select * from professional.customer

Output:

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

การดึงค่าโดยใช้นามแฝงของตาราง

คุณสามารถดึงค่าจากฐานข้อมูลโดยใช้นามแฝงดังที่แสดงด้านล่าง:

Syntax: [ในการดึงค่าจากตารางโดยเรียกชื่อนามแฝงของตาราง]

db2 select * from <alias_name>

Example: [ในการดึงค่าจากลูกค้าโต๊ะโดยใช้นามแฝง]

db2 select * from pro_cust

Output:

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

บทนี้จะอธิบายถึงข้อ จำกัด ต่างๆในฐานข้อมูล

บทนำ

ในการบังคับใช้ความสมบูรณ์ของฐานข้อมูลจะมีการกำหนดชุดของกฎที่เรียกว่าข้อ จำกัด ข้อ จำกัด อนุญาตหรือห้ามไม่ให้มีค่าในคอลัมน์

ในกิจกรรมฐานข้อมูลแบบเรียลไทม์ควรเพิ่มข้อมูลด้วยข้อ จำกัด บางประการ ตัวอย่างเช่นในฐานข้อมูลการขายรหัสการขายหรือรหัสธุรกรรมควรไม่ซ้ำกัน ประเภทข้อ จำกัด คือ:

  • ไม่เป็นโมฆะ
  • Unique
  • คีย์หลัก
  • คีย์ต่างประเทศ
  • Check
  • Informational

ข้อ จำกัด เกี่ยวข้องกับตารางเท่านั้น ใช้กับตารางเฉพาะเท่านั้น มีการกำหนดและนำไปใช้กับตารางในขณะสร้างตาราง

คำอธิบายของแต่ละข้อ จำกัด :

ไม่เป็นโมฆะ

เป็นกฎที่ห้ามไม่ให้มีค่า null จากคอลัมน์อย่างน้อยหนึ่งคอลัมน์ภายในตาราง

Syntax:

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

Example: [ในการสร้างตารางการขายโดยมีสี่คอลัมน์ (id, itemname, qty, price) ในการเพิ่มข้อ จำกัด "not null" ให้กับคอลัมน์ทั้งหมดเพื่อหลีกเลี่ยงการสร้างเซลล์ว่างในตาราง]

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

การแทรกค่า NOT NULL ลงในตาราง

คุณสามารถแทรกค่าในตารางดังที่แสดงด้านล่าง:

Example: [ข้อผิดพลาดในการค้นหา]

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

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: 

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

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

Example: [คำค้นหาที่ถูกต้อง]

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.

ข้อ จำกัด เฉพาะ

เมื่อใช้ข้อ จำกัด เหล่านี้คุณสามารถกำหนดค่าของคอลัมน์ได้โดยไม่ซ้ำกัน ด้วยเหตุนี้ข้อ จำกัด ที่ไม่ซ้ำกันจะถูกประกาศโดยมีข้อ จำกัด "ไม่ใช่ null" ในขณะสร้างตาราง

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)

การแทรกค่าลงในตาราง

Example: ในการแทรกสี่แถวที่แตกต่างกันโดยมีรหัสเฉพาะเป็น 1, 2, 3 และ 4

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: ในการแทรกแถวใหม่ด้วยค่า“ id” 3

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

Output: เมื่อคุณพยายามแทรกแถวใหม่ด้วยค่า id ที่มีอยู่มันจะแสดงผลลัพธ์นี้:

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

คีย์หลัก

เช่นเดียวกับข้อ จำกัด เฉพาะคุณสามารถใช้ข้อ จำกัด "คีย์หลัก" และ "คีย์ต่างประเทศ" เพื่อประกาศความสัมพันธ์ระหว่างตารางต่างๆ

Syntax:

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

Example: สร้างตาราง 'พนักงานขาย' โดยมี "sid" เป็นคีย์หลัก

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))

คีย์ต่างประเทศ

คีย์ต่างประเทศคือชุดของคอลัมน์ในตารางซึ่งจำเป็นสำหรับการจับคู่คีย์หลักอย่างน้อยหนึ่งรายการของแถวในตารางอื่น เป็นข้อ จำกัด ในการอ้างอิงหรือข้อ จำกัด ด้านความสมบูรณ์ของการอ้างอิง เป็นกฎเชิงตรรกะเกี่ยวกับค่าในหลายคอลัมน์ในตารางอย่างน้อยหนึ่งตาราง เปิดใช้งานความสัมพันธ์ที่ต้องการระหว่างตาราง

ก่อนหน้านี้คุณได้สร้างตารางชื่อ“ shopper.salesboys” สำหรับตารางนี้คีย์หลักคือ "sid" ตอนนี้คุณกำลังสร้างตารางใหม่ที่มีรายละเอียดส่วนตัวของพนักงานขายโดยมีสคีมาที่แตกต่างกันชื่อ "พนักงาน" และตารางชื่อ "พนักงานขาย" ในกรณีนี้ "sid" คือคีย์ต่างประเทศ

Syntax:

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

Example: [ในการสร้างตารางชื่อ 'salesboys' ด้วยคอลัมน์ Foreign Key 'sid']

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”]

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: [การแทรกค่าลงในตารางคีย์ต่างประเทศ“ staff.salesboys” [โดยไม่มีข้อผิดพลาด]]

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

หากคุณป้อนหมายเลขที่ไม่รู้จักซึ่งไม่ได้จัดเก็บไว้ในตาราง "shopper.salesboys" จะแสดงข้อผิดพลาด SQL

Example: [การดำเนินการผิดพลาด]

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

กำลังตรวจสอบข้อ จำกัด

คุณต้องใช้ข้อ จำกัด นี้เพื่อเพิ่มข้อ จำกัด ตามเงื่อนไขสำหรับคอลัมน์เฉพาะในตาราง

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