محتويات الدورة

قاعدة بيانات أوراكل / المتقدم: تطور آمن وقابل للتعافي / الدرس 15

JSON والكائنات الكبيرة والعقود العلاقية

خزّن حمولات شحن مرنة دون التخلي عن التحقق والاستخراج ذي النوع وحدود الإصدار.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح تخزين JSON النصي في أساس 19c.
  • استخدم استخراج SQL/JSON الصريح ووثّق توسيع المصفوفات.

للمستند عقد حتى عندما تتغير الحقول

قد تحتوي حمولة الناقل بيانات مسح متغيرة بينما تبقى هوية الشحنة وملكيتها ورسمها حقائق علاقية. يصعّب وضع كل الحقول في مستند معتم القيود والربط والتدقيق. اختر الحقول التي تحتاج أنواعاً ومفاتيح ثابتة واحتفظ بإصدار للحمولة المرنة. يدعم أساس 19c JSON نصياً في VARCHAR2 أو CLOB أو BLOB مع وظائف SQL/JSON الموثقة. لا تنسخ أمثلة النوع JSON الأصلي من إصدارات لاحقة دون توافق. لقدرة OSON في 19c حد خاص بـAutonomous؛ فلا تعمم سلوك السحابة على كل خادم 19c.

تحقق من الصياغة والوجود منفصلين

يثبت IS JSON عقد الصياغة ويُلزم NOT NULL تقديم الحمولة، لكنه لا يثبت وجود حقل تتبع إلزامي أو إيجابية الوزن. أضف تحقق المجال عند الإدخال واستخرج الحقائق العلاقية المقيدة التي يعتمد عليها التطبيق. يستوعب CLOB مستندات محرفية كبيرة لكنه يحتاج سياسة حجم عند حدود التطبيق. قد يبرر حد صغير معروف استخدام VARCHAR2. لا تختر أكبر نوع آلياً؛ فالنقل وذاكرة العميل وأنماط الجلب مهمة مع السعة. كل التعريفات هنا توضيحية وغير قابلة للتشغيل.

sql مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
CREATE TABLE carrier_payloads (
 payload_id NUMBER PRIMARY KEY,
 shipment_id NUMBER NOT NULL,
 payload CLOB NOT NULL CHECK (payload IS JSON)
);

يتحقق من سلامة مستند غير NULL وفق قواعد IS JSON المختارة. تحتاج حقول العمل الإلزامية تحققاً إضافياً.

صرّح بنوع SQL المستخرج

تستخرج JSON_VALUE قيمة مفردة إلى SQL. حدّد RETURNING NUMBER للوجهة الرقمية واختر سياسة خطأ بدلاً من اختفاء المحتوى الخاطئ في NULL غير مفسّرة. يستخرج المثال ثلاثة كيلوغرامات ونص تتبع. قد تختلف معاني JSON null والمسار الغائب ومستند SQL NULL رغم إنتاج السياسة SQL NULL لأكثر من حالة. إذا احتاجت المطابقة التمييز فاحتفظ بوجود المستند واستخدم اختبار وجود صريحاً مع القيمة. لا تستنتج جودة المصدر من نجاح التحويل وحده.

sql مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
SELECT JSON_VALUE('{"tracking":"LAB-101","weight_kg":3}',
                  '$.weight_kg' RETURNING NUMBER ERROR ON ERROR) AS weight_kg,
       JSON_VALUE('{"tracking":"LAB-101","weight_kg":3}',
                  '$.tracking' RETURNING VARCHAR2(24) ERROR ON ERROR) AS tracking
FROM dual;
الناتج المتوقع
WEIGHT_KG | TRACKING
3         | LAB-101

النتيجة الرقمية 3 والمحرفية LAB-101. المستندان اصطناعيان وصحيحان.

يغيّر توسيع المصفوفة تفصيل الصفوف

تعرض JSON_TABLE محتوى المستند كصفوف علاقية. ينتج توسيع scans صفاً لكل عنصر مختار، فتتكرر رسوم الشحنة كما في ربط الأبناء العادي. حدّد المسارات والأنواع والترقيم وسلوك المصفوفة الخالية قبل التجميع. قد تضاعف المصفوفات المتداخلة الصفوف مجدداً. سلامة الصياغة لا تثبت حجم المصفوفة أو اتساق مخطط المراجعات. اختبر مصفوفة خالية وعنصراً واحداً وعدة عناصر وعنصراً من نوع خاطئ؛ تكشف هذه الحالات أخطاء العمل والاستخراج قبل ضبط الأداء.

المؤشر إلى LOB ليس ميزانية استجابة مفتوحة

قد تعرض الموصلات مؤشرات LOB أو واجهات بث. قد ينقل جلب كل المستندات الكبيرة فوراً الاختناق من SQL إلى ذاكرة التطبيق أو الشبكة. اطلب الحقول المفردة المطلوبة للقوائم واجلب الحمولة الكاملة عبر مسار تفصيلي مضبوط. حدّد الحجم المقبول والاحتفاظ والحجب وترميز المحارف. لخيارات تخزين LOB وضغطه تفاصيل إصدار وترخيص تُراجع منفصلة عن CLOB الأساسي. لم تجر الدورة تجربة تخزين أو إنتاجية ولا تدّعي أن تنسيقاً واحداً الأسرع دائماً.

الأخطاء الشائعة وإصلاحها

تعيد JSON_VALUE قيمة NULL غير متوقعة

لماذا يحدث؟
تخفي سياسة الاستخراج الافتراضية محتوى غائباً أو غير مفرد أو غير متوافق.
كيف تصلحه؟
افحص المستند الاصطناعي وحدّد النوع وسياسة الخطأ.
كيف تتجنب تكراره؟
اختبر الغياب وJSON null والنوع الخاطئ منفصلة.

ORA-02290 عند حمولة JSON

لماذا يحدث؟
ينتهك المستند قيد IS JSON.
كيف تصلحه؟
تحقق من الصياغة دون تعطيل قيد السلامة.
كيف تتجنب تكراره؟
اعزل الحمولات المعيبة مع هوية المصدر وحد الحجم.

تزداد المجاميع بعد إضافة JSON_TABLE

لماذا يحدث؟
ضاعف عرض المصفوفة حقائق الشحنة.
كيف تصلحه؟
جمّع الأبناء الموسعين إلى التفصيل المطلوب قبل ربط المجاميع.
كيف تتجنب تكراره؟
وثّق وحدة الصف عند كل مرحلة عرض JSON.

اختبر فهمك

1. هل يثبت payload IS JSON أن weight_kg رقم موجب؟

اعرض الحل المشروح

لا؛ يتحقق من صياغة المستند وفق القواعد المختارة. استخرج الوزن بعقد رقمي صريح وطبّق شرط الإيجابية مستقلاً. احتفظ بسبب رفض الغياب أو الخطأ بدلاً من معاملتها كلها شحنات بوزن صفر.

2. لمستند خمسة مسوح ورسم واحد. كيف يتجنب تقرير الرسوم مضاعفته؟

اعرض الحل المشروح

أبقِ الرسوم على مستوى الشحنة ولخّص قياسات المسوح إلى صف لكل شحنة قبل الربط. لا تجمع رسم الأب عبر خمسة صفوف JSON_TABLE. أدرج مصفوفة خالية للتحقق أيضاً من حفظ الشحنات دون مسوح.

أهم ما تعلمته

  • تحتاج الحمولات المرنة تحقق الصياغة والنوع والعمل.
  • يتبع توسيع مصفوفات JSON قواعد التفصيل نفسها للربط العلاقي.

المراجع الرسمية