ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

چرا PDB در Oracle 23ai Mount نمی‌شود؟ بررسی خطاهای معماری Container

اگر با Oracle 23ai کار کرده باشی، احتمالاً با این سناریو مواجه شدی:

دیتابیس اصلی (CDB) به‌درستی باز می‌شود، اما یکی از PDBها در مرحله‌ی Mount گیر می‌کند!

در ظاهر شاید ساده به نظر برسد، اما پشت این اتفاق مفاهیم عمیقی از معماری چندمستأجر اوراکل (Multitenant Architecture) پنهان است.

در این مقاله آموزش اوراکل از بخش آموزش Oracle 23ai می‌خواهیم قدم‌به‌قدم بررسی کنیم که چرا PDB در Oracle 23ai Mount نمی‌شود و چطور به‌صورت حرفه‌ای آن را دیباگ کنیم.

وقتی یه Query در Oracle 19c کند می‌شه، اولین چیزی که ممکنه به ذهنت برسه اینه که “حتماً دیتام زیاده” یا “سیستم ضعیفه!”.

پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.

در این مقاله شما می خوانید

معماری CDB و PDB در Oracle 23ai به زبان ساده

از نسخه ۱۲c اوراکل، ساختار دیتابیس‌ها بر اساس مدل Container Database (CDB) طراحی شد.

یک CDB شامل دو بخش اصلی است:

  • CDB$ROOT ➜ هسته‌ی سیستم و وابسته به instance
  • PDBs (Pluggable Databases) ➜ بانک‌های مجزایی که می‌توانند mount/open شوند

در Oracle 23ai ساختار نسبت به ۱۹c و ۲۱c مدرن‌تر شده و وابستگی‌های بین PDBها و Application Containerها بیشتر شده است.

وقتی دستور زیر را اجرا می‌کنی:

				
					ALTER PLUGGABLE DATABASE mypdb MOUNT;

				
			

اوراکل باید فایل‌های داده PDB را به instance متصل کند.

اگر هر بخشی از مسیر یا متادیتا مشکل داشته باشد، عملیات mount متوقف می‌شود.

فرآیند Mount شدن PDB چگونه کار می‌کند؟

عملیات Mount در اوراکل ۲۳ai شامل چند مرحله است:

  1. خواندن اطلاعات متادیتا از CDB_PDBS
  2. بررسی مسیر فایل‌ها در DB_FILE_NAME_CONVERT
  3. اعتبارسنجی نسخه‌ی سازگاری بین CDB و PDB
  4. Mount کردن فایل‌ها و تخصیص به instance

در صورت بروز خطا، log خطا در مسیر $ADR_HOME/diag/rdbms/<db_name>/trace/alert.log ثبت می‌شود.

علت‌های اصلی Mount نشدن PDB در Oracle 23ai

۱. ناسازگاری نسخه (Version Mismatch)

یکی از شایع‌ترین خطاها در Oracle 23ai:

				
					ORA-65144: Pluggable database version mismatch with CDB

				
			

وقتی PDB از نسخه‌ی قدیمی‌تری (مثلاً ۱۹c یا ۲۱c) plug شده ولی آپگرید کامل انجام نشده باشه، این خطا ظاهر می‌شه.

راه‌حل:

				
					SELECT name, compatibility FROM v$pdbs;
ALTER PLUGGABLE DATABASE mypdb UPGRADE;
				
			

🔹 نکته: حتماً بعد از Patch یا Upgrade بزرگ، دستور VALIDATE را روی PDBها اجرا کن:

				
					ALTER PLUGGABLE DATABASE ALL VALIDATE;
				
			

۲. مسیر فایل‌های داده اشتباه (Invalid File Path)

وقتی اوراکل نتونه فایل‌های داده رو در مسیر تعریف‌شده پیدا کنه:

				
					ORA-01119: error in creating database file

				
			

در Oracle 23ai اکثر DBAها از OMF یا ASM استفاده می‌کنن. اگر پارامتر DB_FILE_NAME_CONVERT درست تعریف نشده باشه، mount شکست‌ می‌خوره.

روش بررسی:

				
					SHOW PARAMETER db_create_file_dest;

				
			

در صورت اشتباه بودن:

				
					ALTER SYSTEM SET db_create_file_dest='/u02/app/oracle/oradata/MYDB';

				
			

۳. خرابی Metadata یا XML Descriptor

هر PDB فایل خاصی به‌نام XML Descriptor داره که ساختارش رو برای CDB تعریف می‌کنه.

خرابی این فایل منجر به خطای زیر می‌شه:

				
					ORA-65114: Pluggable database not valid

				
			

راه بازسازی امن:

				
					ALTER PLUGGABLE DATABASE mypdb UNPLUG INTO '/tmp/mypdb.xml';
DROP PLUGGABLE DATABASE mypdb KEEP DATAFILES;
CREATE PLUGGABLE DATABASE mypdb USING '/tmp/mypdb.xml' NOCOPY;

				
			

این روش باعث حفظ فایل‌های داده و فقط بازسازی Metadata می‌شه.

گاهی خطا به مسیر فایل‌ها مربوط نیست، بلکه به سطح مجوز سیستم‌عامل یا ASM Diskgroup مربوط می‌شود:

				
					ORA-17503: ksfdopn:2 Failed to open file
ORA-65179: Cannot access datafile

				
			

بررسی با SQL:

				
					SELECT name FROM v$datafile WHERE con_id=(SELECT con_id FROM v$pdbs WHERE name='MYPDB');

				
			

در سطح OS:

				
					ls -l /u01/app/oracle/oradata/MYPDB/

				
			

مجوزهای فایل باید متعلق به کاربر oracle باشد.

۵. وابستگی به Application Container

در Oracle 23ai، PDB ممکن است وابسته به یک Application Root باشد (در سناریوهای Microservice یا SaaS).

اگر روت مربوطه باز نباشد، با خطای زیر روبرو می‌شوی:

				
					ORA-65025: Pluggable database requires application PDB 'APP$ROOT' to be open

				
			

راه‌حل:

				
					ALTER PLUGGABLE DATABASE APP$ROOT OPEN;
ALTER PLUGGABLE DATABASE MYPDB MOUNT;

				
			

مثال واقعی از خطای Mount نشدن در Oracle 23ai

فرض کن در CDB به‌نام ZAMIUXCDB می‌خواهی PDB به‌نام ZPDB1 را Mount کنی:

				
					ALTER PLUGGABLE DATABASE ZPDB1 MOUNT;

				
			

در Alert Log:

				
					ORA-65125: Pluggable database ZPDB1 could not be mounted
ORA-65144: version mismatch between CDB and PDB

				
			

گام‌به‌گام رفع:

				
					SELECT name, version FROM v$pdbs;
ALTER PLUGGABLE DATABASE ZPDB1 UPGRADE;
ALTER PLUGGABLE DATABASE ZPDB1 MOUNT;

				
			

خروجی نهایی:

				
					Pluggable database altered.

				
			

روش‌های حرفه‌ای دیباگ CDB/PDB در سطح DBA

✅ مشاهده وضعیت همه PDBها:

				
					SELECT con_id, name, open_mode, restricted FROM v$pdbs;

				
			

✅ بررسی خطاهای خاص Mount:

				
					SELECT * FROM pdb_plug_in_violations WHERE status!='RESOLVED';

				
			

✅ تحلیل Alert Log مستقیماً از SQL:

				
					SELECT originating_timestamp, message_text
FROM V$DIAG_ALERT_EXT
WHERE con_id=(SELECT con_id FROM v$pdbs WHERE name='ZPDB1')
ORDER BY originating_timestamp DESC;

				
			

نکات طلایی برای رفع خطاهای PDB در Oracle 23ai

  1. پارامتر COMPATIBLE همیشه باید هماهنگ با نسخه‌ی CDB باشد.
  2. در هنگام Clone یا Plug، از مسیرهای مطمئن استفاده کن.
  3. بعد از هر Upgrade یا Patch حتماً تمامی PDBها را Validate کن.
  4. از PDB$SEED فقط در حالت READ ONLY استفاده کن تا Corruption رخ ندهد.
  5. همیشه قبل از حذف PDB از دستور KEEP DATAFILES استفاده کن تا قابلیت بازیابی داشته باشی.

سوالات متداول درباره رفع خطاهای PDB در اوراکل

در Oracle 23ai ساختار داخلی Dictionary نسبت به ۱۹c تغییر کرده است.

اگر PDB از نسخه‌ی قدیمی‌تری منتقل یا Plug شده باشد و فرآیند Upgrade کامل انجام نشود، اوراکل اجازه‌ی Mount نمی‌دهد و خطای ORA‑۶۵۱۴۴: version mismatch with CDB را برمی‌گرداند.

✅ راه‌حل: اجرای دستور زیر در CDB Root برای بروزرسانی نسخه‌ی PDB

ALTER PLUGGABLE DATABASE mypdb UPGRADE;

خطای ORA‑۶۵۱۱۴: Pluggable database not valid معمولاً به معنی خرابی در فایل XML Descriptor یا متادیتای PDB است. این فایل اطلاعات ساختاری PDB (مثل مسیر فایل‌ها و tablespaceها) را نگه می‌دارد.

✅ راه‌حل: Unplug و دوباره ایجاد کردن PDB با همان فایل:

ALTER PLUGGABLE DATABASE mypdb UNPLUG INTO ‘/tmp/mypdb.xml’;
DROP PLUGGABLE DATABASE mypdb KEEP DATAFILES;
CREATE PLUGGABLE DATABASE mypdb USING ‘/tmp/mypdb.xml’ NOCOPY;

در این حالت Oracle نمی‌تواند فایل‌ها را Mount کند و معمولاً خطای زیر ظاهر می‌شود:

ORA‑۰۱۱۱۹: error in creating database file
ORA‑۲۷۰۴۰: file create error

✅ راه‌حل: قبل از Mount، مقدار پارامتر db_create_file_dest را بررسی و اصلاح کن:

SHOW PARAMETER db_create_file_dest;
ALTER SYSTEM SET db_create_file_dest=’/u02/app/oracle/oradata/MYDB’;

در نسخه‌ی ۲۳ai مفهوم Application Container بسیار پررنگ‌تر از قبل شده است.

اگر یک PDB به عنوان زیرمجموعه‌ی یک Application Root تعریف شده باشد، برای Mount شدن نیاز دارد آن Root باز باشد. در غیر این‌صورت، خطای زیر اتفاق می‌افتد:

ORA‑۶۵۰۲۵: Pluggable database requires application PDB ‘APP$ROOT’ to be open

✅ راه‌حل: ابتدا Application Root را باز کن، سپس PDB را Mount کن:

ALTER PLUGGABLE DATABASE APP$ROOT OPEN;
ALTER PLUGGABLE DATABASE mypdb MOUNT;

جمع‌بندی

اگر PDB در Oracle 23ai Mount نمی‌شود، وحشت نکن! 💪

در ۹۰٪ مواقع، یکی از موارد زیر عامل است:

  • ناسازگاری نسخه (ORA‑۶۵۱۴۴)
  • مسیر اشتباه فایل داده یا مجوز ASM
  • خرابی Metadata (ORA‑۶۵۱۱۴)
  • وابستگی بازنشده به Application Root

با مطالعه دقیق Alert Log و استفاده از Viewهای سیستمی مثل V$PDBS و PDB_PLUG_IN_VIOLATIONS، می‌توانی دقیق بفهمی مشکل از کجاست.

در دنیای Oracle 23ai، تسلط بر نحوه‌ی Mount شدن PDB یعنی تسلط بر قلب معماری Multitenant. ⚙️

📥 اگر سوالی داری در مورد CDB/PDB در اوراکل داری، در بخش کامنت‌ها بپرس.

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *