
اگر کاربر اوراکل هستید، میدانید که Oracle 19c یکی از پایدارترین نسخههای دیتابیس این شرکت است.
اما Oracle 23c با عنوان The Developer Release آمده تا نهفقط توسعهدهندگان، بلکه معماران سیستم را هم شگفتزده کند.
در این مقاله آموزش Oracle در بخش آموزش معماری اوراکل، دقیقا میخواهیم پایگاه داده Oracle Database ۱۹c و ۲۳c از نگاه معماری به تفاوتهای معماری این دو نسخه بپردازیم و با مثالهای واقعی نشان دهیم که تغییرات ۲۳c صرفا یک Upgrade ساده نیست.
تا همین چند سال پیش، اگر توسعهدهندهای میخواست دادهها را هم به شکل جدولی (SQL) نگه دارد و هم به صورت سندی (JSON)، معمولاً مجبور بود یا دو نسخه از داده داشته باشد یا از یک سری هک و دستکاری استفاده کند که آخرش هم باز یا کارایی پایین میآمد یا سازگاری دادهها به خطر میافتاد.
پیشنهاد می شود نوشته زیر را مطالعه کنید:
در این مقاله شما می خوانید
۱. معماری پایه هر دو نسخه
هر دو نسخه از مدل Multi‑Tenant (CDB/PDB) استفاده میکنند.
| ویژگی | Oracle 19c | Oracle 23c |
|---|---|---|
| معماری اصلی | Multi‑Tenant اجباری | Multi‑Tenant با بهینهسازی در انتقال و Clone |
| حافظه | Automatic Memory Management | Adaptive Memory Framework (هوشمند) |
| پردازش | Parallel Execution سنتی | Parallel Execution با هوش مصنوعی |
| ذخیرهسازی | رابطهای + JSON/XML در LOB | Native JSON، Blockchain، Graph |
۲. تغییرات کلیدی Oracle 23c نسبت به ۱۹c
قابلیتهای توسعهدهنده (Development)
| قابلیت | ۱۹c | ۲۳c |
|---|---|---|
| SQL Domains | ❌ | ✅ |
| In‑Database JavaScript | ❌ | ✅ |
| Property Graphs | ❌ | ✅ |
| JSON Relational Duality Views | ❌ | ✅ |
۲.۱ ذخیرهسازی و نوع داده JSON
- ۱۹c: JSON در LOB ذخیره و ایندکسگذاری کُندتر
- ۲۳c: Native JSON Storage با سرعت بسیار بالا و ایندکس و Query بهینه
مثال:
در Oracle 19c
CREATE TABLE orders (
id NUMBER PRIMARY KEY,
order_data CLOB CHECK (order_data IS JSON)
);
SELECT JSON_VALUE(order_data, '$.customer.name')
FROM orders
WHERE JSON_EXISTS(order_data, '$.customer.address');
- ایراد: سرعت محدود و نیاز به کانفیگ ایندکس JSON.
در Oracle 23c
CREATE TABLE orders (
id NUMBER PRIMARY KEY,
order_data JSON
);
INSERT INTO orders VALUES (
۱,
'{"customer": {"name": "Ali", "country": "IRAN"}}'
);
INSERT INTO orders VALUES (
۲,
'{"customer": {"name": "John", "country": "USA"}}'
);
COMMIT;
SELECT jt.name
FROM orders o
CROSS JOIN JSON_TABLE(
o.order_data,
'$.customer'
COLUMNS (
name VARCHAR2(50) PATH '$.name',
country VARCHAR2(50) PATH '$.country'
)
) jt
WHERE jt.country = 'IRAN';
- مزایا: سرعت بالاتر، Query همزمان JSON و SQL، بدون نیاز به تکرار داده.
JSON_TABLE چی هستش؟
-
JSON_TABLEدر اوراکل مثل یک جادوگر کوچک برای JSON هست 😄—کارش اینه که یک ستون یا عبارت JSON رو به شکل ردیفها و ستونهای رابطهای (Relational Table) برات باز کنه تا با SQL معمولی بتونی روش کار کنی.
JSON_TABLE(
json_expression,
'json_path_expression'
COLUMNS (
column_name data_type PATH 'json_path_to_value',
...
)
)
۲.۲ SQL Domains چی هستش؟
-
Domain در SQL یعنی:
یک “نوع داده سفارشی” که بر اساس یک نوع داده پایه ساخته میشه ولی میتونی روش قوانین و محدودیتهای (Constraint) ثابت بذاری.
به زبان ساده، Domain یعنی سفارشیسازی datatype همراه با قیود از پیش تعیینشده، تا در تمام جدولها و ستونها با همون نام Domain استفاده بشه.
ساختار کلی استاندارد SQL
CREATE DOMAIN domain_name AS base_data_type
[DEFAULT default_value]
[CHECK (condition)];
مثال کاربردی : فرض کن میخوای نوع دادهای برای شماره ملی ایران بسازی که همیشه ۱۰ رقم باشه:
CREATE DOMAIN national_id AS CHAR(10)
CHECK (VALUE ~ '^[0-9]{10}$');
-- create table
CREATE TABLE persons (
id national_id PRIMARY KEY,
name VARCHAR(100)
);
مثال SQL Domain در ۲۳c
CREATE DOMAIN email_address AS VARCHAR2(320)
CHECK (REGEXP_LIKE(VALUE, '.+@.+'));
۲.۳ In‑Database JavaScript چی هستش؟
«In‑Database JavaScript» یعنی اجرای کد JavaScript مستقیماً داخل موتور پایگاه داده، بدون خروج داده به لایه اپلیکیشن.
به جای این که داده را از دیتابیس بکشیم بیرون، به اپلیکیشن بفرستیم، در جاوااسکریپت پردازش کنیم و دوباره برگردانیم، کل عملیات در همون محیط دیتابیس انجام میشه.
CREATE FUNCTION tax_amount(price NUMBER)
RETURN NUMBER
LANGUAGE JAVASCRIPT
AS
$$
function tax_amount(price) {
return price * 0.09;
}
$$;
-- use function in query
SELECT product_name, tax_amount(price)
FROM products;
۲.۴ امنیت
- ۱۹c: Data Redaction و TDE
- ۲۳c:
- SQL Firewall → جلوگیری از اجرای Query غیرمجاز
- Blockchain Tables → تغییرناپذیری دادهها با قابلیت Audit
مثال Blockchain Table
CREATE BLOCKCHAIN TABLE secure_audit (
action VARCHAR2(50),
action_time TIMESTAMP
) NO DROP UNTIL 30 DAYS IDLE;
تغییر دادن رکوردها غیرممکن و تاریخچه شفاف.
۳. بهبود عملکرد (Performance)
- Adaptive Parallel Execution → کاهش Skew و بهینهسازی خودکار Plan
- Automatic Indexing نسل دوم → ایجاد و حذف هوشمند ایندکسها
۴. نکات مهاجرت از ۱۹c به ۲۳c
- از Database Pre‑Upgrade Checks استفاده کنید.
- اگر JSON در پروژه دارید → به Native JSON Storage مهاجرت کنید.
- قابلیت SQL Firewall را در محیط تست بررسی و سپس فعال کنید.
- از فرصت Graph Analytics برای Use‑Caseهایی مثل شبکههای اجتماعی یا مسیریابی استفاده کنید.
سوالات متداول درباره ساختار معماری اوراکل
Oracle 19c نسخهای پایدار و Long Term Support است که معماری Multi‑Tenant و قابلیتهای پیشرفتهای برای دادههای رابطهای دارد.
در مقابل، Oracle 23c علاوه بر حفظ پایداری، امکانات مدرنتری مثل Native JSON Storage، Blockchain Tables، Graph Analytics و SQL Domains را بدون افت کارایی ارائه میدهد.
در ۱۹c، JSON بهصورت LOB ذخیره و ایندکسگذاری میشود که سرعت کمتری دارد.
در ۲۳c، JSON بهطور بومی (Native) ذخیره و پرسوجو میشود و میتوانید از JSON Relational Duality Views استفاده کنید، که سرعت و سادگی کار را چند برابر میکند.
نه لزوماً. اوراکل ابزارهایی مانند Database Upgrade Assistant (DBUA) و AutoUpgrade ارائه میدهد که فرآیند ارتقا را ساده میکنند.
البته اگر از قابلیتهای جدید مثل Blockchain یا Graph استفاده میکنید، باید قبل از مهاجرت Schema و کدها را تست کنید.
SQL Firewall یک قابلیت امنیتی جدید است که Queryهای دیتابیس را با قوانین مشخصشده مقایسه میکند و مانع اجرای درخواستهای غیرمجاز یا مشکوک میشود.
این ویژگی برای جلوگیری از حملاتی مثل SQL Injection بسیار مؤثر است.
جمعبندی
۱۹c همچنان یکی از پایدارترین نسخههای اوراکل است و برای پروژههای Enterprise که ثبات اولویت دارد، عالی عمل میکند.
اما ۲۳c یک گام بلند به سمت دیتابیسهای مدرن است — مخصوصاً اگر با JSON، گراف، بلاکچین یا سرویسهای Cloud سروکار دارید.
به زبان ساده:
- اگر خانهای مطمئن و کلاسیک میخواهید → ۱۹c
- اگر یک شهر هوشمند با تکنولوژی روز میخواهید → ۲۳c
📥 اگر سوالی داری در مورد معماری اوراکل داری، در بخش کامنتها بپرس.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید