Intro DB2/400
1 hr (note ย่อสำหรับการสอน)
Scope ไม่พูดถึง วิธีใช้ Tool ต่างๆ StrSDA
พอจะคุ้นๆ กับศัพท์ใน OS/400 (Library, Line command, ...)
ติดตั้ง iSeries navigator
ติดตั้ง iSeries navigator
RDBMS
Relational Database Management System ถูกสร้างโดย IBM Lab
(Wiki: IBM Lab on 1980 (now 2017 = อายุเพียง 37 year เอง))
DB2/400 ก็ใช้หลักการนี้ครบครับ
ใครไม่รู้ ต้องไปเรียน/อ่าน มาก่อน ใครเรียนแล้วลืม กลับไปทบทวนน๊ะครับ
(Wiki: IBM Lab on 1980 (now 2017 = อายุเพียง 37 year เอง))
DB2/400 ก็ใช้หลักการนี้ครบครับ
ใครไม่รู้ ต้องไปเรียน/อ่าน มาก่อน ใครเรียนแล้วลืม กลับไปทบทวนน๊ะครับ
Popular : MS Access, Oracle, DB/2 ,MS SQL Server , mySQL , SAP
,…
(new Tech new Standard)
ObjDB ex. XML (Wiki: on 1990
(now 2017 = 27 year)) Internet Web Page –share
data without save structure
(new Tech 201x Concept is
standard – but new S/W)
Big Data How to save & access unstructure (Google
Search by wording in col., XML:tag)
NoSQL ex. Mongol,Neo4J,… Db
that best fit for Data in Internet
Keyword
- Physical Table real Data
- Primary Key (Unique) ชุดข้อมูล (Field ใน Physical Table) ที่ระบุแล้วจะได้ข้อมูลแค่ 1 row เท่านั้น
- RunNo ทุก row จะมีเลขที่ ไม่ซ้ำกัน ปรกติ Db Engine จะ auto RunNo ให้
DB2 เรียก Relative Record Number (RRN)
DB2 เรียก Relative Record Number (RRN)
Delete (ลบ) Record จะ mark ทำให้ View ,ใช้ไม่ได้
DB2: @ cmd RgzPFM (= MS SQL Server : Shrink Database, Win:Defragment,...)
ปลด Delete
Record ทิ้งจริงๆ (เรียง RunNo ใหม่)
ขณะทำ
"ห้ามใช้ File นี้" , "ห้าม
ยกเลิก คำสั่งนี้"
! Access Path,Index
เสียหาย - จะพบเมื่อ ปิด เครื่องแบบ Emergency(ฉุกเฉิน), ไม่ Cancel
การใช้งาน
ต้อง rebuild โดย (อ่าน) L-file,cmd EdtRbdAp – ขณะทำ จะใช้ File นี้ “ไม่ได้”
@
rebuild Accesspath YX080p - ใช้เวลา
8 ชม. (8:00-15:00)
OS/400 version ใหม่ (2017 ไม่ค่อยพบปัญหานี้แล้ว)
OS/400 version ใหม่ (2017 ไม่ค่อยพบปัญหานี้แล้ว)
# ลด โอกาศปิดเครื่องแบบ Emergency (ไม่ปิดเครื่องเลย), User ต้องหยุดใช้ก่อน
“ปิดเครื่อง”
- View File ที่ใช้จำกัดการแสดง (fix) Col.,Field (เช่น ให้เห็น 7 จาก 10 col.)
- Index ใช้ช่วยในการ "เรียง" ข้อมูลที่ใช้บ่อย (เช่น ค้นหา EmpNo = B6940 ใน Emp File จาก 500,000 rows เป็นต้น)
@ Nid : SQL file by ZTN0N0p in MS SQL (>5 min) – Crt Index return data in millisec
- Lock Record use File,View ขณะใช้ระดับ row,record (เปิดแบบ แก้ไขได้)
Design File,Table
(RDBMS) method by Normalization (1NF,2NF,3NF,4,5)
- ตาราง รหัสการศึกษา, ความหมาย -> Design Physical File ได้ 1 ตาราง
- แบบ form (Invoice) -> Design Physical File ex. 1 File,Head/Detail,Master
- แบบ form (Invoice) -> Design Physical File ex. 1 File,Head/Detail,Master
Biz
|
Fields (PrimaryKey)
|
Education
|
EducationCode ,Name
|
Invoice Head
Invoice Detail |
InvoiceNo, Inv_Date
InvoiceNo, Seq, Item,Qty |
DB2/400
(after design)
สร้างโครงสร้าง member(Table
Name) in Lib/SourceFile (QDDSSRC) by (Tool)
> cmd strSEU, strPDM, WrkMbrPDM
> cmd strSEU, strPDM, WrkMbrPDM
สร้างโดยระบุ File Type
-PF = Physical-File
-LF = Logical File
โครงสร้าง
IBM-Structure: Lib/File/(Member)/(Record Format)/Col.,Field
เปรียบเทียบกับ DB ทั่วไป เช่น MS SQL Server, mySQL, Oracle : DatabaseFile/Table/Col.
ส่วนที่เกินมา คือ (Member)/(Record Format)
- Member จะสร้างให้อัตโนมัติ ตอนสร้าง cmd CrtPF - ปรกติไม่สร้างเพิ่ม
- Record Format ต้องประกาศ ในโครงสร้าง - ปรกติ จะสร้าง "ตัวเดียว"
[IBM-Structure: Lib/File/(Member)/(Record Format)/Col.,Field]
ตย. การสร้าง Physical File : มี Record Format , Field อะไร
A..........T.Name++++++RLen++TDpB......Functions+++++++++++++++++
A R SQL0A0PR TEXT('PRACTICE SQL STMT')
A L1EDUC 1 COLHDG('EDUCATION')
A L1EDNM 30 COLHDG('NAME')
เทคนิค การตั้งชื่อ, การ Fix ค่าเพื่อ "ลดการจำ"
ตย. การสร้าง Physical File : มี Record Format , Field อะไร
A..........T.Name++++++RLen++TDpB......Functions+++++++++++++++++
A R SQL0A0PR TEXT('PRACTICE SQL STMT')
A L1EDUC 1 COLHDG('EDUCATION')
A L1EDNM 30 COLHDG('NAME')
Tip : ลดความซับซ้อน สร้างแค่ 1 Record Format เท่านั้น
Data Type ที่ใช้บ่อย ชนิดอักษร A (หริอ ช่องว่าง), ชนิดตัวเลข (S กับ P)
ตย. การสร้าง Logical File - index ผูกกับ Physical File อะไร
A..........T.Name++++++.Len++TDpB......Functions++++++++++++
A R SQL0A0R1 PFILE(SQL0A0P)
A L1EDUC 1 COLHDG('EDUCATION')
A L1EDNM 30 COLHDG('NAME')
A K L1EDUC
Tip : ลดความซับซ้อน ในการจำ Field ใน L-File เท่ากัน P-File
(อาจเพิ่ม Field ที่ Concat)
(อาจเพิ่ม Field ที่ Concat)
ตย. คำสั่งที่เกี่ยวข้อง (หลังสร้างเสร็จ)
> cmd dspObjd qsys/*all objtyp(*Lib) ขอดูชื่อ (ชนิด Lib) ที่มีในระบบ (OS)
> cmd dspObjd qgpl/*all objtyp(*file) ขอดูชื่อ (ชนิด File) ใน Lib
> cmd dspFd ,dspFFd ขอดู คำอธิบาย ของ (ชื่อ File) , Field ของ (ชื่อ File)
> cmd dspDbR ขอดู relation P-file มี L-File อะไรบ้าง
ลองค้น/อ่าน คู่มือ Reference วิธีการป้อน> cmd dspDbR ขอดู relation P-file มี L-File อะไรบ้าง
Physical File
|
Logical File
|
# FileName "P"
|
# FileName + "Lx"
|
# (mbr) = FileName ,1 member Only
|
|
# (Record Format) FileName + "R"
|
# (mbr) FileName + "Rx"
|
# Field Name id[2] + name[4]
|
|
# Base on only 1 PF
|
|
# no input PK,no use Is Unique
# Validate in Program |
|
ระบบเก่า >20 ปีจะมีใช้ :
# Select/Omit คล้ายกับ Where ใน SQL
O OAFINE = ‘*’ (Where not OAFINE=’*‘)
S ALL
# (new) Field ที่สร้างจากหลาย Field
เช่น Date = year || month || day |
|
Compile to Object
CrtPF myLibD/myFileP
File(qgpl/QDDSSRC) mbr(myFileP) Maxmbrs(1) Size(*Nomax) |
CrtLF myLibD/myFileL1
File(qgpl/QDDSSRC) mbr(myFileL1)
|
Parm แค่รู้ไว้
CCSID = อังกฤษ 37
Backup-Program : บางระบบใช้เทคนิค 1 Member :1 per period ต้องสร้างแบบ Maxmbrs(*noMax)
|
|
Stored Procesure ใช้เฉพาะ
“Win-App” (Handy,VB) call RPG
นโยบาย(เก่า) : ห้าม Win-App บันทึกลง DB2 โดยตรง (ขาดประสบการณ์)
Trigger ไม่ใช้งาน
Journal
# ไม่ให้สร้าง เพราะ
เพิ่มขนาดใน Disk มาก
(DB Admin สร้างไว้เฉพาะงาน) |
Basic File operation
·
SQL -> Return
Data Set (1 หรือ หลาย Row) ในรูปของ Memory
·
SQL เขียน Stored
Procedure : code Loop อ่านข้อมูลได้
(มักจะเขียนไว้ใน DB Server)
·
RPG with DB2
:
o RPG : (ใช้บ่อย) ติดต่อ อ่านตาม Index (use Key)
o
RPG : ติดต่อ อ่านตามลำดับ (Run
No) (no use Key , Arrival Sequence)
o
RPG ชี้ตำแหน่ง row
ใน
File + Code Loop อ่านข้อมูล
Special File
DDM-File pgm
ใน Server (A35xx ) ต้องการอ่าน File-A ที่อยู่ใน (A31xx)
วิธียอดนิยม : สร้าง Pfile, Lfile ที่ A35xx (ทุกคืน) ส่ง Data จาก A31xx ไปที่ A35xx
ปัญหา : Master ที่ป้อนใหม่ (ที่ A31xx) ต้องรอวันถัดไป หรือ mannual ส่ง (Secur จะ
วิธียอดนิยม : สร้าง Pfile, Lfile ที่ A35xx (ทุกคืน) ส่ง Data จาก A31xx ไปที่ A35xx
ปัญหา : Master ที่ป้อนใหม่ (ที่ A31xx) ต้องรอวันถัดไป หรือ mannual ส่ง (Secur จะ
ex. File ที่มี ชนิดเป็น DDMF ที่ A31xx: dspobjd PBIE1x/NEM041* objtyp(*file)
Ø Cmd wrkDdmF ชื่อจากข้างต้น
WorkShop
- cmd CrtPF ,CrtLF (วางไว้ที่) Lib/name=? จาก source qgpl/qddssrc mbr(...)
Chk Result cmd dspObjD ,dspFd ,dspFFd, dspDbR - Insert data 3
row by iSeries navigator:SQL
Optional(Classic) by > cmd UpdDta ,strDFU - View ข้อมูล iSeries Navigator:SQL(rrn)
Optional(Classic) by > cmd DspPFM, WrkDbf (คำสั่งสร้างเอง) - Update date 1 row, Delete data 1 row
Reference
DB2 for AS/400
Database for Programming ,version 4 R3M0