اوراکل 26ai – امکان استفاده از bind variable با قابلیت Materialized View Query Rewrite

تا قبل از نسخه 26ai، کوئری‌هایی که شامل bind variable بودند، نمی‌توانستند از قابلیت query rewrite با استفاده از materialized view (MV) بهره ببرند و اوراکل مجبور بود داده‌ها را مستقیماً از جدول‌های پایه بخواند، که باعث از دست رفتن مزایای کاراییِ داده‌های پیش‌تجمیع‌شده (pre-aggregated data) می‌شد.

از Oracle AI Database 26ai به بعد، این محدودیت حذف شده است و این بهبود به optimizer اجازه می‌دهد مقدار واقعی bind variable را در زمان اجرا بررسی کرده و تصمیم بگیرد که آیا کوئری می‌تواند با استفاده از MV بازنویسی شود یا خیر.

مقایسه رفتار در اوراکل 19c و 26ai

ایجاد Materialized View

SQL> CREATE MATERIALIZED VIEW vahid.mv_emp_dep
ENABLE QUERY REWRITE AS
SELECT department_id,
       COUNT(*) AS emp_count,
       SUM(salary) AS total_salary
FROM vahid.employees where department_id<100
GROUP BY department_id;

Materialized view created

این MV داده‌های تجمیع‌شدهٔ کارمندان را برای دپارتمان‌هایی با شناسهٔ کمتر از ۱۰۰ ذخیره کرده و برای query rewrite خودکار مناسب است.

(بیشتر…)

قابلیت RESETTABLE در اوراکل 26ai

در دیتابیس اوراکل، state بسته‌های PL/SQL در سطح session حفظ می شود. یعنی زمانی که یک package در session ای اجرا می‌شود، متغیرهای global آن، مقادیر خود را در میان چندین فراخوانی حفظ می‌کنند. در نسخه‌های قبلی Oracle(قبل از 26ai)، زمانی که یک package دوباره compile می‌شد، تمام sessionهایی که state آن package را نگه داشته اند با خطاهای ORA-04068 مواجه می‌شدند.

در اوراکل 26ai، عبارت RESETTABLE راهی جدید برای مدیریت state بسته‌های PL/SQL معرفی می‌کند. با استفاده از این عبارت، زمانی که package تشخیص دهد وضعیت آن دیگر معتبر نیست، به‌صورت خودکار reset می‌شود، و مانع از کرش کردن session می شود. برای درک بهتر عملکرد آن، سناریوی عملی زیر را بررسی می‌کنیم. 

(بیشتر…)

اوراکل 26ai – چگونه با عبارت QUALIFY نتایج توابع تحلیلی را بدون subquery فیلتر کنیم؟

فرض کنید میخواهیم از جدول employees، از هر دپارتمان، فقط اطلاعات کارمندی را نمایش دهیم که بالاترین حقوق را دارد. برای گرفتن این خروجی، تا قبل از نسخه 26ai معمولا از subquery استفاده می کردیم:

SELECT *
FROM (
  SELECT employee_id,
         first_name,
         department_id,
         salary,
         RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS Rank_Per_DEP
  FROM employees
)
WHERE Rank_Per_DEP = 1;

(بیشتر…)

نصب Oracle AI Database Free 26ai روی Oracle Linux 9

اوراکل امروز (23.26)Oracle AI Database Free 26ai را معرفی کرده است. در این راهنما، مراحل نصب این نسخه روی Oracle Linux 9.5 را توضیح می‌دهیم.

محدودیت‌های منابع سیستم

نسخه رایگان Oracle AI Database 26ai اجازه استفاده از حداکثر منابع زیر را می‌دهد:

  • 2 هسته CPU

  • 2 گیگابایت RAM

  • 12 گیگابایت فضای ذخیره‌سازی داده‌ها

این نسخه برای توسعه‌دهندگان، یادگیری و محیط‌های تست کوچک مناسب است.

(بیشتر…)

مقایسه رفتار پستگرس و اوراکل برای بازگردانی تغییرات

همان‌طور که می‌دانید، وقتی در یک تراکنش رکوردی حذف یا بروزرسانی می‌شود، گاهی لازم است تغییر انجام‌شده به حالت قبلی بازگردد (rollback). برای مثال، کاربری رکوردی را بروزرسانی می‌کند و بلافاصله متوجه می‌شود که باید این تغییر را لغو کند. در اکثر دیتابیس‌های رابطه‌ای مدرن که ACID را به‌طور کامل پشتیبانی می‌کنند، این امکان وجود دارد، اما مکانیزم اجرایی آن در هر دیتابیس می‌تواند متفاوت باشد.

در این مقاله قصد داریم راهکارهای دیتابیسهای اوراکل و پستگرس را برای مدیریت تراکنش‌ها با نگرش بازگردانی تغییرات با یکدیگر مقایسه کنیم. با توجه به طولانی شدن مطلب، تمرکز این متن صرفاً بر جنبه بازگردانی تغییرات است و سایر جنبه‌ها مانند مکانیزم‌های Locking در مقاله‌ای جداگانه بررسی خواهند شد.

(بیشتر…)

کاهش حجم Unified Audit Trail در اوراکل 23ai

ویژگی Unified Auditing در پایگاه داده اوراکل مکانیزمی قدرتمند برای ثبت فعالیت‌های دیتابیس به‌صورت متمرکز و منسجم است. با این حال، این ویژگی می‌تواند چالش‌هایی برای DBA ایجاد کند، به‌ویژه زمانی که مدیریت حجم Audit Trail مدنظر باشد.

یکی از نگرانی‌های رایج، فراهم کردن فضای ذخیره‌سازی کافی برای جدول AUD$UNIFIED است. در برخی محیط‌ها، DBA ممکن است بخواهد میزان داده‌های ذخیره‌شده در Audit Trail را با حذف ستون‌های مشخص کاهش دهد.

اوراکل 23ai (نسخه 23.7) یک پارامتر جدید برای این منظور معرفی کرده است: UNIFIED_AUDIT_TRAIL_EXCLUDE_COLUMNS

پارامتر unified_audit_trail_exclude_columns این امکان را می دهد تا از ثبت Audit در ستون‌های مشخصی از Unified Audit Trail جلوگیری کنیم، که باعث کاهش مصرف فضا و همچنین کاهش سربار ثبت جزئیات غیرضروری می‌شود.

SQL> SHOW PARAMETER unified_audit_trail_exclude_columns;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
unified_audit_trail_exclude_columns  string      NONE

(بیشتر…)

اوراکل (23.9)23ai – عبارت GROUP BY ALL

اوراکل 23ai چندین قابلیت جدید به عبارت GROUP BY اضافه کرده است که باعث ساده‌تر شدن نگارش کوئری و بهبود خوانایی آن می‌شود، به‌ویژه زمانی که داده‌ها بر اساس چند ستون گروه‌بندی می‌شوند.

از این نسخه، عبارت GROUP BY از بهبودهای زیر پشتیبانی می‌کند:

این قابلیت‌ها باعث کاهش تکرار و کوتاه‌تر شدن دستورات SQL شده و نگهداری آن‌ها را آسان‌تر می‌کند.

در بروزرسانی نسخه 23.9، اوراکل قابلیت دیگری معرفی کرده است: عبارت GROUP BY ALL.

(بیشتر…)

اوراکل 23ai(23.9) – دستور INSERT INTO SET و INSERT INTO BY NAME

اگر با پایگاه‌داده اوراکل آشنایی داشته باشید، حتماً دستور ساده‌ی INSERT INTO را می‌شناسید. اجازه دهید به‌طور خلاصه شکل سنتی استفاده از این دستور را با چند مثال ساده یادآوری کنم:

SQL> CREATE TABLE vahid.tbl (
      id NUMBER,
      name VARCHAR2(100),
      last_name VARCHAR2(100)
    );
Table created.

SQL> INSERT INTO vahid.tbl VALUES (1, 'VAHID', 'YOUSEFZADEH');
1 row created.

SQL> INSERT INTO vahid.tbl (name, last_name) VALUES ('VAHID', 'YOUSEFZADEH');
1 row created.

وقتی با جدول‌هایی کار می‌کنیم که ستون‌های زیادی دارند، این syntax(نحو) می‌تواند خواندن کد را سخت کند، چرا که همیشه واضح نیست هر مقدار به کدام ستون تعلق دارد.

اوراکل 23ai (23.9) سینتکس(نحو) جدیدی را معرفی کرده که دستور INSERT INTO را خواناتر می‌کند. این کار با استفاده از عبارت SET(شبیه آنچه در دستور UPDATE استفاده می‌شود)، قابل اجراست. مثال زیر را ببینید.

(بیشتر…)

چهار قابلیت 23ai که اکنون در 19c (19.28) پشتیبانی می‌شوند.

با آخرین بروزرسانی نسخه Oracle Database 19c یعنی Release Update (RU) 19.28، چندین قابلیت کلیدی که پیش‌تر فقط در Oracle 23ai در دسترس بودند، اکنون پشتیبانی می‌شوند. در ادامه، مروری کوتاه بر این چهار قابلیت خواهیم داشت.

بسته DBMS_DEVELOPER
بسته DBMS_DEVELOPER امکان دسترسی سریع و بهینه به متادیتای اشیاء دیتابیس را برای توسعه‌دهندگان فراهم می‌کند. این بسته متادیتا را به صورت JSON بازمی‌گرداند که ادغام آن با برنامه‌ها و سرویس‌ها را تسهیل می‌کند.

IF [NOT] EXISTS Syntax
دستورات ایجاد، تغییر و حذف اشیاء اکنون از سینتکس IF [NOT] EXISTS پشتیبانی می‌کنند تا مدیریت خطاها بهبود یابد. به عبارتی دیگر، این قابلیت از بروز خطاهای ناشی از وجود یا عدم وجود اشیاء جلوگیری می‌کند.

Schema Annotations
قابلیت Schema Annotations به ما امکان می‌دهد توضیحاتی را به صورت دسته‌بندی شده و بر اساس name و value برای اشیاء دیتابیس ثبت و بازیابی کنیم. این قابلیت به توسعه‌دهندگان کمک می‌کند اطلاعات سفارشی مربوط به منطق کسب‌وکار یا رابط کاربری را در دیتابیس ذخیره کنند.

SQL Diagnostic Report
تابع REPORT_SQL در بسته DBMS_SQLDIAG گزارش‌های جامع و تشخیصی در قالب فایل فشرده HTML برای دستورات SQL تولید می‌کند. این گزارش شامل جزئیات مهمی مانند تاریخچه برنامه اجرا، پارامترهای غیر پیش‌فرض و آمار بهینه‌ساز است که به تشخیص مشکلات عملکرد کمک می‌کند.

 

اوراکل 23ai(23.7) – قابلیت Materialized Expression Columns

همانطور که می دانید قابلیت Virtual Column در نسخه 11.1 معرفی شده است که به کاربران این امکان را می‌دهد تا مقادیر ستون را بدون ذخیره فیزیکی آن‌ها در دیتابیس محاسبه کنند. این ستون‌ها بر اساس یک عبارت (Expression) تعریف می‌شوند که این عبارت می تواند مقادیر ثابت، توابع SQL، ستون‌هایی از همان جدول و … باشد و مقادیرشان در زمان اجرا (On-the-Fly) محاسبه می‌شود. بنابرین این ستونها فضایی را اشغال نمی کنند.

SQL> create table TBL_EMP_VIRTUAL_COL (id number, PRE_TAX_SAL number, NET_SAL NUMBER GENERATED ALWAYS AS (PRE_TAX_SAL* 0.10));
Table created
SQL> insert into TBL_EMP_VIRTUAL_COL(id, PRE_TAX_SAL) values(1,6523);
1 row inserted

SQL> select * from TBL_EMP_VIRTUAL_COL;
        ID PRE_TAX_SAL    NET_SAL
---------- ----------- ----------
         1        6523      652.3

همانطور که مشاهده می‌کنید، مقدار ستون NET_SAL به صورت لحظه‌ای و در زمان اجرا محاسبه شده است. 

در نسخه 23ai (نسخه 23.7)، اوراکل ویژگی جدیدی به نام Materialized Expression Columns معرفی کرده که مشابه ستون‌های مجازی است، با این تفاوت که مقادیر ستونها در هنگام اجرای دستورات DMLای مانند insert، update و delete محاسبه و ذخیره می‌شود.

(بیشتر…)