วันพุธที่ 27 ธันวาคม พ.ศ. 2560

Intro DB2/400

Intro DB2/400

 1 hr  (note ย่อสำหรับการสอน)
Scope               ไม่พูดถึง  วิธีใช้ Tool ต่างๆ  StrSDA
                        พอจะคุ้นๆ กับศัพท์ใน  OS/400  (Library, Line command, ...)
                         ติดตั้ง iSeries navigator

RDBMS

Relational Database Management System  ถูกสร้างโดย IBM Lab
(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)
                    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 ไม่ค่อยพบปัญหานี้แล้ว)

      # ลด โอกาศปิดเครื่องแบบ 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
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              

สร้างโดยระบุ  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')            

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)

ตย.  คำสั่งที่เกี่ยวข้อง (หลังสร้างเสร็จ)
> 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 วิธีการป้อน

เทคนิค  การตั้งชื่อ, การ Fix ค่าเพื่อ "ลดการจำ"
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 จะ
    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
! SQL=ง่าย   +  ผิด"ง่าย"       Lib ตนเองทำอะไรก็ได้, Lib จริง ให้บอก Leader (ที่ใช้ SQL ได้) ก่อน

Reference
DB2  for AS/400 Database for Programming  ,version 4 R3M0

ไม่มีความคิดเห็น:

แสดงความคิดเห็น