غیر فعال شدن Read-only Oracle Home در اوراکل 23ai

قابلیت Read-only Oracle Home از اوراکل 18c ارائه شده و بر اساس آن، logfileها و فایلهای پیکربندی موجود در مسیر ORACLE_HOME نظیر listener.ora، sqlnet.ora، spfile.ora و … به دایرکتوریهای زیرشاخه ORACLE_BASE منتقل می شوند. Read-only Oracle Home در نسخه 18c و 19c به صورت پیش فرض فعال نیست اما این قابلیت در نسخه 21c در حالت پیش فرض فعال است:

[oracle@RAC3 ~]$ /oracle21c/home/bin/orabasehome
/oracle21c/base/homes/OraDB21Home1

(بیشتر…)

اوراکل 23ai – قابلیت staging table

همانطور که می دانید، استفاده از جداول staging در محیط Data Warehouse بسیار رایج است و کاربرد آن به زمان بارگذاری دیتا به دیتابیس Warehouse برمی گردد. معمولا در محیط Warehouse، داده های خام که از دیتابیسهای source دریافت می شوند در ابتدا به یک ناحیه موقت و یا همان جداول staging منتقل شده و بعد از فرایند پاکسازی داده های ناقض و ناسازگار و همچنین تبدیل داده ها به فرمت استاندارد، این داده ها در جداول نهایی و عملیاتی ذخیره می شوند.

علاوه بر بارگذاری اولیه، برای بروزرسانی هم از جداول staging استفاده می شود و گاها این جداول قبل از استفاده، truncate می شوند.

در اوراکل 23ai قابلیتی هر چند جزیی در این زمینه ارائه شد و از این نسخه می توانیم جداول از نوع staging ایجاد کنیم این کار با اضافه کردن عبارت FOR STAGING همراه با دستور CREATE TABLE قابل انجام است.

SQL> create table STGtbl (id number,name varchar2(100),address varchar2(1000)) FOR STAGING;
Table created.

(بیشتر…)

اوراکل 23ai – افزایش سرعت اجرای impdp در زمان برگرداندن constraintها

در زمان اجرای دستور IMPDP، بخشهایی از عملیات امکان اجرای parallel را ندارند ایجاد constraint یکی از این قسمتهاست. اوراکل قبل از ایجاد constraint باید یکبار Validate را برای دیتای جاری جدول اجرا کند. با هر بار اجرای Validate، نیاز است یک بار Full table scan انجام شود که می تواند بسیار زمانبر باشد. دو constraint زیر را در نظر بگیرید:

alter table MYTB  add constraint CHECK1  check (col3 > 50);
alter table MYTB  add constraint CHECK2  check (col9 in (5,15));

جدول mytb را حذف می کنیم و از طریق dumpای که از این جدول داریم، آن را مجددا ایجاد می کنیم:

SQL> drop table mytb;
Table dropped.
W-1 Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
W-1 . . imported "USEF"."MYTB"                                  19 GB 337830912 rows in 83 seconds using external_table
W-1 Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
W-1      Completed 2 CONSTRAINT objects in 208 seconds

(بیشتر…)

قابلیتهای شناخته شده ای که اوراکل از نسخه 23ai دیگر از آنها پشتیبانی نمی کند.

اوراکل در کنار قابلیتهای متعددی که در هر نسخه ارائه می کند، بعضی از قابلیتهای قبلی را deprecate و یا desupport می کند. deprecate به این معنی که آن قابلیت دیگر بهبودی نخواهد داشت و از نسخه های بعدی desupport می شود و desupport  هم به این معنی که اگر باگی داشته باشد، رفع باگی توسط اوراکل انجام نمی شود و بعضا به طور کامل امکان استفاده از آن از بین می رود.

در ادامه این متن تعدادی از قابلیتهای شناخته شده ای که اوراکل از نسخه 23ai دیگر از آنها پشتیبانی نمی کند، را مرور می کنیم.

ابزار Database Upgrade Assistant (DBUA) و ارتقای دستی: از نسخه 23ai اوراکل توصیه می کند از AutoUpgrade برای ارتقاء نسخه دیتابیس استفاده کنیم و از این نسخه، ابزار dbua را در محیط لینوکس پشتیبانی نمی کند همچنین اسکریپتهای ارتقاء دستی نظیر catupgrd, dbupgrade, catctl در این نسخه پشتیبانی نمی شوند البته استفاده از ابزار DBUA در محیط ویندوز کماکان امکان پذیر است.

 

(بیشتر…)

پشتیبانی دیتابیس اوراکل 23ai از AI Vector Search

همانطور که می دانید با استفاده از بردارها می توان داده های بدون ساختار نظیر عکس، ویدئو، صوت و … را به عدد(آرایه ای از اعداد) تبدیل کرد تا علاوه بر حفظ کیفیت محتوا، اثر شایانی را بر روی جستجوی معنایی گذاشت طوری که جستجوی برداری بر بسیاری از محدودیتهای سنتی غلبه کرده و این امکان را به ما می دهد تا با توصیف هر آنچه را که در ذهن داریم عملیات جستجو را انجام دهیم.

به عبارتی دیگر، با کمک جستجوی برداری می توانیم عکس، ویدئو، صوت و … را بر اساس محتوا و بر مبنای Similarity Search جستجو کنیم بدون آنکه از محتوای آنها متنی در جایی ثبت شده باشد، درحالیکه جستجوهای سنتی، جستجو را بر اساس کلمات کلیدی، شباهت واژگانی، فراوانی وقوع کلمات انجام می دهند.

Vector Databaseهای متعددی وجود دارند که می توان از آنها به طور تخصصی به عنوان دیتابیس بردار استفاده کرد اما بسیاری از این دیتابیسها از SQL، عملیات CRUD(create, read, update, delete)، بکاپ و ریکاوری و … پشتیبانی نمی کنند. بنابرین ذخیره این نوع از دیتا در دیتابیسهای رابطه ای می تواند یک مزیت به شمار بیاید چرا که انواع مختلفی از داده را می توان صرفا در یک دیتابیس ذخیره کرد و با ابزارهای سنتی با قابلیتهای مدرن کار کرد.

دیتابیس اوراکل به عنوان یک دیتابیس رابطه ای قدرتمند تلاش کرده تا در این زمینه راهکاری را ارائه کند. این دیتابیس از نسخه 23ai قابلیت AI Vector Search را به طور کامل پشتیبانی می کند. تبدیل داده های بدون ساختار مثل عکس و فیلم به اعداد(Vector Embedding)، ذخیره آنها در دیتابیس، ایندکس گذاری، امکان اجرای جستجوی شباهت(Similarity Search) و … از این نسخه(23ai) در دیتابیس اوراکل قابل انجام است.

همچنین از 23.4، برای بردارها نوع داده جدیدی به نام vector تعریف شده است که در این مستند نکاتی را در مورد این نوع داده و نحوه ذخیره اطلاعات در آن بیان خواهیم کرد.

(بیشتر…)

نصب نسخه FREE اوراکل 23ai بر روی ویندوز

نسخه FREE اوراکل 23ai را می توان در ویندوز هم  اجرا کرد که در این متن نحوه انجام آن را مشاهده خواهید کرد. البته همانطور که می دانید نسخه FREE محدودیتهایی دارد به طور مثال حجم هر دیتابیس(PDB) در نسخه FREE نمی تواند بیشتر از 12GB شود اندازه RAM و CPU هم محدودیت دارند:

بعد از دانلود فایل zip، آن را در مسیری دلخواه unzip می کنیم:

 

برای نصب، فایل Oracle Database 23ai Free را با Run as administrator اجرا می کنیم:

 

(بیشتر…)

نکته ای در مورد نصب Oracle Database 23ai Exadata بر روی اوراکل لینوکس

همانطور که می دانید اوراکل هنوز نسخه on-premises مربوط به 23ai را ارائه نکرده است و با توجه به وعده ای که داده است، حداکثر تا پایان نیمه دوم 2024 این نسخه را در دسترس همگان قرار خواهد داد(البته اگر مجددا خلف وعده نکند!) اما اخیرا نسخه 23.5 که روی Exadata قابل استفاده است را منتشر کرده که به صورت پیش فرض روی محیط اوراکل لینوکس هم قابل نصب است:

[oracle@OEL9 23ai]$ ./runInstaller

[oracle@OEL9 ~]$ /oracle/23ai/bin/sqlplus "/as sysdba"
SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Fri Aug 9 18:51:46 2024
Version 23.5.0.24.07
Copyright (c) 1982, 2024, Oracle.  All rights reserved.
Connected to an idle instance.

اما مسئله که سبب شد تا این مستند را بنویسم آن است که در زمان ایجاد دیتابیس از طریق این نرم افزار، با خطای زیر مواجه می شویم:

ORA-27350: This version of the Oracle Database software cannot be run on this platform

(بیشتر…)

پارامتر JSON_BEHAVIOR در اوراکل 23ai

در اوراکل نسخه 21c، زمانی که توابع مربوط به JSON نظیر JSON_QUERY، JSON_TABLE و JSON_VALUE ورودی معتبری نداشته باشند، خطایی رخ نمی دهد و null به کاربر برمی گردد در مثال زیر، کلید Year سه بار تکرار شده و این ورودی معتبر نیست اما دستور select بدون خطا اجرا می شود و صرفا NULL به کاربر برمی گردد:

SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year') YEAR;
YEAR
----------------- 

در این شرایط اگر بخواهیم این رفتار را در سطح دستور تغییر دهیم، می توانیم عبارت ERROR ON ERROR را به ورودی اضافه کنیم:

SQL>  SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year' error  on error) ;
ORA-40470: JSON query '$.Year' evaluated to multiple values.
Help: https://docs.oracle.com/error-help/db/ora-40470/

*مقدار پیش فرض NULL ON ERROR است.

در نسخه 23ai برای کنترل این رفتار، پارامتر جدیدی به نام JSON_BEHAVIOR ارائه شده که در سطح session قابل تنظیم است. مقدار پیش فرض این پارامتر، ON_ERROR:NULL است:

SQL> ALTER SESSION SET JSON_BEHAVIOR = 'ON_ERROR:NULL';
Session altered.

SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year');
JSON_VALUE('[{YEAR:1401},{YEAR:1401},{YEAR:1402}]','$.YEAR')
--------------------------------------------------------------------------------

اما می توانیم این مقدار را به ON_ERROR:ERROR تنظیم کنیم تا برای کوئری فوق خطا نمایش داده شود:

SQL> SELECT JSON_VALUE('[{Year:1401},{Year:1401},{Year:1402}]', '$.Year');
ORA-40470: JSON query '$.Year' evaluated to multiple values.
Help: https://docs.oracle.com/error-help/db/ora-40470/

اوراکل 23ai – تمامی Tablespaceها به صورت Bigfile ایجاد می شوند

از نسخه 23ai تمامی tablespaceهای سیستمی و همچنین users موجود در root container به صورت Bigfile ایجاد می شوند(به استثنای Temp tablespaceها):

SQL*Plus: Release 23.0.0.0.0 - Production on Sat Jun 8 22:43:40 2024
Version 23.4.0.24.05
SQL> select TABLESPACE_NAME,BIGFILE from  dba_tablespaces;
TABLESPACE_NAME                BIG
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       YES
TEMP                           NO
USERS                          YES

tablespaceهای جدیدی هم که توسط DBA در root container ایجاد می شود به صورت Bigfile خواهند بود:

SQL> create tablespace tbs1;
Tablespace created.

SQL> select TABLESPACE_NAME,BIGFILE from  dba_tablespaces where TABLESPACE_NAME='TBS1';
TABLESPACE_NAME                BIG
------------------------------ ---
TBS1                           YES

اما در PDB این مسئله تفاوت جزیی دارد در این محیط، تمامی tablespaceهای سیستمی از نوع Bigfile هستند ولی USERS از نوع Smallfile هست:

SQL> select TABLESPACE_NAME,BIGFILE from  dba_tablespaces;
TABLESPACE_NAME                BIG
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       YES
TEMP                           NO
USERS                          NO

(بیشتر…)

بروزر شدن dba_errors بعد از کامپایل invalid objectها

همانطور که می دانید ویوی dba_errors خطای مربوط به invalid objectها را نمایش می دهد بنابرین اگر بخواهیم دلیل invalid بودن یک پروسیجر، پکیج، فانکشن و … را ببینیم، می توانیم از این ویو استفاده کنیم.

نکته ای که در این مستند به آن خواهیم پرداخت آن است که این ویو تا قبل از compile شدن یک invalid object، خطای مربوط  به آن object را نمایش نمی دهد این مسئله را در ادامه متن با ارائه مثال شرح داده ایم.

پروسیجر زیر را در نظر بگیرید:

SQL> create table usef.tb (id number,name varchar2(100));

SQL> create procedure usef.prc1(p_id in number) as
  kk varchar2(100);
begin
  select name into kk from usef.tb where id = p_id;
end;
/
SQL> select status from dba_objects where object_name='PRC1';
STATUS
-------
VALID

با حذف ستون name از جدول tb، این پروسیجر INVALID خواهد شد:

SQL> alter table usef.tb drop column name;
Table altered

SQL> select status from dba_objects where object_name='PRC1';
STATUS
-------
INVALID

اما ویوی dba_errors چیزی را برنمی گرداند:

SQL> select owner,name,text from dba_errors;
no rows selected

با اولین کامپایل این پروسیجر، dba_errors خطای مربوط به پروسیجر را نمایش می دهد:

SQL> alter procedure usef.prc1 compile;
Warning: Procedure altered with compilation errors.

SQL> select owner,name,text from dba_errors;
OWNER      NAME       TEXT
---------- ---------- --------------------------------------------------
USEF       PRC1       PL/SQL: ORA-00904: "NAME": invalid identifier
USEF       PRC1       PL/SQL: SQL Statement ignored