قاعدة بيانات أوراكل / الأساسي: أسس العلاقات والمعاملات / الدرس 1
المثيلات وقواعد البيانات والخدمات وسياق الجلسة
حدّد موضع اتصال التطبيق ضمن بنية أوراكل قبل تفسير الأسماء أو الصلاحيات أو الإخفاقات.
في هذه الصفحة
أهداف الدرس
- ميّز المثيل وقاعدة البيانات والحاوية والخدمة.
- افهم هوية الجلسة دون افتراض صلاحيات إدارية.
ابدأ بدورتي الحياة المختلفتين
تتكوّن قاعدة بيانات أوراكل من بُنى دائمة مثل ملفات البيانات وملفات التحكم وسجلات الإعادة المتصلة. أما المثيل فهو الذاكرة والعمليات الخلفية التي تدير الوصول إليها. إيقاف المثيل لا يعني حذف قاعدة البيانات. وبالمثل، توفر المستمع لا يثبت جاهزية الخدمة المطلوبة. في النموذج أحادي المثيل يفتح مثيل واحد قاعدة بيانات؛ وتغيّر Oracle RAC هذه العلاقة بالسماح لمثيلات متعددة بالوصول إلى قاعدة واحدة. إنها اختيار معماري وترخيصي وليست وصفاً لكل تثبيت لأوراكل.
الخدمة تختار وجهة الاتصال
في النشر متعدد المستأجرين تحتوي قاعدة الحاويات على جذر وقواعد قابلة للتركيب. تنتمي مخططات التطبيقات عادة إلى القاعدة القابلة للتركيب المقصودة، لا إلى الجذر. اسم الخدمة وجهة منطقية للاتصال يمكنها تعريف عبء التطبيق وتوجيهه إلى الحاوية المناسبة. يعرّف SID مثيلاً، ولذلك لا يُستبدل باسم الخدمة عشوائياً في سلسلة الاتصال. سجّل الخدمة والإصدار التجاري وإصدار الخادم بوصفها حقائق منفصلة؛ فإصدار العميل وحده لا يثبت قدرات الخادم.
افحص بصمة الجلسة
تكشف SYS_CONTEXT سمات مفيدة من USERENV دون اختراع حساب إداري. يسجّل SESSION_USER مستخدم قاعدة البيانات الذي تمت مصادقته، بينما يضبط CURRENT_SCHEMA حل أسماء الكائنات غير المؤهلة وقد يختلف عنه؛ وتغييره لا يمنح الملكية أو الصلاحيات. يحدد CON_NAME الحاوية الحالية في جلسة متعددة المستأجرين. يعرض المثال قيماً تعتمد على البيئة بدلاً من نتيجة نشر مختلقة. التقط هذه الحقول من جلسة تشخيص مصرح بها مسبقاً عند مقارنة تقريرين، واحجب معرّفات البنية التحتية قبل نشر الأدلة.
SELECT SYS_CONTEXT('USERENV','SESSION_USER') AS session_user,
SYS_CONTEXT('USERENV','CURRENT_SCHEMA') AS current_schema,
SYS_CONTEXT('USERENV','CON_NAME') AS container_name
FROM dual;
المتوقع صف سياق واحد؛ تعتمد الأسماء على الجلسة المصرح بها. يوفر DUAL صفاً لتقييم التعبيرات.
حدّد الملكية صراحة
في أوراكل المخطط مجموعة الكائنات المملوكة لمستخدم قاعدة بيانات، وليس نطاق أسماء منفصلاً يُنشأ كما في PostgreSQL. يصرّح المرجع LAB_OWNER.SHIPMENTS بالمالك. والمرادف اسم آخر للكائن ولا يمنح بحد ذاته حق الوصول. تُخزّن المعرّفات غير المقتبسة وتُحل عادة بالأحرف الكبيرة؛ أما الأسماء المقتبسة المختلطة فتحتاج مطابقة حالة الأحرف والاقتباس. يفسّر ذلك فشل استعلام منسوخ رغم ظهور الكائن في واجهة رسومية إذا تغيّر المالك أو الحاوية أو الاقتباس. فضّل أسماء بسيطة متسقة في المختبر.
استخدم نطاق قاموس البيانات المناسب
يصف USER_TABLES الجداول المملوكة للمستخدم الحالي، بينما يصف ALL_TABLES الجداول المتاحة له، وتحتاج عروض DBA عادة إلى تفويض إضافي. تعبّر هذه البوادئ عن النطاق ولا تمثل ثلاث نسخ مادية مستقلة من بيانات الأعمال. استعلام الجرد للقراءة فقط، وقد يعيد صفراً بصورة صحيحة إذا لم يوجد تطابق. لا تعالج ذلك بمنح وصول شامل إلى القاموس أو بإنشاء كائن إنتاج مكرر؛ قارن الهوية والمالك والحاوية أولاً. تستخدم الدورة بيانات شحن اصطناعية وتبقى مقاطع أوراكل غير قابلة للتشغيل لعدم الاتصال بمحرك.
SELECT owner, table_name
FROM all_tables
WHERE table_name = 'SHIPMENTS'
ORDER BY owner;
يعيد جداول SHIPMENTS المتاحة فقط؛ قد يعني الغياب اختلاف الحاوية أو الملكية أو نقص الصلاحية.
الأخطاء الشائعة وإصلاحها
ORA-00942
- لماذا يحدث؟
- الكائن غائب عن سياق الجلسة أو غير متاح لهذا المستخدم.
- كيف تصلحه؟
- قارن المالك والحاوية ومتطلبات الوصول المباشر قبل تعديل SQL.
- كيف تتجنب تكراره؟
- وثّق الخدمة والمالك معاً عند مراجعة إعدادات التطبيق.
ORA-12514
- لماذا يحدث؟
- المستمع لا يعرف الخدمة المطلوبة حالياً.
- كيف تصلحه؟
- اطلب من مالك الوجهة التحقق من الخدمة المسجّلة المقصودة.
- كيف تتجنب تكراره؟
- احتفظ باسم الخدمة الدقيق بدلاً من تخمين بدائل SID.
يبدو أن المرادف يتجاوز الصلاحيات
- لماذا يحدث؟
- اختلط الاسم البديل بمنح التفويض.
- كيف تصلحه؟
- راجع الكائن الأصلي ومسار الصلاحيات المصرح به.
- كيف تتجنب تكراره؟
- عامل التسمية والتحكم في الوصول كقرارين مستقلين.
اختبر فهمك
1. يتصل العميل بنجاح لكنه لا يرى الجداول المتوقعة. ما حقائق السياق التي تقارن أولاً؟
اعرض الحل المشروح
قارن الخدمة والحاوية ومستخدم الجلسة والمخطط الحالي والمالك المقصود، ثم افحص صفوف القاموس المتاحة. نجاح المصادقة يثبت إنشاء جلسة فقط، ولا يثبت الوصول إلى وجهة التطبيق الصحيحة أو امتلاك جميع الصلاحيات. لا تُعد إنشاء الجداول قبل التحقق من الوجهة.
2. هل يؤدي تغيير CURRENT_SCHEMA إلى تشغيل التقرير بصلاحيات مالك المخطط؟
اعرض الحل المشروح
لا؛ إنه يغيّر حل الأسماء الافتراضي. يظل المستخدم المنفذ بحاجة إلى الصلاحيات المناسبة. يزيل تأهيل الاسم بالمالك الالتباس، وتُراجع المنح بصورة مستقلة. حافظ على هذا التمييز عندما يهيّئ مجمّع الاتصالات الجلسات أو عند مقارنة حساب المطور بحساب التطبيق.
أهم ما تعلمته
- نجاح الاتصال وحل الأسماء والتفويض تجيب عن أسئلة مختلفة.
- بصمة الجلسة الدقيقة دليل أفضل من لقطة واجهة العميل.