ป้ายกำกับ: Dependencies

Oracle: auto deploymentOracle: auto deployment

การออกแบบระบบ Deployment สำหรับ Oracle Database โดยใช้การเรียงลำดับตามชื่อไฟล์ ( Sequencing ) เป็นแนวทางที่เป็นมาตรฐาน ( Best Practice ) ในการทำ Database Migration เพื่อให้มั่นใจว่าโครงสร้างและข้อมูลถูกติดตั้งอย่างถูกต้องตามลำดับความสัมพันธ์ ( Dependencies )

นี่คือโครงสร้างการตั้งชื่อไฟล์และการแบ่งโฟลเดอร์ที่ครอบคลุมทุก Function ครับ


Prefix 2 ตัว

การใช้ Prefix หลักแรก ( 000 ถึง 999 ) ให้เป็นประโยชน์สูงสุดจะช่วยให้ระบบ Deployment “ยืดหยุ่น” และ “รองรับอนาคต” ได้ดีมาก โดยไม่จำเป็นต้องแก้ชื่อไฟล์เดิมเวลาจะมีฟังก์ชันใหม่แทรกเข้ามา โดยเรียงลำดับตามความสัมพันธ์ของ Object ( Dependency ) และเผื่อช่องว่าง ( Gaps ) ไว้สำหรับขยายตัวในอนาคต

การใช้ Prefix หลักที่สอง ( 0000 – 9999 ) เพื่อให้แทรกกลางได้ง่าย ๆ โดยไม่ต้องแก้ไฟล์เก่า


🏗️ การออกแบบ Prefix 3 หลัก ( Level 1 Hierarchy )


🏗️ Phase 1: Infrastructure & Instance ( 000-099 )

เน้นการตั้งค่าตัวเครื่องยนต์ ( Engine ) และสิทธิ์ระดับระบบ

000-019: System Parameters & Reboot Logic

  • 000: Static Parameters ( ต้อง Restart เช่น processes, sga_target, db_block_size )
  • 005: Database Mode ( เปิด ARCHIVELOG, FLASHBACK, FORCE LOGGING )
  • 010: Dynamic Parameters ( เปลี่ยนได้ทันที เช่น undo_retention, optimizer_mode )

020-049: Storage & Security Policy

  • 020: Permanent Tablespaces ( Data, Index, LOB )
  • 025: Temporary & Undo Tablespaces ( Temp Groups )
  • 030: Profiles ( Password Policy, Idle Time, CPU Limits )
  • 035: Resource Manager ( Consumer Groups, Resource Plans )
  • 040: Unified Audit Policies ( การเก็บ Log การใช้งาน )

050-099: Identity & Connectivity

  • 050: Roles ( Application Roles, Reporting Roles )
  • 060: User Schemas ( Create User + Default Tablespace/Profile )
  • 070: System Grants ( สิทธิ์การสร้าง Object, สิทธิ์การ Debug )
  • 080: Directory Objects ( Path สำหรับ BFILE หรือ Data Pump )
  • 090: Database Links ( Private/Public DB Links )

🏗️ Phase 2: Schema Objects ( DDL ) ( 100-299 )

เน้นการสร้าง “ถังเก็บข้อมูล” และความสัมพันธ์

100-149: Foundation Objects

  • 100: Sequences ( สำหรับทำ Auto-increment )
  • 110: User Defined Types ( Object Types, Nested Tables, Varays )
  • 120: Synonyms ( Public/Private Synonyms )

150-199: Tables & Storage Strategy

  • 150: Tables ( Standard Heap Tables )
  • 160: Partitioned Tables ( Range, List, Hash Partitioning )
  • 170: Global Temporary Tables ( GTT )
  • 180: External Tables ( เชื่อมโยงไฟล์ Flat File ภายนอก )

200-299: Constraints & Performance

  • 200: Primary Keys & Unique Constraints
  • 210: Standard Indexes ( B-Tree, Bitmap )
  • 220: Partitioned Indexes ( Local / Global Indexes )
  • 230: Specialized Indexes ( Function-based, Text/Domain Indexes )
  • 250: Foreign Keys ( สร้างสุดท้ายของ Phase เพื่อให้มั่นใจว่า Table แม่มีอยู่ครบแล้ว )

🏗️ Phase 3: Messaging & Programmable Logic ( 300-599 )

เน้นระบบสื่อสารและตรรกะทางธุรกิจ ( PL/SQL )

300-349: Advanced Queuing ( AQ )

  • 300: Queue Tables ( Infrastructure ของ Message )
  • 310: Queues ( Create & Start Queues )
  • 320: AQ Subscribers ( ผู้รับข้อมูลในระบบ Multi-consumer )

350-599: PL/SQL Logic

  • 350: Views ( Standard & Complex Views )
  • 360: Materialized Views ( รวม Log และ M-View Objects )
  • 400: Functions ( Standalone Functions )
  • 410: Procedures ( Standalone Procedures )
  • 420: Package Specifications ( Spec )
  • 430: Package Bodies ( Body )
  • 450: Triggers ( Database, Schema, และ Table Level Triggers )
  • 460: Java Sources / Libraries ( ถ้ามี )

🏗️ Phase 4: Data & Application Config ( 600-799 )

เน้นการเติมข้อมูลลงในระบบ

  • 600: Master Data ( ข้อมูลคงที่ เช่น ประเทศ, สาขา, สถานะ )
  • 610: System Configuration ( ตาราง Config สำหรับ Application )
  • 700: Data Migration ( ย้ายข้อมูลจากระบบเก่ามาใหม่ )
  • 750: Patching Scripts ( งานแก้ Data เฉพาะกิจ )

🏗️ Phase 5: Post-Deployment & Maintenance ( 800-999 )

เน้นการจูนเครื่องและตรวจสอบความถูกต้อง

  • 800: Contexts & Security Policies ( VPD / RLS Policies )
  • 850: Scheduler Jobs ( DBMS_SCHEDULER เพื่อรันงานอัตโนมัติ )
  • 900: Statistics Collection ( Gather Stats เพื่อให้ Optimizer ทำงานได้แม่นยำ )
  • 980: Cleanup Scripts ( ลบตารางพักข้อมูล/Staging )
  • 990: Validation Reports ( เช็ค Valid/Invalid, Check Count, Check Compile Error )

💡 จุดเด่นของการแบ่ง 3 หลักแบบนี้

  1. Dependency Isolation: แยกส่วนที่มีความเสี่ยงสูง ( เช่น Static Parameters 000 ) ออกจากสคริปต์ปกติชัดเจน
  2. PL/SQL Hierarchy: แยก Package Spec ( 420 ) ออกจาก Package Body ( 430 ) เพราะ Spec ต้องถูก Compile ก่อน Body เสมอ
  3. Future-Proof: มีช่องว่างระหว่างหมวดหมู่เยอะมาก ( เช่น 121-149 ) หากคุณต้องการเพิ่มฟีเจอร์อย่าง XML DB หรือ Spatial Data ก็สามารถแทรกเข้าไปได้โดยไม่ต้องร่นเลขอื่น
  4. Logical Flow: การสร้าง Types ( 110 ) ก่อน Tables ( 150 ) และ Queues ( 310 ) ช่วยให้คุณใช้ Object-Relational features ของ Oracle ได้อย่างเต็มที่ครับ

การใช้ Prefix หลักที่สอง ( Level 2 Hierarchy )

เพื่อให้การแทรกไฟล์ตาม Prefix หลักที่หนึ่งได้ง่าย ๆ ยิ่งมีจำนวนหลักที่มาก โอกาสที่ระบบต้องใช้วนซ้ำลำดับที่ทำไปแล้วจะยิ่งยาก


อ่านเพิ่มเติม